Diff of the two buildlogs: -- --- b1/build.log 2020-06-27 07:33:10.107146861 +0000 +++ b2/build.log 2020-06-27 09:32:41.081289672 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Fri Jun 26 18:39:14 -12 2020 -I: pbuilder-time-stamp: 1593239954 +I: Current time: Sat Jun 27 21:34:18 +14 2020 +I: pbuilder-time-stamp: 1593243258 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/buster-reproducible-base.tgz] I: copying local configuration @@ -17,7 +17,7 @@ I: Extracting source gpgv: unknown type of key resource 'trustedkeys.kbx' gpgv: keyblock resource '/root/.gnupg/trustedkeys.kbx': General error -gpgv: Signature made Sun Jan 20 05:49:11 2019 -12 +gpgv: Signature made Mon Jan 21 07:49:11 2019 +14 gpgv: using RSA key 8F58342BEABE1EF4379551FBB193770C186A1C7D gpgv: Can't check signature: No public key dpkg-source: warning: failed to verify signature on ./ppl_1.2-7.dsc @@ -31,136 +31,170 @@ dpkg-source: info: applying fix_AC_CHECK_SWI_PROLOG.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/19769/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/2477/tmp/hooks/D01_modify_environment starting +debug: Running on p64b. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +Removing 'diversion of /bin/sh to /bin/sh.distrib by dash' +Adding 'diversion of /bin/sh to /bin/sh.distrib by bash' +Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash' +Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash' +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/2477/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/2477/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build' - 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=3' - DISTRIBUTION='' - HOME='/root' - HOST_ARCH='armhf' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="0" [2]="3" [3]="1" [4]="release" [5]="arm-unknown-linux-gnueabihf") + BASH_VERSION='5.0.3(1)-release' + BUILDDIR=/build + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=armhf + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=4' + DIRSTACK=() + DISTRIBUTION= + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=arm + HOST_ARCH=armhf IFS=' ' - INVOCATION_ID='5fc93e1f8cdb44ae9342cc9248ec921e' - 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='19769' - PS1='# ' - PS2='> ' + INVOCATION_ID=3ffa0aaa093544a0b30852f0b6545a16 + LANG=C + LANGUAGE=it_CH:it + LC_ALL=C + MACHTYPE=arm-unknown-linux-gnueabihf + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnueabihf + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=2477 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/tmp.HKgR3TNlnE/pbuilderrc_9jTD --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.HKgR3TNlnE/b1 --logfile b1/build.log ppl_1.2-7.dsc' - SUDO_GID='114' - SUDO_UID='110' - 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:8000/' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.HKgR3TNlnE/pbuilderrc_zRSV --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.HKgR3TNlnE/b2 --logfile b2/build.log ppl_1.2-7.dsc' + SUDO_GID=115 + SUDO_UID=110 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://10.0.0.15:8000/ I: uname -a - Linux jtx1b 4.19.0-9-arm64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) aarch64 GNU/Linux + Linux i-capture-the-hostname 4.19.0-9-arm64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) aarch64 GNU/Linux I: ls -l /bin total 3328 - -rwxr-xr-x 1 root root 767656 Apr 17 2019 bash - -rwxr-xr-x 3 root root 26052 Jul 10 2019 bunzip2 - -rwxr-xr-x 3 root root 26052 Jul 10 2019 bzcat - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzcmp -> bzdiff - -rwxr-xr-x 1 root root 2227 Jul 10 2019 bzdiff - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzegrep -> bzgrep - -rwxr-xr-x 1 root root 4877 Jun 24 2019 bzexe - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzfgrep -> bzgrep - -rwxr-xr-x 1 root root 3641 Jul 10 2019 bzgrep - -rwxr-xr-x 3 root root 26052 Jul 10 2019 bzip2 - -rwxr-xr-x 1 root root 9636 Jul 10 2019 bzip2recover - lrwxrwxrwx 1 root root 6 Jul 10 2019 bzless -> bzmore - -rwxr-xr-x 1 root root 1297 Jul 10 2019 bzmore - -rwxr-xr-x 1 root root 22432 Feb 28 2019 cat - -rwxr-xr-x 1 root root 38868 Feb 28 2019 chgrp - -rwxr-xr-x 1 root root 38836 Feb 28 2019 chmod - -rwxr-xr-x 1 root root 42972 Feb 28 2019 chown - -rwxr-xr-x 1 root root 88376 Feb 28 2019 cp - -rwxr-xr-x 1 root root 75516 Jan 17 2019 dash - -rwxr-xr-x 1 root root 71648 Feb 28 2019 date - -rwxr-xr-x 1 root root 51212 Feb 28 2019 dd - -rwxr-xr-x 1 root root 55672 Feb 28 2019 df - -rwxr-xr-x 1 root root 88444 Feb 28 2019 dir - -rwxr-xr-x 1 root root 54872 Jan 9 2019 dmesg - lrwxrwxrwx 1 root root 8 Sep 26 2018 dnsdomainname -> hostname - lrwxrwxrwx 1 root root 8 Sep 26 2018 domainname -> hostname - -rwxr-xr-x 1 root root 22364 Feb 28 2019 echo - -rwxr-xr-x 1 root root 28 Jan 7 2019 egrep - -rwxr-xr-x 1 root root 18260 Feb 28 2019 false - -rwxr-xr-x 1 root root 28 Jan 7 2019 fgrep - -rwxr-xr-x 1 root root 47356 Jan 9 2019 findmnt - -rwsr-xr-x 1 root root 21980 Apr 22 07:38 fusermount - -rwxr-xr-x 1 root root 124508 Jan 7 2019 grep - -rwxr-xr-x 2 root root 2345 Jan 5 2019 gunzip - -rwxr-xr-x 1 root root 6375 Jan 5 2019 gzexe - -rwxr-xr-x 1 root root 64232 Jan 5 2019 gzip - -rwxr-xr-x 1 root root 13784 Sep 26 2018 hostname - -rwxr-xr-x 1 root root 43044 Feb 28 2019 ln - -rwxr-xr-x 1 root root 34932 Jul 26 2018 login - -rwxr-xr-x 1 root root 88444 Feb 28 2019 ls - -rwxr-xr-x 1 root root 67036 Jan 9 2019 lsblk - -rwxr-xr-x 1 root root 47168 Feb 28 2019 mkdir - -rwxr-xr-x 1 root root 43040 Feb 28 2019 mknod - -rwxr-xr-x 1 root root 26552 Feb 28 2019 mktemp - -rwxr-xr-x 1 root root 26024 Jan 9 2019 more - -rwsr-xr-x 1 root root 34268 Jan 9 2019 mount - -rwxr-xr-x 1 root root 9688 Jan 9 2019 mountpoint - -rwxr-xr-x 1 root root 84284 Feb 28 2019 mv - lrwxrwxrwx 1 root root 8 Sep 26 2018 nisdomainname -> hostname - lrwxrwxrwx 1 root root 14 Feb 14 2019 pidof -> /sbin/killall5 - -rwxr-xr-x 1 root root 22416 Feb 28 2019 pwd - lrwxrwxrwx 1 root root 4 Apr 17 2019 rbash -> bash - -rwxr-xr-x 1 root root 26504 Feb 28 2019 readlink - -rwxr-xr-x 1 root root 42968 Feb 28 2019 rm - -rwxr-xr-x 1 root root 26496 Feb 28 2019 rmdir - -rwxr-xr-x 1 root root 14136 Jan 21 2019 run-parts - -rwxr-xr-x 1 root root 76012 Dec 22 2018 sed - lrwxrwxrwx 1 root root 4 Jun 24 20:26 sh -> dash - -rwxr-xr-x 1 root root 22384 Feb 28 2019 sleep - -rwxr-xr-x 1 root root 51124 Feb 28 2019 stty - -rwsr-xr-x 1 root root 42472 Jan 9 2019 su - -rwxr-xr-x 1 root root 22392 Feb 28 2019 sync - -rwxr-xr-x 1 root root 283324 Apr 23 2019 tar - -rwxr-xr-x 1 root root 9808 Jan 21 2019 tempfile - -rwxr-xr-x 1 root root 63464 Feb 28 2019 touch - -rwxr-xr-x 1 root root 18260 Feb 28 2019 true - -rwxr-xr-x 1 root root 9636 Apr 22 07:38 ulockmgr_server - -rwsr-xr-x 1 root root 21976 Jan 9 2019 umount - -rwxr-xr-x 1 root root 22380 Feb 28 2019 uname - -rwxr-xr-x 2 root root 2345 Jan 5 2019 uncompress - -rwxr-xr-x 1 root root 88444 Feb 28 2019 vdir - -rwxr-xr-x 1 root root 21980 Jan 9 2019 wdctl - -rwxr-xr-x 1 root root 946 Jan 21 2019 which - lrwxrwxrwx 1 root root 8 Sep 26 2018 ypdomainname -> hostname - -rwxr-xr-x 1 root root 1983 Jan 5 2019 zcat - -rwxr-xr-x 1 root root 1677 Jan 5 2019 zcmp - -rwxr-xr-x 1 root root 5879 Jan 5 2019 zdiff - -rwxr-xr-x 1 root root 29 Jan 5 2019 zegrep - -rwxr-xr-x 1 root root 29 Jan 5 2019 zfgrep - -rwxr-xr-x 1 root root 2080 Jan 5 2019 zforce - -rwxr-xr-x 1 root root 7584 Jan 5 2019 zgrep - -rwxr-xr-x 1 root root 2205 Jan 5 2019 zless - -rwxr-xr-x 1 root root 1841 Jan 5 2019 zmore - -rwxr-xr-x 1 root root 4552 Jan 5 2019 znew -I: user script /srv/workspace/pbuilder/19769/tmp/hooks/D02_print_environment finished + -rwxr-xr-x 1 root root 767656 Apr 18 2019 bash + -rwxr-xr-x 3 root root 26052 Jul 11 2019 bunzip2 + -rwxr-xr-x 3 root root 26052 Jul 11 2019 bzcat + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzcmp -> bzdiff + -rwxr-xr-x 1 root root 2227 Jul 11 2019 bzdiff + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzegrep -> bzgrep + -rwxr-xr-x 1 root root 4877 Jun 25 2019 bzexe + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzfgrep -> bzgrep + -rwxr-xr-x 1 root root 3641 Jul 11 2019 bzgrep + -rwxr-xr-x 3 root root 26052 Jul 11 2019 bzip2 + -rwxr-xr-x 1 root root 9636 Jul 11 2019 bzip2recover + lrwxrwxrwx 1 root root 6 Jul 11 2019 bzless -> bzmore + -rwxr-xr-x 1 root root 1297 Jul 11 2019 bzmore + -rwxr-xr-x 1 root root 22432 Mar 1 2019 cat + -rwxr-xr-x 1 root root 38868 Mar 1 2019 chgrp + -rwxr-xr-x 1 root root 38836 Mar 1 2019 chmod + -rwxr-xr-x 1 root root 42972 Mar 1 2019 chown + -rwxr-xr-x 1 root root 88376 Mar 1 2019 cp + -rwxr-xr-x 1 root root 75516 Jan 18 2019 dash + -rwxr-xr-x 1 root root 71648 Mar 1 2019 date + -rwxr-xr-x 1 root root 51212 Mar 1 2019 dd + -rwxr-xr-x 1 root root 55672 Mar 1 2019 df + -rwxr-xr-x 1 root root 88444 Mar 1 2019 dir + -rwxr-xr-x 1 root root 54872 Jan 10 2019 dmesg + lrwxrwxrwx 1 root root 8 Sep 27 2018 dnsdomainname -> hostname + lrwxrwxrwx 1 root root 8 Sep 27 2018 domainname -> hostname + -rwxr-xr-x 1 root root 22364 Mar 1 2019 echo + -rwxr-xr-x 1 root root 28 Jan 8 2019 egrep + -rwxr-xr-x 1 root root 18260 Mar 1 2019 false + -rwxr-xr-x 1 root root 28 Jan 8 2019 fgrep + -rwxr-xr-x 1 root root 47356 Jan 10 2019 findmnt + -rwsr-xr-x 1 root root 21980 Apr 23 09:38 fusermount + -rwxr-xr-x 1 root root 124508 Jan 8 2019 grep + -rwxr-xr-x 2 root root 2345 Jan 6 2019 gunzip + -rwxr-xr-x 1 root root 6375 Jan 6 2019 gzexe + -rwxr-xr-x 1 root root 64232 Jan 6 2019 gzip + -rwxr-xr-x 1 root root 13784 Sep 27 2018 hostname + -rwxr-xr-x 1 root root 43044 Mar 1 2019 ln + -rwxr-xr-x 1 root root 34932 Jul 27 2018 login + -rwxr-xr-x 1 root root 88444 Mar 1 2019 ls + -rwxr-xr-x 1 root root 67036 Jan 10 2019 lsblk + -rwxr-xr-x 1 root root 47168 Mar 1 2019 mkdir + -rwxr-xr-x 1 root root 43040 Mar 1 2019 mknod + -rwxr-xr-x 1 root root 26552 Mar 1 2019 mktemp + -rwxr-xr-x 1 root root 26024 Jan 10 2019 more + -rwsr-xr-x 1 root root 34268 Jan 10 2019 mount + -rwxr-xr-x 1 root root 9688 Jan 10 2019 mountpoint + -rwxr-xr-x 1 root root 84284 Mar 1 2019 mv + lrwxrwxrwx 1 root root 8 Sep 27 2018 nisdomainname -> hostname + lrwxrwxrwx 1 root root 14 Feb 15 2019 pidof -> /sbin/killall5 + -rwxr-xr-x 1 root root 22416 Mar 1 2019 pwd + lrwxrwxrwx 1 root root 4 Apr 18 2019 rbash -> bash + -rwxr-xr-x 1 root root 26504 Mar 1 2019 readlink + -rwxr-xr-x 1 root root 42968 Mar 1 2019 rm + -rwxr-xr-x 1 root root 26496 Mar 1 2019 rmdir + -rwxr-xr-x 1 root root 14136 Jan 22 2019 run-parts + -rwxr-xr-x 1 root root 76012 Dec 23 2018 sed + lrwxrwxrwx 1 root root 4 Jun 27 21:34 sh -> bash + lrwxrwxrwx 1 root root 4 Jun 26 22:27 sh.distrib -> dash + -rwxr-xr-x 1 root root 22384 Mar 1 2019 sleep + -rwxr-xr-x 1 root root 51124 Mar 1 2019 stty + -rwsr-xr-x 1 root root 42472 Jan 10 2019 su + -rwxr-xr-x 1 root root 22392 Mar 1 2019 sync + -rwxr-xr-x 1 root root 283324 Apr 24 2019 tar + -rwxr-xr-x 1 root root 9808 Jan 22 2019 tempfile + -rwxr-xr-x 1 root root 63464 Mar 1 2019 touch + -rwxr-xr-x 1 root root 18260 Mar 1 2019 true + -rwxr-xr-x 1 root root 9636 Apr 23 09:38 ulockmgr_server + -rwsr-xr-x 1 root root 21976 Jan 10 2019 umount + -rwxr-xr-x 1 root root 22380 Mar 1 2019 uname + -rwxr-xr-x 2 root root 2345 Jan 6 2019 uncompress + -rwxr-xr-x 1 root root 88444 Mar 1 2019 vdir + -rwxr-xr-x 1 root root 21980 Jan 10 2019 wdctl + -rwxr-xr-x 1 root root 946 Jan 22 2019 which + lrwxrwxrwx 1 root root 8 Sep 27 2018 ypdomainname -> hostname + -rwxr-xr-x 1 root root 1983 Jan 6 2019 zcat + -rwxr-xr-x 1 root root 1677 Jan 6 2019 zcmp + -rwxr-xr-x 1 root root 5879 Jan 6 2019 zdiff + -rwxr-xr-x 1 root root 29 Jan 6 2019 zegrep + -rwxr-xr-x 1 root root 29 Jan 6 2019 zfgrep + -rwxr-xr-x 1 root root 2080 Jan 6 2019 zforce + -rwxr-xr-x 1 root root 7584 Jan 6 2019 zgrep + -rwxr-xr-x 1 root root 2205 Jan 6 2019 zless + -rwxr-xr-x 1 root root 1841 Jan 6 2019 zmore + -rwxr-xr-x 1 root root 4552 Jan 6 2019 znew +I: user script /srv/workspace/pbuilder/2477/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -397,7 +431,7 @@ Get: 179 http://deb.debian.org/debian buster/main armhf swi-prolog armhf 8.0.2+dfsg-3+deb10u1 [24.4 kB] Get: 180 http://deb.debian.org/debian buster/main armhf texlive-lang-greek all 2018.20190227-2 [76.3 MB] Get: 181 http://deb.debian.org/debian buster/main armhf texlive-science all 2018.20190227-2 [3168 kB] -Fetched 283 MB in 30s (9308 kB/s) +Fetched 283 MB in 34s (8206 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libbsd0: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 ... 18932 files and directories currently installed.) @@ -1161,7 +1195,7 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/ppl-1.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b +I: Running cd /build/ppl-1.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b dpkg-buildpackage: info: source package ppl dpkg-buildpackage: info: source version 1:1.2-7 dpkg-buildpackage: info: source distribution unstable @@ -1200,8 +1234,8 @@ checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes -checking whether UID '1111' is supported by ustar format... yes -checking whether GID '1111' is supported by ustar format... yes +checking whether UID '2222' is supported by ustar format... yes +checking whether GID '2222' is supported by ustar format... yes checking how to create a ustar tar archive... gnutar checking for gcc... gcc checking whether the C compiler works... yes @@ -1495,7 +1529,7 @@ debian/rules override_dh_auto_build-indep make[1]: Entering directory '/build/ppl-1.2' dh_auto_build - make -j3 + make -j4 make[2]: Entering directory '/build/ppl-1.2' make all-recursive make[3]: Entering directory '/build/ppl-1.2' @@ -1530,10 +1564,10 @@ ../CREDITS >>CREDITS.hh ../utils/text2cxxarray --name=BUGS_array \ ../BUGS >>BUGS.cc -../utils/text2cxxarray --name=COPYING_array \ - ../COPYING >>COPYING.cc ../utils/text2cxxarray --name=CREDITS_array \ ../CREDITS >>CREDITS.cc +../utils/text2cxxarray --name=COPYING_array \ + ../COPYING >>COPYING.cc ../utils/build_header \ -I .. -I ../src \ ../src/ppl_header.hh >ppl.hh @@ -1543,13 +1577,15 @@ g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o COPYING.o COPYING.cc g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o CREDITS.o CREDITS.cc g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl-config.o ppl-config.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o assertions.lo assertions.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Box.lo Box.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o assertions.lo assertions.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Box.lo Box.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o checked.lo checked.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c assertions.cc -fPIC -DPIC -o .libs/assertions.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Box.cc -fPIC -DPIC -o .libs/Box.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c assertions.cc -o assertions.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o checked.lo checked.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c checked.cc -fPIC -DPIC -o .libs/checked.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c assertions.cc -o assertions.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Checked_Number.lo Checked_Number.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Checked_Number.cc -fPIC -DPIC -o .libs/Checked_Number.o In file included from ppl-config.cc:25: ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] @@ -1617,31 +1653,30 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c checked.cc -o checked.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Checked_Number.cc -o Checked_Number.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Box.cc -o Box.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Checked_Number.lo Checked_Number.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Checked_Number.cc -fPIC -DPIC -o .libs/Checked_Number.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Float.lo Float.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Float.lo Float.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Float.cc -fPIC -DPIC -o .libs/Float.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Checked_Number.cc -o Checked_Number.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Float.cc -o Float.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o fpu-ia32.lo fpu-ia32.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o fpu-ia32.lo fpu-ia32.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c fpu-ia32.cc -fPIC -DPIC -o .libs/fpu-ia32.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c fpu-ia32.cc -o fpu-ia32.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BDS_Status.lo BDS_Status.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BDS_Status.lo BDS_Status.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Box_Status.lo Box_Status.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BDS_Status.cc -fPIC -DPIC -o .libs/BDS_Status.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Float.cc -o Float.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BDS_Status.cc -o BDS_Status.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Box_Status.lo Box_Status.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Og_Status.lo Og_Status.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Box_Status.cc -fPIC -DPIC -o .libs/Box_Status.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Og_Status.cc -fPIC -DPIC -o .libs/Og_Status.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Og_Status.lo Og_Status.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Box_Status.cc -o Box_Status.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Concrete_Expression.lo Concrete_Expression.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Og_Status.cc -fPIC -DPIC -o .libs/Og_Status.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Og_Status.cc -o Og_Status.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Concrete_Expression.lo Concrete_Expression.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Constraint.lo Constraint.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Constraint_System.lo Constraint_System.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Concrete_Expression.cc -fPIC -DPIC -o .libs/Concrete_Expression.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint_System.cc -fPIC -DPIC -o .libs/Constraint_System.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Constraint.lo Constraint.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint.cc -fPIC -DPIC -o .libs/Constraint.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Constraint_System.lo Constraint_System.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint_System.cc -fPIC -DPIC -o .libs/Constraint_System.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Concrete_Expression.cc -o Concrete_Expression.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -1662,7 +1697,8 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Concrete_Expression.cc -o Concrete_Expression.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Congruence.lo Congruence.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence.cc -fPIC -DPIC -o .libs/Congruence.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -1703,8 +1739,8 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Congruence.lo Congruence.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence.cc -fPIC -DPIC -o .libs/Congruence.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Congruence_System.lo Congruence_System.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence_System.cc -fPIC -DPIC -o .libs/Congruence_System.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint.cc -o Constraint.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -1726,10 +1762,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint_System.cc -o Constraint_System.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence.cc -o Congruence.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Congruence_System.lo Congruence_System.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence_System.cc -fPIC -DPIC -o .libs/Congruence_System.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -1750,6 +1782,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence.cc -o Congruence.o >/dev/null 2>&1 In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, @@ -1768,19 +1801,19 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Generator_System.lo Generator_System.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Generator_System.lo Grid_Generator_System.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Constraint_System.cc -o Constraint_System.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Generator_System.lo Generator_System.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Generator_System.cc -fPIC -DPIC -o .libs/Generator_System.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator_System.cc -fPIC -DPIC -o .libs/Grid_Generator_System.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Congruence_System.cc -o Congruence_System.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Generator_System.lo Grid_Generator_System.cc In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, from Linear_Expression_defs.hh:48, from Linear_System_templates.hh:28, from Linear_System_defs.hh:580, - from Grid_Generator_System_defs.hh:29, - from Grid_Generator_System.cc:25: + from Generator_System_defs.hh:30, + from Generator_System.cc:25: CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -1790,15 +1823,16 @@ from globals_defs.hh:28, from Swapping_Vector_defs.hh:28, from Linear_System_defs.hh:29, - from Grid_Generator_System_defs.hh:29, - from Grid_Generator_System.cc:25: + from Generator_System_defs.hh:30, + from Generator_System.cc:25: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator_System.cc -fPIC -DPIC -o .libs/Grid_Generator_System.o In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, - from Grid_Generator_System_defs.hh:29, - from Grid_Generator_System.cc:25: + from Generator_System_defs.hh:30, + from Generator_System.cc:25: Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -1819,8 +1853,8 @@ from Linear_Expression_defs.hh:48, from Linear_System_templates.hh:28, from Linear_System_defs.hh:580, - from Generator_System_defs.hh:30, - from Generator_System.cc:25: + from Grid_Generator_System_defs.hh:29, + from Grid_Generator_System.cc:25: CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -1830,15 +1864,17 @@ from globals_defs.hh:28, from Swapping_Vector_defs.hh:28, from Linear_System_defs.hh:29, - from Generator_System_defs.hh:30, - from Generator_System.cc:25: + from Grid_Generator_System_defs.hh:29, + from Grid_Generator_System.cc:25: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Generator.lo Generator.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Generator.cc -fPIC -DPIC -o .libs/Generator.o In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, - from Generator_System_defs.hh:30, - from Generator_System.cc:25: + from Grid_Generator_System_defs.hh:29, + from Grid_Generator_System.cc:25: Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -1853,9 +1889,6 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator_System.cc -o Grid_Generator_System.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Generator.lo Generator.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Generator.cc -fPIC -DPIC -o .libs/Generator.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Generator_System.cc -o Generator_System.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -1877,7 +1910,8 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Generator.lo Grid_Generator.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator_System.cc -o Grid_Generator_System.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Generator.lo Grid_Generator.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator.cc -fPIC -DPIC -o .libs/Grid_Generator.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Generator.cc -o Generator.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, @@ -1900,14 +1934,16 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Handler.lo Handler.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Handler.lo Handler.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Handler.cc -fPIC -DPIC -o .libs/Handler.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Handler.cc -o Handler.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Init.lo Init.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Init.cc -fPIC -DPIC -o .libs/Init.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Generator.cc -o Grid_Generator.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Coefficient.lo Coefficient.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Init.lo Init.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Init.cc -fPIC -DPIC -o .libs/Init.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Coefficient.lo Coefficient.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Coefficient.cc -fPIC -DPIC -o .libs/Coefficient.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression.lo Linear_Expression.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression.cc -fPIC -DPIC -o .libs/Linear_Expression.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -1945,11 +1981,7 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Coefficient.cc -o Coefficient.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Init.cc -o Init.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression.lo Linear_Expression.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression.cc -fPIC -DPIC -o .libs/Linear_Expression.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression_Impl.lo Linear_Expression_Impl.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Impl.cc -fPIC -DPIC -o .libs/Linear_Expression_Impl.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression_Impl.lo Linear_Expression_Impl.cc In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -1968,6 +2000,10 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Impl.cc -fPIC -DPIC -o .libs/Linear_Expression_Impl.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Init.cc -o Init.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression_Interface.lo Linear_Expression_Interface.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Interface.cc -fPIC -DPIC -o .libs/Linear_Expression_Interface.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Linear_Expression_Impl_defs.hh:33, @@ -1987,16 +2023,16 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Expression_Interface.lo Linear_Expression_Interface.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Interface.cc -fPIC -DPIC -o .libs/Linear_Expression_Interface.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Impl.cc -o Linear_Expression_Impl.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Interface.cc -o Linear_Expression_Interface.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Form.lo Linear_Form.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression_Impl.cc -o Linear_Expression_Impl.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Linear_Form.lo Linear_Form.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Form.cc -fPIC -DPIC -o .libs/Linear_Form.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Scalar_Products.lo Scalar_Products.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Scalar_Products.lo Scalar_Products.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Scalar_Products.cc -fPIC -DPIC -o .libs/Scalar_Products.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression.cc -o Linear_Expression.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Form.cc -o Linear_Form.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o MIP_Problem.lo MIP_Problem.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Linear_Expression.cc -o Linear_Expression.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c MIP_Problem.cc -fPIC -DPIC -o .libs/MIP_Problem.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2016,7 +2052,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o MIP_Problem.lo MIP_Problem.cc In file included from Scalar_Products.cc:26: Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] @@ -2032,7 +2067,8 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c MIP_Problem.cc -fPIC -DPIC -o .libs/MIP_Problem.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o PIP_Tree.lo PIP_Tree.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Tree.cc -fPIC -DPIC -o .libs/PIP_Tree.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Scalar_Products.cc -o Scalar_Products.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2071,8 +2107,6 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o PIP_Tree.lo PIP_Tree.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Tree.cc -fPIC -DPIC -o .libs/PIP_Tree.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2153,27 +2187,8 @@ /usr/include/c++/8/bits/unique_ptr.h:53:28: note: declared here template class auto_ptr; ^~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o PIP_Problem.lo PIP_Problem.cc -In file included from /usr/include/c++/8/vector:69, - from Linear_Form_defs.hh:32, - from Float_inlines.hh:28, - from Float_defs.hh:519, - from checked_defs.hh:31, - from Checked_Number_defs.hh:28, - from Coefficient_types.hh:16, - from Coefficient_defs.hh:27, - from Matrix_defs.hh:29, - from MIP_Problem_defs.hh:29, - from MIP_Problem.cc:25: -/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {std::pair}; _Tp = std::pair; _Alloc = std::allocator >]': -/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector >::iterator' {aka '__gnu_cxx::__normal_iterator*, std::vector > >'} changed in GCC 7.1 - vector<_Tp, _Alloc>:: - ^~~~~~~~~~~~~~~~~~~ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o PIP_Problem.lo PIP_Problem.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Problem.cc -fPIC -DPIC -o .libs/PIP_Problem.o -/usr/include/c++/8/bits/vector.tcc: In member function 'Parma_Polyhedra_Library::dimension_type Parma_Polyhedra_Library::MIP_Problem::steepest_edge_float_entering_index() const': -/usr/include/c++/8/bits/vector.tcc:109:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 - _M_realloc_insert(end(), std::forward<_Args>(__args)...); - ^~~~~~~~~~~~~~~~~ In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2213,17 +2228,37 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Problem.cc -o PIP_Problem.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c MIP_Problem.cc -o MIP_Problem.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Poly_Con_Relation.lo Poly_Con_Relation.cc +In file included from /usr/include/c++/8/vector:69, + from Linear_Form_defs.hh:32, + from Float_inlines.hh:28, + from Float_defs.hh:519, + from checked_defs.hh:31, + from Checked_Number_defs.hh:28, + from Coefficient_types.hh:16, + from Coefficient_defs.hh:27, + from Matrix_defs.hh:29, + from MIP_Problem_defs.hh:29, + from MIP_Problem.cc:25: +/usr/include/c++/8/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {std::pair}; _Tp = std::pair; _Alloc = std::allocator >]': +/usr/include/c++/8/bits/vector.tcc:413:7: note: parameter passing for argument of type 'std::vector >::iterator' {aka '__gnu_cxx::__normal_iterator*, std::vector > >'} changed in GCC 7.1 + vector<_Tp, _Alloc>:: + ^~~~~~~~~~~~~~~~~~~ +/usr/include/c++/8/bits/vector.tcc: In member function 'Parma_Polyhedra_Library::dimension_type Parma_Polyhedra_Library::MIP_Problem::steepest_edge_float_entering_index() const': +/usr/include/c++/8/bits/vector.tcc:109:4: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator*, std::vector > >' changed in GCC 7.1 + _M_realloc_insert(end(), std::forward<_Args>(__args)...); + ^~~~~~~~~~~~~~~~~ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Poly_Con_Relation.lo Poly_Con_Relation.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Poly_Con_Relation.cc -fPIC -DPIC -o .libs/Poly_Con_Relation.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Problem.cc -o PIP_Problem.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Poly_Con_Relation.cc -o Poly_Con_Relation.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Tree.cc -o PIP_Tree.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Poly_Gen_Relation.lo Poly_Gen_Relation.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Poly_Gen_Relation.lo Poly_Gen_Relation.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Poly_Gen_Relation.cc -fPIC -DPIC -o .libs/Poly_Gen_Relation.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Poly_Gen_Relation.cc -o Poly_Gen_Relation.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BHRZ03_Certificate.lo BHRZ03_Certificate.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c MIP_Problem.cc -o MIP_Problem.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BHRZ03_Certificate.lo BHRZ03_Certificate.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BHRZ03_Certificate.cc -fPIC -DPIC -o .libs/BHRZ03_Certificate.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o H79_Certificate.lo H79_Certificate.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c H79_Certificate.cc -fPIC -DPIC -o .libs/H79_Certificate.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2264,9 +2299,6 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BHRZ03_Certificate.cc -o BHRZ03_Certificate.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o H79_Certificate.lo H79_Certificate.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c H79_Certificate.cc -fPIC -DPIC -o .libs/H79_Certificate.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2315,9 +2347,14 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Certificate.lo Grid_Certificate.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BHRZ03_Certificate.cc -o BHRZ03_Certificate.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c H79_Certificate.cc -o H79_Certificate.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c PIP_Tree.cc -o PIP_Tree.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Certificate.lo Grid_Certificate.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Certificate.cc -fPIC -DPIC -o .libs/Grid_Certificate.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Partial_Function.lo Partial_Function.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Partial_Function.cc -fPIC -DPIC -o .libs/Partial_Function.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Partial_Function.cc -o Partial_Function.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2355,13 +2392,10 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Certificate.cc -o Grid_Certificate.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Partial_Function.lo Partial_Function.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Partial_Function.cc -fPIC -DPIC -o .libs/Partial_Function.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Partial_Function.cc -o Partial_Function.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_nonpublic.lo Polyhedron_nonpublic.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_nonpublic.lo Polyhedron_nonpublic.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_nonpublic.cc -fPIC -DPIC -o .libs/Polyhedron_nonpublic.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_public.lo Polyhedron_public.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Certificate.cc -o Grid_Certificate.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_public.lo Polyhedron_public.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_public.cc -fPIC -DPIC -o .libs/Polyhedron_public.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2386,8 +2420,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_chdims.lo Polyhedron_chdims.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_chdims.cc -fPIC -DPIC -o .libs/Polyhedron_chdims.o In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, @@ -2407,6 +2439,7 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_chdims.lo Polyhedron_chdims.cc In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2430,6 +2463,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_chdims.cc -fPIC -DPIC -o .libs/Polyhedron_chdims.o In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, @@ -2492,7 +2526,7 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_chdims.cc -o Polyhedron_chdims.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_widenings.lo Polyhedron_widenings.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Polyhedron_widenings.lo Polyhedron_widenings.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_widenings.cc -fPIC -DPIC -o .libs/Polyhedron_widenings.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2536,13 +2570,9 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_nonpublic.cc -o Polyhedron_nonpublic.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_public.cc -o Polyhedron_public.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_widenings.cc -o Polyhedron_widenings.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o C_Polyhedron.lo C_Polyhedron.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o C_Polyhedron.lo C_Polyhedron.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c C_Polyhedron.cc -fPIC -DPIC -o .libs/C_Polyhedron.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o NNC_Polyhedron.lo NNC_Polyhedron.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c NNC_Polyhedron.cc -fPIC -DPIC -o .libs/NNC_Polyhedron.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_nonpublic.cc -o Polyhedron_nonpublic.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2588,6 +2618,11 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c C_Polyhedron.cc -o C_Polyhedron.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_widenings.cc -o Polyhedron_widenings.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o NNC_Polyhedron.lo NNC_Polyhedron.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c NNC_Polyhedron.cc -fPIC -DPIC -o .libs/NNC_Polyhedron.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Polyhedron_public.cc -o Polyhedron_public.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2633,11 +2668,10 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c C_Polyhedron.cc -o C_Polyhedron.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c NNC_Polyhedron.cc -o NNC_Polyhedron.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_nonpublic.lo Grid_nonpublic.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_nonpublic.lo Grid_nonpublic.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_nonpublic.cc -fPIC -DPIC -o .libs/Grid_nonpublic.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_public.lo Grid_public.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_public.lo Grid_public.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_public.cc -fPIC -DPIC -o .libs/Grid_public.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2676,6 +2710,8 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_chdims.lo Grid_chdims.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_chdims.cc -fPIC -DPIC -o .libs/Grid_chdims.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2713,8 +2749,6 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_chdims.lo Grid_chdims.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_chdims.cc -fPIC -DPIC -o .libs/Grid_chdims.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2754,9 +2788,11 @@ ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_nonpublic.cc -o Grid_nonpublic.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_chdims.cc -o Grid_chdims.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_widenings.lo Grid_widenings.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_public.cc -o Grid_public.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_widenings.lo Grid_widenings.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_widenings.cc -fPIC -DPIC -o .libs/Grid_widenings.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_public.cc -o Grid_public.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BD_Shape.lo BD_Shape.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BD_Shape.cc -fPIC -DPIC -o .libs/BD_Shape.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2794,9 +2830,6 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o BD_Shape.lo BD_Shape.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BD_Shape.cc -fPIC -DPIC -o .libs/BD_Shape.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_widenings.cc -o Grid_widenings.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -2839,8 +2872,9 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Octagonal_Shape.lo Octagonal_Shape.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_widenings.cc -o Grid_widenings.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c BD_Shape.cc -o BD_Shape.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Octagonal_Shape.lo Octagonal_Shape.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Octagonal_Shape.cc -fPIC -DPIC -o .libs/Octagonal_Shape.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2868,7 +2902,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Pointset_Powerset.lo Pointset_Powerset.cc In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, @@ -2892,8 +2925,10 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Pointset_Powerset.lo Pointset_Powerset.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Pointset_Powerset.cc -fPIC -DPIC -o .libs/Pointset_Powerset.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o CO_Tree.lo CO_Tree.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o CO_Tree.lo CO_Tree.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Octagonal_Shape.cc -o Octagonal_Shape.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c CO_Tree.cc -fPIC -DPIC -o .libs/CO_Tree.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, @@ -2939,7 +2974,8 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Octagonal_Shape.cc -o Octagonal_Shape.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Sparse_Row.lo Sparse_Row.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Sparse_Row.cc -fPIC -DPIC -o .libs/Sparse_Row.o In file included from CO_Tree_defs.hh:1557, from CO_Tree.cc:25: CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': @@ -2956,12 +2992,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c CO_Tree.cc -o CO_Tree.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Sparse_Row.lo Sparse_Row.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Sparse_Row.cc -fPIC -DPIC -o .libs/Sparse_Row.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Pointset_Powerset.cc -o Pointset_Powerset.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Dense_Row.lo Dense_Row.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Dense_Row.cc -fPIC -DPIC -o .libs/Dense_Row.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Sparse_Row.cc:25: @@ -2980,6 +3010,10 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c CO_Tree.cc -o CO_Tree.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Dense_Row.lo Dense_Row.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Dense_Row.cc -fPIC -DPIC -o .libs/Dense_Row.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Bit_Matrix.lo Bit_Matrix.cc In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Dense_Row.cc:28: @@ -3064,18 +3098,20 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::Coefficient' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Dense_Row.cc -o Dense_Row.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Sparse_Row.cc -o Sparse_Row.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Bit_Matrix.lo Bit_Matrix.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Bit_Matrix.cc -fPIC -DPIC -o .libs/Bit_Matrix.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Bit_Row.lo Bit_Row.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Bit_Row.cc -fPIC -DPIC -o .libs/Bit_Row.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Sparse_Row.cc -o Sparse_Row.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Pointset_Powerset.cc -o Pointset_Powerset.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Dense_Row.cc -o Dense_Row.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Bit_Matrix.cc -o Bit_Matrix.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Ph_Status.lo Ph_Status.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Bit_Row.lo Bit_Row.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Bit_Row.cc -fPIC -DPIC -o .libs/Bit_Row.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Bit_Row.cc -o Bit_Row.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Ph_Status.lo Ph_Status.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Ph_Status.cc -fPIC -DPIC -o .libs/Ph_Status.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Status.lo Grid_Status.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_Status.lo Grid_Status.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Status.cc -fPIC -DPIC -o .libs/Grid_Status.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Variable.lo Variable.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variable.cc -fPIC -DPIC -o .libs/Variable.o In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -3136,6 +3172,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variable.cc -o Variable.o >/dev/null 2>&1 In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, @@ -3155,41 +3192,13 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Variable.lo Variable.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variable.cc -fPIC -DPIC -o .libs/Variable.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Ph_Status.cc -o Ph_Status.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Status.cc -o Grid_Status.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variable.cc -o Variable.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Variables_Set.lo Variables_Set.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Variables_Set.lo Variables_Set.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variables_Set.cc -fPIC -DPIC -o .libs/Variables_Set.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_conversion.lo Grid_conversion.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_conversion.lo Grid_conversion.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Ph_Status.cc -o Ph_Status.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_conversion.cc -fPIC -DPIC -o .libs/Grid_conversion.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_Status.cc -o Grid_Status.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Variables_Set.cc -o Variables_Set.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_simplify.lo Grid_simplify.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_simplify.cc -fPIC -DPIC -o .libs/Grid_simplify.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o set_GMP_memory_alloc_funcs.lo set_GMP_memory_alloc_funcs.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c set_GMP_memory_alloc_funcs.cc -fPIC -DPIC -o .libs/set_GMP_memory_alloc_funcs.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c set_GMP_memory_alloc_funcs.cc -o set_GMP_memory_alloc_funcs.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o stdiobuf.lo stdiobuf.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c stdiobuf.cc -fPIC -DPIC -o .libs/stdiobuf.o -In file included from CO_Tree_defs.hh:1557, - from Sparse_Row_defs.hh:29, - from Expression_Adapter_defs.hh:31, - from Linear_Expression_defs.hh:48, - from Grid_defs.hh:31, - from Grid_simplify.cc:26: -CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from meta_programming.hh:27, - from C_Integer.hh:27, - from globals_defs.hh:28, - from Grid_defs.hh:28, - from Grid_simplify.cc:26: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -3212,7 +3221,7 @@ from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, from Grid_defs.hh:33, - from Grid_simplify.cc:26: + from Grid_conversion.cc:25: Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3227,11 +3236,40 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Grid_simplify.lo Grid_simplify.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_simplify.cc -fPIC -DPIC -o .libs/Grid_simplify.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o set_GMP_memory_alloc_funcs.lo set_GMP_memory_alloc_funcs.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c set_GMP_memory_alloc_funcs.cc -fPIC -DPIC -o .libs/set_GMP_memory_alloc_funcs.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c set_GMP_memory_alloc_funcs.cc -o set_GMP_memory_alloc_funcs.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o stdiobuf.lo stdiobuf.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c stdiobuf.cc -fPIC -DPIC -o .libs/stdiobuf.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o c_streambuf.lo c_streambuf.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c c_streambuf.cc -fPIC -DPIC -o .libs/c_streambuf.o +In file included from CO_Tree_defs.hh:1557, + from Sparse_Row_defs.hh:29, + from Expression_Adapter_defs.hh:31, + from Linear_Expression_defs.hh:48, + from Grid_defs.hh:31, + from Grid_simplify.cc:26: +CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from meta_programming.hh:27, + from C_Integer.hh:27, + from globals_defs.hh:28, + from Grid_defs.hh:28, + from Grid_simplify.cc:26: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c stdiobuf.cc -o stdiobuf.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c c_streambuf.cc -o c_streambuf.o >/dev/null 2>&1 In file included from Linear_System_templates.hh:30, from Linear_System_defs.hh:580, from Constraint_System_defs.hh:29, from Grid_defs.hh:33, - from Grid_conversion.cc:25: + from Grid_simplify.cc:26: Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3246,14 +3284,12 @@ Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c stdiobuf.cc -o stdiobuf.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o c_streambuf.lo c_streambuf.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c c_streambuf.cc -fPIC -DPIC -o .libs/c_streambuf.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_conversion.cc -o Grid_conversion.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_simplify.cc -o Grid_simplify.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c c_streambuf.cc -o c_streambuf.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o globals.lo globals.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o globals.lo globals.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c globals.cc -fPIC -DPIC -o .libs/globals.o +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o mp_std_bits.lo mp_std_bits.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c mp_std_bits.cc -fPIC -DPIC -o .libs/mp_std_bits.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c mp_std_bits.cc -o mp_std_bits.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, from Sparse_Row_defs.hh:29, from Expression_Adapter_defs.hh:31, @@ -3271,24 +3307,22 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c globals.cc -o globals.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o mp_std_bits.lo mp_std_bits.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c mp_std_bits.cc -fPIC -DPIC -o .libs/mp_std_bits.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Weight_Profiler.lo Weight_Profiler.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Weight_Profiler.lo Weight_Profiler.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Weight_Profiler.cc -fPIC -DPIC -o .libs/Weight_Profiler.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c mp_std_bits.cc -o mp_std_bits.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o version.lo version.cc -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o termination.lo termination.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c globals.cc -o globals.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Grid_simplify.cc -o Grid_simplify.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Weight_Profiler.cc -o Weight_Profiler.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o version.lo version.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c version.cc -fPIC -DPIC -o .libs/version.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c version.cc -o version.o >/dev/null 2>&1 +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o termination.lo termination.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o wrap_string.lo wrap_string.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c termination.cc -fPIC -DPIC -o .libs/termination.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o wrap_string.lo wrap_string.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c wrap_string.cc -fPIC -DPIC -o .libs/wrap_string.o -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Time.lo Time.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Time.lo Time.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Time.cc -fPIC -DPIC -o .libs/Time.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Time.cc -o Time.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Watchdog.lo Watchdog.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Watchdog.lo Watchdog.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Watchdog.cc -fPIC -DPIC -o .libs/Watchdog.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c wrap_string.cc -o wrap_string.o >/dev/null 2>&1 In file included from CO_Tree_defs.hh:1557, @@ -3333,11 +3367,11 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Watchdog.cc -o Watchdog.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Threshold_Watcher.lo Threshold_Watcher.cc +/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o Threshold_Watcher.lo Threshold_Watcher.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Threshold_Watcher.cc -fPIC -DPIC -o .libs/Threshold_Watcher.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c Threshold_Watcher.cc -o Threshold_Watcher.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c termination.cc -o termination.o >/dev/null 2>&1 -/bin/bash ../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -version-info 14:0:0 -Wl,-z,relro -o libppl.la -rpath /usr/lib/arm-linux-gnueabihf assertions.lo Box.lo checked.lo Checked_Number.lo Float.lo fpu-ia32.lo BDS_Status.lo Box_Status.lo Og_Status.lo Concrete_Expression.lo Constraint.lo Constraint_System.lo Congruence.lo Congruence_System.lo Generator_System.lo Grid_Generator_System.lo Generator.lo Grid_Generator.lo Handler.lo Init.lo Coefficient.lo Linear_Expression.lo Linear_Expression_Impl.lo Linear_Expression_Interface.lo Linear_Form.lo Scalar_Products.lo MIP_Problem.lo PIP_Tree.lo PIP_Problem.lo Poly_Con_Relation.lo Poly_Gen_Relation.lo BHRZ03_Certificate.lo H79_Certificate.lo Grid_Certificate.lo Partial_Function.lo Polyhedron_nonpublic.lo Polyhedron_public.lo Polyhedron_chdims.lo Polyhedron_widenings.lo C_Polyhedron.lo NNC_Polyhedron.lo Grid_nonpublic.lo Grid_public.lo Grid_chdims.lo Grid_widenings.lo BD_Shape.lo Octagonal_Shape.lo Pointset_Powerset.lo CO_Tree.lo Sparse_Row.lo Dense_Row.lo Bit_Matrix.lo Bit_Row.lo Ph_Status.lo Grid_Status.lo Variable.lo Variables_Set.lo Grid_conversion.lo Grid_simplify.lo set_GMP_memory_alloc_funcs.lo stdiobuf.lo c_streambuf.lo globals.lo mp_std_bits.lo Weight_Profiler.lo version.lo termination.lo wrap_string.lo Time.lo Watchdog.lo Threshold_Watcher.lo -lgmpxx -lgmp +/bin/sh ../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -version-info 14:0:0 -Wl,-z,relro -o libppl.la -rpath /usr/lib/arm-linux-gnueabihf assertions.lo Box.lo checked.lo Checked_Number.lo Float.lo fpu-ia32.lo BDS_Status.lo Box_Status.lo Og_Status.lo Concrete_Expression.lo Constraint.lo Constraint_System.lo Congruence.lo Congruence_System.lo Generator_System.lo Grid_Generator_System.lo Generator.lo Grid_Generator.lo Handler.lo Init.lo Coefficient.lo Linear_Expression.lo Linear_Expression_Impl.lo Linear_Expression_Interface.lo Linear_Form.lo Scalar_Products.lo MIP_Problem.lo PIP_Tree.lo PIP_Problem.lo Poly_Con_Relation.lo Poly_Gen_Relation.lo BHRZ03_Certificate.lo H79_Certificate.lo Grid_Certificate.lo Partial_Function.lo Polyhedron_nonpublic.lo Polyhedron_public.lo Polyhedron_chdims.lo Polyhedron_widenings.lo C_Polyhedron.lo NNC_Polyhedron.lo Grid_nonpublic.lo Grid_public.lo Grid_chdims.lo Grid_widenings.lo BD_Shape.lo Octagonal_Shape.lo Pointset_Powerset.lo CO_Tree.lo Sparse_Row.lo Dense_Row.lo Bit_Matrix.lo Bit_Row.lo Ph_Status.lo Grid_Status.lo Variable.lo Variables_Set.lo Grid_conversion.lo Grid_simplify.lo set_GMP_memory_alloc_funcs.lo stdiobuf.lo c_streambuf.lo globals.lo mp_std_bits.lo Weight_Profiler.lo version.lo termination.lo wrap_string.lo Time.lo Watchdog.lo Threshold_Watcher.lo -lgmpxx -lgmp libtool: link: g++ -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crti.o /usr/lib/gcc/arm-linux-gnueabihf/8/crtbeginS.o .libs/assertions.o .libs/Box.o .libs/checked.o .libs/Checked_Number.o .libs/Float.o .libs/fpu-ia32.o .libs/BDS_Status.o .libs/Box_Status.o .libs/Og_Status.o .libs/Concrete_Expression.o .libs/Constraint.o .libs/Constraint_System.o .libs/Congruence.o .libs/Congruence_System.o .libs/Generator_System.o .libs/Grid_Generator_System.o .libs/Generator.o .libs/Grid_Generator.o .libs/Handler.o .libs/Init.o .libs/Coefficient.o .libs/Linear_Expression.o .libs/Linear_Expression_Impl.o .libs/Linear_Expression_Interface.o .libs/Linear_Form.o .libs/Scalar_Products.o .libs/MIP_Problem.o .libs/PIP_Tree.o .libs/PIP_Problem.o .libs/Poly_Con_Relation.o .libs/Poly_Gen_Relation.o .libs/BHRZ03_Certificate.o .libs/H79_Certificate.o .libs/Grid_Certificate.o .libs/Partial_Function.o .libs/Polyhedron_nonpublic.o .libs/Polyhedron_public.o .libs/Polyhedron_chdims.o .libs/Polyhedron_widenings.o .libs/C_Polyhedron.o .libs/NNC_Polyhedron.o .libs/Grid_nonpublic.o .libs/Grid_public.o .libs/Grid_chdims.o .libs/Grid_widenings.o .libs/BD_Shape.o .libs/Octagonal_Shape.o .libs/Pointset_Powerset.o .libs/CO_Tree.o .libs/Sparse_Row.o .libs/Dense_Row.o .libs/Bit_Matrix.o .libs/Bit_Row.o .libs/Ph_Status.o .libs/Grid_Status.o .libs/Variable.o .libs/Variables_Set.o .libs/Grid_conversion.o .libs/Grid_simplify.o .libs/set_GMP_memory_alloc_funcs.o .libs/stdiobuf.o .libs/c_streambuf.o .libs/globals.o .libs/mp_std_bits.o .libs/Weight_Profiler.o .libs/version.o .libs/termination.o .libs/wrap_string.o .libs/Time.o .libs/Watchdog.o .libs/Threshold_Watcher.o -lgmpxx -lgmp -L/usr/lib/gcc/arm-linux-gnueabihf/8 -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../.. -L/lib/arm-linux-gnueabihf -L/usr/lib/arm-linux-gnueabihf -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/arm-linux-gnueabihf/8/crtendS.o /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crtn.o -g -O2 -g -O2 -fstack-protector-strong -g -marm -Wl,-z -Wl,relro -Wl,-soname -Wl,libppl.so.14 -o .libs/libppl.so.14.0.0 libtool: link: (cd ".libs" && rm -f "libppl.so.14" && ln -s "libppl.so.14.0.0" "libppl.so.14") libtool: link: (cd ".libs" && rm -f "libppl.so" && ln -s "libppl.so.14.0.0" "libppl.so") @@ -3345,7 +3379,7 @@ ar: `u' modifier ignored since `D' is the default (see `U') libtool: link: ranlib .libs/libppl.a libtool: link: ( cd ".libs" && rm -f "libppl.la" && ln -s "../libppl.la" "libppl.la" ) -/bin/bash ../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o -lgmpxx -lgmp libppl.la +/bin/sh ../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o -lgmpxx -lgmp libppl.la libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o -lgmpxx -lgmp ./.libs/libppl.so make[5]: Leaving directory '/build/ppl-1.2/src' make[4]: Leaving directory '/build/ppl-1.2/src' @@ -3438,33 +3472,35 @@ make[7]: Entering directory '/build/ppl-1.2/interfaces/C' Making all in . make[8]: Entering directory '/build/ppl-1.2/interfaces/C' -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_implementation_common.lo ppl_c_implementation_common.cc -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Polyhedron.lo ppl_c_Polyhedron.cc -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Grid.lo ppl_c_Grid.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_implementation_common.lo ppl_c_implementation_common.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Polyhedron.lo ppl_c_Polyhedron.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Grid.lo ppl_c_Grid.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Rational_Box.lo ppl_c_Rational_Box.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Rational_Box.cc -fPIC -DPIC -o .libs/ppl_c_Rational_Box.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_implementation_common.cc -fPIC -DPIC -o .libs/ppl_c_implementation_common.o -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_c_Polyhedron.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Grid.cc -fPIC -DPIC -o .libs/ppl_c_Grid.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_c_Polyhedron.o In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Grid.cc:24: + from ppl_c_Polyhedron.cc:24: ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); ^ In file included from ../../src/ppl.hh:754, from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Grid.cc:24: + from ppl_c_Polyhedron.cc:24: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Polyhedron.cc:24: + from ppl_c_Rational_Box.cc:24: ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); ^ In file included from ../../src/ppl.hh:754, from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Polyhedron.cc:24: + from ppl_c_Rational_Box.cc:24: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ @@ -3481,7 +3517,7 @@ class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Grid.cc:24: + from ppl_c_Polyhedron.cc:24: ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3497,7 +3533,19 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Polyhedron.cc:24: + from ppl_c_Grid.cc:24: +../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/ppl.hh:754, + from ppl_c_implementation_common_defs.hh:28, + from ppl_c_Grid.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ppl_c_implementation_common_defs.hh:28, + from ppl_c_Rational_Box.cc:24: ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3528,25 +3576,8 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Grid.cc -o ppl_c_Grid.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Polyhedron.cc -o ppl_c_Polyhedron.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_implementation_common.cc -o ppl_c_implementation_common.o >/dev/null 2>&1 -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Rational_Box.lo ppl_c_Rational_Box.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Rational_Box.cc -fPIC -DPIC -o .libs/ppl_c_Rational_Box.o -In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Rational_Box.cc:24: -../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/ppl.hh:754, - from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Rational_Box.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ppl_c_implementation_common_defs.hh:28, - from ppl_c_Rational_Box.cc:24: + from ppl_c_Grid.cc:24: ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3561,7 +3592,11 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpz_class.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Grid.cc -o ppl_c_Grid.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Polyhedron.cc -o ppl_c_Polyhedron.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_implementation_common.cc -o ppl_c_implementation_common.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Rational_Box.cc -o ppl_c_Rational_Box.o >/dev/null 2>&1 +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpz_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpz_class.cc -fPIC -DPIC -o .libs/ppl_c_BD_Shape_mpz_class.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_BD_Shape_mpz_class.cc:24: @@ -3591,7 +3626,7 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_BD_Shape_mpq_class.lo ppl_c_BD_Shape_mpq_class.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_BD_Shape_mpq_class.lo ppl_c_BD_Shape_mpq_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpq_class.cc -fPIC -DPIC -o .libs/ppl_c_BD_Shape_mpq_class.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_BD_Shape_mpq_class.cc:24: @@ -3621,10 +3656,7 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Rational_Box.cc -o ppl_c_Rational_Box.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpz_class.cc -o ppl_c_BD_Shape_mpz_class.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpq_class.cc -o ppl_c_BD_Shape_mpq_class.o >/dev/null 2>&1 -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpz_class.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpz_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_mpz_class.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Octagonal_Shape_mpz_class.cc:24: @@ -3654,7 +3686,7 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpq_class.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpq_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpq_class.cc -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_mpq_class.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Octagonal_Shape_mpq_class.cc:24: @@ -3684,7 +3716,11 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpz_class.cc -o ppl_c_BD_Shape_mpz_class.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_BD_Shape_mpq_class.cc -o ppl_c_BD_Shape_mpq_class.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc -o ppl_c_Octagonal_Shape_mpz_class.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpq_class.cc -o ppl_c_Octagonal_Shape_mpq_class.o >/dev/null 2>&1 +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Constraints_Product_C_Polyhedron_Grid.cc -fPIC -DPIC -o .libs/ppl_c_Constraints_Product_C_Polyhedron_Grid.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24: @@ -3714,11 +3750,10 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc -o ppl_c_Octagonal_Shape_mpz_class.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Constraints_Product_C_Polyhedron_Grid.cc -o ppl_c_Constraints_Product_C_Polyhedron_Grid.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Octagonal_Shape_mpq_class.cc -o ppl_c_Octagonal_Shape_mpq_class.o >/dev/null 2>&1 -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_C_Polyhedron.cc +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_C_Polyhedron.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Pointset_Powerset_C_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o +/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.cc In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24: ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': @@ -3731,6 +3766,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24: ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': @@ -3747,8 +3783,6 @@ ../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o In file included from ppl_c_implementation_common_defs.hh:28, from ppl_c_Pointset_Powerset_NNC_Polyhedron.cc:24: ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': @@ -3779,7 +3813,7 @@ ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Pointset_Powerset_C_Polyhedron.cc -o ppl_c_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_c_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1 -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/arm-linux-gnueabihf ppl_c_implementation_common.lo ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ../../src/libppl.la -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/arm-linux-gnueabihf ppl_c_implementation_common.lo ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ../../src/libppl.la -lgmpxx -lgmp libtool: link: g++ -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crti.o /usr/lib/gcc/arm-linux-gnueabihf/8/crtbeginS.o .libs/ppl_c_implementation_common.o .libs/ppl_c_Polyhedron.o .libs/ppl_c_Grid.o .libs/ppl_c_Rational_Box.o .libs/ppl_c_BD_Shape_mpz_class.o .libs/ppl_c_BD_Shape_mpq_class.o .libs/ppl_c_Octagonal_Shape_mpz_class.o .libs/ppl_c_Octagonal_Shape_mpq_class.o .libs/ppl_c_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o -Wl,-rpath -Wl,/build/ppl-1.2/src/.libs ../../src/.libs/libppl.so -lgmpxx -lgmp -L/usr/lib/gcc/arm-linux-gnueabihf/8 -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../.. -L/lib/arm-linux-gnueabihf -L/usr/lib/arm-linux-gnueabihf -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/arm-linux-gnueabihf/8/crtendS.o /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crtn.o -g -O2 -g -O2 -fstack-protector-strong -g -marm -Wl,-z -Wl,relro -Wl,-soname -Wl,libppl_c.so.4 -o .libs/libppl_c.so.4.0.0 libtool: link: (cd ".libs" && rm -f "libppl_c.so.4" && ln -s "libppl_c.so.4.0.0" "libppl_c.so.4") libtool: link: (cd ".libs" && rm -f "libppl_c.so" && ln -s "libppl_c.so.4.0.0" "libppl_c.so") @@ -3823,13 +3857,41 @@ make[8]: Leaving directory '/build/ppl-1.2/interfaces/Prolog/tests' Making all in SWI make[8]: Entering directory '/build/ppl-1.2/interfaces/Prolog/SWI' -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o swi_efli.lo swi_efli.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o swi_efli.lo swi_efli.cc /usr/bin/m4 --prefix-builtin -I../.. -I./.. -I./../.. \ ./ppl_interface_generator_swiprolog_cc.m4 > ppl_swiprolog.cc -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_common.lo `test -f '../ppl_prolog_common.cc' || echo './'`../ppl_prolog_common.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_common.lo `test -f '../ppl_prolog_common.cc' || echo './'`../ppl_prolog_common.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Polyhedron.lo `test -f '../ppl_prolog_Polyhedron.cc' || echo './'`../ppl_prolog_Polyhedron.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c swi_efli.cc -fPIC -DPIC -o .libs/swi_efli.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_prolog_Polyhedron.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_common.cc -fPIC -DPIC -o .libs/ppl_prolog_common.o In file included from ../ppl_prolog_common_defs.hh:28, + from ../ppl_prolog_Polyhedron.hh:24, + from ../ppl_prolog_Polyhedron.cc:24: +../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../../src/ppl.hh:754, + from ../ppl_prolog_common_defs.hh:28, + from ../ppl_prolog_Polyhedron.hh:24, + from ../ppl_prolog_Polyhedron.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from swi_efli.hh:28, + from swi_efli.cc:24: +../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../../src/ppl.hh:754, + from swi_efli.hh:28, + from swi_efli.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_common.cc:24: ../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] @@ -3842,7 +3904,8 @@ class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_common.cc:24: + from ../ppl_prolog_Polyhedron.hh:24, + from ../ppl_prolog_Polyhedron.cc:24: ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3859,18 +3922,6 @@ ^ In file included from swi_efli.hh:28, from swi_efli.cc:24: -../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../../src/ppl.hh:754, - from swi_efli.hh:28, - from swi_efli.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ -In file included from swi_efli.hh:28, - from swi_efli.cc:24: ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3885,58 +3936,8 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -In file included from /usr/include/c++/8/cassert:44, - from ./swi_cfli.hh:32, - from ./swi_efli.hh:31, - from ./ppl_prolog_sysdep.hh:24, - from ../ppl_prolog_common_defs.hh:29, - from ../ppl_prolog_common.cc:24: -./swi_cfli.hh: In function 'int Prolog_put_big_ulong(Prolog_term_ref, long unsigned int)': -./swi_cfli.hh:85:30: warning: comparison is always false due to limited range of data type [-Wtype-limits] - assert(ul > LONG_MAX && ul > (uint64_t) INT64_MAX); - ^ -In file included from ./swi_efli.hh:31, - from ./ppl_prolog_sysdep.hh:24, - from ../ppl_prolog_common_defs.hh:29, - from ../ppl_prolog_common.cc:24: -./swi_cfli.hh: In function 'int Prolog_put_ulong(Prolog_term_ref, long unsigned int)': -./swi_cfli.hh:108:15: warning: comparison is always true due to limited range of data type [-Wtype-limits] - else if (ul <= (uint64_t) INT64_MAX) { - ^ -In file included from /usr/include/c++/8/cassert:44, - from swi_cfli.hh:32, - from swi_efli.hh:31, - from swi_efli.cc:24: -swi_cfli.hh: In function 'int Prolog_put_big_ulong(Prolog_term_ref, long unsigned int)': -swi_cfli.hh:85:30: warning: comparison is always false due to limited range of data type [-Wtype-limits] - assert(ul > LONG_MAX && ul > (uint64_t) INT64_MAX); - ^ -In file included from swi_efli.hh:31, - from swi_efli.cc:24: -swi_cfli.hh: In function 'int Prolog_put_ulong(Prolog_term_ref, long unsigned int)': -swi_cfli.hh:108:15: warning: comparison is always true due to limited range of data type [-Wtype-limits] - else if (ul <= (uint64_t) INT64_MAX) { - ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c swi_efli.cc -o swi_efli.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Polyhedron.lo `test -f '../ppl_prolog_Polyhedron.cc' || echo './'`../ppl_prolog_Polyhedron.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_prolog_Polyhedron.o In file included from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Polyhedron.hh:24, - from ../ppl_prolog_Polyhedron.cc:24: -../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../../src/ppl.hh:754, - from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Polyhedron.hh:24, - from ../ppl_prolog_Polyhedron.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ -In file included from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Polyhedron.hh:24, - from ../ppl_prolog_Polyhedron.cc:24: + from ../ppl_prolog_common.cc:24: ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -3951,8 +3952,6 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Grid.lo `test -f '../ppl_prolog_Grid.cc' || echo './'`../ppl_prolog_Grid.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Grid.cc -fPIC -DPIC -o .libs/ppl_prolog_Grid.o In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -3987,6 +3986,41 @@ ../ppl_prolog_Polyhedron.cc:92:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ +In file included from /usr/include/c++/8/cassert:44, + from ./swi_cfli.hh:32, + from ./swi_efli.hh:31, + from ./ppl_prolog_sysdep.hh:24, + from ../ppl_prolog_common_defs.hh:29, + from ../ppl_prolog_common.cc:24: +./swi_cfli.hh: In function 'int Prolog_put_big_ulong(Prolog_term_ref, long unsigned int)': +./swi_cfli.hh:85:30: warning: comparison is always false due to limited range of data type [-Wtype-limits] + assert(ul > LONG_MAX && ul > (uint64_t) INT64_MAX); + ^ +In file included from ./swi_efli.hh:31, + from ./ppl_prolog_sysdep.hh:24, + from ../ppl_prolog_common_defs.hh:29, + from ../ppl_prolog_common.cc:24: +./swi_cfli.hh: In function 'int Prolog_put_ulong(Prolog_term_ref, long unsigned int)': +./swi_cfli.hh:108:15: warning: comparison is always true due to limited range of data type [-Wtype-limits] + else if (ul <= (uint64_t) INT64_MAX) { + ^ +In file included from /usr/include/c++/8/cassert:44, + from swi_cfli.hh:32, + from swi_efli.hh:31, + from swi_efli.cc:24: +swi_cfli.hh: In function 'int Prolog_put_big_ulong(Prolog_term_ref, long unsigned int)': +swi_cfli.hh:85:30: warning: comparison is always false due to limited range of data type [-Wtype-limits] + assert(ul > LONG_MAX && ul > (uint64_t) INT64_MAX); + ^ +In file included from swi_efli.hh:31, + from swi_efli.cc:24: +swi_cfli.hh: In function 'int Prolog_put_ulong(Prolog_term_ref, long unsigned int)': +swi_cfli.hh:108:15: warning: comparison is always true due to limited range of data type [-Wtype-limits] + else if (ul <= (uint64_t) INT64_MAX) { + ^ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c swi_efli.cc -o swi_efli.o >/dev/null 2>&1 +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Grid.lo `test -f '../ppl_prolog_Grid.cc' || echo './'`../ppl_prolog_Grid.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Grid.cc -fPIC -DPIC -o .libs/ppl_prolog_Grid.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Grid.hh:24, from ../ppl_prolog_Grid.cc:24: @@ -4018,7 +4052,7 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_common.cc -o ppl_prolog_common.o >/dev/null 2>&1 +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Rational_Box.lo `test -f '../ppl_prolog_Rational_Box.cc' || echo './'`../ppl_prolog_Rational_Box.cc In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4046,7 +4080,6 @@ ../ppl_prolog_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Rational_Box.lo `test -f '../ppl_prolog_Rational_Box.cc' || echo './'`../ppl_prolog_Rational_Box.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Rational_Box.cc -fPIC -DPIC -o .libs/ppl_prolog_Rational_Box.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Rational_Box.hh:24, @@ -4079,7 +4112,7 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Grid.cc -o ppl_prolog_Grid.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_common.cc -o ppl_prolog_common.o >/dev/null 2>&1 In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4107,9 +4140,9 @@ ../ppl_prolog_Rational_Box.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Polyhedron.cc -o ppl_prolog_Polyhedron.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_BD_Shape_mpz_class.lo `test -f '../ppl_prolog_BD_Shape_mpz_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpz_class.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_BD_Shape_mpz_class.lo `test -f '../ppl_prolog_BD_Shape_mpz_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpz_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpz_class.o +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Grid.cc -o ppl_prolog_Grid.o >/dev/null 2>&1 In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_BD_Shape_mpz_class.hh:24, from ../ppl_prolog_BD_Shape_mpz_class.cc:24: @@ -4141,6 +4174,7 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Polyhedron.cc -o ppl_prolog_Polyhedron.o >/dev/null 2>&1 In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4168,8 +4202,7 @@ ../ppl_prolog_BD_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Rational_Box.cc -o ppl_prolog_Rational_Box.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_BD_Shape_mpq_class.lo `test -f '../ppl_prolog_BD_Shape_mpq_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpq_class.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_BD_Shape_mpq_class.lo `test -f '../ppl_prolog_BD_Shape_mpq_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpq_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpq_class.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_BD_Shape_mpq_class.hh:24, @@ -4229,8 +4262,8 @@ ../ppl_prolog_BD_Shape_mpq_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc -o ppl_prolog_BD_Shape_mpz_class.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpz_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpz_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpz_class.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Rational_Box.cc -o ppl_prolog_Rational_Box.o >/dev/null 2>&1 +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpz_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpz_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpz_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24, @@ -4290,9 +4323,11 @@ ../ppl_prolog_Octagonal_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc -o ppl_prolog_BD_Shape_mpq_class.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpq_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpq_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpq_class.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc -o ppl_prolog_BD_Shape_mpz_class.o >/dev/null 2>&1 +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpq_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpq_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpq_class.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo `test -f '../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc' || echo './'`../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc -fPIC -DPIC -o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24, from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24: @@ -4308,6 +4343,20 @@ class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../ppl_prolog_common_defs.hh:28, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: +../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../../src/ppl.hh:754, + from ../ppl_prolog_common_defs.hh:28, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24, from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24: ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': @@ -4324,6 +4373,23 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +In file included from ../ppl_prolog_common_defs.hh:28, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, + from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: +../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': +../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ +../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': +../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4351,40 +4417,6 @@ ../ppl_prolog_Octagonal_Shape_mpq_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc -o ppl_prolog_Octagonal_Shape_mpz_class.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo `test -f '../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc' || echo './'`../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc -fPIC -DPIC -o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o -In file included from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: -../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../../src/ppl.hh:754, - from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ -In file included from ../ppl_prolog_common_defs.hh:28, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24, - from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24: -../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': -../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ -../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': -../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4412,9 +4444,10 @@ ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc -o ppl_prolog_BD_Shape_mpq_class.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc -o ppl_prolog_Octagonal_Shape_mpz_class.o >/dev/null 2>&1 libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc -o ppl_prolog_Octagonal_Shape_mpq_class.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Pointset_Powerset_C_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Pointset_Powerset_C_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24, @@ -4447,6 +4480,8 @@ ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o In file included from /usr/include/c++/8/cassert:44, from ./swi_cfli.hh:32, from ./swi_efli.hh:31, @@ -4474,8 +4509,6 @@ ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24, from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24: @@ -4534,9 +4567,7 @@ ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else' Prolog_term_ref tmp = Prolog_new_term_ref(); ^~~~~~~~~~~~~~~ -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1 -libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_swiprolog.lo ppl_swiprolog.cc +/bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ppl_swiprolog.lo ppl_swiprolog.cc libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_swiprolog.cc -fPIC -DPIC -o .libs/ppl_swiprolog.o In file included from ../ppl_prolog_common_defs.hh:28, from ../ppl_prolog_domains.hh:24, @@ -4590,7 +4621,10 @@ else if (ul <= (uint64_t) INT64_MAX) { ^ libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ppl_swiprolog.cc -o ppl_swiprolog.o >/dev/null 2>&1 -/bin/bash ../../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/arm-linux-gnueabihf/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/armv8l-linux -L/usr/lib/swi-prolog/lib -lswipl +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc -o ppl_prolog_Octagonal_Shape_mpq_class.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1 +libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1 +/bin/sh ../../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/arm-linux-gnueabihf/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/armv8l-linux -L/usr/lib/swi-prolog/lib -lswipl libtool: link: g++ -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crti.o /usr/lib/gcc/arm-linux-gnueabihf/8/crtbeginS.o .libs/swi_efli.o .libs/ppl_swiprolog.o .libs/ppl_prolog_common.o .libs/ppl_prolog_Polyhedron.o .libs/ppl_prolog_Grid.o .libs/ppl_prolog_Rational_Box.o .libs/ppl_prolog_BD_Shape_mpz_class.o .libs/ppl_prolog_BD_Shape_mpq_class.o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o -Wl,-rpath -Wl,/build/ppl-1.2/src/.libs ../../../src/.libs/libppl.so -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/armv8l-linux -L/usr/lib/swi-prolog/lib -lswipl -L/usr/lib/gcc/arm-linux-gnueabihf/8 -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf -L/usr/lib/gcc/arm-linux-gnueabihf/8/../../.. -L/lib/arm-linux-gnueabihf -L/usr/lib/arm-linux-gnueabihf -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/arm-linux-gnueabihf/8/crtendS.o /usr/lib/gcc/arm-linux-gnueabihf/8/../../../arm-linux-gnueabihf/crtn.o -g -O2 -g -O2 -fstack-protector-strong -g -marm -Wl,-z -Wl,relro -Wl,-soname -Wl,libppl_swiprolog.so -o .libs/libppl_swiprolog.so libtool: link: ar cru .libs/libppl_swiprolog.a swi_efli.o ppl_swiprolog.o ppl_prolog_common.o ppl_prolog_Polyhedron.o ppl_prolog_Grid.o ppl_prolog_Rational_Box.o ppl_prolog_BD_Shape_mpz_class.o ppl_prolog_BD_Shape_mpq_class.o ppl_prolog_Octagonal_Shape_mpz_class.o ppl_prolog_Octagonal_Shape_mpq_class.o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o ppl_prolog_Pointset_Powerset_C_Polyhedron.o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o ar: `u' modifier ignored since `D' is the default (see `U') @@ -4659,7 +4693,7 @@ /usr/include/c++/8/bits/unique_ptr.h:53:28: note: declared here template class auto_ptr; ^~~~~~~~ -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ppl_pips ppl_pips.o ../../src/libppl.la ../../utils/libppl_utils.a -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ppl_pips ppl_pips.o ../../src/libppl.la ../../utils/libppl_utils.a -lgmpxx -lgmp libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/ppl_pips ppl_pips.o ../../src/.libs/libppl.so ../../utils/libppl_utils.a -lgmpxx -lgmp make[6]: Leaving directory '/build/ppl-1.2/demos/ppl_pips' make[5]: Leaving directory '/build/ppl-1.2/demos/ppl_pips' @@ -4678,7 +4712,7 @@ make[3]: Leaving directory '/build/ppl-1.2' make[2]: Leaving directory '/build/ppl-1.2' save_size=10000 dh_auto_build --builddirectory=doc -- user-configured - cd doc && make -j3 user-configured + cd doc && make -j4 user-configured make[2]: Entering directory '/build/ppl-1.2/doc' rm -rf ppl-user-1.2-html rm -rf user-configured-c-interface.latex-dir @@ -4698,8 +4732,8 @@ -e 's||'"./gpl.dox ./fdl.dox ./../interfaces/Prolog/Prolog_configured_interface.dox ./../interfaces/Prolog/Prolog_interface_sysindep.dox ../interfaces/Prolog/Prolog_configured_domains.dox ./../interfaces/Prolog/Prolog_interface_compilation.dox ./../interfaces/Prolog/Prolog_interface_sysdep.dox"'|' \ user-language-interface.doxyconf \ > Doxyfile.user-configured-prolog-interface-latex -TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-c-interface-latex TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-prolog-interface-latex +TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-c-interface-latex warning: doxygen no longer ships with the FreeSans font. You may want to clear or change DOT_FONTNAME. Otherwise you run the risk that the wrong font is being used for dot generated graphs. @@ -4725,265 +4759,188 @@ entering extended mode (./refman.tex LaTeX2e <2018-12-01> -(/usr/share/texlive/texmf-dist/tex/latex/base/article.clsTEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 make -C user-configured-c-interface.latex-dir refman.pdf \ - && mv -f user-configured-c-interface.latex-dir/refman.pdf ppl-user-configured-c-interface-1.2.pdf - -Document Class: article 2018/09/03 v1.4i Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clomake[3]: Entering directory '/build/ppl-1.2/doc' -make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. -rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf -)pdflatex refman -) -(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.styThis is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex) - restricted \write18 enabled. - -(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.styentering extended mode -(./refman.tex -LaTeX2e <2018-12-01> -(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls)) -(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) -(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty)) (/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty -(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def)))))) -(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def))) +(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty) (/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty (/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu))))) +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu))) (/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty) (/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)) (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)) -(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) (/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)))) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def) (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.defTEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 make -C user-configured-c-interface.latex-dir refman.pdf \ + && mv -f user-configured-c-interface.latex-dir/refman.pdf ppl-user-configured-c-interface-1.2.pdf +make[3]: Entering directory '/build/ppl-1.2/doc' +make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. +rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf +pdflatex refman +) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.styThis is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex) + restricted \write18 enabled. +)) +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)entering extended mode +(./refman.tex +LaTeX2e <2018-12-01> +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2018/09/03 v1.4i Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) +(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty +(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty))) (./doxygen.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) (/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty -(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))) -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def)) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) -(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty -(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty) (/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty -(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)/build/ppl-1.2/src/ppl.hh:44030: warning: no matching class member found for - Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Parma_Polyhedra_Library::Linear_System< Parma_Polyhedra_Library::Constraint >::const_iterator &iter, const Constraint_System &cs) -Possible candidates: - Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator() - Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator &y) - Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Linear_System< Constraint > ::const_iterator &iter, const Constraint_System &cs) - -)) -(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty -(/build/ppl-1.2/doc/ppl.sty) -(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty) +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)))) +(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) +(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty))) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) (/build/ppl-1.2/doc/ppl.sty +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -For additional information on amsmath, use the `?' option. -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)))) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)))) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) (/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)))) -Writing index file refman.idx -No file refman.aux. -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty Writing index file refman.idx No file refman.aux. (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty (/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd)) -(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def [Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)))) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)))) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd)) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd))GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: /build/ppl-1.2/doc/gpl.dox, line 6) -GFDL:-1: warning: multiple use of section label 'GFDL', (first occurrence: /build/ppl-1.2/doc/fdl.dox, line 6) - -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd)) [1 [1{/var/lib/texmf/fo -nts/map/pdftex/updmap/pdftex.map{/var/lib/texmf/fo -nts/map/pdftex/updmap/pdftex.map}} ] ] [2] [2] -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd)) [3 [3 ] [4] ] [4] [1 [1]] [2] [2] (./index.tex (./index.tex) (./GPL.texpdfTeX warning (ext4) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd) [1{/var/lib/texmf/fo +nts/map/pdftex/updmap/pdftex.map} ] [2] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 ] [4] [1] [2] (./index.tex) (./GPL.texpdfTeX warning (ext4) : destination with the same identifier (name{page.1}) has been already used, du plicate ignored \relax l.22 - [1] -Underfull \hbox (badness 10000) detected at line 9 -[][][] -pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has -been already used, duplicate ignored - - \relax -l.25 - [1pdfTeX warning (ext4): destination with the same identifier (name{page + [1])pdfTeX warning (ext4): destination with the same identifier (name{page .2}) has been already used, duplicate ignored \relax l.58 - [2])] (./GPL.texpdfTeX warning (ext4): destination with the same identifier (name{page + [2 +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty]pdfTeX warning (ext4): destination with the same identifier (name{page .3}) has been already used, duplicate ignored \relax l.84 - [3pdfTeX warning (ext4): destination with the same identifie -r (name{page.2}) has been already used, duplicate ignored - - \relax -l.37 ` - `Copyright'' also means copyright-\/like laws that apply to other kind... -[2]]pdfTeX warning (ext4): destination with the same identifier (name{page + [3 +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty]pdfTeX warning (ext4): destination with the same identifier (name{page .4}) has been already used, duplicate ignored \relax l.121 - [4]pdfTeX warning (ext4): destination with the same identifier (name{page.3}) h -as been already used, duplicate ignored - - \relax -l.68 - [3 [5]] [6] [7pdfTeX warning (ext4): destination with the same identifier (name{page -.4}) has been already used, duplicate ignored - - \relax -l.104 - [4]] [5] [6] [7] [8] [8]) -Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 -\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n -/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] -[9] (./GFDL.tex [9 [10]]) + [4))] +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty) [5] [6] [7]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty) [8) +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty)] +(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)) Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 \OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n /10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] -(./GFDL.tex [11 [10]] [12] [11] -Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 -\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise -com-bine any sec-tions En-ti-tled "[]Acknowledgements", -[13 [12]]) [13 (./PI_SI_Features.tex] [14] +[9) +(/build/ppl-1.2/doc/ppl.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty] +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) (./GFDL.tex +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty) [10] [11)] +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty) [12] Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 \OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise com-bine any sec-tions En-ti-tled "[]Acknowledgements", - -Underfull \vbox (badness 1377) has occurred while \output is active [14]) -(./modules.tex - -LaTeX Warning: Reference `group__PPL__C__interface' on page 15 undefined on inp -ut line 3. - - -LaTeX Warning: Reference `group__Init' on page 15 undefined on input line 4. - - -LaTeX Warning: Reference `group__Version' on page 15 undefined on input line 5. - - - -LaTeX Warning: Reference `group__Error' on page 15 undefined on input line 6. - - -LaTeX Warning: Reference `group__Timeout' on page 15 undefined on input line 7. - - - -LaTeX Warning: Reference `group__Datatypes' on page 15 undefined on input line -8. - -) +[13)] +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)) (./PI_SI_Features.tex [14)] +Writing index file refman.idx +No file refman.aux. +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd) +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty) Underfull \hbox (badness 10000) in paragraph at lines 19--20 @@ -4996,31 +4953,29 @@ Overfull \hbox (3.40186pt too wide) in paragraph at lines 28--29 []\OT1/ptm/m/n/10 The prod-uct do-mains con-sist of Direct[][][][]Product[][][] []S[][][]T, Smash[][][][]Product[][][][]S[][][]T, Constraints[][][][]Product[] -[15 (./annotated.tex] [16 - -LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__Sequence__const_ -_iterator__tag' on page 15 undefined on input line 3. - - -LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__tag' on page 15 -undefined on input line 4. - - -LaTeX Warning: Reference `interfaceppl__BD__Shape__mpq__class__tag' on page 15 -undefined on input line 5. +[15] +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty [16)]) +Underfull \vbox (badness 10000) has occurred while \output is active [17 +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd])/build/ppl-1.2/src/ppl.hh:44030: warning: no matching class member found for + Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Parma_Polyhedra_Library::Linear_System< Parma_Polyhedra_Library::Constraint >::const_iterator &iter, const Constraint_System &cs) +Possible candidates: + Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator() + Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator &y) + Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Linear_System< Constraint > ::const_iterator &iter, const Constraint_System &cs) -LaTeX Warning: Reference `interfaceppl__BD__Shape__mpz__class__tag' on page 15 -undefined on input line 6. - -[15]] -Underfull \vbox (badness 10000) has occurred while \output is active [17] +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) Underfull \hbox (badness 10000) in paragraph at lines 241--242 Underfull \hbox (badness 10000) in paragraph at lines 246--247 -[18] +[18 +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd)] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd) Underfull \hbox (badness 10000) in paragraph at lines 251--252 @@ -5056,84 +5011,10 @@ Underfull \hbox (badness 10000) in paragraph at lines 308--309 -[19] - -LaTeX Warning: Reference `interfaceppl__Coefficient__tag' on page 16 undefined -on input line 7. - - -LaTeX Warning: Reference `interfaceppl__Congruence__System__const__iterator__ta -g' on page 16 undefined on input line 8. - - -LaTeX Warning: Reference `interfaceppl__Congruence__System__tag' on page 16 und -efined on input line 9. - - -LaTeX Warning: Reference `interfaceppl__Congruence__tag' on page 16 undefined o -n input line 10. - - -LaTeX Warning: Reference `interfaceppl__Constraint__System__const__iterator__ta -g' on page 16 undefined on input line 11. - - -LaTeX Warning: Reference `interfaceppl__Constraint__System__tag' on page 16 und -efined on input line 12. - - -LaTeX Warning: Reference `interfaceppl__Constraint__tag' on page 16 undefined o -n input line 13. - - -LaTeX Warning: Reference `interfaceppl__Constraints__Product__C__Polyhedron__Gr -id__tag' on page 16 undefined on input line 14. - - -LaTeX Warning: Reference `interfaceppl__Generator__System__const__iterator__tag -' on page 16 undefined on input line 15. - - -LaTeX Warning: Reference `interfaceppl__Generator__System__tag' on page 16 unde -fined on input line 16. - - -LaTeX Warning: Reference `interfaceppl__Generator__tag' on page 16 undefined on - input line 17. - - -LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__const__iterato -r__tag' on page 16 undefined on input line 18. - - -LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__tag' on page 1 -6 undefined on input line 19. - - -LaTeX Warning: Reference `interfaceppl__Grid__Generator__tag' on page 16 undefi -ned on input line 20. - - -LaTeX Warning: Reference `interfaceppl__Grid__tag' on page 16 undefined on inpu -t line 21. - - -LaTeX Warning: Reference `interfaceppl__Linear__Expression__tag' on page 16 und -efined on input line 22. - - -LaTeX Warning: Reference `interfaceppl__MIP__Problem__tag' on page 16 undefined - on input line 23. - - -LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpq__class__tag' on p -age 16 undefined on input line 24. - - -LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpz__class__tag' on p -age 16 undefined on input line 25. - -[16] +[19] [1{/var/lib/texmf/fo +nts/map/pdftex/updmap/pdftex.map} ] [2] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 ] Underfull \hbox (badness 10000) in paragraph at lines 313--314 @@ -5173,60 +5054,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 374--375 -[20] - -LaTeX Warning: Reference `interfaceppl__PIP__Decision__Node__tag' on page 17 un -defined on input line 26. - - -LaTeX Warning: Reference `interfaceppl__PIP__Problem__tag' on page 17 undefined - on input line 27. - - -LaTeX Warning: Reference `interfaceppl__PIP__Solution__Node__tag' on page 17 un -defined on input line 28. - - -LaTeX Warning: Reference `interfaceppl__PIP__Tree__Node__tag' on page 17 undefi -ned on input line 29. - - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__cons -t__iterator__tag' on page 17 undefined on input line 30. - - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__iter -ator__tag' on page 17 undefined on input line 31. - - -Overfull \hbox (20.64815pt too wide) in paragraph at lines 31--31 - \OT1/ptm/b/n/10 Types and func-tions for it-er-at-ing on the dis-juncts of a [ -][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron[] - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__tag' - on page 17 undefined on input line 32. - - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__co -nst__iterator__tag' on page 17 undefined on input line 33. - - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__it -erator__tag' on page 17 undefined on input line 34. - - -LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__ta -g' on page 17 undefined on input line 35. - - -LaTeX Warning: Reference `interfaceppl__Polyhedron__tag' on page 17 undefined o -n input line 36. - - -LaTeX Warning: Reference `interfaceppl__Rational__Box__tag' on page 17 undefine -d on input line 37. - -) (./group__PPL__C__interface.tex) [17] (./group__Init.tex +[20 [4]] [1] [2] (./index.tex Underfull \hbox (badness 10000) in paragraph at lines 379--380 @@ -5304,13 +5132,26 @@ Underfull \hbox (badness 10000) in paragraph at lines 439--440 -[21] -Underfull \hbox (badness 10000) detected at line 35 -[][][] - -Underfull \hbox (badness 10000) detected at line 48 +[21 +Underfull \hbox (badness 10000) detected at line 9 [][][] -[18]) [19] (./group__Version.tex +pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has +been already used, duplicate ignored + + \relax +l.25 + [1]]) (./GPL.texpdfTeX warning (ext4): destination with the same identifie +r (name{page.2}) has been already used, duplicate ignored + + \relax +l.37 ` + `Copyright'' also means copyright-\/like laws that apply to other kind... +[2]pdfTeX warning (ext4): destination with the same identifier (name{page.3}) h +as been already used, duplicate ignored + + \relax +l.68 + [3 Underfull \hbox (badness 10000) in paragraph at lines 444--445 @@ -5344,7 +5185,12 @@ Underfull \hbox (badness 10000) in paragraph at lines 484--485 -[22] +[22]]pdfTeX warning (ext4): destination with the same identifier (name{page +.4}) has been already used, duplicate ignored + + \relax +l.104 + [4] [5] [6] [7 Overfull \hbox (62.5953pt too wide) in paragraph at lines 504--505 []\OT1/pcr/m/n/10 ppl[][][][]P[]I[]P[][][][]Problem[][][]get[][][]control[][][] parameter(+[]Handle, +[]Control[][][][]Parameter[][][][]Name, ?Control[] @@ -5373,7 +5219,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 544--545 -[23]) (./configured_domains_predicates.tex [24] [20]) [21] (./group__Error.tex +[23]] [8]) (./configured_domains_predicates.tex [24] [9]) Overfull \hbox (6.19531pt too wide) in paragraph at lines 31--33 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][]space[ ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[] @@ -5385,7 +5231,12 @@ Underfull \hbox (badness 10000) in paragraph at lines 68--69 [25 -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omsptm.fd]) +Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 +\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n +/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] +(./GFDL.tex] [10] [11GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: /build/ppl-1.2/doc/gpl.dox, line 6) +GFDL:-1: warning: multiple use of section label 'GFDL', (first occurrence: /build/ppl-1.2/doc/fdl.dox, line 6) +] [12] [13] Overfull \hbox (11.00215pt too wide) in paragraph at lines 101--103 \OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle @@ -5415,7 +5266,53 @@ Overfull \hbox (27.2138pt too wide) in paragraph at lines 122--124 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]C[][ ][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, -[26] +[26 +Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 +\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise +com-bine any sec-tions En-ti-tled "[]Acknowledgements", + +Underfull \vbox (badness 1377) has occurred while \output is active [14]]) +(./modules.tex + +LaTeX Warning: Reference `group__PPL__C__interface' on page 15 undefined on inp +ut line 3. + + +LaTeX Warning: Reference `group__Init' on page 15 undefined on input line 4. + + +LaTeX Warning: Reference `group__Version' on page 15 undefined on input line 5. + + + +LaTeX Warning: Reference `group__Error' on page 15 undefined on input line 6. + + +LaTeX Warning: Reference `group__Timeout' on page 15 undefined on input line 7. + + + +LaTeX Warning: Reference `group__Datatypes' on page 15 undefined on input line +8. + +) (./annotated.tex + +LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__Sequence__const_ +_iterator__tag' on page 15 undefined on input line 3. + + +LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__tag' on page 15 +undefined on input line 4. + + +LaTeX Warning: Reference `interfaceppl__BD__Shape__mpq__class__tag' on page 15 +undefined on input line 5. + + +LaTeX Warning: Reference `interfaceppl__BD__Shape__mpz__class__tag' on page 15 +undefined on input line 6. + +[15] Overfull \hbox (39.2138pt too wide) in paragraph at lines 125--127 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][] []C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, @@ -5479,6 +5376,83 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][] []Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[] [28] + +LaTeX Warning: Reference `interfaceppl__Coefficient__tag' on page 16 undefined +on input line 7. + + +LaTeX Warning: Reference `interfaceppl__Congruence__System__const__iterator__ta +g' on page 16 undefined on input line 8. + + +LaTeX Warning: Reference `interfaceppl__Congruence__System__tag' on page 16 und +efined on input line 9. + + +LaTeX Warning: Reference `interfaceppl__Congruence__tag' on page 16 undefined o +n input line 10. + + +LaTeX Warning: Reference `interfaceppl__Constraint__System__const__iterator__ta +g' on page 16 undefined on input line 11. + + +LaTeX Warning: Reference `interfaceppl__Constraint__System__tag' on page 16 und +efined on input line 12. + + +LaTeX Warning: Reference `interfaceppl__Constraint__tag' on page 16 undefined o +n input line 13. + + +LaTeX Warning: Reference `interfaceppl__Constraints__Product__C__Polyhedron__Gr +id__tag' on page 16 undefined on input line 14. + + +LaTeX Warning: Reference `interfaceppl__Generator__System__const__iterator__tag +' on page 16 undefined on input line 15. + + +LaTeX Warning: Reference `interfaceppl__Generator__System__tag' on page 16 unde +fined on input line 16. + + +LaTeX Warning: Reference `interfaceppl__Generator__tag' on page 16 undefined on + input line 17. + + +LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__const__iterato +r__tag' on page 16 undefined on input line 18. + + +LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__tag' on page 1 +6 undefined on input line 19. + + +LaTeX Warning: Reference `interfaceppl__Grid__Generator__tag' on page 16 undefi +ned on input line 20. + + +LaTeX Warning: Reference `interfaceppl__Grid__tag' on page 16 undefined on inpu +t line 21. + + +LaTeX Warning: Reference `interfaceppl__Linear__Expression__tag' on page 16 und +efined on input line 22. + + +LaTeX Warning: Reference `interfaceppl__MIP__Problem__tag' on page 16 undefined + on input line 23. + + +LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpq__class__tag' on p +age 16 undefined on input line 24. + + +LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpz__class__tag' on p +age 16 undefined on input line 25. + +[16] Overfull \hbox (15.79529pt too wide) in paragraph at lines 235--237 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]relation[][][]with[][][]constraint (+[]Handle, +[]Constraint, ?Relation[] @@ -5523,7 +5497,60 @@ Overfull \hbox (10.9953pt too wide) in paragraph at lines 277--279 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize[][][]with[][][]point(+[]H andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] -[30] +[30 + +LaTeX Warning: Reference `interfaceppl__PIP__Decision__Node__tag' on page 17 un +defined on input line 26. + + +LaTeX Warning: Reference `interfaceppl__PIP__Problem__tag' on page 17 undefined + on input line 27. + + +LaTeX Warning: Reference `interfaceppl__PIP__Solution__Node__tag' on page 17 un +defined on input line 28. + + +LaTeX Warning: Reference `interfaceppl__PIP__Tree__Node__tag' on page 17 undefi +ned on input line 29. + + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__cons +t__iterator__tag' on page 17 undefined on input line 30. + + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__iter +ator__tag' on page 17 undefined on input line 31. + + +Overfull \hbox (20.64815pt too wide) in paragraph at lines 31--31 + \OT1/ptm/b/n/10 Types and func-tions for it-er-at-ing on the dis-juncts of a [ +][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron[] + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__tag' + on page 17 undefined on input line 32. + + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__co +nst__iterator__tag' on page 17 undefined on input line 33. + + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__it +erator__tag' on page 17 undefined on input line 34. + + +LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__ta +g' on page 17 undefined on input line 35. + + +LaTeX Warning: Reference `interfaceppl__Polyhedron__tag' on page 17 undefined o +n input line 36. + + +LaTeX Warning: Reference `interfaceppl__Rational__Box__tag' on page 17 undefine +d on input line 37. + +)] (./group__PPL__C__interface.tex) [17] (./group__Init.tex Overfull \hbox (2.92062pt too wide) in paragraph at lines 347--349 \OT1/ptm/m/it/10 Transforms the poly-he-dron ref-er-enced by \OT1/pcr/m/sl/10 H andle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/s @@ -5545,6 +5572,12 @@ []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim age(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[] [31] +Underfull \hbox (badness 10000) detected at line 35 +[][][] + +Underfull \hbox (badness 10000) detected at line 48 +[][][] +[18]) [19] (./group__Version.tex Overfull \hbox (6.19531pt too wide) in paragraph at lines 362--364 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image [][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[] @@ -5556,23 +5589,7 @@ Overfull \hbox (44.0138pt too wide) in paragraph at lines 368--370 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]wrap[][][]assign(+[]Handle, +[]Lis t[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, -[32] -Overfull \hbox (1.62299pt too wide) in paragraph at lines 6--20 -[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]O[]U[]T[][][][]O[]F[][] -[][]M[]E[]M[]O[]RY[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[] -I[]D[][][][]A[]R[]G[]U[]M[]E[]NT[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]D -[]O[]M[] - -Overfull \hbox (1.35289pt too wide) in paragraph at lines 6--20 -[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]A[]R[]I[]T[]H[]M[]E[]T[]I[]C[][][][]O[]V[]E[ -]R[]F[]L[]OW[][], [][]P[]P[]L[][][][]S[]T[]D[]I[]O[][][][]E[]R[]R[]OR[][], [][] -P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]T[]E[]R[]N[]A[]L[][][][]E[]R[]R[]OR[] -[], [][]P[] - -Package longtable Warning: Column widths have changed -(longtable) in table 1 on input line 88. - -[22 +[32] [20]) Overfull \hbox (29.6138pt too wide) in paragraph at lines 399--401 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]simplify[][][]using[][][]context[] [][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) @@ -5604,7 +5621,8 @@ Overfull \hbox (12.19531pt too wide) in paragraph at lines 433--435 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]H79[][][]extrapolat ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[] -[33]]) [23] (./group__Timeout.tex +[33 [21] (./group__Error.tex] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omsptm.fd) Overfull \hbox (12.19531pt too wide) in paragraph at lines 436--438 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[] @@ -5625,23 +5643,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat ion[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[] [34] - -Package longtable Warning: Column widths have changed -(longtable) in table 2 on input line 36. - - -Underfull \hbox (badness 10000) detected at line 47 -[][][] - -Overfull \hbox (4.67143pt too wide) in paragraph at lines 48--49 -[]\OT1/pcr/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]I[]D[][][] -[]A[]R[]G[]U[]M[]E[]NT \OT1/ptm/bc/n/10 if \OT1/pcr/m/n/10 unscaled[][][]weight - \OT1/ptm/bc/n/10 is zero or if the com-puted weight thresh- - -Package longtable Warning: Column widths have changed -(longtable) in table 3 on input line 56. - -[24 Overfull \hbox (11.6138pt too wide) in paragraph at lines 467--469 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]add[][][]space[][][]dimensions[][] []and[][][]project(+[]Handle, +[]Dimension[][][][]Type) @@ -5662,12 +5663,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][]space[][][]dimension( +[]Dimension[][][][]Type, +[]Universe[][][]or[][][][]Empty, -[] [35] -Underfull \hbox (badness 10000) detected at line 59 -[][][] - -Underfull \hbox (badness 10000) detected at line 62 -[][][] -)] [25] (./group__Datatypes.tex Underfull \hbox (badness 10000) in paragraph at lines 522--523 @@ -5699,16 +5694,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]Sh ape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, [37] -Overfull \hbox (3.74069pt too wide) in paragraph at lines 43--45 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraint[][][][]System[] -[][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/ -bc/n/10 ppl[][][]const[][][][]Constraint[][][][]System[][][]const[] - -Overfull \hbox (0.36111pt too wide) in paragraph at lines 61--63 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Generator[][][][]System[][ -][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/b -c/n/10 ppl[][][]const[][][][]Generator[][][][]System[][][]const[] -[26 Overfull \hbox (7.44052pt too wide) in paragraph at lines 635--637 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Dimension[][][][]Type \OT1/ptm/m/it/1 0 with the di-men-sion of the vec-tor space en-clos-ing the grid ref-er-enced b @@ -5739,7 +5724,7 @@ Overfull \hbox (41.6138pt too wide) in paragraph at lines 681--683 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]maximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean, -[38]] +[38] Overfull \hbox (41.6138pt too wide) in paragraph at lines 686--688 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]minimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean, @@ -5831,21 +5816,27 @@ -enced by \OT1/pcr/m/sl/10 Handle[][][]1 \OT1/ptm/m/it/10 the con-cate-na-tion of \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 and the grid ref-er-enced by \OT1/pcr/m/ sl/10 Handle[] -[42 -Overfull \hbox (1.80132pt too wide) in paragraph at lines 76--78 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Congruence[][][][]System[] -[][]const[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/1 -0 ppl[][][][]Congruence[][][][]System[][][]const[][][]iterator[] - -Overfull \hbox (16.4409pt too wide) in paragraph at lines 139--141 -[][] \OT1/ptm/bc/n/10 type-def struct ppl[][][][]Artificial[][][][]Parameter[][ -][][]Sequence[][][]tag const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][ -][]const[][][][]Artificial[][][][]Parameter[][][][]Sequence[] -[27]] +[42] Overfull \hbox (6.19531pt too wide) in paragraph at lines 898--900 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][]space[ ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[] [43] +Overfull \hbox (1.62299pt too wide) in paragraph at lines 6--20 +[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]O[]U[]T[][][][]O[]F[][] +[][]M[]E[]M[]O[]RY[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[] +I[]D[][][][]A[]R[]G[]U[]M[]E[]NT[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]D +[]O[]M[] + +Overfull \hbox (1.35289pt too wide) in paragraph at lines 6--20 +[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]A[]R[]I[]T[]H[]M[]E[]T[]I[]C[][][][]O[]V[]E[ +]R[]F[]L[]OW[][], [][]P[]P[]L[][][][]S[]T[]D[]I[]O[][][][]E[]R[]R[]OR[][], [][] +P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]T[]E[]R[]N[]A[]L[][][][]E[]R[]R[]OR[] +[], [][]P[] + +Package longtable Warning: Column widths have changed +(longtable) in table 1 on input line 88. + +[22]) [23] (./group__Timeout.tex Underfull \hbox (badness 10000) in paragraph at lines 919--920 @@ -5889,6 +5880,29 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa gonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, [45] + +Package longtable Warning: Column widths have changed +(longtable) in table 2 on input line 36. + + +Underfull \hbox (badness 10000) detected at line 47 +[][][] + +Overfull \hbox (4.67143pt too wide) in paragraph at lines 48--49 +[]\OT1/pcr/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]I[]D[][][] +[]A[]R[]G[]U[]M[]E[]NT \OT1/ptm/bc/n/10 if \OT1/pcr/m/n/10 unscaled[][][]weight + \OT1/ptm/bc/n/10 is zero or if the com-puted weight thresh- + +Package longtable Warning: Column widths have changed +(longtable) in table 3 on input line 56. + +[24] +Underfull \hbox (badness 10000) detected at line 59 +[][][] + +Underfull \hbox (badness 10000) detected at line 62 +[][][] +) [25] (./group__Datatypes.tex Overfull \hbox (25.3953pt too wide) in paragraph at lines 1038--1040 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]relation[][][]with[][][]c onstraint(+[]Handle, +[]Constraint, ?Relation[] @@ -5913,17 +5927,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]upper[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) [46] -Overfull \hbox (27.11154pt too wide) in paragraph at lines 190--192 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product -[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][ -]\OT1/ptm/bc/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[] - -Overfull \hbox (14.85136pt too wide) in paragraph at lines 193--195 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product -[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^ -C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Constraints[][][][]Product[] -[28 Overfull \hbox (35.6138pt too wide) in paragraph at lines 1064--1066 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]lower[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) @@ -5943,7 +5946,7 @@ Overfull \hbox (20.5953pt too wide) in paragraph at lines 1084--1086 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize[][][]with[][][]p oint(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] -[47]] +[47] Overfull \hbox (3.2138pt too wide) in paragraph at lines 1142--1144 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]unconstrain[][][]space[][ ][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var) @@ -5957,6 +5960,16 @@ []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[] [48] +Overfull \hbox (3.74069pt too wide) in paragraph at lines 43--45 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraint[][][][]System[] +[][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/ +bc/n/10 ppl[][][]const[][][][]Constraint[][][][]System[][][]const[] + +Overfull \hbox (0.36111pt too wide) in paragraph at lines 61--63 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Generator[][][][]System[][ +][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/b +c/n/10 ppl[][][]const[][][][]Generator[][][][]System[][][]const[] +[26] Overfull \hbox (0.19531pt too wide) in paragraph at lines 1154--1156 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][] @@ -6006,6 +6019,16 @@ []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][] Underfull \vbox (badness 2503) has occurred while \output is active [50] +Overfull \hbox (1.80132pt too wide) in paragraph at lines 76--78 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Congruence[][][][]System[] +[][]const[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/1 +0 ppl[][][][]Congruence[][][][]System[][][]const[][][]iterator[] + +Overfull \hbox (16.4409pt too wide) in paragraph at lines 139--141 +[][] \OT1/ptm/bc/n/10 type-def struct ppl[][][][]Artificial[][][][]Parameter[][ +][][]Sequence[][][]tag const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][ +][]const[][][][]Artificial[][][][]Parameter[][][][]Sequence[] +[27] Overfull \hbox (9.2138pt too wide) in paragraph at lines 1235--1237 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) @@ -6026,33 +6049,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]fold[][][]space[][][]dime nsions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]P[]P[] [51] -Overfull \hbox (18.00154pt too wide) in paragraph at lines 202--204 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] -[][][]N[]N[]C[][][][]Polyhedron[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/pt -m/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Polyhedron[ -] - -Overfull \hbox (21.60114pt too wide) in paragraph at lines 208--210 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] -[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][ -]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[] - -Overfull \hbox (9.34096pt too wide) in paragraph at lines 211--213 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] -[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^ -C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[][][][]Powerset[] - -Overfull \hbox (0.77115pt too wide) in paragraph at lines 226--228 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] -[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] $\OMS/cms -y/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[] - -Overfull \hbox (8.4811pt too wide) in paragraph at lines 229--231 -[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] -[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] const $\O -MS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[] -[29] Overfull \hbox (21.79532pt too wide) in paragraph at lines 1272--1274 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]Universe[] @@ -6088,6 +6084,17 @@ 10 from the octagonal[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle \O T1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] [52] +Overfull \hbox (27.11154pt too wide) in paragraph at lines 190--192 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product +[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][ +]\OT1/ptm/bc/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[] + +Overfull \hbox (14.85136pt too wide) in paragraph at lines 193--195 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product +[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^ +C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Constraints[][][][]Product[] +[28] Overfull \hbox (1.39532pt too wide) in paragraph at lines 1323--1325 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[] @@ -6161,7 +6168,7 @@ \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10 with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Congruence\OT1/ptm/m/it/10 . -[54] [30] +[54] Overfull \hbox (0.19531pt too wide) in paragraph at lines 1427--1429 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][] []minimized[][][]constraints(+[]Handle, ?Constraint[][][] @@ -6187,6 +6194,33 @@ e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, Underfull \vbox (badness 1259) has occurred while \output is active [55] +Overfull \hbox (18.00154pt too wide) in paragraph at lines 202--204 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] +[][][]N[]N[]C[][][][]Polyhedron[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/pt +m/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Polyhedron[ +] + +Overfull \hbox (21.60114pt too wide) in paragraph at lines 208--210 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] +[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][ +]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[] + +Overfull \hbox (9.34096pt too wide) in paragraph at lines 211--213 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] +[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^ +C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[][][][]Powerset[] + +Overfull \hbox (0.77115pt too wide) in paragraph at lines 226--228 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] +[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] $\OMS/cms +y/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[] + +Overfull \hbox (8.4811pt too wide) in paragraph at lines 229--231 +[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[] +[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] const $\O +MS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[] +[29] Overfull \hbox (25.80045pt too wide) in paragraph at lines 1484--1486 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -6268,7 +6302,7 @@ Overfull \hbox (25.39532pt too wide) in paragraph at lines 1586--1588 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] -[58] +[58 [30]] Overfull \hbox (31.39532pt too wide) in paragraph at lines 1589--1591 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] @@ -6364,24 +6398,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][][]Rational[][][][]Box[][][]with[][][]complexity(+[]Handle, +[] [61] -Underfull \hbox (badness 10000) detected at line 333 -[][][] - -Overfull \hbox (27.05392pt too wide) in paragraph at lines 343--344 - []\OT1/ptm/b/n/10 ppl[][][]io[][][]variable[][][]output[][][]function[][][]typ -e[] \OT1/pcr/m/n/8 typedef const char$\OMS/cmsy/m/n/8 ^^C$ \OT1/pcr/m/n/8 ppl[] -[][]io[][][]variable[][][]output[][][]function[][][]type([][]ppl[] - -Package longtable Warning: Column widths have changed -(longtable) in table 4 on input line 383. - - -Package longtable Warning: Column widths have changed -(longtable) in table 5 on input line 411. - -[31]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) - restricted \write18 enabled. - Overfull \hbox (11.61383pt too wide) in paragraph at lines 1717--1719 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+ @@ -6411,8 +6427,7 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][][ ]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][ ]1, +[]Handle[] -[62]entering extended mode -(./_formulas.tex +[62] Overfull \hbox (56.5953pt too wide) in paragraph at lines 1794--1796 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relatio n[][][]with[][][]constraint(+[]Handle, +[]Constraint, ?Relation[] @@ -6455,10 +6470,7 @@ Overfull \hbox (57.2138pt too wide) in paragraph at lines 1820--1822 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz e(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) -[63 -LaTeX2e <2018-12-01> - -] +[63] Overfull \hbox (0.81381pt too wide) in paragraph at lines 1825--1827 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]maximiz e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, @@ -6466,7 +6478,9 @@ Overfull \hbox (0.81381pt too wide) in paragraph at lines 1830--1832 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, -[64] +[64]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex) + restricted \write18 enabled. + Overfull \hbox (25.80045pt too wide) in paragraph at lines 1866--1868 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -6507,7 +6521,27 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 1906--1908 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[] -[65] +[65]entering extended mode +(./_formulas.tex +LaTeX2e <2018-12-01> + + +Underfull \hbox (badness 10000) detected at line 333 +[][][] + +Overfull \hbox (27.05392pt too wide) in paragraph at lines 343--344 + []\OT1/ptm/b/n/10 ppl[][][]io[][][]variable[][][]output[][][]function[][][]typ +e[] \OT1/pcr/m/n/8 typedef const char$\OMS/cmsy/m/n/8 ^^C$ \OT1/pcr/m/n/8 ppl[] +[][]io[][][]variable[][][]output[][][]function[][][]type([][]ppl[] + +Package longtable Warning: Column widths have changed +(longtable) in table 4 on input line 383. + + +Package longtable Warning: Column widths have changed +(longtable) in table 5 on input line 411. + +[31] Overfull \hbox (19.39532pt too wide) in paragraph at lines 1909--1911 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[] @@ -6619,31 +6653,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]N[]N[]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] [69] - -Package longtable Warning: Column widths have changed -(longtable) in table 6 on input line 435. - - -Package longtable Warning: Column widths have changed -(longtable) in table 7 on input line 467. - - -Overfull \hbox (19.9918pt too wide) in paragraph at lines 472--473 - []\OT1/ptm/b/n/10 ppl[][][]enum[][][][]Bounded[][][][]Integer[][][][]Type[][][ -][]Representation[] \OT1/pcr/m/n/8 enum [][]ppl[][][]enum[][][][]Bounded[][][][ -]Integer[][][][]Type[][][][]Representation[][] - -Package longtable Warning: Column widths have changed -(longtable) in table 8 on input line 487. - - -Underfull \hbox (badness 10000) detected at line 516 -[][][] - -Package longtable Warning: Column widths have changed -(longtable) in table 9 on input line 516. - -[32 Overfull \hbox (1.39532pt too wide) in paragraph at lines 2072--2074 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Rational[][][][]Box(+[]Handle[][][]1, -[]Handle[][][] @@ -6706,7 +6715,7 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]co mplexity(+[] -[70]] +[70] Overfull \hbox (62.59534pt too wide) in paragraph at lines 2108--2110 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co @@ -6772,14 +6781,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ma ximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] [72] - -Package longtable Warning: Column widths have changed -(longtable) in table 10 on input line 540. - - -Underfull \hbox (badness 10000) detected at line 541 -[][][] -) [33] Overfull \hbox (36.19531pt too wide) in paragraph at lines 2212--2214 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]mi nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] @@ -6803,8 +6804,7 @@ Overfull \hbox (23.6138pt too wide) in paragraph at lines 2251--2253 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re fine[][][]with[][][]congruence( +[]Handle, +[]Congruence) -[73 -(./interfaceppl__Artificial__Parameter__Sequence__const__iterator__tag.tex] +[73] Overfull \hbox (32.5953pt too wide) in paragraph at lines 2254--2256 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re fine[][][]with[][][]constraints( +[]Handle, +[]Constraint[] @@ -6853,32 +6853,32 @@ Overfull \hbox (15.79532pt too wide) in paragraph at lines 2291--2293 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge neralized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[] -[74] -Overfull \hbox (7.82706pt too wide) in paragraph at lines 22--24 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Artificial[][][][]Paramete -r[][][][]Sequence[][][]const[][][]iterator[][][]from[][][][]Artificial[][][][]P -arameter[][][][]Sequence[] +[74 -Overfull \hbox (23.68665pt too wide) in paragraph at lines 22--24 -[][]\OT1/ptm/bc/n/10 const[][][]iterator[][] ([][]ppl[][][][]Artificial[][][][] -Parameter[][][][]Sequence[][][]const[][][]iterator[][][]t[][] dst, [][]ppl[][][ -]const[][][][]Artificial[][][][]Parameter[] +Package longtable Warning: Column widths have changed +(longtable) in table 6 on input line 435. -Overfull \hbox (26.38684pt too wide) in paragraph at lines 25--27 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Artificial[][][][]Paramete -r[][][][]Sequence[][][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Artif -icial[][][][]Parameter[][][][]Sequence[] -Overfull \hbox (7.21704pt too wide) in paragraph at lines 32--34 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq -uence[][][]const[][][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][] -Artificial[][][][]Parameter[] +Package longtable Warning: Column widths have changed +(longtable) in table 7 on input line 467. -Overfull \hbox (17.78696pt too wide) in paragraph at lines 35--37 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq -uence[][][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Artificial[][ -][][]Parameter[][][][]Sequence[] -) (./interfaceppl__Artificial__Parameter__tag.tex + +Overfull \hbox (19.9918pt too wide) in paragraph at lines 472--473 + []\OT1/ptm/b/n/10 ppl[][][]enum[][][][]Bounded[][][][]Integer[][][][]Type[][][ +][]Representation[] \OT1/pcr/m/n/8 enum [][]ppl[][][]enum[][][][]Bounded[][][][ +]Integer[][][][]Type[][][][]Representation[][] + +Package longtable Warning: Column widths have changed +(longtable) in table 8 on input line 487. + + +Underfull \hbox (badness 10000) detected at line 516 +[][][] + +Package longtable Warning: Column widths have changed +(longtable) in table 9 on input line 516. + +[32]] Overfull \hbox (12.81381pt too wide) in paragraph at lines 2294--2296 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge neralized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, @@ -6899,11 +6899,15 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]li near[][][]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[] [75] -Overfull \hbox (4.9309pt too wide) in paragraph at lines 15--17 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]get[] -[][][]Linear[][][][]Expression[][] ([][]ppl[][][]const[][][][]Artificial[][][][ -]Parameter[][][]t[][] ap, [][]ppl[][][][]Linear[] -[34] + +Package longtable Warning: Column widths have changed +(longtable) in table 10 on input line 540. + + +Underfull \hbox (badness 10000) detected at line 541 +[][][] +) [33] +(./interfaceppl__Artificial__Parameter__Sequence__const__iterator__tag.tex Overfull \hbox (9.79532pt too wide) in paragraph at lines 2329--2331 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][] B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[] @@ -6970,11 +6974,31 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]fo ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[] [77] -Overfull \hbox (0.85934pt too wide) in paragraph at lines 18--20 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]coeff -icient[][] ([][]ppl[][][]const[][][][]Artificial[][][][]Parameter[][][]t[][] ap -, [][]ppl[][][]dimension[][][]type[][] var, -) +Overfull \hbox (7.82706pt too wide) in paragraph at lines 22--24 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Artificial[][][][]Paramete +r[][][][]Sequence[][][]const[][][]iterator[][][]from[][][][]Artificial[][][][]P +arameter[][][][]Sequence[] + +Overfull \hbox (23.68665pt too wide) in paragraph at lines 22--24 +[][]\OT1/ptm/bc/n/10 const[][][]iterator[][] ([][]ppl[][][][]Artificial[][][][] +Parameter[][][][]Sequence[][][]const[][][]iterator[][][]t[][] dst, [][]ppl[][][ +]const[][][][]Artificial[][][][]Parameter[] + +Overfull \hbox (26.38684pt too wide) in paragraph at lines 25--27 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Artificial[][][][]Paramete +r[][][][]Sequence[][][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Artif +icial[][][][]Parameter[][][][]Sequence[] + +Overfull \hbox (7.21704pt too wide) in paragraph at lines 32--34 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq +uence[][][]const[][][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][] +Artificial[][][][]Parameter[] + +Overfull \hbox (17.78696pt too wide) in paragraph at lines 35--37 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq +uence[][][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Artificial[][ +][][]Parameter[][][][]Sequence[] +) (./interfaceppl__Artificial__Parameter__tag.tex Overfull \hbox (15.79532pt too wide) in paragraph at lines 2406--2408 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[] @@ -7015,7 +7039,12 @@ \OT1/ptm/m/it/10 Builds a new oc-tag-o-nal shape \OT1/pcr/m/sl/10 P[][][]1 \OT1 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] -[78 (./interfaceppl__BD__Shape__mpq__class__tag.tex] +[78 +Overfull \hbox (4.9309pt too wide) in paragraph at lines 15--17 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]get[] +[][][]Linear[][][][]Expression[][] ([][]ppl[][][]const[][][][]Artificial[][][][ +]Parameter[][][]t[][] ap, [][]ppl[][][][]Linear[] +[34]] Overfull \hbox (28.99533pt too wide) in paragraph at lines 2448--2450 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]H @@ -7069,7 +7098,12 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co mplexity(+[] -[79] +[79 +Overfull \hbox (0.85934pt too wide) in paragraph at lines 18--20 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]coeff +icient[][] ([][]ppl[][][]const[][][][]Artificial[][][][]Parameter[][][]t[][] ap +, [][]ppl[][][]dimension[][][]type[][] var, +) (./interfaceppl__BD__Shape__mpq__class__tag.tex] Overfull \hbox (9.79532pt too wide) in paragraph at lines 2518--2520 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]co ntains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[] @@ -7111,7 +7145,7 @@ class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][] []B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p tm/bc/n/10 pph, [][]ppl[] -[35 +[35] Overfull \hbox (17.6138pt too wide) in paragraph at lines 2549--2551 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re lation[][][]with[][][]generator(+[]Handle, +[]Generator, @@ -7151,7 +7185,7 @@ Overfull \hbox (36.19531pt too wide) in paragraph at lines 2582--2584 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]mi nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] -[81]] +[81] Overfull \hbox (3.2138pt too wide) in paragraph at lines 2587--2589 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ex ternal[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) @@ -7248,68 +7282,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 2702--2704 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] B[]H[]M[]Z05[][][]widening[][][]assign(+[]Handle[][][]1, +[]Handle[] -[84] -Overfull \hbox (33.79532pt too wide) in paragraph at lines 2705--2707 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]wi -dening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[] - -Overfull \hbox (1.24307pt too wide) in paragraph at lines 2705--2707 -\OT1/ptm/m/it/10 Same as pred-i-cate \OT1/pcr/m/sl/10 ppl[][][][]Octagonal[][][ -][]Shape[][][]mpq[][][]class[][][][]H79[][][]widening[][][]assign[][][]with[][] -[]tokens\OT1/ptm/m/it/10 /4 - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 2711--2713 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li -mited[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][] - -Overfull \hbox (19.9953pt too wide) in paragraph at lines 2711--2713 -\OT1/pcr/m/n/10 tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]Constraint[][][][ -]System, +[]C[][][]unsigned[][][]1, ?C[][][]unsigned[] - -Overfull \hbox (37.39532pt too wide) in paragraph at lines 2714--2716 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li -mited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 2717--2719 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li -mited[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign(+[]Handle[] - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2720--2722 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li -mited[][][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 2723--2725 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] -C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[] -[85] -Overfull \hbox (3.79532pt too wide) in paragraph at lines 2739--2741 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad -d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[] - -Overfull \hbox (15.79532pt too wide) in paragraph at lines 2742--2744 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad -d[][][]space[][][]dimensions[][][]and[][][]project(+[]Handle, +[] - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2745--2747 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re -move[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[] - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2748--2750 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re -move[][][]higher[][][]space[][][]dimensions(+[]Handle, +[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 2751--2753 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ex -pand[][][]space[][][]dimension(+[]Handle, +[]P[]P[]L[][][][]Var, +[] - -Overfull \hbox (3.79532pt too wide) in paragraph at lines 2754--2756 -[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]fo -ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[] - -Overfull \hbox (39.79532pt too wide) in paragraph at lines 2776--2778 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension(+[]Dimension[] -[86] +[84 Overfull \hbox (11.12201pt too wide) in paragraph at lines 29--31 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][] class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][] @@ -7383,7 +7356,72 @@ []get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][] []Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[] -Overfull \hbox (8.61162pt too +Overfull \hbox (8.61162pt too] wide) in paragraph at lines 73--75 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] +[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][] +[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[] +[36 +Overfull \hbox (33.79532pt too wide) in paragraph at lines 2705--2707 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]wi +dening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[] + +Overfull \hbox (1.24307pt too wide) in paragraph at lines 2705--2707 +\OT1/ptm/m/it/10 Same as pred-i-cate \OT1/pcr/m/sl/10 ppl[][][][]Octagonal[][][ +][]Shape[][][]mpq[][][]class[][][][]H79[][][]widening[][][]assign[][][]with[][] +[]tokens\OT1/ptm/m/it/10 /4 + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 2711--2713 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li +mited[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][] + +Overfull \hbox (19.9953pt too wide) in paragraph at lines 2711--2713 +\OT1/pcr/m/n/10 tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]Constraint[][][][ +]System, +[]C[][][]unsigned[][][]1, ?C[][][]unsigned[] + +Overfull \hbox (37.39532pt too wide) in paragraph at lines 2714--2716 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li +mited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 2717--2719 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li +mited[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign(+[]Handle[] + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2720--2722 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li +mited[][][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 2723--2725 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] +C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[] +[85]] +Overfull \hbox (3.79532pt too wide) in paragraph at lines 2739--2741 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad +d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[] + +Overfull \hbox (15.79532pt too wide) in paragraph at lines 2742--2744 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad +d[][][]space[][][]dimensions[][][]and[][][]project(+[]Handle, +[] + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2745--2747 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re +move[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[] + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2748--2750 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re +move[][][]higher[][][]space[][][]dimensions(+[]Handle, +[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 2751--2753 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ex +pand[][][]space[][][]dimension(+[]Handle, +[]P[]P[]L[][][][]Var, +[] + +Overfull \hbox (3.79532pt too wide) in paragraph at lines 2754--2756 +[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]fo +ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[] + +Overfull \hbox (39.79532pt too wide) in paragraph at lines 2776--2778 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension(+[]Dimension[] +[86] Overfull \hbox (24.19531pt too wide) in paragraph at lines 2783--2785 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][]constraints(+[]Constraint[] @@ -7436,11 +7474,7 @@ \OT1/ptm/m/it/10 Builds a new con-straints prod-uct \OT1/pcr/m/sl/10 P[][][]1 \ OT1/ptm/m/it/10 from the octagonal[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle \OT1/pcr/m/sl/10 Handle[] -[87] wide) in paragraph at lines 73--75 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] -[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][] -[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[] -[36 +[87] Overfull \hbox (1.39532pt too wide) in paragraph at lines 2824--2826 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][] @@ -7492,43 +7526,7 @@ Overfull \hbox (1.39532pt too wide) in paragraph at lines 2851--2853 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][] -[88]] -Overfull \hbox (15.2138pt too wide) in paragraph at lines 2876--2878 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 2882--2884 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounds[][][]from[][][]above(+[]Handle, +[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 2885--2887 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounds[][][]from[][][]below(+[]Handle, +[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 2888--2890 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[] - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2891--2893 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 2894--2896 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][][] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 2897--2899 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C[][][] - -Overfull \hbox (44.5953pt too wide) in paragraph at lines 2910--2912 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]space[][][]dimension(+[]Handle, ?Dimension[] - -Overfull \hbox (50.5953pt too wide) in paragraph at lines 2913--2915 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]affine[][][]dimension(+[]Handle, ?Dimension[] -[89] +[88] Overfull \hbox (0.25233pt too wide) in paragraph at lines 89--91 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []bounds[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[ @@ -7611,6 +7609,42 @@ []concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]c lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] [37 +Overfull \hbox (15.2138pt too wide) in paragraph at lines 2876--2878 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 2882--2884 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounds[][][]from[][][]above(+[]Handle, +[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 2885--2887 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounds[][][]from[][][]below(+[]Handle, +[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 2888--2890 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[] + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2891--2893 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 2894--2896 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][][] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 2897--2899 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C[][][] + +Overfull \hbox (44.5953pt too wide) in paragraph at lines 2910--2912 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]space[][][]dimension(+[]Handle, ?Dimension[] + +Overfull \hbox (50.5953pt too wide) in paragraph at lines 2913--2915 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]affine[][][]dimension(+[]Handle, ?Dimension[] +[89]] Overfull \hbox (21.2138pt too wide) in paragraph at lines 2916--2918 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]relation[][][]with[][][]constraint(+[]Handle, @@ -7646,7 +7680,7 @@ Overfull \hbox (0.81381pt too wide) in paragraph at lines 2948--2950 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, -[90]] +[90] Overfull \hbox (41.6138pt too wide) in paragraph at lines 2964--2966 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]add[][][]constraint(+[]Handle, +[]Constraint) @@ -7683,46 +7717,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]topological[][][]closure[][][]assign(+[] [91] -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2995--2997 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension(+[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 2998--3000 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[] - -Overfull \hbox (9.2138pt too wide) in paragraph at lines 3001--3003 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, - -Overfull \hbox (2.5953pt too wide) in paragraph at lines 3004--3006 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]affine[][][]preimage(+[]Handle, +[]P[]P[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 3007--3009 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounded[][][]affine[][][]image(+[]Handle, +[] - -Overfull \hbox (15.2138pt too wide) in paragraph at lines 3010--3012 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounded[][][]affine[][][]preimage(+[]Handle, - -Overfull \hbox (21.2138pt too wide) in paragraph at lines 3013--3015 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Handle, - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 3016--3018 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 3019--3021 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] - -Overfull \hbox (15.79532pt too wide) in paragraph at lines 3022--3024 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[] -[92] Overfull \hbox (11.9314pt too wide) in paragraph at lines 137--139 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[] @@ -7794,39 +7788,7 @@ [][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[] Overfull \hbox (21.65166pt too wide) in paragraph at lines 169--171 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][] -Overfull \hbox (0.19531pt too wide) in paragraph at lines 3029--3031 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]intersection[][][]assign(+[]Handle[][][] - -Overfull \hbox (15.79532pt too wide) in paragraph at lines 3032--3034 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]upper[][][]bound[][][]assign(+[]Handle[][][]1, +[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 3035--3037 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]difference[][][]assign(+[]Handle[][][]1, +[] - -Overfull \hbox (15.79532pt too wide) in paragraph at lines 3038--3040 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 3041--3043 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact(+[] - -Overfull \hbox (3.79532pt too wide) in paragraph at lines 3048--3050 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]widening[][][]assign[][][]with[][][]tokens(+[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 3051--3053 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]widening[][][]assign(+[]Handle[][][]1, +[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 3060--3062 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]concatenate[][][]assign(+[]Handle[][][]1, +[] -[93]class[][] +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][] mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] @@ -7859,7 +7821,79 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B []D[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[] -[38] +[38 +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2995--2997 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension(+[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 2998--3000 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[] + +Overfull \hbox (9.2138pt too wide) in paragraph at lines 3001--3003 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, + +Overfull \hbox (2.5953pt too wide) in paragraph at lines 3004--3006 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]affine[][][]preimage(+[]Handle, +[]P[]P[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 3007--3009 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounded[][][]affine[][][]image(+[]Handle, +[] + +Overfull \hbox (15.2138pt too wide) in paragraph at lines 3010--3012 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounded[][][]affine[][][]preimage(+[]Handle, + +Overfull \hbox (21.2138pt too wide) in paragraph at lines 3013--3015 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Handle, + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 3016--3018 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 3019--3021 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] + +Overfull \hbox (15.79532pt too wide) in paragraph at lines 3022--3024 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[] +[92]] +Overfull \hbox (0.19531pt too wide) in paragraph at lines 3029--3031 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]intersection[][][]assign(+[]Handle[][][] + +Overfull \hbox (15.79532pt too wide) in paragraph at lines 3032--3034 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]upper[][][]bound[][][]assign(+[]Handle[][][]1, +[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 3035--3037 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]difference[][][]assign(+[]Handle[][][]1, +[] + +Overfull \hbox (15.79532pt too wide) in paragraph at lines 3038--3040 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 3041--3043 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact(+[] + +Overfull \hbox (3.79532pt too wide) in paragraph at lines 3048--3050 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]widening[][][]assign[][][]with[][][]tokens(+[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 3051--3053 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]widening[][][]assign(+[]Handle[][][]1, +[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 3060--3062 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]concatenate[][][]assign(+[]Handle[][][]1, +[] +[93] Overfull \hbox (19.39532pt too wide) in paragraph at lines 3067--3069 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[] @@ -7975,38 +8009,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]relation[][][]with[][][]constraint(+[]Handle, +[] [96] -Overfull \hbox (47.6138pt too wide) in paragraph at lines 3214--3216 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]relation[][][]with[][][]generator(+[]Handle, +[]Generator, - -Overfull \hbox (2.5953pt too wide) in paragraph at lines 3217--3219 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]relation[][][]with[][][]congruence(+[]Handle, +[] - -Overfull \hbox (4.9953pt too wide) in paragraph at lines 3220--3222 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] - -Overfull \hbox (4.9953pt too wide) in paragraph at lines 3225--3227 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]minimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] - -Overfull \hbox (15.2138pt too wide) in paragraph at lines 3230--3232 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]maximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, - -Overfull \hbox (15.2138pt too wide) in paragraph at lines 3235--3237 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]minimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, - -Overfull \hbox (33.2138pt too wide) in paragraph at lines 3240--3242 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]external[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) - -Overfull \hbox (15.2138pt too wide) in paragraph at lines 3243--3245 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) -[97] Overfull \hbox (3.17146pt too wide) in paragraph at lines 183--185 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[] @@ -8076,6 +8078,38 @@ []add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ ]mpq[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[] [39 +Overfull \hbox (47.6138pt too wide) in paragraph at lines 3214--3216 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]relation[][][]with[][][]generator(+[]Handle, +[]Generator, + +Overfull \hbox (2.5953pt too wide) in paragraph at lines 3217--3219 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]relation[][][]with[][][]congruence(+[]Handle, +[] + +Overfull \hbox (4.9953pt too wide) in paragraph at lines 3220--3222 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] + +Overfull \hbox (4.9953pt too wide) in paragraph at lines 3225--3227 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]minimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] + +Overfull \hbox (15.2138pt too wide) in paragraph at lines 3230--3232 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]maximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, + +Overfull \hbox (15.2138pt too wide) in paragraph at lines 3235--3237 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]minimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, + +Overfull \hbox (33.2138pt too wide) in paragraph at lines 3240--3242 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]external[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) + +Overfull \hbox (15.2138pt too wide) in paragraph at lines 3243--3245 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) +[97] Overfull \hbox (2.0138pt too wide) in paragraph at lines 3262--3264 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]add[][][]constraint(+[]Handle, +[]Constraint) @@ -8228,7 +8262,7 @@ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][ ][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B []D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]C[][][][]Polyhedron -[40 +[40] Overfull \hbox (14.5953pt too wide) in paragraph at lines 3373--3375 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -8269,7 +8303,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 3405--3407 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]iterator[][][]from[][][]iterator(+[]Iterator[] -[101]] +[101] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3414--3416 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][] @@ -8465,7 +8499,7 @@ Overfull \hbox (5.6138pt too wide) in paragraph at lines 3640--3642 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]topological[][][]closure[][][]assign(+[]Handle) -[106] +[106 Overfull \hbox (10.35281pt too wide) in paragraph at lines 343--344 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][ ][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr @@ -8505,7 +8539,7 @@ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][ ][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] [][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Constraint[] -[42] +[42]] Overfull \hbox (11.6138pt too wide) in paragraph at lines 3649--3651 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]unconstrain[][][]space[][][]dimension(+[]Handle, @@ -8675,7 +8709,7 @@ Overfull \hbox (4.9953pt too wide) in paragraph at lines 3785--199 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]drop[][][]disjuncts(+[]Handle, +[]Iterator[] -(./PI_Compilation.tex) (./PI_SD_Features.tex +(./PI_Compilation.tex) (./PI_SD_Features.tex [110] Overfull \hbox (3.0828pt too wide) in paragraph at lines 445--446 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]get[][ ][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha @@ -8700,31 +8734,11 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]topolo gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh ape[][][]mpq[][][]class[][][]topological[][][]closure[] -[44 [110]] [111] +[44] [111] Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87 []\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared -[112 -Overfull \hbox (7.81178pt too wide) in paragraph at lines 523--524 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]maximi -ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] -[]mpq[][][]class[][][]maximize[][][]with[][][]point ( - -Overfull \hbox (6.15161pt too wide) in paragraph at lines 529--530 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimi -ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] -[]mpq[][][]class[][][]minimize[][][]with[][][]point ( - -Overfull \hbox (1.11285pt too wide) in paragraph at lines 541--542 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contai -ns[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][ -][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contains[][][] - -Overfull \hbox (31.82233pt too wide) in paragraph at lines 547--548 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strict -ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/ -8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictly[] -[45]] +[112] Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101 \OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). @@ -8753,7 +8767,50 @@ ) (see the transcript file for additional information){/usr/share/texlive/texmf-d -ist/fonts/enc/dvips/base/8r.enc} +ist/fonts/enc/dvips/base/8r.enc} +Output written on refman.pdf (120 pages, 622199 bytes). +Transcript written on refman.log. +makeindex refman.idx +This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). +Scanning input file refman.idx....done (1 entries accepted, 0 rejected). +Sorting entries...done (0 comparisons). +Generating output file refman.ind....done (5 lines written, 0 warnings). +Output written in refman.ind. +Transcript written in refman.ilg. +pdflatex refman + Overfull \hbox (0.89246pt too wide) in paragraph at lines 553--554 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][] []disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/ @@ -8773,17 +8830,29 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine [][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ ][][]mpq[][][]class[][][]refine[][][]with[][][]congruence -[46] +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2018/09/03 v1.4i Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) +(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty +(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def))) +(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu Overfull \hbox (25.5616pt too wide) in paragraph at lines 607--608 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine [][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape @@ -8803,13 +8872,18 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simpli fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[] [][][]Shape[][][]mpq[][][]class[][][]simplify[][][]using[] -[47>] -Output written on refman.pdf (120 pages, 622279 bytes). -Transcript written on refman.log. -makeindex refman.idx - +[47))) +(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty Overfull \hbox (8.76266pt too wide) in paragraph at lines 667--668 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]uncons train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S @@ -8829,16 +8903,11 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]bounde d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape [][][]mpq[][][]class[][][]bounded[][][]affine[] -[48]This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). -Scanning input file refman.idx....done (1 entries accepted, 0 rejected). -Sorting entries...done (0 comparisons). -Generating output file refman.ind....done (5 lines written, 0 warnings). -Output written in refman.ind. -Transcript written in refman.ilg. -pdflatex refman -This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex) - restricted \write18 enabled. - +[48])) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def) Overfull \hbox (20.41315pt too wide) in paragraph at lines 703--704 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap @@ -8873,18 +8942,9 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove [][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape [][][]mpq[][][]class[][][]remove[][][]space[][][]dimensions -[49]entering extended mode -(./refman.tex -LaTeX2e <2018-12-01> -(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls -Document Class: article 2018/09/03 v1.4i Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) -(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty -(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) +[49] +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def Overfull \hbox (0.1827pt too wide) in paragraph at lines 745--746 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove [][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[ @@ -8919,24 +8979,10 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]extern al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ ]Shape[][][]mpq[][][]class[][][]external[][][]memory[] -[50 -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def]))) -(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) -(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu))) -(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) -(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty) +[50]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty) Overfull \hbox (12.81189pt too wide) in paragraph at lines 787--788 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]total[ ][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh @@ -8971,16 +9017,19 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] -[51)]) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +[51]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)) +(/build/ppl-1.2/doc/ppl.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty Overfull \hbox (23.22203pt too wide) in paragraph at lines 835--836 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/ @@ -9015,20 +9064,19 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C 76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ ]Shape[][][]mpq[][][]class[][][][]C[]C76[][][]extrapolation[] -[52]) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty -(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty) +[52 +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)]) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)) +Writing index file refman.idx +(./refman.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd) +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii Overfull \hbox (1.05347pt too wide) in paragraph at lines 877--878 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C 76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha @@ -9053,17 +9101,20 @@ []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class [][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[] -[53)] -(/build/ppl-1.2/doc/ppl.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -For additional information on amsmath, use the `?' option. -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty +[53 +[Loading MPS to PDF converter (version 2006.09.02).] +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty] +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) +(./refman.out) (./refman.out) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd) [1{/var/lib/texmf/fo +nts/map/pdftex/updmap/pdftex.map} Overfull \hbox (38.69156pt too wide) in paragraph at lines 919--920 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][ ][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap @@ -9108,23 +9159,30 @@ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][] []Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ ][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[] -[54)]) -Writing index file refman.idx -(./refman.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd) -(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty) -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(./refman.out) (./refman.out) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd) +[54 ] [2] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd)] [3 ] [4] (./refman.toc) [1 ] [2] (./index.tex) (./GPL.texpdfTeX warning (ext4): destination with the +same identifier (name{page.1}) has been already used, duplicate ignored + + \relax +l.22 + [1]pdfTeX warning (ext4): destination with the same identifier (name{page +.2}) has been already used, duplicate ignored + + \relax +l.58 + [2]pdfTeX warning (ext4): destination with the same identifier (name{page +.3}) has been already used, duplicate ignored + + \relax +l.84 + [3]pdfTeX warning (ext4): destination with the same identifier (name{page +.4}) has been already used, duplicate ignored + + \relax +l.121 + [4 Overfull \hbox (12.44334pt too wide) in paragraph at lines 973--974 []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][] []Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ @@ -9149,16 +9207,11 @@ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]affine[][][]ranking[][][]functions[] -[55] [1{/var/lib/texmf/fo -nts/map/pdftex/updmap/pdftex.map}) (./interfaceppl__BD__Shape__mpz__class__tag.tex ] [2] -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 ] [4] (./refman.toc) [1 ] [2] (./index.tex) (./GPL.texpdfTeX warning (ext4): destination with the -same identifier (name{page.1}) has been already used, duplicate ignored - - \relax -l.22 - [1] +[55] [5]] [6]) (./interfaceppl__BD__Shape__mpz__class__tag.tex [7] [8]) +Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 +\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n +/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] +[9] (./GFDL.tex [10] [11] Overfull \hbox (4.7421pt too wide) in paragraph at lines 19--21 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] class[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shap @@ -9214,98 +9267,11 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]com plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[] -[56pdfTeX warning (ext4): destination with the same identifier (name{page -.2}) has been already used, duplicate ignored - - \relax -l.58 - [2]pdfTeX warning (ext4): destination with the same identifier (name{page -.3}) has been already used, duplicate ignored - - \relax -l.84 - [3]]pdfTeX warning (ext4): destination with the same identifier (name{page -.4}) has been already used, duplicate ignored - - \relax -l.121 - [4] [5] [6] [7] [8]) -Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 -\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n -/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] -[9] (./GFDL.tex [10] [11] [12 -Overfull \hbox (17.04158pt too wide) in paragraph at lines 47--49 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][] -[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[] - -Overfull \hbox (17.60164pt too wide) in paragraph at lines 49--51 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][] -[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[] - -Overfull \hbox (5.02197pt too wide) in paragraph at lines 53--55 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][ -]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp -h, [][]ppl[] - -Overfull \hbox (8.06145pt too wide) in paragraph at lines 57--59 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp -z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (8.3715pt too wide) in paragraph at lines 59--61 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m -pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (24.44096pt too wide) in paragraph at lines 67--69 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp -z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] - -Overfull \hbox (37.7416pt too wide) in paragraph at lines 69--71 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]get[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp -z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] - -Overfull \hbox (0.84119pt too wide) in paragraph at lines 71--73 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (7.4915pt too wide) in paragraph at lines 73--75 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (5.00137pt too wide) in paragraph at lines 97--99 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap -e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[] - -Overfull \hbox (14.09169pt too wide) in paragraph at lines 97--99 -[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C -oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][] -[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera -tor[] - -Overfull \hbox (3.34132pt too wide) in paragraph at lines 99--101 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap -e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[] - -Overfull \hbox (14.09169pt too wide) in paragraph at lines 99--101 -[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C -oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][] -[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera -tor[] -[57] +[56 [12]] Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 \OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise com-bine any sec-tions En-ti-tled "[]Acknowledgements", -[13])] (./PI_SI_Features.tex [14] +[13]) (./PI_SI_Features.tex [14] Underfull \hbox (badness 10000) in paragraph at lines 19--20 @@ -9401,87 +9367,75 @@ Underfull \hbox (badness 10000) in paragraph at lines 374--375 -[20 -Overfull \hbox (13.03139pt too wide) in paragraph at lines 103--105 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const -[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] - -Overfull \hbox (13.83092pt too wide) in paragraph at lines 105--107 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]strictly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][] -ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] - -Overfull \hbox (12.44106pt too wide) in paragraph at lines 107--109 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ( -[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] - -Overfull \hbox (5.2515pt too wide) in paragraph at lines 109--111 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]equals[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const[] -[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] +[20] +Overfull \hbox (17.04158pt too wide) in paragraph at lines 47--49 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][] +[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[] -Overfull \hbox (11.36208pt too wide) in paragraph at lines 115--117 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class -[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] +Overfull \hbox (17.60164pt too wide) in paragraph at lines 49--51 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][] +[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[] -Overfull \hbox (1.95134pt too wide) in paragraph at lines 117--119 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas -s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] +Overfull \hbox (5.02197pt too wide) in paragraph at lines 53--55 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][ +]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp +h, [][]ppl[] -Overfull \hbox (15.25197pt too wide) in paragraph at lines 119--121 +Overfull \hbox (8.06145pt too wide) in paragraph at lines 57--59 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas -s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] +[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp +z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] -Overfull \hbox (27.77104pt too wide) in paragraph at lines 121--123 +Overfull \hbox (8.3715pt too wide) in paragraph at lines 59--61 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m -pz[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] +[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m +pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] -Overfull \hbox (11.10129pt too wide) in paragraph at lines 129--131 +Overfull \hbox (24.44096pt too wide) in paragraph at lines 67--69 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] +[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp +z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] -Overfull \hbox (4.72157pt too wide) in paragraph at lines 133--135 +Overfull \hbox (37.7416pt too wide) in paragraph at lines 69--71 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]cl -ass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] +[]get[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp +z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] -Overfull \hbox (11.64148pt too wide) in paragraph at lines 135--137 +Overfull \hbox (0.84119pt too wide) in paragraph at lines 71--73 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]c -lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] +[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] -Overfull \hbox (10.81128pt too wide) in paragraph at lines 137--139 +Overfull \hbox (7.4915pt too wide) in paragraph at lines 73--75 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[] -[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] +[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] -Overfull \hbox (4.5419pt too wide) in paragraph at lines 139--141 +Overfull \hbox (5.00137pt too wide) in paragraph at lines 97--99 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][ -][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] +[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap +e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[] -Overfull \hbox (10.4113pt too wide) in paragraph at lines 141--143 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]simplify[][][]using[][][]context[][][]assign[][] ([][]ppl[][][][]B[]D[][][][] -Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] +Overfull \hbox (14.09169pt too wide) in paragraph at lines 97--99 +[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C +oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][] +[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera +tor[] -Overf]ull \hbox (4.47188pt too wide) in paragraph at lines 153--155 +Overfull \hbox (3.34132pt too wide) in paragraph at lines 99--101 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz -[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] +[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap +e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[] -Overfull \hbox (7.27184pt too wide) in paragraph at lines 153--155 -[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr -ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t -[][] ub, [][]ppl[][][]const[][][][]Coefficient[] -[58] +Overfull \hbox (14.09169pt too wide) in paragraph at lines 99--101 +[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C +oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][] +[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera +tor[] +[57 Underfull \hbox (badness 10000) in paragraph at lines 379--380 @@ -9559,7 +9513,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 439--440 -[21] +[21]] Underfull \hbox (badness 10000) in paragraph at lines 444--445 @@ -9594,79 +9548,6 @@ Underfull \hbox (badness 10000) in paragraph at lines 484--485 [22] -Overfull \hbox (17.24178pt too wide) in paragraph at lines 155--157 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][] -mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (7.27184pt too wide) in paragraph at lines 155--157 -[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr -ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t -[][] ub, [][]ppl[][][]const[][][][]Coefficient[] - -Overfull \hbox (16.12138pt too wide) in paragraph at lines 157--159 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ -]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (28.89128pt too wide) in paragraph at lines 159--161 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[] -[][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (1.94151pt too wide) in paragraph at lines 161--163 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D -[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (15.92157pt too wide) in paragraph at lines 161--163 -[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum - [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons -t[][][][]Linear[][][][]Expression[] - -Overfull \hbox (14.71141pt too wide) in paragraph at lines 163--165 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B -[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (15.92157pt too wide) in paragraph at lines 163--165 -[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum - [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons -t[][][][]Linear[][][][]Expression[] - -Overfull \hbox (8.31177pt too wide) in paragraph at lines 165--167 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[] -[][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (9.42162pt too wide) in paragraph at lines 167--169 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D -[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (20.53154pt too wide) in paragraph at lines 169--171 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][] -mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (4.41182pt too wide) in paragraph at lines 171--173 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][ -]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] - -Overfull \hbox (15.6817pt too wide) in paragraph at lines 173--175 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m -pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (6.95146pt too wide) in paragraph at lines 175--177 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp -z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] - -Overfull \hbox (8.06145pt too wide) in paragraph at lines 177--179 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]map[] Overfull \hbox (62.5953pt too wide) in paragraph at lines 504--505 []\OT1/pcr/m/n/10 ppl[][][][]P[]I[]P[][][][]Problem[][][]get[][][]control[][][] parameter(+[]Handle, +[]Control[][][][]Parameter[][][][]Name, ?Control[] @@ -9695,39 +9576,87 @@ Underfull \hbox (badness 10000) in paragraph at lines 544--545 -[23]) (./configured_domains_predicates.tex [24][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz -[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] +[23]) (./configured_domains_predicates.tex [24] +Overfull \hbox (13.03139pt too wide) in paragraph at lines 103--105 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const +[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] -Overfull \hbox (2.76027pt too wide) in paragraph at lines 179--181 +Overfull \hbox (13.83092pt too wide) in paragraph at lines 105--107 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][] -[][]Shape[][][]mpz[][][]class[][][]t[][] ph, int com- +[]strictly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][] +ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (0.11208pt too wide) in paragraph at lines 181--183 +Overfull \hbox (12.44106pt too wide) in paragraph at lines 107--109 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B -[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] +[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ( +[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (2.05135pt too wide) in paragraph at lines 183--185 +Overfull \hbox (5.2515pt too wide) in paragraph at lines 109--111 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[] -[][][]Shape[][][]mpz[][][]class[][][]t[][] ps, size[] +[]equals[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const[] +[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] -Overfull \hbox (3.23177pt too wide) in paragraph at lines 189--191 +Overfull \hbox (11.36208pt too wide) in paragraph at lines 115--117 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[] -D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] +[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class +[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] -Overfull \hbox (7.12152pt too wide) in paragraph at lines 195--197 +Overfull \hbox (1.95134pt too wide) in paragraph at lines 117--119 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh -ape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] +[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas +s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] -Overfull \hbox (1.66174pt too wide) in paragraph at lines 197--199 +Overfull \hbox (15.25197pt too wide) in paragraph at lines 119--121 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas -s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] -[59 +[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas +s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[] + +Overfull \hbox (27.77104pt too wide) in paragraph at lines 121--123 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m +pz[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[] + +Overfull \hbox (11.10129pt too wide) in paragraph at lines 129--131 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (4.72157pt too wide) in paragraph at lines 133--135 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]cl +ass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (11.64148pt too wide) in paragraph at lines 135--137 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]c +lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (10.81128pt too wide) in paragraph at lines 137--139 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[] +[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (4.5419pt too wide) in paragraph at lines 139--141 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][ +][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] + +Overfull \hbox (10.4113pt too wide) in paragraph at lines 141--143 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]simplify[][][]using[][][]context[][][]assign[][] ([][]ppl[][][][]B[]D[][][][] +Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] + +Overfull \hbox (4.47188pt too wide) in paragraph at lines 153--155 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz +[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (7.27184pt too wide) in paragraph at lines 153--155 +[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr +ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t +[][] ub, [][]ppl[][][]const[][][][]Coefficient[] +[58 Overfull \hbox (6.19531pt too wide) in paragraph at lines 31--33 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][]space[ ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[] @@ -9769,6 +9698,79 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]C[][ ][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, [26] +Overfull \hbox (17.24178pt too wide) in paragraph at lines 155--157 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][] +mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (7.27184pt too wide) in paragraph at lines 155--157 +[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr +ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t +[][] ub, [][]ppl[][][]const[][][][]Coefficient[] + +Overfull \hbox (16.12138pt too wide) in paragraph at lines 157--159 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ +]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (28.89128pt too wide) in paragraph at lines 159--161 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[] +[][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (1.94151pt too wide) in paragraph at lines 161--163 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D +[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] + +Overfull \hbox (15.92157pt too wide) in paragraph at lines 161--163 +[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum + [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons +t[][][][]Linear[][][][]Expression[] + +Overfull \hbox (14.71141pt too wide) in paragraph at lines 163--165 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B +[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] + +Overfull \hbox (15.92157pt too wide) in paragraph at lines 163--165 +[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum + [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons +t[][][][]Linear[][][][]Expression[] + +Overfull \hbox (8.31177pt too wide) in paragraph at lines 165--167 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[] +[][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] + +Overfull \hbox (9.42162pt too wide) in paragraph at lines 167--169 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D +[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] + +Overfull \hbox (20.53154pt too wide) in paragraph at lines 169--171 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][] +mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (4.41182pt too wide) in paragraph at lines 171--173 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][ +]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] + +Overfull \hbox (15.6817pt too wide) in paragraph at lines 173--175 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m +pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (6.95146pt too wide) in paragraph at lines 175--177 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp +z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] + +Overfull \hbox (8.06145pt too wide) in paragraph at lines 177--179 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]map[] Overfull \hbox (39.2138pt too wide) in paragraph at lines 125--127 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][] []C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, @@ -9831,76 +9833,39 @@ Overfull \hbox (1.39532pt too wide) in paragraph at lines 167--169 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][] []Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[] -[28] -Overfull \hbox (3.0714pt too wide) in paragraph at lines 203--205 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][ -] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[] +[28[][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz +[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[] -Overfull \hbox (5.7013pt too wide) in paragraph at lines 209--211 +Overfull \hbox (2.76027pt too wide) in paragraph at lines 179--181 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D -[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] - -Overfull \hbox (8.6716pt too wide) in paragraph at lines 217--219 -\OT1/ptm/bc/n/10 Shape[][][]mpz[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][ -][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1 -0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][] -Polyhedron[] - -Overfull \hbox (7.65157pt too wide) in paragraph at lines 221--223 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][] -[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 - pph, [][]ppl[] - -Overfull \hbox (14.30188pt too wide) in paragraph at lines 223--225 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][] -[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 - pph, [][]ppl[] - -Overfull \hbox (5.96178pt too wide) in paragraph at lines 225--227 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] -class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][ -][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 -pph, [][]ppl[] - -Overfull \hbox (9.70131pt too wide) in paragraph at lines 227--229 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][ -][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][ -][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] dst, [][]ppl[] +[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][] +[][]Shape[][][]mpz[][][]class[][][]t[][] ph, int com- -Overfull \hbox (14.56133pt too wide) in paragraph at lines 229--231 +Overfull \hbox (0.11208pt too wide) in paragraph at lines 181--183 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ -]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[] +[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B +[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[] -Overfull \hbox (27.86195pt too wide) in paragraph at lines 231--233 +Overfull \hbox (2.05135pt too wide) in paragraph at lines 183--185 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] -[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ -]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[] - -Overfull \hbox (7.33005pt too wide) in paragraph at lines 237--239 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ -][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons -t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, +[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[] +[][][]Shape[][][]mpz[][][]class[][][]t[][] ps, size[] -Overfull \hbox (5.11008pt too wide) in paragraph at lines 239--241 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ -][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons -t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, +Overfull \hbox (3.23177pt too wide) in paragraph at lines 189--191 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[] +D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] -Overfull \hbox (6.77972pt too wide) in paragraph at lines 241--243 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions -[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con -st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, +Overfull \hbox (7.12152pt too wide) in paragraph at lines 195--197 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh +ape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[] -Overfull \hbox (4.55975pt too wide) in paragraph at lines 243--245 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions -[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con -st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, -[60 +Overfull \hbox (1.66174pt too wide) in paragraph at lines 197--199 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas +s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[] +[59]] Overfull \hbox (15.79529pt too wide) in paragraph at lines 235--237 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]relation[][][]with[][][]constraint (+[]Handle, +[]Constraint, ?Relation[] @@ -9937,7 +9902,7 @@ Overfull \hbox (16.41379pt too wide) in paragraph at lines 267--269 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize(+[]Handle, +[]Lin[][][][] Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) -[29]] +[29] Overfull \hbox (10.9953pt too wide) in paragraph at lines 272--274 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]maximize[][][]with[][][]point(+[]H andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] @@ -9979,26 +9944,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]wrap[][][]assign(+[]Handle, +[]Lis t[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, [32] -Overfull \hbox (8.82309pt too wide) in paragraph at lines 283--284 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[ -]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][]space[] - -Overfull \hbox (20.58217pt too wide) in paragraph at lines 289--290 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B -[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]C[][][][]Polyhedron - -Overfull \hbox (2.72359pt too wide) in paragraph at lines 295--296 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][ -][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]N[]N[]C[] - -Overfull \hbox (9.33357pt too wide) in paragraph at lines 307--308 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B -[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Rational[] -[61 Overfull \hbox (29.6138pt too wide) in paragraph at lines 399--401 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]simplify[][][]using[][][]context[] [][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) @@ -10030,7 +9975,76 @@ Overfull \hbox (12.19531pt too wide) in paragraph at lines 433--435 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]H79[][][]extrapolat ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[] -[33]] +[33] +Overfull \hbox (3.0714pt too wide) in paragraph at lines 203--205 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][ +] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[] + +Overfull \hbox (5.7013pt too wide) in paragraph at lines 209--211 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D +[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[] + +Overfull \hbox (8.6716pt too wide) in paragraph at lines 217--219 +\OT1/ptm/bc/n/10 Shape[][][]mpz[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][ +][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1 +0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][] +Polyhedron[] + +Overfull \hbox (7.65157pt too wide) in paragraph at lines 221--223 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][] +[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 + pph, [][]ppl[] + +Overfull \hbox (14.30188pt too wide) in paragraph at lines 223--225 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][] +[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 + pph, [][]ppl[] + +Overfull \hbox (5.96178pt too wide) in paragraph at lines 225--227 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][] +class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][ +][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 +pph, [][]ppl[] + +Overfull \hbox (9.70131pt too wide) in paragraph at lines 227--229 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][ +][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][ +][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] dst, [][]ppl[] + +Overfull \hbox (14.56133pt too wide) in paragraph at lines 229--231 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ +]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[] + +Overfull \hbox (27.86195pt too wide) in paragraph at lines 231--233 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] +[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][ +]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[] + +Overfull \hbox (7.33005pt too wide) in paragraph at lines 237--239 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ +][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons +t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, + +Overfull \hbox (5.11008pt too wide) in paragraph at lines 239--241 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ +][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons +t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, + +Overfull \hbox (6.77972pt too wide) in paragraph at lines 241--243 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions +[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con +st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, + +Overfull \hbox (4.55975pt too wide) in paragraph at lines 243--245 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions +[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con +st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset, +[60 Overfull \hbox (12.19531pt too wide) in paragraph at lines 436--438 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[] @@ -10050,7 +10064,7 @@ Overfull \hbox (8.5953pt too wide) in paragraph at lines 448--450 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat ion[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[] -[34] +[34]] Overfull \hbox (11.6138pt too wide) in paragraph at lines 467--469 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]add[][][]space[][][]dimensions[][] []and[][][]project(+[]Handle, +[]Dimension[][][][]Type) @@ -10071,46 +10085,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][]space[][][]dimension( +[]Dimension[][][][]Type, +[]Universe[][][]or[][][][]Empty, -[] [35] -Overfull \hbox (0.25308pt too wide) in paragraph at lines 313--314 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl -[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] - -Overfull \hbox (1.37308pt too wide) in paragraph at lines 319--320 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl -[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] - -Overfull \hbox (8.17279pt too wide) in paragraph at lines 325--326 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in -t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] - -Overfull \hbox (9.29279pt too wide) in paragraph at lines 331--332 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in -t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] - -Overfull \hbox (21.6729pt too wide) in paragraph at lines 337--338 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 - int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] - -Overfull \hbox (9.23282pt too wide) in paragraph at lines 343--344 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr -/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[] - -Overfull \hbox (4.42291pt too wide) in paragraph at lines 349--350 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n -ew[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] - -Overfull \hbox (18.72281pt too wide) in paragraph at lines 355--356 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 - int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -[62] Underfull \hbox (badness 10000) in paragraph at lines 522--523 @@ -10130,6 +10104,26 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[] [][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, [36] +Overfull \hbox (8.82309pt too wide) in paragraph at lines 283--284 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[ +]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][]space[] + +Overfull \hbox (20.58217pt too wide) in paragraph at lines 289--290 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B +[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]C[][][][]Polyhedron + +Overfull \hbox (2.72359pt too wide) in paragraph at lines 295--296 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][ +][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]N[]N[]C[] + +Overfull \hbox (9.33357pt too wide) in paragraph at lines 307--308 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B +[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Rational[] +[61] Overfull \hbox (12.81381pt too wide) in paragraph at lines 567--569 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[] [][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, @@ -10177,41 +10171,46 @@ []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]minimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean, [39] -Overfull \hbox (6.76231pt too wide) in paragraph at lines 361--362 +Overfull \hbox (0.25308pt too wide) in paragraph at lines 313--314 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity( -)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[] +][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl +[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] -Overfull \hbox (7.88231pt too wide) in paragraph at lines 367--368 +Overfull \hbox (1.37308pt too wide) in paragraph at lines 319--320 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity( -)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[] +][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl +[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] -Overfull \hbox (0.28201pt too wide) in paragraph at lines 373--374 +Overfull \hbox (8.17279pt too wide) in paragraph at lines 325--326 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple -xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][] +][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in +t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (1.40201pt too wide) in paragraph at lines 379--380 +Overfull \hbox (9.29279pt too wide) in paragraph at lines 331--332 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple -xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][] +][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in +t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (42.25317pt too wide) in paragraph at lines 385--386 +Overfull \hbox (21.6729pt too wide) in paragraph at lines 337--338 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] -[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Constraint[] +][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 + int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (47.80324pt too wide) in paragraph at lines 391--392 +Overfull \hbox (9.23282pt too wide) in paragraph at lines 343--344 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] -[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Congruence[] +][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr +/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[] -Overfull \hbox (35.77324pt too wide) in paragraph at lines 397--398 +Overfull \hbox (4.42291pt too wide) in paragraph at lines 349--350 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][ -][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Generator[] -[63] +][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n +ew[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[] + +Overfull \hbox (18.72281pt too wide) in paragraph at lines 355--356 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 + int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] +[62] Overfull \hbox (7.24037pt too wide) in paragraph at lines 728--730 \OT1/ptm/m/it/10 Updates the grid ref-er-enced by \OT1/pcr/m/sl/10 Handle \OT1/ ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT1/pc @@ -10266,6 +10265,41 @@ []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]wrap[][][]assign(+[]Handle, +[]List[][][ ]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, [41] +Overfull \hbox (6.76231pt too wide) in paragraph at lines 361--362 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity( +)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (7.88231pt too wide) in paragraph at lines 367--368 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity( +)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[] + +Overfull \hbox (0.28201pt too wide) in paragraph at lines 373--374 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple +xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][] + +Overfull \hbox (1.40201pt too wide) in paragraph at lines 379--380 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple +xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][] + +Overfull \hbox (42.25317pt too wide) in paragraph at lines 385--386 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] +[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Constraint[] + +Overfull \hbox (47.80324pt too wide) in paragraph at lines 391--392 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] +[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Congruence[] + +Overfull \hbox (35.77324pt too wide) in paragraph at lines 397--398 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][ +][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Generator[] +[63] Overfull \hbox (6.19531pt too wide) in paragraph at lines 818--820 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][] []with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[] @@ -10328,7 +10362,7 @@ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][ ][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha pe[][][]mpz[][][]class[][][]get[][][]minimized[] -[64] +[64 Underfull \hbox (badness 10000) in paragraph at lines 919--920 @@ -10347,22 +10381,7 @@ Overfull \hbox (39.2138pt too wide) in paragraph at lines 952--954 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]N[]N []C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, -[44] -Overfull \hbox (2.03311pt too wide) in paragraph at lines 475--476 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai -ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ -][][]mpz[][][]class[][][]contains[][][]integer[][][] - -Overfull \hbox (1.48302pt too wide) in paragraph at lines 481--482 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][] -[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape -[][][]mpz[][][]class[][][]is[][][]topologically[][][] - -Overfull \hbox (28.93297pt too wide) in paragraph at lines 493--494 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]topolo -gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh -ape[][][]mpz[][][]class[][][]topological[][][]closure[] -[65] +[44]] Overfull \hbox (2.5953pt too wide) in paragraph at lines 955--957 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Grid [][][]with[][][]complexity(+[]Handle, +[]Complexity, -[] @@ -10411,36 +10430,21 @@ []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]upper[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) [46] -Overfull \hbox (6.69179pt too wide) in paragraph at lines 523--524 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]maximi -ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] -[]mpz[][][]class[][][]maximize[][][]with[][][]point ( - -Overfull \hbox (5.03162pt too wide) in paragraph at lines 529--530 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimi -ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] -[]mpz[][][]class[][][]minimize[][][]with[][][]point ( - -Overfull \hbox (3.67287pt too wide) in paragraph at lines 541--542 +Overfull \hbox (2.03311pt too wide) in paragraph at lines 475--476 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai -ns[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][ -][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contains[][][][]B[] - -Overfull \hbox (29.58234pt too wide) in paragraph at lines 547--548 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strict -ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/ -8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictly[] +ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ +][][]mpz[][][]class[][][]contains[][][]integer[][][] -Overfull \hbox (1.53247pt too wide) in paragraph at lines 553--554 +Overfull \hbox (1.48302pt too wide) in paragraph at lines 481--482 []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][] -[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/ -m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][][] +[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape +[][][]mpz[][][]class[][][]is[][][]topologically[][][] -Overfull \hbox (17.42293pt too wide) in paragraph at lines 559--560 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals -[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][ -]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals[][][][]B[]D[][][][]Shape[] -[66 +Overfull \hbox (28.93297pt too wide) in paragraph at lines 493--494 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]topolo +gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh +ape[][][]mpz[][][]class[][][]topological[][][]closure[] +[65] Overfull \hbox (35.6138pt too wide) in paragraph at lines 1064--1066 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]lower[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) @@ -10460,7 +10464,7 @@ Overfull \hbox (20.5953pt too wide) in paragraph at lines 1084--1086 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize[][][]with[][][]p oint(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] -[47]] +[47] Overfull \hbox (3.2138pt too wide) in paragraph at lines 1142--1144 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]unconstrain[][][]space[][ ][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var) @@ -10474,26 +10478,36 @@ []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[] [48] -Overfull \hbox (15.75171pt too wide) in paragraph at lines 595--596 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine -[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ -][][]mpz[][][]class[][][]refine[][][]with[][][]constraint +Overfull \hbox (6.69179pt too wide) in paragraph at lines 523--524 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]maximi +ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] +[]mpz[][][]class[][][]maximize[][][]with[][][]point ( -Overfull \hbox (21.30177pt too wide) in paragraph at lines 601--602 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine -[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ -][][]mpz[][][]class[][][]refine[][][]with[][][]congruence +Overfull \hbox (5.03162pt too wide) in paragraph at lines 529--530 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimi +ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][] +[]mpz[][][]class[][][]minimize[][][]with[][][]point ( -Overfull \hbox (24.4416pt too wide) in paragraph at lines 607--608 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine -[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape -[][][]mpz[][][]class[][][]refine[][][]with[][][]constraints +Overfull \hbox (3.67287pt too wide) in paragraph at lines 541--542 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai +ns[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][ +][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contains[][][][]B[] -Overfull \hbox (29.99167pt too wide) in paragraph at lines 613--614 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine -[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape -[][][]mpz[][][]class[][][]refine[][][]with[][][]congruences -[67] +Overfull \hbox (29.58234pt too wide) in paragraph at lines 547--548 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strict +ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/ +8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictly[] + +Overfull \hbox (1.53247pt too wide) in paragraph at lines 553--554 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][] +[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/ +m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][][] + +Overfull \hbox (17.42293pt too wide) in paragraph at lines 559--560 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals +[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][ +]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals[][][][]B[]D[][][][]Shape[] +[66 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1154--1156 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][] @@ -10517,22 +10531,7 @@ Overfull \hbox (53.6138pt too wide) in paragraph at lines 1169--1171 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]wrap[][][]assign(+[]Handl e, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, -[49] -Overfull \hbox (1.81296pt too wide) in paragraph at lines 649--650 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]upper[ -][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[] -D[][][][]Shape[][][]mpz[][][]class[][][]upper[][][]bound[] - -Overfull \hbox (19.83264pt too wide) in paragraph at lines 655--656 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simpli -fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[] -[][][]Shape[][][]mpz[][][]class[][][]simplify[][][]using[] - -Overfull \hbox (7.64267pt too wide) in paragraph at lines 667--668 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons -train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S -hape[][][]mpz[][][]class[][][]unconstrain[] -[68] +[49]] Overfull \hbox (39.2138pt too wide) in paragraph at lines 1191--1193 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]simplify[][][]using[][][] context[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) @@ -10558,6 +10557,26 @@ []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][] Underfull \vbox (badness 2503) has occurred while \output is active [50] +Overfull \hbox (15.75171pt too wide) in paragraph at lines 595--596 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine +[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ +][][]mpz[][][]class[][][]refine[][][]with[][][]constraint + +Overfull \hbox (21.30177pt too wide) in paragraph at lines 601--602 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine +[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ +][][]mpz[][][]class[][][]refine[][][]with[][][]congruence + +Overfull \hbox (24.4416pt too wide) in paragraph at lines 607--608 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine +[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape +[][][]mpz[][][]class[][][]refine[][][]with[][][]constraints + +Overfull \hbox (29.99167pt too wide) in paragraph at lines 613--614 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine +[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape +[][][]mpz[][][]class[][][]refine[][][]with[][][]congruences +[67 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1235--1237 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) @@ -10577,32 +10596,7 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 1250--1252 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]fold[][][]space[][][]dime nsions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]P[]P[] -[51] -Overfull \hbox (11.53256pt too wide) in paragraph at lines 673--674 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons -train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][] -Shape[][][]mpz[][][]class[][][]unconstrain[] - -Overfull \hbox (6.35191pt too wide) in paragraph at lines 691--692 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde -d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][ -][]mpz[][][]class[][][]bounded[][][]affine[][][]image - -Overfull \hbox (2.71329pt too wide) in paragraph at lines 697--698 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde -d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape -[][][]mpz[][][]class[][][]bounded[][][]affine[] - -Overfull \hbox (19.29315pt too wide) in paragraph at lines 703--704 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera -lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap -e[][][]mpz[][][]class[][][]generalized[][][]affine[] - -Overfull \hbox (1.87302pt too wide) in paragraph at lines 709--710 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera -lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S -hape[][][]mpz[][][]class[][][]generalized[] -[69 +[51]] Overfull \hbox (21.79532pt too wide) in paragraph at lines 1272--1274 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]Universe[] @@ -10637,7 +10631,22 @@ \OT1/ptm/m/it/10 Builds a new bd shape \OT1/pcr/m/sl/10 P[][][]1 \OT1/ptm/m/it/ 10 from the octagonal[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle \O T1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] -[52]] +[52] +Overfull \hbox (1.81296pt too wide) in paragraph at lines 649--650 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]upper[ +][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[] +D[][][][]Shape[][][]mpz[][][]class[][][]upper[][][]bound[] + +Overfull \hbox (19.83264pt too wide) in paragraph at lines 655--656 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simpli +fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[] +[][][]Shape[][][]mpz[][][]class[][][]simplify[][][]using[] + +Overfull \hbox (7.64267pt too wide) in paragraph at lines 667--668 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons +train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S +hape[][][]mpz[][][]class[][][]unconstrain[] +[68 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1323--1325 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[] @@ -10674,7 +10683,7 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complex ity(+[] -[53] +[53]] Overfull \hbox (4.99533pt too wide) in paragraph at lines 1387--1389 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictl y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, @@ -10712,41 +10721,6 @@ with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Congruence\OT1/ptm/m/it/10 . [54] -Overfull \hbox (20.93263pt too wide) in paragraph at lines 715--716 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera -lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][] -[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[] - -Overfull \hbox (35.19252pt too wide) in paragraph at lines 721--722 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera -lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][ -][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[] - -Overfull \hbox (16.66266pt too wide) in paragraph at lines 727--728 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ -][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][] -B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[] - -Overfull \hbox (18.69269pt too wide) in paragraph at lines 733--734 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ -][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][] -[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[] - -Overfull \hbox (36.4616pt too wide) in paragraph at lines 739--740 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove -[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape -[][][]mpz[][][]class[][][]remove[][][]space[][][]dimensions - -Overfull \hbox (1.9427pt too wide) in paragraph at lines 745--746 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove -[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[ -][][][]Shape[][][]mpz[][][]class[][][]remove[][][] - -Overfull \hbox (27.62158pt too wide) in paragraph at lines 751--752 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]expand -[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ -][][]mpz[][][]class[][][]expand[][][]space[][][]dimension -[70] Overfull \hbox (0.19531pt too wide) in paragraph at lines 1427--1429 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][] []minimized[][][]constraints(+[]Handle, ?Constraint[][][] @@ -10772,6 +10746,31 @@ e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, Underfull \vbox (badness 1259) has occurred while \output is active [55] +Overfull \hbox (11.53256pt too wide) in paragraph at lines 673--674 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons +train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][] +Shape[][][]mpz[][][]class[][][]unconstrain[] + +Overfull \hbox (6.35191pt too wide) in paragraph at lines 691--692 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde +d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][ +][]mpz[][][]class[][][]bounded[][][]affine[][][]image + +Overfull \hbox (2.71329pt too wide) in paragraph at lines 697--698 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde +d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape +[][][]mpz[][][]class[][][]bounded[][][]affine[] + +Overfull \hbox (19.29315pt too wide) in paragraph at lines 703--704 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera +lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap +e[][][]mpz[][][]class[][][]generalized[][][]affine[] + +Overfull \hbox (1.87302pt too wide) in paragraph at lines 709--710 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera +lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S +hape[][][]mpz[][][]class[][][]generalized[] +[69] Overfull \hbox (25.80045pt too wide) in paragraph at lines 1484--1486 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -10797,41 +10796,41 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[ ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[] [56] -Overfull \hbox (12.0115pt too wide) in paragraph at lines 757--758 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]fold[] -[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] -[][]mpz[][][]class[][][]fold[][][]space[][][]dimensions +Overfull \hbox (20.93263pt too wide) in paragraph at lines 715--716 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera +lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][] +[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[] -Overfull \hbox (9.68161pt too wide) in paragraph at lines 763--764 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]map[][ -][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][ -][]mpz[][][]class[][][]map[][][]space[][][]dimensions +Overfull \hbox (35.19252pt too wide) in paragraph at lines 721--722 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera +lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][ +][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[] -Overfull \hbox (2.12299pt too wide) in paragraph at lines 769--770 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[] -[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[ -]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[][][] +Overfull \hbox (16.66266pt too wide) in paragraph at lines 727--728 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ +][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][] +B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[] -Overfull \hbox (7.84299pt too wide) in paragraph at lines 775--776 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[] -[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][ -][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[] +Overfull \hbox (18.69269pt too wide) in paragraph at lines 733--734 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ +][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][] +[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[] -Overfull \hbox (11.11328pt too wide) in paragraph at lines 781--782 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]extern -al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ -]Shape[][][]mpz[][][]class[][][]external[][][]memory[] +Overfull \hbox (36.4616pt too wide) in paragraph at lines 739--740 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove +[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape +[][][]mpz[][][]class[][][]remove[][][]space[][][]dimensions -Overfull \hbox (11.6919pt too wide) in paragraph at lines 787--788 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]total[ -][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh -ape[][][]mpz[][][]class[][][]total[][][]memory[][][]in[][][]bytes +Overfull \hbox (1.9427pt too wide) in paragraph at lines 745--746 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove +[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[ +][][][]Shape[][][]mpz[][][]class[][][]remove[][][] -Overfull \hbox (0.64241pt too wide) in paragraph at lines 793--794 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H -[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int - ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[] -[71] +Overfull \hbox (27.62158pt too wide) in paragraph at lines 751--752 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]expand +[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[ +][][]mpz[][][]class[][][]expand[][][]space[][][]dimension +[70 Overfull \hbox (9.79532pt too wide) in paragraph at lines 1515--1517 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounded [][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[] @@ -10859,7 +10858,7 @@ Overfull \hbox (3.79532pt too wide) in paragraph at lines 1533--1535 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wrap[][ ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[] -[57] +[57]] Overfull \hbox (3.79532pt too wide) in paragraph at lines 1555--1557 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simplif y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -10889,41 +10888,41 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] [58] -Overfull \hbox (28.74266pt too wide) in paragraph at lines 799--800 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[ -][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][ -][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[][][]widening[] +Overfull \hbox (12.0115pt too wide) in paragraph at lines 757--758 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]fold[] +[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] +[][]mpz[][][]class[][][]fold[][][]space[][][]dimensions -Overfull \hbox (12.15302pt too wide) in paragraph at lines 805--806 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H -[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class[][][][]B[]H[]M[]Z05[][][]widening[] +Overfull \hbox (9.68161pt too wide) in paragraph at lines 763--764 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]map[][ +][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][ +][]mpz[][][]class[][][]map[][][]space[][][]dimensions -Overfull \hbox (7.27174pt too wide) in paragraph at lines 811--812 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[ -][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] -[][]mpz[][][]class[][][][]H79[][][]widening[][][]assign ( +Overfull \hbox (2.12299pt too wide) in paragraph at lines 769--770 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[] +[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[ +]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[][][] -Overfull \hbox (21.76277pt too wide) in paragraph at lines 817--818 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wideni -ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][] -[][]Shape[][][]mpz[][][]class[][][]widening[][][]assign[] +Overfull \hbox (7.84299pt too wide) in paragraph at lines 775--776 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[] +[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][ +][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[] -Overfull \hbox (0.72179pt too wide) in paragraph at lines 829--830 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] -\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] +Overfull \hbox (11.11328pt too wide) in paragraph at lines 781--782 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]extern +al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ +]Shape[][][]mpz[][][]class[][][]external[][][]memory[] -Overfull \hbox (22.10204pt too wide) in paragraph at lines 835--836 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/ -m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] +Overfull \hbox (11.6919pt too wide) in paragraph at lines 787--788 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]total[ +][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh +ape[][][]mpz[][][]class[][][]total[][][]memory[][][]in[][][]bytes -Overfull \hbox (1.88206pt too wide) in paragraph at lines 841--842 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p -cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[] -[72 +Overfull \hbox (0.64241pt too wide) in paragraph at lines 793--794 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H +[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int + ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[] +[71] Overfull \hbox (31.39532pt too wide) in paragraph at lines 1589--1591 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] @@ -10948,7 +10947,7 @@ Overfull \hbox (27.79532pt too wide) in paragraph at lines 1620--1622 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][] []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[] -[59]] +[59] Overfull \hbox (10.41382pt too wide) in paragraph at lines 1623--1625 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove[ ][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var @@ -10979,36 +10978,41 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) [60] -Overfull \hbox (27.5924pt too wide) in paragraph at lines 847--848 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl -[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] +Overfull \hbox (28.74266pt too wide) in paragraph at lines 799--800 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[ +][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][ +][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[][][]widening[] -Overfull \hbox (4.81262pt too wide) in paragraph at lines 853--854 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B -[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] +Overfull \hbox (12.15302pt too wide) in paragraph at lines 805--806 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H +[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class[][][][]B[]H[]M[]Z05[][][]widening[] -Overfull \hbox (11.47267pt too wide) in paragraph at lines 859--860 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite -d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][] -[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] +Overfull \hbox (7.27174pt too wide) in paragraph at lines 811--812 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[ +][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] +[][]mpz[][][]class[][][][]H79[][][]widening[][][]assign ( -Overfull \hbox (2.84262pt too wide) in paragraph at lines 865--866 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C -76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int -ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[] +Overfull \hbox (21.76277pt too wide) in paragraph at lines 817--818 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wideni +ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][] +[][]Shape[][][]mpz[][][]class[][][]widening[][][]assign[] -Overfull \hbox (28.75323pt too wide) in paragraph at lines 871--872 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C -76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ -]Shape[][][]mpz[][][]class[][][][]C[]C76[][][]extrapolation[] +Overfull \hbox (0.72179pt too wide) in paragraph at lines 829--830 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] +\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[] -Overfull \hbox (19.75198pt too wide) in paragraph at lines 877--878 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C -76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha -pe[][][]mpz[][][]class[][][][]C[]C76[][][]narrowing[][][]assign -[73] +Overfull \hbox (22.10204pt too wide) in paragraph at lines 835--836 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/ +m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] + +Overfull \hbox (1.88206pt too wide) in paragraph at lines 841--842 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p +cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[] +[72] Underfull \hbox (badness 10000) in paragraph at lines 1675--1676 @@ -11079,41 +11083,36 @@ ]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][ ]1, +[]Handle[] [62] -Overfull \hbox (14.6529pt too wide) in paragraph at lines 895--896 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[ -][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] - -Overfull \hbox (20.20296pt too wide) in paragraph at lines 901--902 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[ -][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] +Overfull \hbox (27.5924pt too wide) in paragraph at lines 847--848 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl +[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] -Overfull \hbox (12.97296pt too wide) in paragraph at lines 907--908 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ -][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[] -[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] +Overfull \hbox (4.81262pt too wide) in paragraph at lines 853--854 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B +[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] -Overfull \hbox (1.47284pt too wide) in paragraph at lines 913--914 - []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class -[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int -ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] +Overfull \hbox (11.47267pt too wide) in paragraph at lines 859--860 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite +d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][] +[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[] -Overfull \hbox (37.57156pt too wide) in paragraph at lines 919--920 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ -][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap -e[][][]mpz[][][]class[][][]add[][][]recycled[][][]constraints +Overfull \hbox (2.84262pt too wide) in paragraph at lines 865--866 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C +76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int +ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[] -Overfull \hbox (43.12163pt too wide) in paragraph at lines 925--926 - []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ -][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap -e[][][]mpz[][][]class[][][]add[][][]recycled[][][]congruences +Overfull \hbox (28.75323pt too wide) in paragraph at lines 871--872 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C +76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][ +]Shape[][][]mpz[][][]class[][][][]C[]C76[][][]extrapolation[] -Overfull \hbox (5.01176pt too wide) in paragraph at lines 931--932 - []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te -st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( -[74 +Overfull \hbox (19.75198pt too wide) in paragraph at lines 877--878 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C +76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha +pe[][][]mpz[][][]class[][][][]C[]C76[][][]narrowing[][][]assign +[73] Overfull \hbox (56.5953pt too wide) in paragraph at lines 1794--1796 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relatio n[][][]with[][][]constraint(+[]Handle, +[]Constraint, ?Relation[] @@ -11156,7 +11155,7 @@ Overfull \hbox (57.2138pt too wide) in paragraph at lines 1820--1822 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz e(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) -[63]] +[63] Overfull \hbox (0.81381pt too wide) in paragraph at lines 1825--1827 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]maximiz e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, @@ -11165,51 +11164,41 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, [64] -Overfull \hbox (3.34184pt too wide) in paragraph at lines 937--938 - []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te -st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( - -Overfull \hbox (7.36293pt too wide) in paragraph at lines 943--944 - []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M -[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][] -[]one[][][]affine[][][]ranking[][][]function[] - -Overfull \hbox (5.69301pt too wide) in paragraph at lines 949--950 - []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P -[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][] -[]one[][][]affine[][][]ranking[][][]function[] +Overfull \hbox (14.6529pt too wide) in paragraph at lines 895--896 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[ +][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] -Overfull \hbox (11.61273pt too wide) in paragraph at lines 955--956 - []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] -M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][ -][]all[][][]affine[][][]ranking[][][]functions[] +Overfull \hbox (20.20296pt too wide) in paragraph at lines 901--902 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[ +][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] -Overfull \hbox (9.94281pt too wide) in paragraph at lines 961--962 - []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] -P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][ -][]all[][][]affine[][][]ranking[][][]functions[] +Overfull \hbox (12.97296pt too wide) in paragraph at lines 907--908 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][ +][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[] +[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[] -Overfull \hbox (12.99327pt too wide) in paragraph at lines 967--968 - []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ -][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] +Overfull \hbox (1.47284pt too wide) in paragraph at lines 913--914 + []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class +[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int +ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] -Overfull \hbox (11.32335pt too wide) in paragraph at lines 973--974 - []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][] -[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ -][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] +Overfull \hbox (37.57156pt too wide) in paragraph at lines 919--920 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ +][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap +e[][][]mpz[][][]class[][][]add[][][]recycled[][][]constraints -Overfull \hbox (15.96294pt too wide) in paragraph at lines 979--980 - []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M -[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int -ppl[][][]one[][][]affine[][][]ranking[][][]function[] +Overfull \hbox (43.12163pt too wide) in paragraph at lines 925--926 + []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][ +][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap +e[][][]mpz[][][]class[][][]add[][][]recycled[][][]congruences -Overfull \hbox (14.29301pt too wide) in paragraph at lines 985--986 - []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P -[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int -ppl[][][]one[][][]affine[][][]ranking[][][]function[] -[75] +Overfull \hbox (5.01176pt too wide) in paragraph at lines 931--932 + []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te +st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( +[74 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1866--1868 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -11250,17 +11239,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 1906--1908 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[] -[65] -Overfull \hbox (20.21274pt too wide) in paragraph at lines 991--992 - []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] -M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int - ppl[][][]all[][][]affine[][][]ranking[][][]functions[] - -Overfull \hbox (18.54282pt too wide) in paragraph at lines 997--998 - []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] -P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int - ppl[][][]all[][][]affine[][][]ranking[][][]functions[] -) (./interfaceppl__Coefficient__tag.tex [76 +[65]] Overfull \hbox (19.39532pt too wide) in paragraph at lines 1909--1911 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[] @@ -11280,8 +11259,52 @@ Overfull \hbox (0.81381pt too wide) in paragraph at lines 1940--1942 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]linear[ ][][]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[66]]) -(./interfaceppl__Congruence__System__const__iterator__tag.tex +[66] +Overfull \hbox (3.34184pt too wide) in paragraph at lines 937--938 + []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te +st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( + +Overfull \hbox (7.36293pt too wide) in paragraph at lines 943--944 + []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M +[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][] +[]one[][][]affine[][][]ranking[][][]function[] + +Overfull \hbox (5.69301pt too wide) in paragraph at lines 949--950 + []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P +[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][] +[]one[][][]affine[][][]ranking[][][]function[] + +Overfull \hbox (11.61273pt too wide) in paragraph at lines 955--956 + []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] +M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][ +][]all[][][]affine[][][]ranking[][][]functions[] + +Overfull \hbox (9.94281pt too wide) in paragraph at lines 961--962 + []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] +P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][ +][]all[][][]affine[][][]ranking[][][]functions[] + +Overfull \hbox (12.99327pt too wide) in paragraph at lines 967--968 + []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ +][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] + +Overfull \hbox (11.32335pt too wide) in paragraph at lines 973--974 + []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][] +[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[ +][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[] + +Overfull \hbox (15.96294pt too wide) in paragraph at lines 979--980 + []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M +[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int +ppl[][][]one[][][]affine[][][]ranking[][][]function[] + +Overfull \hbox (14.29301pt too wide) in paragraph at lines 985--986 + []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P +[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int +ppl[][][]one[][][]affine[][][]ranking[][][]function[] +[75] Overfull \hbox (31.39532pt too wide) in paragraph at lines 1947--1949 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H[ ]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Ha @@ -11319,7 +11342,7 @@ Overfull \hbox (27.79532pt too wide) in paragraph at lines 1980--1982 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited [][][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[] -[67] [77] +[67] Overfull \hbox (15.79532pt too wide) in paragraph at lines 1999--2001 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][] []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[] @@ -11346,6 +11369,16 @@ ][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[] [68] +Overfull \hbox (20.21274pt too wide) in paragraph at lines 991--992 + []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] +M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int + ppl[][][]all[][][]affine[][][]ranking[][][]functions[] + +Overfull \hbox (18.54282pt too wide) in paragraph at lines 997--998 + []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][] +P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int + ppl[][][]all[][][]affine[][][]ranking[][][]functions[] +) (./interfaceppl__Coefficient__tag.tex [76 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2036--2038 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[] @@ -11372,7 +11405,7 @@ Overfull \hbox (9.79532pt too wide) in paragraph at lines 2066--2068 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]N[]N[]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] -[69] +[69]] Overfull \hbox (1.39532pt too wide) in paragraph at lines 2072--2074 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Rational[][][][]Box(+[]Handle[][][]1, -[]Handle[][][] @@ -11435,22 +11468,8 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]co mplexity(+[] -[70 -Overfull \hbox (1.72762pt too wide) in paragraph at lines 22--24 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[] -[][]const[][][]iterator[][][]from[][][][]Congruence[][][][]System[][][]const[][ -][]iterator[][] ([][]ppl[] - -Overfull \hbox (2.27753pt too wide) in paragraph at lines 25--27 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Congruence[][][][]System[] -[][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System -[][][]const[][][]iterator[] - -Overfull \hbox (17.54732pt too wide) in paragraph at lines 38--40 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]const[][ -][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Congruence[][][ -][]System[][][]const[][][]iterator[] -) (./interfaceppl__Congruence__System__tag.tex] [78] +[70]) +(./interfaceppl__Congruence__System__const__iterator__tag.tex [77] Overfull \hbox (62.59534pt too wide) in paragraph at lines 2108--2110 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co @@ -11515,7 +11534,22 @@ Overfull \hbox (36.19531pt too wide) in paragraph at lines 2207--2209 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ma ximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] -[72] +[72 +Overfull \hbox (1.72762pt too wide) in paragraph at lines 22--24 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[] +[][]const[][][]iterator[][][]from[][][][]Congruence[][][][]System[][][]const[][ +][]iterator[][] ([][]ppl[] + +Overfull \hbox (2.27753pt too wide) in paragraph at lines 25--27 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Congruence[][][][]System[] +[][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System +[][][]const[][][]iterator[] + +Overfull \hbox (17.54732pt too wide) in paragraph at lines 38--40 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]const[][ +][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Congruence[][][ +][]System[][][]const[][][]iterator[] +) (./interfaceppl__Congruence__System__tag.tex] [78 Overfull \hbox (36.19531pt too wide) in paragraph at lines 2212--2214 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]mi nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] @@ -11539,32 +11573,7 @@ Overfull \hbox (23.6138pt too wide) in paragraph at lines 2251--2253 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re fine[][][]with[][][]congruence( +[]Handle, +[]Congruence) -[73] -Overfull \hbox (7.63844pt too wide) in paragraph at lines 25--27 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Congruence[][][][]System[][][ -]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]Sys -tem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[] - -Overfull \hbox (9.56808pt too wide) in paragraph at lines 28--30 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[] -[][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][] -System[][][]t[][] dst, [][]ppl[] - -Overfull \hbox (10.67792pt too wide) in paragraph at lines 38--40 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]space[][ -][]dimension[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] - cs, [][]ppl[][][]dimension[] - -Overfull \hbox (4.96837pt too wide) in paragraph at lines 44--46 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]begin[][ -] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] cs, [][]ppl[][ -][][]Congruence[][][][]System[] - -Overfull \hbox (23.98816pt too wide) in paragraph at lines 60--62 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]insert[] -[][][]Congruence[][] ([][]ppl[][][][]Congruence[][][][]System[][][]t[][] cs, [] -[]ppl[][][]const[][][][]Congruence[] -[79] +[73]] Overfull \hbox (32.5953pt too wide) in paragraph at lines 2254--2256 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re fine[][][]with[][][]constraints( +[]Handle, +[]Constraint[] @@ -11613,7 +11622,32 @@ Overfull \hbox (15.79532pt too wide) in paragraph at lines 2291--2293 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge neralized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[] -[74) (./interfaceppl__Congruence__tag.tex] +[74] +Overfull \hbox (7.63844pt too wide) in paragraph at lines 25--27 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Congruence[][][][]System[][][ +]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]Sys +tem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[] + +Overfull \hbox (9.56808pt too wide) in paragraph at lines 28--30 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[] +[][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][] +System[][][]t[][] dst, [][]ppl[] + +Overfull \hbox (10.67792pt too wide) in paragraph at lines 38--40 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]space[][ +][]dimension[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] + cs, [][]ppl[][][]dimension[] + +Overfull \hbox (4.96837pt too wide) in paragraph at lines 44--46 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]begin[][ +] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] cs, [][]ppl[][ +][][]Congruence[][][][]System[] + +Overfull \hbox (23.98816pt too wide) in paragraph at lines 60--62 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]insert[] +[][][]Congruence[][] ([][]ppl[][][][]Congruence[][][][]System[][][]t[][] cs, [] +[]ppl[][][]const[][][][]Congruence[] +[79]) (./interfaceppl__Congruence__tag.tex Overfull \hbox (12.81381pt too wide) in paragraph at lines 2294--2296 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge neralized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, @@ -11634,11 +11668,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]li near[][][]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[] [75] -Overfull \hbox (15.0983pt too wide) in paragraph at lines 41--43 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][]coefficient[][] ([][]p -pl[][][]const[][][][]Congruence[][][]t[][] c, [][]ppl[][][]dimension[][][]type[ -][] var, [][]ppl[][][][]Coefficient[] -[80]) (./interfaceppl__Constraint__System__const__iterator__tag.tex Overfull \hbox (9.79532pt too wide) in paragraph at lines 2329--2331 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][] B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[] @@ -11681,26 +11710,11 @@ C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[] Underfull \vbox (badness 3058) has occurred while \output is active [76] -Overfull \hbox (25.10667pt too wide) in paragraph at lines 19--21 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][ -]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][][] -iterator[][] ([][]ppl[][][][]Constraint[] - -Overfull \hbox (33.69638pt too wide) in paragraph at lines 22--24 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Constraint[][][][]System[] -[][]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][ -][]iterator[][] ([][]ppl[][][][]Constraint[] - -Overfull \hbox (11.7268pt too wide) in paragraph at lines 32--34 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][ -][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Constraint[][][][]S -ystem[][][]const[][][]iterator[] - -Overfull \hbox (4.24669pt too wide) in paragraph at lines 38--40 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][ -][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Constraint[][][ -][]System[][][]const[][][]iterator[] -[81]) (./interfaceppl__Constraint__System__tag.tex +Overfull \hbox (15.0983pt too wide) in paragraph at lines 41--43 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][]coefficient[][] ([][]p +pl[][][]const[][][][]Congruence[][][]t[][] c, [][]ppl[][][]dimension[][][]type[ +][] var, [][]ppl[][][][]Coefficient[] +[80]) (./interfaceppl__Constraint__System__const__iterator__tag.tex Overfull \hbox (3.79532pt too wide) in paragraph at lines 2369--2371 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ad d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[] @@ -11725,17 +11739,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]fo ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[] [77] -Overfull \hbox (24.61707pt too wide) in paragraph at lines 22--24 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][ -]from[][][][]Constraint[][] ([][]ppl[][][][]Constraint[][][][]System[][][]t[][] - $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[][][]const[][][][]Constrai -nt[] - -Overfull \hbox (2.09717pt too wide) in paragraph at lines 50--52 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]end[][] -([][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] cs, [][]ppl[][][ -][]Constraint[][][][]System[][][]const[] -[82] Overfull \hbox (15.79532pt too wide) in paragraph at lines 2406--2408 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[] @@ -11776,7 +11779,27 @@ \OT1/ptm/m/it/10 Builds a new oc-tag-o-nal shape \OT1/pcr/m/sl/10 P[][][]1 \OT1 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] -[78]) (./interfaceppl__Constraint__tag.tex +[78] +Overfull \hbox (25.10667pt too wide) in paragraph at lines 19--21 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][ +]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][][] +iterator[][] ([][]ppl[][][][]Constraint[] + +Overfull \hbox (33.69638pt too wide) in paragraph at lines 22--24 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Constraint[][][][]System[] +[][]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][ +][]iterator[][] ([][]ppl[][][][]Constraint[] + +Overfull \hbox (11.7268pt too wide) in paragraph at lines 32--34 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][ +][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Constraint[][][][]S +ystem[][][]const[][][]iterator[] + +Overfull \hbox (4.24669pt too wide) in paragraph at lines 38--40 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][ +][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Constraint[][][ +][]System[][][]const[][][]iterator[] +[81]) (./interfaceppl__Constraint__System__tag.tex Overfull \hbox (28.99533pt too wide) in paragraph at lines 2448--2450 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]H @@ -11831,11 +11854,6 @@ s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co mplexity(+[] [79] -Overfull \hbox (1.5281pt too wide) in paragraph at lines 16--18 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][] ([][]ppl[][][] -[]Constraint[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pc, [][]ppl[][][ -]const[][][][]Linear[][][][]Expression[][][]t[][] le, enum [][]ppl[][][]enum[] -[83] Overfull \hbox (9.79532pt too wide) in paragraph at lines 2518--2520 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]co ntains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[] @@ -11860,11 +11878,17 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re lation[][][]with[][][]constraint(+[]Handle, +[]Constraint, [80] -Overfull \hbox (1.79767pt too wide) in paragraph at lines 44--46 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][]coefficient[][] ([][]p -pl[][][]const[][][][]Constraint[][][]t[][] c, [][]ppl[][][]dimension[][][]type[ -][] var, [][]ppl[][][][]Coefficient[] -) (./interfaceppl__Constraints__Product__C__Polyhedron__Grid__tag.tex +Overfull \hbox (24.61707pt too wide) in paragraph at lines 22--24 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][ +]from[][][][]Constraint[][] ([][]ppl[][][][]Constraint[][][][]System[][][]t[][] + $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[][][]const[][][][]Constrai +nt[] + +Overfull \hbox (2.09717pt too wide) in paragraph at lines 50--52 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]end[][] +([][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] cs, [][]ppl[][][ +][]Constraint[][][][]System[][][]const[] +[82] Overfull \hbox (17.6138pt too wide) in paragraph at lines 2549--2551 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re lation[][][]with[][][]generator(+[]Handle, +[]Generator, @@ -11904,37 +11928,7 @@ Overfull \hbox (36.19531pt too wide) in paragraph at lines 2582--2584 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]mi nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] -[81] -Overfull \hbox (14.4614pt too wide) in paragraph at lines 15--17 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Constraints[][][][]Product[][ -][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Constraints -[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (16.42136pt too wide) in paragraph at lines 17--19 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension[][] ([][] -ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (5.32178pt too wide) in paragraph at lines 19--21 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][] ([][ -]ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (19.76172pt too wide) in paragraph at lines 21--23 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][ -] ([][]ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (27.2516pt too wide) in paragraph at lines 23--25 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][] ([][]ppl[][][][]Con -straints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (3.10153pt too wide) in paragraph at lines 25--27 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][] ([][ -]ppl[][][][]Constraints[][][][]Product[] -[84] +[81]) (./interfaceppl__Constraint__tag.tex Overfull \hbox (3.2138pt too wide) in paragraph at lines 2587--2589 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ex ternal[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) @@ -11963,80 +11957,11 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re fine[][][]with[][][]congruences( +[]Handle, +[]Congruence[] [82] -Overfull \hbox (0.58157pt too wide) in paragraph at lines 29--31 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] -[][]class[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (27.2312pt too wide) in paragraph at lines 31--33 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] -mpz[][][]class[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (27.79126pt too wide) in paragraph at lines 33--35 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] -mpq[][][]class[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (0.26022pt too wide) in paragraph at lines 35--37 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[] -[][][]C[][][][]Polyhedron[][][][]Grid[][] - -Overfull \hbox (5.4219pt too wide) in paragraph at lines 35--37 -\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol -yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][] -ppl[][][]const[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (40.44136pt too wide) in paragraph at lines 37--39 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][][]wit -h[][][]complexity[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (5.72202pt too wide) in paragraph at lines 39--41 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][ -][]with[][][]complexity[][] ([][]ppl[] - -Overfull \hbox (2.39153pt too wide) in paragraph at lines 41--43 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][][]with[][][]complexi -ty[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (38.22112pt too wide) in paragraph at lines 43--45 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][][]wit -h[][][]complexity[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (20.69154pt too wide) in paragraph at lines 45--47 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[] -[][]class[][][]with[][][]complexity[][] ([][]ppl[] - -Overfull \hbox (21.2516pt too wide) in paragraph at lines 47--49 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] -[][]class[][][]with[][][]complexity[][] ([][]ppl[] - -Overfull \hbox (20.90985pt too wide) in paragraph at lines 49--51 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] -mpz[][][]class[][][]with[][][]complexity[][] - -Overfull \hbox (2.55026pt too wide) in paragraph at lines 49--51 -\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol -yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][] -ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, - int - -Overfull \hbox (21.46991pt too wide) in paragraph at lines 51--53 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] -mpq[][][]class[][][]with[][][]complexity[][] - -Overfull \hbox (3.11032pt too wide) in paragraph at lines 51--53 -\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol -yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/ +Overfull \hbox (1.5281pt too wide) in paragraph at lines 16--18 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][] ([][]ppl[][][] +[]Constraint[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pc, [][]ppl[][][ +]const[][][][]Linear[][][][]Expression[][][]t[][] le, enum [][]ppl[][][]enum[] +[83] Overfull \hbox (2.5953pt too wide) in paragraph at lines 2637--2639 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]un constrain[][][]space[][][]dimension(+[]Handle, +[]P[]P[] @@ -12085,46 +12010,12 @@ Overfull \hbox (24.81381pt too wide) in paragraph at lines 2667--2669 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]wr ap[][][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, -[83]bc/n/10 pph, [][] -ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, - int - -Overfull \hbox (9.24173pt too wide) in paragraph at lines 53--55 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[] -[][][]C[][][][]Polyhedron[][][][]Grid[] - -Overfull \hbox (16.57161pt too wide) in paragraph at lines 53--55 -[][]\OT1/ptm/bc/n/10 with[][][]complexity[][] ([][]ppl[][][][]Constraints[][][] -[]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^ -^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Constraints[][][][]Product[] - - -Overfull \hbox (23.66107pt too wide) in paragraph at lines 55--57 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] -[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraint[][][][]System[][] - ([][]ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (26.11101pt too wide) in paragraph at lines 65--67 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]relation[][][]with[][][][]Generator[][] ([][]ppl[ -][][]const[][][][]Constraints[][][][]Product[] - -Overfull \hbox (25.8513pt too wide) in paragraph at lines 69--71 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]empty[][] ([][]ppl[][][]const[][][][]Cons -traints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (34.3313pt too wide) in paragraph at lines 71--73 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]universe[][] ([][]ppl[][][]const[][][][]C -onstraints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (35.29152pt too wide) in paragraph at lines 73--75 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]bounded[][] ([][]ppl[][][]const[][][][]Co -nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] -[85] +[83] +Overfull \hbox (1.79767pt too wide) in paragraph at lines 44--46 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][]coefficient[][] ([][]p +pl[][][]const[][][][]Constraint[][][]t[][] c, [][]ppl[][][]dimension[][][]type[ +][] var, [][]ppl[][][][]Coefficient[] +) (./interfaceppl__Constraints__Product__C__Polyhedron__Grid__tag.tex Overfull \hbox (31.39532pt too wide) in paragraph at lines 2686--2688 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]up per[][][]bound[][][]assign[][][]if[][][]exact(+[]Handle[][][]1, +[]Handle[] @@ -12177,82 +12068,37 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 2723--2725 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[] -[85] -Overfull \hbox (22.80093pt too wide) in paragraph at lines 75--77 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]topologically[][][]closed[][] ([][]ppl[][ -][]const[][][][]Constraints[][][][]Product[] - -Overfull \hbox (31.95103pt too wide) in paragraph at lines 77--79 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]discrete[][] ([][]ppl[][][]const[][][][]C -onstraints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (11.9711pt too wide) in paragraph at lines 79--81 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]topological[][][]closure[][][]assign[][] ([][]ppl -[][][][]Constraints[][][][]Product[] - -Overfull \hbox (9.71191pt too wide) in paragraph at lines 81--83 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]bounds[][][]from[][][]above[][] ([][]ppl[][][]con -st[][][][]Constraints[][][][]Product[] - -Overfull \hbox (10.32164pt too wide) in paragraph at lines 83--85 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]bounds[][][]from[][][]below[][] ([][]ppl[][][]con -st[][][][]Constraints[][][][]Product[] - -Overfull \hbox (30.02118pt too wide) in paragraph at lines 85--87 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]maximize[][] ([][]ppl[][][]const[][][][]Constrain -ts[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (29.78001pt too wide) in paragraph at lines 85--87 -[][][]\OT1/ptm/bc/n/10 Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[][] -[][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]n, - [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]d, int $\OMS/cmsy/m/n/10 ^^C$\O -T1/ptm/bc/n/10 poptimum) - -Overfull \hbox (28.36113pt too wide) in paragraph at lines 87--89 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]minimize[][] ([][]ppl[][][]const[][][][]Constrain -ts[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (29.78001pt too wide) in paragraph at lines 87--89 -[][][]\OT1/ptm/bc/n/10 Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[][] -[][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]n, - [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]d, int $\OMS/cmsy/m/n/10 ^^C$\O -T1/ptm/bc/n/10 poptimum) - -Overfull \hbox (15.58107pt too wide) in paragraph at lines 89--91 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]maximize[][][]with[][][]point[][] ([][]ppl[][][]c -onst[][][][]Constraints[][][][]Product[] +[85 +Overfull \hbox (14.4614pt too wide) in paragraph at lines 15--17 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Constraints[][][][]Product[][ +][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Constraints +[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (3.36195pt too wide) in paragraph at lines 89--91 -[][][]\OT1/ptm/bc/n/10 C[][][][]Polyhedron[][][][]Grid[][][]t[][] ph, [][]ppl[] -[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic -ient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[] +Overfull \hbox (16.42136pt too wide) in paragraph at lines 17--19 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension[][] ([][] +ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (13.92102pt too wide) in paragraph at lines 91--93 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]minimize[][][]with[][][]point[][] ([][]ppl[][][]c -onst[][][][]Constraints[][][][]Product[] +Overfull \hbox (5.32178pt too wide) in paragraph at lines 19--21 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][] ([][ +]ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (3.36195pt too wide) in paragraph at lines 91--93 -[][][]\OT1/ptm/bc/n/10 C[][][][]Polyhedron[][][][]Grid[][][]t[][] ph, [][]ppl[] -[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic -ient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[] +Overfull \hbox (19.76172pt too wide) in paragraph at lines 21--23 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][ +] ([][]ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (21.13144pt too wide) in paragraph at lines 93--95 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[][][][ -]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[] +Overfull \hbox (27.2516pt too wide) in paragraph at lines 23--25 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][] ([][]ppl[][][][]Con +straints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (12.5711pt too wide) in paragraph at lines 95--97 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedro +Overfull \hbox (3.10153pt too wide) in paragraph at lines 25--27 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][] ([][ +]ppl[][][][]Constraints[][][][]Product[] +[84]] Overfull \hbox (3.79532pt too wide) in paragraph at lines 2739--2741 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[] @@ -12333,49 +12179,81 @@ \OT1/ptm/m/it/10 Builds a new con-straints prod-uct \OT1/pcr/m/sl/10 P[][][]1 \ OT1/ptm/m/it/10 from the octagonal[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle \OT1/pcr/m/sl/10 Handle[] -[87]n[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[][][][] -Product[][][][]C[][][][]Polyhedron[] +[87] +Overfull \hbox (0.58157pt too wide) in paragraph at lines 29--31 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] +[][]class[][] ([][]ppl[][][][]Constraints[] -Overfull \hbox (11.18124pt too wide) in paragraph at lines 97--99 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][] -[][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (27.2312pt too wide) in paragraph at lines 31--33 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] +mpz[][][]class[][] ([][]ppl[][][][]Constraints[] -Overfull \hbox (13.35155pt too wide) in paragraph at lines 99--101 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C -[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[] +Overfull \hbox (27.79126pt too wide) in paragraph at lines 33--35 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] +mpq[][][]class[][] ([][]ppl[][][][]Constraints[] -Overfull \hbox (5.02113pt too wide) in paragraph at lines 101--103 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][][]OK[][] ([][]ppl[][][]const[][][][]Constraints[] -[][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (0.26022pt too wide) in paragraph at lines 35--37 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[] +[][][]C[][][][]Polyhedron[][][][]Grid[][] -Overfull \hbox (23.35141pt too wide) in paragraph at lines 103--105 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]constraint[][] ([][]ppl[][][][]Constrain -ts[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (5.4219pt too wide) in paragraph at lines 35--37 +\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol +yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][] +ppl[][][]const[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (30.00172pt too wide) in paragraph at lines 105--107 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]congruence[][] ([][]ppl[][][][]Constrain -ts[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (40.44136pt too wide) in paragraph at lines 37--39 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][][]wit +h[][][]complexity[][] ([][]ppl[][][][]Constraints[] -Overfull \hbox (27.2413pt too wide) in paragraph at lines 107--109 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]constraints[][] ([][]ppl[][][][]Constrai -nts[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (5.72202pt too wide) in paragraph at lines 39--41 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][ +][]with[][][]complexity[][] ([][]ppl[] -Overfull \hbox (33.89162pt too wide) in paragraph at lines 109--111 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]congruences[][] ([][]ppl[][][][]Constrai -nts[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (2.39153pt too wide) in paragraph at lines 41--43 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][][]with[][][]complexi +ty[][] ([][]ppl[][][][]Constraints[] -Overfull \hbox (3.62155pt too wide) in paragraph at lines 117--119 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]refine[][][]with[][][]congruences[][] ([][]ppl[][ -][][]Constraints[][][][]Product[] -[86] +Overfull \hbox (38.22112pt too wide) in paragraph at lines 43--45 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][][]wit +h[][][]complexity[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (20.69154pt too wide) in paragraph at lines 45--47 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[] +[][]class[][][]with[][][]complexity[][] ([][]ppl[] + +Overfull \hbox (21.2516pt too wide) in paragraph at lines 47--49 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] +[][]class[][][]with[][][]complexity[][] ([][]ppl[] + +Overfull \hbox (20.90985pt too wide) in paragraph at lines 49--51 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] +mpz[][][]class[][][]with[][][]complexity[][] + +Overfull \hbox (2.55026pt too wide) in paragraph at lines 49--51 +\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol +yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][] +ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, + int + +Overfull \hbox (21.46991pt too wide) in paragraph at lines 51--53 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][] +mpq[][][]class[][][]with[][][]complexity[][] + +Overfull \hbox (3.11032pt too wide) in paragraph at lines 51--53 +\OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol +yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/ Overfull \hbox (1.39532pt too wide) in paragraph at lines 2824--2826 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][] @@ -12427,7 +12305,46 @@ Overfull \hbox (1.39532pt too wide) in paragraph at lines 2851--2853 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][] -[88] +[88]bc/n/10 pph, [][] +ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, + int + +Overfull \hbox (9.24173pt too wide) in paragraph at lines 53--55 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[] +[][][]C[][][][]Polyhedron[][][][]Grid[] + +Overfull \hbox (16.57161pt too wide) in paragraph at lines 53--55 +[][]\OT1/ptm/bc/n/10 with[][][]complexity[][] ([][]ppl[][][][]Constraints[][][] +[]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^ +^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Constraints[][][][]Product[] + + +Overfull \hbox (23.66107pt too wide) in paragraph at lines 55--57 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][] +[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraint[][][][]System[][] + ([][]ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (26.11101pt too wide) in paragraph at lines 65--67 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]relation[][][]with[][][][]Generator[][] ([][]ppl[ +][][]const[][][][]Constraints[][][][]Product[] + +Overfull \hbox (25.8513pt too wide) in paragraph at lines 69--71 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]is[][][]empty[][] ([][]ppl[][][]const[][][][]Cons +traints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (34.3313pt too wide) in paragraph at lines 71--73 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]is[][][]universe[][] ([][]ppl[][][]const[][][][]C +onstraints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (35.29152pt too wide) in paragraph at lines 73--75 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]is[][][]bounded[][] ([][]ppl[][][]const[][][][]Co +nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] +[85 Overfull \hbox (15.2138pt too wide) in paragraph at lines 2876--2878 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) @@ -12463,92 +12380,7 @@ Overfull \hbox (50.5953pt too wide) in paragraph at lines 2913--2915 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]affine[][][]dimension(+[]Handle, ?Dimension[] -[89] -Overfull \hbox (34.7512pt too wide) in paragraph at lines 123--125 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]difference[][][]assign[][] ([][]ppl[][][][]Constr -aints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (40.84091pt too wide) in paragraph at lines 127--129 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]time[][][]elapse[][][]assign[][] ([][]ppl[][][][] -Constraints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (20.1216pt too wide) in paragraph at lines 129--131 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact[] -[] ([][]ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (6.42146pt too wide) in paragraph at lines 131--133 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]constrains[][] ([][]ppl[][][][]Constraints[][][][ -]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (23.63115pt too wide) in paragraph at lines 133--135 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension[][] ([][]pp -l[][][][]Constraints[][][][]Product[] - -Overfull \hbox (16.4315pt too wide) in paragraph at lines 137--139 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]affine[][][]image[][] ([][]ppl[][][][]Constraints -[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (29.2014pt too wide) in paragraph at lines 139--141 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]affine[][][]preimage[][] ([][]ppl[][][][]Constrai -nts[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (7.26169pt too wide) in paragraph at lines 143--145 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]bounded[][][]affine[][][]preimage[][] ([][]ppl[][ -][][]Constraints[][][][]Product[] - -Overfull \hbox (6.1413pt too wide) in paragraph at lines 145--147 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]image[][] ([][]ppl[] -[][][]Constraints[][][][]Product[] - -Overfull \hbox (18.9112pt too wide) in paragraph at lines 147--149 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][] ([][]pp -l[][][][]Constraints[][][][]Product[] - -Overfull \hbox (2.52121pt too wide) in paragraph at lines 149--151 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] -rhs[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (15.2911pt too wide) in paragraph at lines 151--153 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[][ -][]rhs[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (8.89146pt too wide) in paragraph at lines 153--155 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embe -d[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (10.00131pt too wide) in paragraph at lines 155--157 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]proj -ect[][] ([][]ppl[][][][]Constraints[] - -Overfull \hbox (10.55145pt too wide) in paragraph at lines 157--159 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]remove[][][]space[][][]dimensions[][] ([][]ppl[][ -][][]Constraints[][][][]Product[] - -Overfull \hbox (4.99152pt too wide) in paragraph at lines 159--161 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]remove[][][]higher[][][]space[][][]dimensions[][] - ([][]ppl[][][][]Constraints[] - -Overfull \hbox (5.70161pt too wide) in paragraph at lines 161--163 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]expand[][][]space[][][]dimension[][] ([][]ppl[][] -[][]Constraints[][][][]Product[] -[87 +[89]] Overfull \hbox (21.2138pt too wide) in paragraph at lines 2916--2918 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]relation[][][]with[][][]constraint(+[]Handle, @@ -12584,7 +12416,7 @@ Overfull \hbox (0.81381pt too wide) in paragraph at lines 2948--2950 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, -[90]] +[90] Overfull \hbox (41.6138pt too wide) in paragraph at lines 2964--2966 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]add[][][]constraint(+[]Handle, +[]Constraint) @@ -12621,72 +12453,81 @@ []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]topological[][][]closure[][][]assign(+[] [91] -Overfull \hbox (0.69177pt too wide) in paragraph at lines 169--171 +Overfull \hbox (22.80093pt too wide) in paragraph at lines 75--77 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]drop[][][]some[][][]non[][][]integer[][][]points[ -][][]2[][] ([][]ppl[][][][]Constraints[] +[]Polyhedron[][][][]Grid[][][]is[][][]topologically[][][]closed[][] ([][]ppl[][ +][]const[][][][]Constraints[][][][]Product[] -Overfull \hbox (0.97137pt too wide) in paragraph at lines 171--173 +Overfull \hbox (31.95103pt too wide) in paragraph at lines 77--79 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]external[][][]memory[][][]in[][][]bytes[][] ([][] -ppl[][][]const[][][][]Constraints[] +[]Polyhedron[][][][]Grid[][][]is[][][]discrete[][] ([][]ppl[][][]const[][][][]C +onstraints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (21.40106pt too wide) in paragraph at lines 173--175 +Overfull \hbox (11.9711pt too wide) in paragraph at lines 79--81 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes[][] ([][]ppl -[][][]const[][][][]Constraints[][][][]Product[] +[]Polyhedron[][][][]Grid[][][]topological[][][]closure[][][]assign[][] ([][]ppl +[][][][]Constraints[][][][]Product[] -Overfull \hbox (22.70122pt too wide) in paragraph at lines 175--177 +Overfull \hbox (9.71191pt too wide) in paragraph at lines 81--83 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]widening[][][]assign[][][]with[][][]tokens[][] ([ -][]ppl[][][][]Constraints[][][][]Product[] +[]Polyhedron[][][][]Grid[][][]bounds[][][]from[][][]above[][] ([][]ppl[][][]con +st[][][][]Constraints[][][][]Product[] -Overfull \hbox (31.69138pt too wide) in paragraph at lines 177--179 +Overfull \hbox (10.32164pt too wide) in paragraph at lines 83--85 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]widening[][][]assign[][] ([][]ppl[][][][]Constrai -nts[][][][]Product[][][][]C[][][][]Polyhedron[] +[]Polyhedron[][][][]Grid[][][]bounds[][][]from[][][]below[][] ([][]ppl[][][]con +st[][][][]Constraints[][][][]Product[] -Overfull \hbox (20.85143pt too wide) in paragraph at lines 179--181 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]io[][][]print[][][][]Constraints[][][][]Pro -duct[][][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Cons -traints[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (30.02118pt too wide) in paragraph at lines 85--87 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]maximize[][] ([][]ppl[][][]const[][][][]Constrain +ts[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (17.83125pt too wide) in paragraph at lines 183--185 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]io[][][]asprint[][][][]Constraints[][][][]P -roduct[][][][]C[][][][]Polyhedron[][][][]Grid[][] (char $\OMS/cmsy/m/n/10 ^^C$$ -^^C$\OT1/ptm/bc/n/10 strp, [][]ppl[][][]const[][][][]Constraints[][][][]Product -[] +Overfull \hbox (29.78001pt too wide) in paragraph at lines 85--87 +[][][]\OT1/ptm/bc/n/10 Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[][] +[][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]n, + [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]d, int $\OMS/cmsy/m/n/10 ^^C$\O +T1/ptm/bc/n/10 poptimum) -Overfull \hbox (35.29124pt too wide) in paragraph at lines 185--187 +Overfull \hbox (28.36113pt too wide) in paragraph at lines 87--89 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]ascii[][][]dump[][] ([][]ppl[][][]const[][][][]Co -nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] +[]Polyhedron[][][][]Grid[][][]minimize[][] ([][]ppl[][][]const[][][][]Constrain +ts[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (5.02145pt too wide) in paragraph at lines 187--188 +Overfull \hbox (29.78001pt too wide) in paragraph at lines 87--89 +[][][]\OT1/ptm/bc/n/10 Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[][] +[][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]n, + [][]ppl[][][][]Coefficient[][][]t[][] ext[][][]d, int $\OMS/cmsy/m/n/10 ^^C$\O +T1/ptm/bc/n/10 poptimum) + +Overfull \hbox (15.58107pt too wide) in paragraph at lines 89--91 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid[][][]ascii[][][]load[][] ([][]ppl[][][][]Constraints[] -[][][]Product[][][][]C[][][][]Polyhedron[] +[]Polyhedron[][][][]Grid[][][]maximize[][][]with[][][]point[][] ([][]ppl[][][]c +onst[][][][]Constraints[][][][]Product[] -Overfull \hbox (36.6532pt too wide) in paragraph at lines 199--200 - []\OT1/ptm/b/n/10 ppl[][][]delete[][][][]Constraints[][][][]Product[][][][]C[] -[][][]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int ppl[][][]delete[][][][]Cons -traints[][][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (3.36195pt too wide) in paragraph at lines 89--91 +[][][]\OT1/ptm/bc/n/10 C[][][][]Polyhedron[][][][]Grid[][][]t[][] ph, [][]ppl[] +[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic +ient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[] -Overfull \hbox (18.3924pt too wide) in paragraph at lines 205--206 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/ -8 int ppl[][][]new[][][][]Constraints[] +Overfull \hbox (13.92102pt too wide) in paragraph at lines 91--93 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]minimize[][][]with[][][]point[][] ([][]ppl[][][]c +onst[][][][]Constraints[][][][]Product[] -Overfull \hbox (7.45296pt too wide) in paragraph at lines 211--212 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n -/8 int ppl[][][]new[][][][]Constraints[] +Overfull \hbox (3.36195pt too wide) in paragraph at lines 91--93 +[][][]\OT1/ptm/bc/n/10 C[][][][]Polyhedron[][][][]Grid[][][]t[][] ph, [][]ppl[] +[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic +ient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[] -Overfull \hbox (21.8929pt too wide) in paragraph at lines 217--218 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/p -cr/m/n/8 int ppl[][][]new[][][][]Constraints[] -[88 +Overfull \hbox (21.13144pt too wide) in paragraph at lines 93--95 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[][][][ +]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[] + +Overfull \hbox (12.5711pt too wide) in paragraph at lines 95--97 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedro Overfull \hbox (6.19531pt too wide) in paragraph at lines 2995--2997 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension(+[] @@ -12726,7 +12567,7 @@ Overfull \hbox (15.79532pt too wide) in paragraph at lines 3022--3024 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[] -[92]] +[92] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3029--3031 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]intersection[][][]assign(+[]Handle[][][] @@ -12758,7 +12599,49 @@ Overfull \hbox (18.19531pt too wide) in paragraph at lines 3060--3062 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]concatenate[][][]assign(+[]Handle[][][]1, +[] -[93] +[93n[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[][][][] +Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (11.18124pt too wide) in paragraph at lines 97--99 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][] +[][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (13.35155pt too wide) in paragraph at lines 99--101 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C +[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[] + +Overfull \hbox (5.02113pt too wide) in paragraph at lines 101--103 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][][]OK[][] ([][]ppl[][][]const[][][][]Constraints[] +[][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (23.35141pt too wide) in paragraph at lines 103--105 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]constraint[][] ([][]ppl[][][][]Constrain +ts[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (30.00172pt too wide) in paragraph at lines 105--107 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]congruence[][] ([][]ppl[][][][]Constrain +ts[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (27.2413pt too wide) in paragraph at lines 107--109 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]constraints[][] ([][]ppl[][][][]Constrai +nts[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (33.89162pt too wide) in paragraph at lines 109--111 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]congruences[][] ([][]ppl[][][][]Constrai +nts[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (3.62155pt too wide) in paragraph at lines 117--119 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]refine[][][]with[][][]congruences[][] ([][]ppl[][ +][][]Constraints[][][][]Product[] +[86]] Overfull \hbox (19.39532pt too wide) in paragraph at lines 3067--3069 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[] @@ -12791,46 +12674,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]from[][][]space[][][]dimension(+[]Dimension[] [94] -Overfull \hbox (4.60298pt too wide) in paragraph at lines 223--224 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Grid()[] \OT1/pcr/m/n/8 int ppl[][][ -]new[][][][]Constraints[][][][]Product[] - -Overfull \hbox (4.50287pt too wide) in paragraph at lines 229--230 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n -/8 int ppl[][][]new[][][][]Constraints[] - -Overfull \hbox (36.70241pt too wide) in paragraph at lines 235--236 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas -s()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] - -Overfull \hbox (37.8224pt too wide) in paragraph at lines 241--242 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas -s()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] - -Overfull \hbox (11.0221pt too wide) in paragraph at lines 247--248 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ -]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[] - -Overfull \hbox (12.14209pt too wide) in paragraph at lines 253--254 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ -]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[] - -Overfull \hbox (21.9302pt too wide) in paragraph at lines 259--260 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][][]C[ -][][][]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int - -Overfull \hbox (7.24219pt too wide) in paragraph at lines 265--266 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]c -omplexity()[] \OT1/pcr/m/n/8 int ppl[] -[89 Overfull \hbox (21.2138pt too wide) in paragraph at lines 3111--3113 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]from[][][]constraints(+[]Constraint[][][][]System, @@ -12869,7 +12712,7 @@ Overfull \hbox (19.39532pt too wide) in paragraph at lines 3137--3139 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[] -[95]] +[95] Overfull \hbox (3.2138pt too wide) in paragraph at lines 3171--3173 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) @@ -12946,51 +12789,82 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) [97] -Overfull \hbox (21.68213pt too wide) in paragraph at lines 271--272 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[ -][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] +Overfull \hbox (34.7512pt too wide) in paragraph at lines 123--125 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]difference[][][]assign[][] ([][]ppl[][][][]Constr +aints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (40.87224pt too wide) in paragraph at lines 277--278 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][][]with[][][]complexity()[] \ -OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] +Overfull \hbox (40.84091pt too wide) in paragraph at lines 127--129 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]time[][][]elapse[][][]assign[][] ([][]ppl[][][][] +Constraints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (4.2921pt too wide) in paragraph at lines 283--284 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][][]with[][][]c -omplexity()[] \OT1/pcr/m/n/8 int ppl[] +Overfull \hbox (20.1216pt too wide) in paragraph at lines 129--131 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact[] +[] ([][]ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (8.31012pt too wide) in paragraph at lines 289--290 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas -s[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int +Overfull \hbox (6.42146pt too wide) in paragraph at lines 131--133 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]constrains[][] ([][]ppl[][][][]Constraints[][][][ +]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (9.43011pt too wide) in paragraph at lines 295--296 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas -s[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int +Overfull \hbox (23.63115pt too wide) in paragraph at lines 133--135 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension[][] ([][]pp +l[][][][]Constraints[][][][]Product[] -Overfull \hbox (15.90984pt too wide) in paragraph at lines 301--302 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ -]class[][][]with[][][]complexity()[] +Overfull \hbox (16.4315pt too wide) in paragraph at lines 137--139 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]affine[][][]image[][] ([][]ppl[][][][]Constraints +[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (11.25407pt too wide) in paragraph at lines 301--302 -\OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ -]class[][][]with[][][]complexity +Overfull \hbox (29.2014pt too wide) in paragraph at lines 139--141 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]affine[][][]preimage[][] ([][]ppl[][][][]Constrai +nts[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (17.02983pt too wide) in paragraph at lines 307--308 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ -]class[][][]with[][][]complexity()[] +Overfull \hbox (7.26169pt too wide) in paragraph at lines 143--145 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]bounded[][][]affine[][][]preimage[][] ([][]ppl[][ +][][]Constraints[][][][]Product[] -Overfull \hbox (11.25407pt too wide) in paragraph at lines 307--308 -\OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ -]class[][][]with[][][]complexity -[90 +Overfull \hbox (6.1413pt too wide) in paragraph at lines 145--147 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]image[][] ([][]ppl[] +[][][]Constraints[][][][]Product[] + +Overfull \hbox (18.9112pt too wide) in paragraph at lines 147--149 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][] ([][]pp +l[][][][]Constraints[][][][]Product[] + +Overfull \hbox (2.52121pt too wide) in paragraph at lines 149--151 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] +rhs[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (15.2911pt too wide) in paragraph at lines 151--153 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[][ +][]rhs[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (8.89146pt too wide) in paragraph at lines 153--155 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embe +d[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (10.00131pt too wide) in paragraph at lines 155--157 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]proj +ect[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (10.55145pt too wide) in paragraph at lines 157--159 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]remove[][][]space[][][]dimensions[][] ([][]ppl[][ +][][]Constraints[][][][]Product[] + +Overfull \hbox (4.99152pt too wide) in paragraph at lin Overfull \hbox (2.0138pt too wide) in paragraph at lines 3262--3264 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]add[][][]constraint(+[]Handle, +[]Constraint) @@ -13022,7 +12896,16 @@ Overfull \hbox (2.5953pt too wide) in paragraph at lines 3283--3285 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]refine[][][]with[][][]congruences( +[]Handle, +[] -[98]] +[98es 159--161 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]remove[][][]higher[][][]space[][][]dimensions[][] + ([][]ppl[][][][]Constraints[] + +Overfull \hbox (5.70161pt too wide) in paragraph at lines 161--163 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]expand[][][]space[][][]dimension[][] ([][]ppl[][] +[][]Constraints[][][][]Product[] +[87]] Overfull \hbox (20.5953pt too wide) in paragraph at lines 3299--3301 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]unconstrain[][][]space[][][]dimension(+[]Handle, +[] @@ -13072,51 +12955,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]intersection[][][]assign(+[]Handle[][][]1, +[]Handle[] [99] -Overfull \hbox (1.85179pt too wide) in paragraph at lines 313--314 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][][]C[ -][][][]Polyhedron[][][][]Grid[] - -Overfull \hbox (9.12473pt too wide) in paragraph at lines 313--314 -[][]\OT1/ptm/b/n/10 with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][ -][][]Constraints[][][][]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]fro -m[][][][]Constraints[][][][]Product[] - -Overfull \hbox (27.82246pt too wide) in paragraph at lines 319--320 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Constraint[][][][]System()[] \OT1/pc -r/m/n/8 int ppl[][][]new[][][][]Constraints[] - -Overfull \hbox (33.37253pt too wide) in paragraph at lines 325--326 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ -][]Polyhedron[][][][]Grid[][][]from[][][][]Congruence[][][][]System()[] \OT1/pc -r/m/n/8 int ppl[][][]new[][][][]Constraints[] - -Overfull \hbox (2.81264pt too wide) in paragraph at lines 331--332 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]Co -nstraints[][][][]Product[][][][]C[][][] - -Overfull \hbox (0.49269pt too wide) in paragraph at lines 337--338 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]affine[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]C -onstraints[][][][]Product[][][][]C[] - -Overfull \hbox (26.7724pt too wide) in paragraph at lines 343--344 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]relation[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 i -nt ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (25.09247pt too wide) in paragraph at lines 349--350 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]relation[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 in -t ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (32.32246pt too wide) in paragraph at lines 355--356 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]relation[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 i -nt ppl[][][][]Constraints[][][][]Product[] -[91 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3336--3338 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]upper[][][]bound[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -13153,7 +12991,7 @@ Overfull \hbox (18.19531pt too wide) in paragraph at lines 3364--3366 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][][]B[]G[]P99[][][][]H79[][][]extrapolation[][][]assign(+[]Handle[] -[100]] +[100] Overfull \hbox (14.5953pt too wide) in paragraph at lines 3373--3375 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -13194,7 +13032,73 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 3405--3407 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]iterator[][][]from[][][]iterator(+[]Iterator[] -[101] +[101 +Overfull \hbox (0.69177pt too wide) in paragraph at lines 169--171 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]drop[][][]some[][][]non[][][]integer[][][]points[ +][][]2[][] ([][]ppl[][][][]Constraints[] + +Overfull \hbox (0.97137pt too wide) in paragraph at lines 171--173 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]external[][][]memory[][][]in[][][]bytes[][] ([][] +ppl[][][]const[][][][]Constraints[] + +Overfull \hbox (21.40106pt too wide) in paragraph at lines 173--175 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes[][] ([][]ppl +[][][]const[][][][]Constraints[][][][]Product[] + +Overfull \hbox (22.70122pt too wide) in paragraph at lines 175--177 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]widening[][][]assign[][][]with[][][]tokens[][] ([ +][]ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (31.69138pt too wide) in paragraph at lines 177--179 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]widening[][][]assign[][] ([][]ppl[][][][]Constrai +nts[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (20.85143pt too wide) in paragraph at lines 179--181 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]io[][][]print[][][][]Constraints[][][][]Pro +duct[][][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Cons +traints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (17.83125pt too wide) in paragraph at lines 183--185 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]io[][][]asprint[][][][]Constraints[][][][]P +roduct[][][][]C[][][][]Polyhedron[][][][]Grid[][] (char $\OMS/cmsy/m/n/10 ^^C$$ +^^C$\OT1/ptm/bc/n/10 strp, [][]ppl[][][]const[][][][]Constraints[][][][]Product +[] + +Overfull \hbox (35.29124pt too wide) in paragraph at lines 185--187 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]ascii[][][]dump[][] ([][]ppl[][][]const[][][][]Co +nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (5.02145pt too wide) in paragraph at lines 187--188 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid[][][]ascii[][][]load[][] ([][]ppl[][][][]Constraints[] +[][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (36.6532pt too wide) in paragraph at lines 199--200 + []\OT1/ptm/b/n/10 ppl[][][]delete[][][][]Constraints[][][][]Product[][][][]C[] +[][][]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int ppl[][][]delete[][][][]Cons +traints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (18.3924pt too wide) in paragraph at lines 205--206 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/ +8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (7.45296pt too wide) in paragraph at lines 211--212 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n +/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (21.8929pt too wide) in paragraph at lines 217--218 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/p +cr/m/n/8 int ppl[][][]new[][][][]Constraints[] +[88]] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3414--3416 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][] @@ -13211,51 +13115,6 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]from[][][]space[][][]dimension(+[]Dimension[] [102] -Overfull \hbox (16.91315pt too wide) in paragraph at lines 361--362 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]empty()[] \OT1/pcr/m/n/8 int ppl[][][][]Constrain -ts[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (26.16286pt too wide) in paragraph at lines 367--368 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]universe()[] \OT1/pcr/m/n/8 int ppl[][][][]Constr -aints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (27.49298pt too wide) in paragraph at lines 373--374 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]bounded()[] \OT1/pcr/m/n/8 int ppl[][][][]Constra -ints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (15.85233pt too wide) in paragraph at lines 379--380 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]topologically[][][]closed()[] \OT1/pcr/m/n/8 int -ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (23.39287pt too wide) in paragraph at lines 385--386 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]discrete()[] \OT1/pcr/m/n/8 int ppl[][][][]Constr -aints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (31.78227pt too wide) in paragraph at lines 391--392 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]topological[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 i -nt ppl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (5.47299pt too wide) in paragraph at lines 397--398 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]bounds[][][]from[][][]above()[] \OT1/pcr/m/n/8 int ppl[][ -][][]Constraints[][][][]Product[] - -Overfull \hbox (5.57285pt too wide) in paragraph at lines 403--404 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]bounds[][][]from[][][]below()[] \OT1/pcr/m/n/8 int ppl[][ -][][]Constraints[][][][]Product[] - -Overfull \hbox (21.08315pt too wide) in paragraph at lines 409--410 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]maximize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][ -][][]Product[][][][]C[][][][]Polyhedron[] -[92] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3461--3463 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]from[][][]constraints(+[]Constraint[][][] @@ -13287,6 +13146,46 @@ [][][]Polyhedron[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]comp lexity(+[] [103] +Overfull \hbox (4.60298pt too wide) in paragraph at lines 223--224 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Grid()[] \OT1/pcr/m/n/8 int ppl[][][ +]new[][][][]Constraints[][][][]Product[] + +Overfull \hbox (4.50287pt too wide) in paragraph at lines 229--230 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n +/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (36.70241pt too wide) in paragraph at lines 235--236 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas +s()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (37.8224pt too wide) in paragraph at lines 241--242 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas +s()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (11.0221pt too wide) in paragraph at lines 247--248 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ +]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[] + +Overfull \hbox (12.14209pt too wide) in paragraph at lines 253--254 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ +]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[] + +Overfull \hbox (21.9302pt too wide) in paragraph at lines 259--260 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][][]C[ +][][][]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int + +Overfull \hbox (7.24219pt too wide) in paragraph at lines 265--266 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]c +omplexity()[] \OT1/pcr/m/n/8 int ppl[] +[89 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3521--3523 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) @@ -13332,7 +13231,7 @@ Overfull \hbox (14.5953pt too wide) in paragraph at lines 3561--3563 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]relation[][][]with[][][]constraint(+[]Handle, +[] -[104] +[104]] Overfull \hbox (8.5953pt too wide) in paragraph at lines 3564--3566 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]relation[][][]with[][][]generator(+[]Handle, +[] @@ -13401,46 +13300,51 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]topological[][][]closure[][][]assign(+[]Handle) [106] -Overfull \hbox (19.42297pt too wide) in paragraph at lines 415--416 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]minimize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][ -][][]Product[][][][]C[][][][]Polyhedron[] +Overfull \hbox (21.68213pt too wide) in paragraph at lines 271--272 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[ +][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] -Overfull \hbox (10.84259pt too wide) in paragraph at lines 421--422 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]maximize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[ -][][][]Constraints[][][][]Product[] +Overfull \hbox (40.87224pt too wide) in paragraph at lines 277--278 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][][]with[][][]complexity()[] \ +OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[] -Overfull \hbox (9.18242pt too wide) in paragraph at lines 427--428 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]minimize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[ -][][][]Constraints[][][][]Product[] +Overfull \hbox (4.2921pt too wide) in paragraph at lines 283--284 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][][]with[][][]c +omplexity()[] \OT1/pcr/m/n/8 int ppl[] -Overfull \hbox (15.74998pt too wide) in paragraph at lines 433--434 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[][][][]C[][][] -[]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int +Overfull \hbox (8.31012pt too wide) in paragraph at lines 289--290 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas +s[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int -Overfull \hbox (5.10138pt too wide) in paragraph at lines 439--440 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[][][][]Product[ -][][][]C[][][][]Polyhedron[] +Overfull \hbox (9.43011pt too wide) in paragraph at lines 295--296 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas +s[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int -Overfull \hbox (3.73514pt too wide) in paragraph at lines 439--440 -[][][]\OT1/ptm/b/n/10 Grid()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][ -]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]strictly[][][]contains[][] -[][]Constraints[][][][]Product[] +Overfull \hbox (15.90984pt too wide) in paragraph at lines 301--302 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ +]class[][][]with[][][]complexity()[] -Overfull \hbox (2.97153pt too wide) in paragraph at lines 445--446 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][][][]Prod -uct[][][][]C[][][][]Polyhedron[] +Overfull \hbox (11.25407pt too wide) in paragraph at lines 301--302 +\OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][ +]class[][][]with[][][]complexity -Overfull \hbox (4.69514pt too wide) in paragraph at lines 445--446 -[][][]\OT1/ptm/b/n/10 Grid()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][ -]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]is[][][]disjoint[][][]from -[][][][]Constraints[][][][]Product[][][][]C[] -[93] +Overfull \hbox (17.02983pt too wide) in paragraph at lines 307--308 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ +]class[][][]with[][][]complexity()[] + +Overfull \hbox (11.25407pt too wide) in paragraph at lines 307--308 +\OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][ +]class[][][]with[][][]complexity +[90] Overfull \hbox (11.6138pt too wide) in paragraph at lines 3649--3651 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]unconstrain[][][]space[][][]dimension(+[]Handle, @@ -13529,46 +13433,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][][]B[]G[]P99[][][][]H79[][][]extrapolation[][][]assign(+[]Handle[] [108] -Overfull \hbox (7.42003pt too wide) in paragraph at lines 451--452 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C[][][][] -Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int - -Overfull \hbox (17.62337pt too wide) in paragraph at lines 457--458 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][][]O[]K()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][ -][]Product[][][][]C[][][][]Polyhedron[][][][]Grid[] - -Overfull \hbox (43.0329pt too wide) in paragraph at lines 463--464 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]add[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Con -straints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (0.58293pt too wide) in paragraph at lines 469--470 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]add[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Con -straints[][][][]Product[][][][]C[][][] - -Overfull \hbox (46.92279pt too wide) in paragraph at lines 475--476 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]add[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Co -nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] - -Overfull \hbox (1.59282pt too wide) in paragraph at lines 481--482 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]add[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Co -nstraints[][][][]Product[][][][]C[] - -Overfull \hbox (15.10251pt too wide) in paragraph at lines 487--488 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]refine[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int p -pl[][][][]Constraints[][][][]Product[] - -Overfull \hbox (20.65257pt too wide) in paragraph at lines 493--494 - []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]refine[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int p -pl[][][][]Constraints[][][][]Product[] -[94 Overfull \hbox (26.5953pt too wide) in paragraph at lines 3723--3725 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -13605,7 +13469,52 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 3748--3750 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]map[][][]space[][][]dimensions(+[]Handle, +[]P[][][] -[109]] +[109 +Overfull \hbox (1.85179pt too wide) in paragraph at lines 313--314 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][][]C[ +][][][]Polyhedron[][][][]Grid[] + +Overfull \hbox (9.12473pt too wide) in paragraph at lines 313--314 +[][]\OT1/ptm/b/n/10 with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][ +][][]Constraints[][][][]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]fro +m[][][][]Constraints[][][][]Product[] + +Overfull \hbox (27.82246pt too wide) in paragraph at lines 319--320 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Constraint[][][][]System()[] \OT1/pc +r/m/n/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (33.37253pt too wide) in paragraph at lines 325--326 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][ +][]Polyhedron[][][][]Grid[][][]from[][][][]Congruence[][][][]System()[] \OT1/pc +r/m/n/8 int ppl[][][]new[][][][]Constraints[] + +Overfull \hbox (2.81264pt too wide) in paragraph at lines 331--332 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]Co +nstraints[][][][]Product[][][][]C[][][] + +Overfull \hbox (0.49269pt too wide) in paragraph at lines 337--338 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]affine[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]C +onstraints[][][][]Product[][][][]C[] + +Overfull \hbox (26.7724pt too wide) in paragraph at lines 343--344 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]relation[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 i +nt ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (25.09247pt too wide) in paragraph at lines 349--350 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]relation[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 in +t ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (32.32246pt too wide) in paragraph at lines 355--356 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]relation[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 i +nt ppl[][][][]Constraints[][][][]Product[] +[91]] Overfull \hbox (18.19531pt too wide) in paragraph at lines 3755--3757 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]iterator[][][]from[][][]iterator(+[]Iterator[] @@ -13626,50 +13535,55 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]drop[][][]disjuncts(+[]Handle, +[]Iterator[] (./PI_Compilation.tex) (./PI_SD_Features.tex [110] [111] -Overfull \hbox (18.9924pt too wide) in paragraph at lines 499--500 +Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87 +[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c +on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared +[112] +Overfull \hbox (16.91315pt too wide) in paragraph at lines 361--362 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]refine[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int -ppl[][][][]Constraints[][][][]Product[] +dron[][][][]Grid[][][]is[][][]empty()[] \OT1/pcr/m/n/8 int ppl[][][][]Constrain +ts[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (24.54247pt too wide) in paragraph at lines 505--506 +Overfull \hbox (26.16286pt too wide) in paragraph at lines 367--368 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]refine[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int -ppl[][][][]Constraints[][][][]Product[] +dron[][][][]Grid[][][]is[][][]universe()[] \OT1/pcr/m/n/8 int ppl[][][][]Constr +aints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (1.13237pt too wide) in paragraph at lines 511--512 +Overfull \hbox (27.49298pt too wide) in paragraph at lines 373--374 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]intersection[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][] -[]Constraints[][][][]Product[] +dron[][][][]Grid[][][]is[][][]bounded()[] \OT1/pcr/m/n/8 int ppl[][][][]Constra +ints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (7.54259pt too wide) in paragraph at lines 517--518 +Overfull \hbox (15.85233pt too wide) in paragraph at lines 379--380 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]upper[][][]bound[][][]assign()[] \OT1/pcr/m/n/8 int ppl[] -[][][]Constraints[][][][]Product[] +dron[][][][]Grid[][][]is[][][]topologically[][][]closed()[] \OT1/pcr/m/n/8 int +ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (1.40259pt too wide) in paragraph at lines 523--524 +Overfull \hbox (23.39287pt too wide) in paragraph at lines 385--386 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]difference[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][] -Constraints[][][][]Product[][][][]C[] +dron[][][][]Grid[][][]is[][][]discrete()[] \OT1/pcr/m/n/8 int ppl[][][][]Constr +aints[][][][]Product[][][][]C[][][][]Polyhedron[] -Overfull \hbox (1.6827pt too wide) in paragraph at lines 529--530 +Overfull \hbox (31.78227pt too wide) in paragraph at lines 391--392 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]concatenate[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][ -]Constraints[][][][]Product[] +dron[][][][]Grid[][][]topological[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 i +nt ppl[][][][]Constraints[][][][]Product[] -Overfull \hbox (2.6125pt too wide) in paragraph at lines 535--536 +Overfull \hbox (5.47299pt too wide) in paragraph at lines 397--398 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]time[][][]elapse[][][]assign()[] \OT1/pcr/m/n/8 int ppl[] -[][][]Constraints[][][][]Product[][][] +dron[][][][]Grid[][][]bounds[][][]from[][][]above()[] \OT1/pcr/m/n/8 int ppl[][ +][][]Constraints[][][][]Product[] -Overfull \hbox (6.58226pt too wide) in paragraph at lines 541--542 +Overfull \hbox (5.57285pt too wide) in paragraph at lines 403--404 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe -dron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/ -pcr/m/n/8 int ppl[][][][]Constraints[] -[95 -Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87 -[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c -on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared -[112]] +dron[][][][]Grid[][][]bounds[][][]from[][][]below()[] \OT1/pcr/m/n/8 int ppl[][ +][][]Constraints[][][][]Product[] + +Overfull \hbox (21.08315pt too wide) in paragraph at lines 409--410 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]maximize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][ +][][]Product[][][][]C[][][][]Polyhedron[] +[92 Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101 \OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). @@ -13677,7 +13591,7 @@ Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207 []\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[] -(./modules.tex) (./group__PPL__Prolog__interface.tex) [113] [114] (./refman.ind +(./modules.tex)] (./group__PPL__Prolog__interface.tex) [113] [114] (./refman.ind [115]) (./refman.aux) Package rerunfilecheck Warning: File `refman.out' has changed. @@ -13699,7 +13613,47 @@ elvetic/uhvr8a.pfb> -Output written on refman.pdf (121 pages, 626916 bytes). +Overfull \hbox (19.42297pt too wide) in paragraph at lines 415--416 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]minimize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][ +][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (10.84259pt too wide) in paragraph at lines 421--422 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]maximize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[ +][][][]Constraints[][][][]Product[] + +Overfull \hbox (9.18242pt too wide) in paragraph at lines 427--428 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]minimize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[ +][][][]Constraints[][][][]Product[] + +Overfull \hbox (15.74998pt too wide) in paragraph at lines 433--434 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]contains[][][][]Constraints[][][][]Product[][][][]C[][][] +[]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int + +Overfull \hbox (5.10138pt too wide) in paragraph at lines 439--440 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]strictly[][][]contains[][][][]Constraints[][][][]Product[ +][][][]C[][][][]Polyhedron[] + +Overfull \hbox (3.73514pt too wide) in paragraph at lines 439--440 +[][][]\OT1/ptm/b/n/10 Grid()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][ +]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]strictly[][][]contains[][] +[][]Constraints[][][][]Product[] + +Overfull \hbox (2.97153pt too wide) in paragraph at lines 445--446 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]is[][][]disjoint[][][]from[][][][]Constraints[][][][]Prod +uct[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (4.69514pt too wide) in paragraph at lines 445--446 +[][][]\OT1/ptm/b/n/10 Grid()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][ +]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]is[][][]disjoint[][][]from +[][][][]Constraints[][][][]Product[][][][]C[] +[93 +Output written on refman.pdf (121 pages, 626835 bytes). Transcript written on refman.log. latex_count=8 ; \ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\ @@ -13708,7 +13662,131 @@ pdflatex refman ;\ latex_count=`expr $latex_count - 1` ;\ done +makeindex refman.idx +]This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). +Scanning input file refman.idx....done (1 entries accepted, 0 rejected). +Sorting entries...done (0 comparisons). +Generating output file refman.ind....done (5 lines written, 0 warnings). +Output written in refman.ind. +Transcript written in refman.ilg. +pdflatex refman +This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex) + restricted \write18 enabled. +entering extended mode +(./refman.tex +LaTeX2e <2018-12-01> +(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls +Document Class: article 2018/09/03 v1.4i Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) +(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty +(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +Overfull \hbox (7.42003pt too wide) in paragraph at lines 451--452 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]equals[][][][]Constraints[][][][]Product[][][][]C[][][][] +Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int + +Overfull \hbox (17.62337pt too wide) in paragraph at lines 457--458 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][][]O[]K()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][ +][]Product[][][][]C[][][][]Polyhedron[][][][]Grid[] + +Overfull \hbox (43.0329pt too wide) in paragraph at lines 463--464 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]add[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Con +straints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (0.58293pt too wide) in paragraph at lines 469--470 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]add[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Con +straints[][][][]Product[][][][]C[][][] +Overfull \hbox (46.92279pt too wide) in paragraph at lines 475--476 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]add[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Co +nstraints[][][][]Product[][][][]C[][][][]Polyhedron[] + +Overfull \hbox (1.59282pt too wide) in paragraph at lines 481--482 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]add[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Co +nstraints[][][][]Product[][][][]C[] + +Overfull \hbox (15.10251pt too wide) in paragraph at lines 487--488 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]refine[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int p +pl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (20.65257pt too wide) in paragraph at lines 493--494 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]refine[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int p +pl[][][][]Constraints[][][][]Product[] +[94) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)] +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def))) +(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu))) +(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) +(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +Overfull \hbox (18.9924pt too wide) in paragraph at lines 499--500 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]refine[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int +ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (24.54247pt too wide) in paragraph at lines 505--506 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]refine[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int +ppl[][][][]Constraints[][][][]Product[] + +Overfull \hbox (1.13237pt too wide) in paragraph at lines 511--512 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]intersection[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][] +[]Constraints[][][][]Product[] + +Overfull \hbox (7.54259pt too wide) in paragraph at lines 517--518 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]upper[][][]bound[][][]assign()[] \OT1/pcr/m/n/8 int ppl[] +[][][]Constraints[][][][]Product[] + +Overfull \hbox (1.40259pt too wide) in paragraph at lines 523--524 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]difference[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][] +Constraints[][][][]Product[][][][]C[] + +Overfull \hbox (1.6827pt too wide) in paragraph at lines 529--530 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]concatenate[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][ +]Constraints[][][][]Product[] + +Overfull \hbox (2.6125pt too wide) in paragraph at lines 535--536 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]time[][][]elapse[][][]assign()[] \OT1/pcr/m/n/8 int ppl[] +[][][]Constraints[][][][]Product[][][] + +Overfull \hbox (6.58226pt too wide) in paragraph at lines 541--542 + []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe +dron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/ +pcr/m/n/8 int ppl[][][][]Constraints[] +[95))]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) Overfull \hbox (23.87296pt too wide) in paragraph at lines 547--548 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]constrains()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[ @@ -13743,15 +13821,10 @@ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]bounded[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][]Product[] -[96]makeindex refman.idx -This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). -Scanning input file refman.idx....done (1 entries accepted, 0 rejected). -Sorting entries...done (0 comparisons). -Generating output file refman.ind....done (5 lines written, 0 warnings). -Output written in refman.ind. -Transcript written in refman.ilg. -pdflatex refman - +[96 +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def]) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def Overfull \hbox (26.94246pt too wide) in paragraph at lines 589--590 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]generalized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int @@ -13781,18 +13854,9 @@ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[] -[97]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -(./refman.tex -LaTeX2e <2018-12-01> -(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls -Document Class: article 2018/09/03 v1.4i Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) -(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty -(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +[97]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty Overfull \hbox (31.01239pt too wide) in paragraph at lines 625--626 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]remove[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int @@ -13832,26 +13896,18 @@ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]external[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/ 8 int ppl[][][][]Constraints[][][][]Product[] -[98) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def)])) -(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty) -(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu))) -(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty) -(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)) +[98)) +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)]) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty +(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) +(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty +(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) +(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty) Overfull \hbox (17.7627pt too wide) in paragraph at lines 673--674 []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 i @@ -13891,14 +13947,16 @@ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe dron[][][][]Grid[][][]ascii[][][]load()[] \OT1/pcr/m/n/8 int ppl[][][][]Constra ints[][][][]Product[][][][]C[][][][]Polyhedron[] -[99) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty]) (./interfaceppl__Generator__System__const__iterator__tag.tex)) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def) +[99]) (./interfaceppl__Generator__System__const__iterator__tag.tex) +(/build/ppl-1.2/doc/ppl.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty) Overfull \hbox (20.03731pt too wide) in paragraph at lines 19--21 [][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][] const[][][]iterator[][][]from[][][][]Generator[][][][]System[][][]const[][][]it @@ -13918,12 +13976,24 @@ [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]const[][] []iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Generator[][][][ ]System[][][]const[][][]iterator[] -) (./interfaceppl__Generator__System__tag.tex -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def [100]) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty) +) (./interfaceppl__Generator__System__tag.tex) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty) [100]) +Writing index file refman.idx +(./refman.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd) +(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) +(./refman.out) (./refman.out) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) +(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd Overfull \hbox (18.41797pt too wide) in paragraph at lines 19--21 [][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][] from[][][][]Generator[][] ([][]ppl[][][][]Generator[][][][]System[][][]t[][] $\ @@ -13939,40 +14009,32 @@ [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]begin[][] ([][]ppl[][][]const[][][][]Generator[][][][]System[][][]t[][] gs, [][]ppl[][][ ][]Generator[][][][]System[][][]const[] -[101) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def]) -(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty) (./interfaceppl__Generator__tag.tex -(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty) -(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty -(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty) -(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)) -(/build/ppl-1.2/doc/ppl.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -For additional information on amsmath, use the `?' option. -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty) -(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)) -Writing index file refman.idx -(./refman.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd) [102 -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd) -(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii] -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty)) -(./interfaceppl__Grid__Generator__System__const__iterator__tag.tex -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg)) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(./refman.out) (./refman.out) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd) +[101)]) (./interfaceppl__Generator__tag.tex [1{/var/lib/texmf/fo +nts/map/pdftex/updmap/pdftex.map} ] [2] +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 ] [4] (./refman.toc) [1 ] [2] (./index.tex [102) (./GPL.tex]pdfTeX warning (ext4): destination with the +same identifier (name{page.1}) has been already used, duplicate ignored + + \relax +l.22 + [1]) +(./interfaceppl__Grid__Generator__System__const__iterator__tag.texpdfTeX warning (ext4): destination with the same identifier (name{page +.2}) has been already used, duplicate ignored + + \relax +l.58 + [2]pdfTeX warning (ext4): destination with the same identifier (name{page +.3}) has been already used, duplicate ignored + + \relax +l.84 + [3]pdfTeX warning (ext4): destination with the same identifier (name{page +.4}) has been already used, duplicate ignored + + \relax +l.121 + [4] [5] [6] [7] Overfull \hbox (20.31735pt too wide) in paragraph at lines 19--21 [][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][] System[][][]const[][][]iterator[][][]from[][][][]Grid[][][][]Generator[][][][]S @@ -14002,15 +14064,11 @@ [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][ ][]const[][][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Grid [][][][]Generator[][][][]System[][][]const[] -[103 -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd) -(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd) -(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd]) -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd)) (./interfaceppl__Grid__Generator__System__tag.tex [1{/var/lib/texmf/fo -nts/map/pdftex/updmap/pdftex.map} ] [2] -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 ] [4] (./refman.toc) [1 ] [2] (./index.tex +[103]) (./interfaceppl__Grid__Generator__System__tag.tex [8]) +Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 +\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n +/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] +[9] (./GFDL.tex [10] [11] Overfull \hbox (4.49792pt too wide) in paragraph at lines 22--24 [][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][] System[][][]from[][][][]Grid[][][][]Generator[][][][]System[][] ([][]ppl[][][][ @@ -14030,41 +14088,16 @@ [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][ ][]end[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]System[][][] t[][] gs, [][]ppl[][][][]Grid[][][][]Generator[] -[104) (./GPL.texpdfTeX warning (ext4): destination with the -same identifier (name{page.1}) has been already used, duplicate ignored - - \relax -l.22 - [1]]pdfTeX warning (ext4): destination with the same identifier (name{page -.2}) has been already used, duplicate ignored - - \relax -l.58 - [2]pdfTeX warning (ext4): destination with the same identifier (name{page -.3}) has been already used, duplicate ignored - - \relax -l.84 - [3]pdfTeX warning (ext4): destination with the same identifier (name{page -.4}) has been already used, duplicate ignored - - \relax -l.121 - [4 +[104 [12]] +Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 +\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise +com-bine any sec-tions En-ti-tled "[]Acknowledgements", +[13]) Overfull \hbox (2.72562pt too wide) in paragraph at lines 73--75 [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][ ][]ascii[][][]dump[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][] System[][][]t[][] x, F[]I[]LE $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 stream) -) (./interfaceppl__Grid__Generator__tag.tex] [5] [6] [7] [105] [8]) -(./interfaceppl__Grid__tag.tex) -Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187 -\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n -/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[] -[9] (./GFDL.tex [10] [11] [12] [106 -Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98 -\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise -com-bine any sec-tions En-ti-tled "[]Acknowledgements", -[13]]) (./PI_SI_Features.tex [14] +) (./interfaceppl__Grid__Generator__tag.tex (./PI_SI_Features.tex [14] Underfull \hbox (badness 10000) in paragraph at lines 19--20 @@ -14077,8 +14110,8 @@ Overfull \hbox (3.40186pt too wide) in paragraph at lines 28--29 []\OT1/ptm/m/n/10 The prod-uct do-mains con-sist of Direct[][][][]Product[][][] []S[][][]T, Smash[][][][]Product[][][][]S[][][]T, Constraints[][][][]Product[] -[15] [16] -Underfull \vbox (badness 10000) has occurred while \output is active [17] +[15] [16] [105 +Underfull \vbox (badness 10000) has occurred while \output is active [17]] Underfull \hbox (badness 10000) in paragraph at lines 241--242 @@ -14120,7 +14153,8 @@ Underfull \hbox (badness 10000) in paragraph at lines 308--309 -[19] +[19]) +(./interfaceppl__Grid__tag.tex Underfull \hbox (badness 10000) in paragraph at lines 313--314 @@ -14160,40 +14194,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 374--375 -[20] -Overfull \hbox (3.80247pt too wide) in paragraph at lines 37--39 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][ -][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[][] $ -\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Polyhedron -[] - -Overfull \hbox (6.9618pt too wide) in paragraph at lines 55--57 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Grid[][][] -[]Generator[][][][]System[][] ([][]ppl[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 - ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Grid[][][][]Generator[][][ -][]System[] - -Overfull \hbox (3.21011pt too wide) in paragraph at lines 77--79 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]congrue -nces[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][ -][]Congruence[][][][]System[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 p -cs) - -Overfull \hbox (7.22137pt too wide) in paragraph at lines 79--81 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]grid[][ -][]generators[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]c -onst[][][][]Grid[][][][]Generator[][][][]System[] - -Overfull \hbox (28.41115pt too wide) in paragraph at lines 103--105 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]maximize[][][]with[][][]point[] -[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin -ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[] - -Overfull \hbox (26.7511pt too wide) in paragraph at lines 105--107 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]minimize[][][]with[][][]point[] -[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin -ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[] -[107 +[20] [106 Underfull \hbox (badness 10000) in paragraph at lines 379--380 @@ -14346,31 +14347,39 @@ Underfull \hbox (badness 10000) in paragraph at lines 68--69 [25] -Overfull \hbox (24.14204pt too wide) in paragraph at lines 163--165 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]bounded[][][]affine[][][]image[ -][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] va -r, [][]ppl[][][]const[][][][]Linear[][][][]Expression[] +Overfull \hbox (3.80247pt too wide) in paragraph at lines 37--39 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][ +][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[][] $ +\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Polyhedron +[] -Overfull \hbox (7.17998pt too wide) in paragraph at lines 171--173 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im -age[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]cons -t[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum +Overfull \hbox (6.9618pt too wide) in paragraph at lines 55--57 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Grid[][][] +[]Generator[][][][]System[][] ([][]ppl[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 + ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Grid[][][][]Generator[][][ +][]System[] -Overfull \hbox (4.87045pt too wide) in paragraph at lines 175--177 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im -age[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[] -[][]dimension[][][]type[][] var, enum +Overfull \hbox (3.21011pt too wide) in paragraph at lines 77--79 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]congrue +nces[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][ +][]Congruence[][][][]System[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 p +cs) -Overfull \hbox (1.3616pt too wide) in paragraph at lines 175--177 -[][]\OT1/ptm/bc/n/10 ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [ -][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][]c -onst[][][][]Coefficient[][][]t[][] d, [][]ppl[] +Overfull \hbox (7.22137pt too wide) in paragraph at lines 79--81 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]grid[][ +][]generators[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]c +onst[][][][]Grid[][][][]Generator[][][][]System[] -Overfull \hbox (5.27174pt too wide) in paragraph at lines 181--183 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]pr -eimage[][][]lhs[][][]rhs[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][] -[]t[][] ph, [][]ppl[][][]const[][][][]Linear[] -[108 +Overfull \hbox (28.41115pt too wide) in paragraph at lines 103--105 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]maximize[][][]with[][][]point[] +[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin +ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[] + +Overfull \hbox (26.7511pt too wide) in paragraph at lines 105--107 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]minimize[][][]with[][][]point[] +[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin +ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[] +[107] Overfull \hbox (11.00215pt too wide) in paragraph at lines 101--103 \OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle @@ -14400,7 +14409,7 @@ Overfull \hbox (27.2138pt too wide) in paragraph at lines 122--124 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]C[][ ][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, -[26]] +[26] Overfull \hbox (39.2138pt too wide) in paragraph at lines 125--127 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][] []C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, @@ -14508,27 +14517,32 @@ Overfull \hbox (10.9953pt too wide) in paragraph at lines 277--279 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize[][][]with[][][]point(+[]H andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] -[30 -Overfull \hbox (7.88818pt too wide) in paragraph at lines 193--195 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]fold[][][]space[][][]dimensions -[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] d -s[]$ $[], size[][][]t n, [][]ppl[][][]dimension[] +[30] +Overfull \hbox (24.14204pt too wide) in paragraph at lines 163--165 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]bounded[][][]affine[][][]image[ +][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] va +r, [][]ppl[][][]const[][][][]Linear[][][][]Expression[] -Overfull \hbox (9.77875pt too wide) in paragraph at lines 225--227 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]wrap[][][]assign[][] ([][]ppl[] -[][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[], size[ -][][]t n, enum [][]ppl[][][]enum[][][][]Bounded[] +Overfull \hbox (7.17998pt too wide) in paragraph at lines 171--173 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im +age[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]cons +t[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum -Overfull \hbox (8.82231pt too wide) in paragraph at lines 225--227 -[][][]\OT1/ptm/bc/n/10 Bounded[][][][]Integer[][][][]Type[][][][]Overflow[][] o -, const [][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] $\OMS/cms -y/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, un-signed complexity[] +Overfull \hbox (4.87045pt too wide) in paragraph at lines 175--177 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im +age[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[] +[][]dimension[][][]type[][] var, enum -Overfull \hbox (4.96187pt too wide) in paragraph at lines 257--259 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ -][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p -set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] -[109]] +Overfull \hbox (1.3616pt too wide) in paragraph at lines 175--177 +[][]\OT1/ptm/bc/n/10 ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [ +][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][]c +onst[][][][]Coefficient[][][]t[][] d, [][]ppl[] + +Overfull \hbox (5.27174pt too wide) in paragraph at lines 181--183 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]pr +eimage[][][]lhs[][][]rhs[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][] +[]t[][] ph, [][]ppl[][][]const[][][][]Linear[] +[108] Overfull \hbox (2.92062pt too wide) in paragraph at lines 347--349 \OT1/ptm/m/it/10 Transforms the poly-he-dron ref-er-enced by \OT1/pcr/m/sl/10 H andle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/s @@ -14550,21 +14564,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim age(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[] [31] -Overfull \hbox (2.7419pt too wide) in paragraph at lines 259--261 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ -][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p -set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] - -Overfull \hbox (4.41154pt too wide) in paragraph at lines 261--263 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions -[][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] -pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] - -Overfull \hbox (2.19157pt too wide) in paragraph at lines 263--265 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions -[][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] -pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] -[110] Overfull \hbox (6.19531pt too wide) in paragraph at lines 362--364 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image [][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[] @@ -14629,31 +14628,26 @@ []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat ion[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[] [34] -Overfull \hbox (8.37189pt too wide) in paragraph at lines 333--334 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S -hape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f -rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class - -Overfull \hbox (9.49188pt too wide) in paragraph at lines 339--340 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S -hape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f -rom[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class +Overfull \hbox (7.88818pt too wide) in paragraph at lines 193--195 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]fold[][][]space[][][]dimensions +[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] d +s[]$ $[], size[][][]t n, [][]ppl[][][]dimension[] -Overfull \hbox (36.272pt too wide) in paragraph at lines 345--346 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedro -n[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][] -[]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity +Overfull \hbox (9.77875pt too wide) in paragraph at lines 225--227 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]wrap[][][]assign[][] ([][]ppl[] +[][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[], size[ +][][]t n, enum [][]ppl[][][]enum[][][][]Bounded[] -Overfull \hbox (18.41342pt too wide) in paragraph at lines 351--352 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Pol -yhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Gr -id[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[] +Overfull \hbox (8.82231pt too wide) in paragraph at lines 225--227 +[][][]\OT1/ptm/bc/n/10 Bounded[][][][]Integer[][][][]Type[][][][]Overflow[][] o +, const [][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] $\OMS/cms +y/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, un-signed complexity[] -Overfull \hbox (33.32191pt too wide) in paragraph at lines 363--364 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Rational[][][][]Bo -x[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][] -[]from[][][][]Rational[][][][]Box[][][]with[][][]complexity -[111 +Overfull \hbox (4.96187pt too wide) in paragraph at lines 257--259 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ +][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p +set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] +[109 Overfull \hbox (11.6138pt too wide) in paragraph at lines 467--469 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]add[][][]space[][][]dimensions[][] []and[][][]project(+[]Handle, +[]Dimension[][][][]Type) @@ -14693,6 +14687,21 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[] [][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, [36] +Overfull \hbox (2.7419pt too wide) in paragraph at lines 259--261 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ +][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p +set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] + +Overfull \hbox (4.41154pt too wide) in paragraph at lines 261--263 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions +[][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] +pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] + +Overfull \hbox (2.19157pt too wide) in paragraph at lines 263--265 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions +[][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] +pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[] +[110 Overfull \hbox (12.81381pt too wide) in paragraph at lines 567--569 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[] [][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, @@ -14704,7 +14713,7 @@ Overfull \hbox (54.81381pt too wide) in paragraph at lines 573--575 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]Sh ape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity, -[37] +[37]] Overfull \hbox (7.44052pt too wide) in paragraph at lines 635--637 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Dimension[][][][]Type \OT1/ptm/m/it/1 0 with the di-men-sion of the vec-tor space en-clos-ing the grid ref-er-enced b @@ -14736,30 +14745,35 @@ []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]maximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean, [38] -Overfull \hbox (2.50291pt too wide) in paragraph at lines 369--370 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[ -][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n -ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][] - -Overfull \hbox (0.7429pt too wide) in paragraph at lines 375--376 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[ -][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n -ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] - -Overfull \hbox (19.06262pt too wide) in paragraph at lines 381--382 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S -hape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] -[][]new[][][][]Grid[][][]from[][][][]Octagonal[] - -Overfull \hbox (20.18262pt too wide) in paragraph at lines 387--388 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S -hape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] -[][]new[][][][]Grid[][][]from[][][][]Octagonal[] -[112] Overfull \hbox (41.6138pt too wide) in paragraph at lines 686--688 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]minimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean, [39] +Overfull \hbox (8.37189pt too wide) in paragraph at lines 333--334 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S +hape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f +rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class + +Overfull \hbox (9.49188pt too wide) in paragraph at lines 339--340 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S +hape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f +rom[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class + +Overfull \hbox (36.272pt too wide) in paragraph at lines 345--346 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedro +n[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][] +[]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity + +Overfull \hbox (18.41342pt too wide) in paragraph at lines 351--352 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Pol +yhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Gr +id[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[] + +Overfull \hbox (33.32191pt too wide) in paragraph at lines 363--364 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Rational[][][][]Bo +x[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][] +[]from[][][][]Rational[][][][]Box[][][]with[][][]complexity +[111] Overfull \hbox (7.24037pt too wide) in paragraph at lines 728--730 \OT1/ptm/m/it/10 Updates the grid ref-er-enced by \OT1/pcr/m/sl/10 Handle \OT1/ ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT1/pc @@ -14793,7 +14807,7 @@ Overfull \hbox (36.19531pt too wide) in paragraph at lines 774--776 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][ ][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]Relation[] -[40] [113] +[40] Overfull \hbox (2.5953pt too wide) in paragraph at lines 777--779 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image[][][] with[][][]congruence(+[]Handle, +[]P[]P[]L[][][][]Var, +[] @@ -14813,7 +14827,27 @@ Overfull \hbox (8.0138pt too wide) in paragraph at lines 789--791 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]wrap[][][]assign(+[]Handle, +[]List[][][ ]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, -[41] [114] +[41 +Overfull \hbox (2.50291pt too wide) in paragraph at lines 369--370 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[ +][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n +ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][] + +Overfull \hbox (0.7429pt too wide) in paragraph at lines 375--376 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[ +][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n +ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[] + +Overfull \hbox (19.06262pt too wide) in paragraph at lines 381--382 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S +hape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] +[][]new[][][][]Grid[][][]from[][][][]Octagonal[] + +Overfull \hbox (20.18262pt too wide) in paragraph at lines 387--388 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S +hape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[] +[][]new[][][][]Grid[][][]from[][][][]Octagonal[] +[112]] Overfull \hbox (6.19531pt too wide) in paragraph at lines 818--820 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][] []with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[] @@ -14847,11 +14881,11 @@ -enced by \OT1/pcr/m/sl/10 Handle[][][]1 \OT1/ptm/m/it/10 the con-cate-na-tion of \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 and the grid ref-er-enced by \OT1/pcr/m/ sl/10 Handle[] -[42] +[42] [113 Overfull \hbox (6.19531pt too wide) in paragraph at lines 898--900 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][]space[ ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[] -[43] [115] +[43]] Underfull \hbox (badness 10000) in paragraph at lines 919--920 @@ -14870,7 +14904,7 @@ Overfull \hbox (39.2138pt too wide) in paragraph at lines 952--954 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]N[]N []C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity, -[44] +[44] [114] Overfull \hbox (2.5953pt too wide) in paragraph at lines 955--957 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Grid [][][]with[][][]complexity(+[]Handle, +[]Complexity, -[] @@ -14894,7 +14928,7 @@ Overfull \hbox (22.41382pt too wide) in paragraph at lines 970--972 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa gonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, -[45] [116] +[45] Overfull \hbox (25.3953pt too wide) in paragraph at lines 1038--1040 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]relation[][][]with[][][]c onstraint(+[]Handle, +[]Constraint, ?Relation[] @@ -14918,7 +14952,7 @@ Overfull \hbox (35.6138pt too wide) in paragraph at lines 1059--1061 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]upper[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) -[46] +[46] [115] Overfull \hbox (35.6138pt too wide) in paragraph at lines 1064--1066 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]has[][][]lower[][][]bound (+[]Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) @@ -14938,7 +14972,7 @@ Overfull \hbox (20.5953pt too wide) in paragraph at lines 1084--1086 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize[][][]with[][][]p oint(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[] -[47] [117] +[47] Overfull \hbox (3.2138pt too wide) in paragraph at lines 1142--1144 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]unconstrain[][][]space[][ ][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var) @@ -14951,7 +14985,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 1151--1153 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[] -[48] [118 +[48] [116] Overfull \hbox (0.19531pt too wide) in paragraph at lines 1154--1156 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]bounded[][][]affine[][][] preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][] @@ -14975,7 +15009,7 @@ Overfull \hbox (53.6138pt too wide) in paragraph at lines 1169--1171 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]wrap[][][]assign(+[]Handl e, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation, -[49]] +[49] [117] Overfull \hbox (39.2138pt too wide) in paragraph at lines 1191--1193 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]simplify[][][]using[][][] context[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) @@ -15001,31 +15035,6 @@ []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][] Underfull \vbox (badness 2503) has occurred while \output is active [50] -Overfull \hbox (3.7116pt too wide) in paragraph at lines 759--760 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] -[][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalized[][][]a -ffine[][][]preimage[][][]lhs[][][]rhs - -Overfull \hbox (13.20297pt too wide) in paragraph at lines 765--766 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image[][][ -]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalized[] -[][]affine[][][]image[][][]with[] - -Overfull \hbox (19.78285pt too wide) in paragraph at lines 771--772 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] -[][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalize -d[][][]affine[][][]preimage[] - -Overfull \hbox (0.44244pt too wide) in paragraph at lines 777--778 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image[][][ -]lhs[][][]rhs[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[ -][][]generalized[][][]affine[][][] - -Overfull \hbox (11.82233pt too wide) in paragraph at lines 783--784 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] -[][]lhs[][][]rhs[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Gr -id[][][]generalized[][][]affine[] -[119] Overfull \hbox (9.2138pt too wide) in paragraph at lines 1235--1237 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) @@ -15045,7 +15054,7 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 1250--1252 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]fold[][][]space[][][]dime nsions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]P[]P[] -[51] [120 +[51] [118] Overfull \hbox (21.79532pt too wide) in paragraph at lines 1272--1274 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]Universe[] @@ -15080,7 +15089,32 @@ \OT1/ptm/m/it/10 Builds a new bd shape \OT1/pcr/m/sl/10 P[][][]1 \OT1/ptm/m/it/ 10 from the octagonal[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle \O T1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] -[52]] +[52] +Overfull \hbox (3.7116pt too wide) in paragraph at lines 759--760 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] +[][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalized[][][]a +ffine[][][]preimage[][][]lhs[][][]rhs + +Overfull \hbox (13.20297pt too wide) in paragraph at lines 765--766 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image[][][ +]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalized[] +[][]affine[][][]image[][][]with[] + +Overfull \hbox (19.78285pt too wide) in paragraph at lines 771--772 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] +[][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generalize +d[][][]affine[][][]preimage[] + +Overfull \hbox (0.44244pt too wide) in paragraph at lines 777--778 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image[][][ +]lhs[][][]rhs[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[ +][][]generalized[][][]affine[][][] + +Overfull \hbox (11.82233pt too wide) in paragraph at lines 783--784 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage[] +[][]lhs[][][]rhs[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Gr +id[][][]generalized[][][]affine[] +[119] Overfull \hbox (1.39532pt too wide) in paragraph at lines 1323--1325 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[] @@ -15118,16 +15152,6 @@ []from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complex ity(+[] [53] -Overfull \hbox (17.18285pt too wide) in paragraph at lines 855--856 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][ -][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]congruence[][][ -]widening[][][]assign[][][]with[] - -Overfull \hbox (5.15298pt too wide) in paragraph at lines 861--862 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generator[][][]widening[][][]assign[][] -[]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generator[][][]w -idening[][][]assign[][][]with[] -[121] Overfull \hbox (4.99533pt too wide) in paragraph at lines 1387--1389 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictl y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, @@ -15164,7 +15188,7 @@ \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10 with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Congruence\OT1/ptm/m/it/10 . -[54] +[54] [120] Overfull \hbox (0.19531pt too wide) in paragraph at lines 1427--1429 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][] []minimized[][][]constraints(+[]Handle, ?Constraint[][][] @@ -15190,26 +15214,6 @@ e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, Underfull \vbox (badness 1259) has occurred while \output is active [55] -Overfull \hbox (10.54222pt too wide) in paragraph at lines 891--892 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat -ion[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][ -][]limited[][][]congruence[] - -Overfull \hbox (1.39236pt too wide) in paragraph at lines 897--898 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati -on[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][] -[]limited[][][]generator[][][] - -Overfull \hbox (22.05283pt too wide) in paragraph at lines 903--904 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat -ion[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]congru -ence[][][]extrapolation[] - -Overfull \hbox (10.02296pt too wide) in paragraph at lines 909--910 - []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati -on[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]generat -or[][][]extrapolation[] -[122] Overfull \hbox (25.80045pt too wide) in paragraph at lines 1484--1486 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -15234,12 +15238,17 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 1512--1514 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[ ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[] -[56] -Overfull \hbox (7.5717pt too wide) in paragraph at lines 933--934 - []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]recycle[][][][]Grid[][][][]Gen -erator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]recyc -le[][][][]Grid[][][][]Generator[][][][]System ( -[123] +[56 +Overfull \hbox (17.18285pt too wide) in paragraph at lines 855--856 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][ +][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]congruence[][][ +]widening[][][]assign[][][]with[] + +Overfull \hbox (5.15298pt too wide) in paragraph at lines 861--862 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generator[][][]widening[][][]assign[][] +[]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generator[][][]w +idening[][][]assign[][][]with[] +[121]] Overfull \hbox (9.79532pt too wide) in paragraph at lines 1515--1517 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounded [][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[] @@ -15267,7 +15276,27 @@ Overfull \hbox (3.79532pt too wide) in paragraph at lines 1533--1535 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wrap[][ ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[] -[57] [124 +[57] +Overfull \hbox (10.54222pt too wide) in paragraph at lines 891--892 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat +ion[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][ +][]limited[][][]congruence[] + +Overfull \hbox (1.39236pt too wide) in paragraph at lines 897--898 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati +on[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][] +[]limited[][][]generator[][][] + +Overfull \hbox (22.05283pt too wide) in paragraph at lines 903--904 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat +ion[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]congru +ence[][][]extrapolation[] + +Overfull \hbox (10.02296pt too wide) in paragraph at lines 909--910 + []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati +on[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]generat +or[][][]extrapolation[] +[122] Overfull \hbox (3.79532pt too wide) in paragraph at lines 1555--1557 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simplif y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -15296,7 +15325,12 @@ Overfull \hbox (25.39532pt too wide) in paragraph at lines 1586--1588 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] -[58]]) (./interfaceppl__Linear__Expression__tag.tex +[58] +Overfull \hbox (7.5717pt too wide) in paragraph at lines 933--934 + []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]recycle[][][][]Grid[][][][]Gen +erator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]recyc +le[][][][]Grid[][][][]Generator[][][][]System ( +[123 Overfull \hbox (31.39532pt too wide) in paragraph at lines 1589--1591 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited [][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[] @@ -15321,19 +15355,7 @@ Overfull \hbox (27.79532pt too wide) in paragraph at lines 1620--1622 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][] []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[] -[59] -Overfull \hbox (22.34773pt too wide) in paragraph at lines 25--27 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][ -]from[][][][]Constraint[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] - $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Constrai -nt[] - -Overfull \hbox (18.96815pt too wide) in paragraph at lines 28--30 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][ -]from[][][][]Generator[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] -$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Generator -[] -[125 +[59]] Overfull \hbox (10.41382pt too wide) in paragraph at lines 1623--1625 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove[ ][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var @@ -15363,7 +15385,7 @@ Overfull \hbox (3.2138pt too wide) in paragraph at lines 1664--1666 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) -[60]] +[60] [124] Underfull \hbox (badness 10000) in paragraph at lines 1675--1676 @@ -15403,27 +15425,7 @@ Overfull \hbox (1.39532pt too wide) in paragraph at lines 1714--1716 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][][]Rational[][][][]Box[][][]with[][][]complexity(+[]Handle, +[] -[61] -Overfull \hbox (15.40788pt too wide) in paragraph at lines 53--55 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]inhomoge -neous[][][]term[][] ([][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[ -][] le, [][]ppl[][][][]Coefficient[] - -Overfull \hbox (2.65662pt too wide) in paragraph at lines 69--71 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][ -]to[][][]coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] le -, [][]ppl[][][]dimension[][][]type[][] var, - -Overfull \hbox (22.89804pt too wide) in paragraph at lines 72--74 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][ -]to[][][]inhomogeneous[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] -le, [][]ppl[][][]const[][][][]Coefficient[] - -Overfull \hbox (25.43753pt too wide) in paragraph at lines 81--83 -[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]multiply[][][][]Linear[][][][]Expression -[][][]by[][][][]Coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t -[][] le, [][]ppl[][][]const[][][][]Coefficient[] -) (./interfaceppl__MIP__Problem__tag.tex [126 +[61)] (./interfaceppl__Linear__Expression__tag.tex Overfull \hbox (11.61383pt too wide) in paragraph at lines 1717--1719 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] []from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+ @@ -15453,7 +15455,19 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][][ ]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][ ]1, +[]Handle[] -[62]] +[62] +Overfull \hbox (22.34773pt too wide) in paragraph at lines 25--27 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][ +]from[][][][]Constraint[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] + $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Constrai +nt[] + +Overfull \hbox (18.96815pt too wide) in paragraph at lines 28--30 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][ +]from[][][][]Generator[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] +$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Generator +[] +[125] Overfull \hbox (56.5953pt too wide) in paragraph at lines 1794--1796 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relatio n[][][]with[][][]constraint(+[]Handle, +[]Constraint, ?Relation[] @@ -15505,6 +15519,26 @@ []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, [64] +Overfull \hbox (15.40788pt too wide) in paragraph at lines 53--55 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]inhomoge +neous[][][]term[][] ([][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[ +][] le, [][]ppl[][][][]Coefficient[] + +Overfull \hbox (2.65662pt too wide) in paragraph at lines 69--71 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][ +]to[][][]coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] le +, [][]ppl[][][]dimension[][][]type[][] var, + +Overfull \hbox (22.89804pt too wide) in paragraph at lines 72--74 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][ +]to[][][]inhomogeneous[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] +le, [][]ppl[][][]const[][][][]Coefficient[] + +Overfull \hbox (25.43753pt too wide) in paragraph at lines 81--83 +[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]multiply[][][][]Linear[][][][]Expression +[][][]by[][][][]Coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t +[][] le, [][]ppl[][][]const[][][][]Coefficient[] +) (./interfaceppl__MIP__Problem__tag.tex [126 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1866--1868 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \ OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT @@ -15545,7 +15579,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 1906--1908 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[] -[65] +[65]] Overfull \hbox (19.39532pt too wide) in paragraph at lines 1909--1911 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]general ized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[] @@ -15592,7 +15626,7 @@ [][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]integer[][ ][]space[][][]dimensions[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[ ][][]t[][] mip, [][]ppl[][][]dimension[] -[127] +[127 Overfull \hbox (31.39532pt too wide) in paragraph at lines 1947--1949 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H[ ]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Ha @@ -15630,7 +15664,7 @@ Overfull \hbox (27.79532pt too wide) in paragraph at lines 1980--1982 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited [][][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[] -[67] +[67]] Overfull \hbox (15.79532pt too wide) in paragraph at lines 1999--2001 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][] []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[] @@ -16035,47 +16069,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]fo ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[] [77] -Overfull \hbox (15.79532pt too wide) in paragraph at lines 2406--2408 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 2413--2415 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][]constraints(+[]Constraint[][][][]System, -[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 2416--2418 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][]congruences(+[]Congruence[][][][]System, -[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 2419--2421 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][]generators(+[]Generator[][][][]System, -[] - -Underfull \hbox (badness 10000) in paragraph at lines 2427--2428 - - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 2433--2435 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][][]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[][][] - -Overfull \hbox (9.79532pt too wide) in paragraph at lines 2436--2438 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][][]N[]N[]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 2442--2444 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][][]Rational[][][][]Box(+[]Handle[][][]1, -[]Handle[][][] - -Overfull \hbox (28.99533pt too wide) in paragraph at lines 2445--2447 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]H -andle[] - -Overfull \hbox (9.12285pt too wide) in paragraph at lines 2445--2447 -\OT1/ptm/m/it/10 Builds a new oc-tag-o-nal shape \OT1/pcr/m/sl/10 P[][][]1 \OT1 -/ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle - \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] -[78 Overfull \hbox (2.1917pt too wide) in paragraph at lines 31--33 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[ ][][]class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][ @@ -16145,7 +16138,48 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]contains[][][]integer[][][]point[][] ([][]ppl[][][]const[][][][]Octagona l[][][][]Shape[][][]mpq[][][]class[] -[131]] +[131 +Overfull \hbox (15.79532pt too wide) in paragraph at lines 2406--2408 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 2413--2415 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][]constraints(+[]Constraint[][][][]System, -[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 2416--2418 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][]congruences(+[]Congruence[][][][]System, -[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 2419--2421 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][]generators(+[]Generator[][][][]System, -[] + +Underfull \hbox (badness 10000) in paragraph at lines 2427--2428 + + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 2433--2435 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][][]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[][][] + +Overfull \hbox (9.79532pt too wide) in paragraph at lines 2436--2438 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][][]N[]N[]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 2442--2444 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][][]Rational[][][][]Box(+[]Handle[][][]1, -[]Handle[][][] + +Overfull \hbox (28.99533pt too wide) in paragraph at lines 2445--2447 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]H +andle[] + +Overfull \hbox (9.12285pt too wide) in paragraph at lines 2445--2447 +\OT1/ptm/m/it/10 Builds a new oc-tag-o-nal shape \OT1/pcr/m/sl/10 P[][][]1 \OT1 +/ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle + \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[] +[78]] Overfull \hbox (28.99533pt too wide) in paragraph at lines 2448--2450 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]H @@ -16263,7 +16297,7 @@ Overfull \hbox (36.19531pt too wide) in paragraph at lines 2582--2584 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]mi nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[] -[81 +[81] Overfull \hbox (7.47116pt too wide) in paragraph at lines 83--85 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]is[][][]topologically[][][]closed[][] ([][]ppl[][][]const[][][][]Octagon @@ -16315,7 +16349,7 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]upper[][][]bound[][][]assign[][] ([][]ppl[][][][]Octagonal[][][][]Shape[ ][][]mpq[][][]class[][][]t[][] x, [][]ppl[] -[132]] +[132 Overfull \hbox (3.2138pt too wide) in paragraph at lines 2587--2589 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ex ternal[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) @@ -16343,7 +16377,7 @@ Overfull \hbox (32.5953pt too wide) in paragraph at lines 2627--2629 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re fine[][][]with[][][]congruences( +[]Handle, +[]Congruence[] -[82] +[82]] Overfull \hbox (2.5953pt too wide) in paragraph at lines 2637--2639 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]un constrain[][][]space[][][]dimension(+[]Handle, +[]P[]P[] @@ -16412,7 +16446,7 @@ Overfull \hbox (6.19531pt too wide) in paragraph at lines 2702--2704 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] B[]H[]M[]Z05[][][]widening[][][]assign(+[]Handle[][][]1, +[]Handle[] -[84 +[84] Overfull \hbox (4.79182pt too wide) in paragraph at lines 139--141 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]Octa @@ -16489,15 +16523,7 @@ nal[][][][]Shape[][][]mpq[] Overfull \hbox (2.17026pt too wide) in paragraph at lines 173--175 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]O]ctagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]Octagonal[][][][]Sh -ape[][][]mpq[][][]class[][][]t[][] ph, - -Overfull \hbox (11.47173pt too wide) in paragraph at lines 179--181 -[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas -s[][][]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]Oct -agonal[][][][]Shape[][][]mpq[][][]class[] -[133 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]O Overfull \hbox (33.79532pt too wide) in paragraph at lines 2705--2707 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]wi dening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[] @@ -16530,7 +16556,15 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 2723--2725 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][] C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[] -[85]] +[85]ctagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]Octagonal[][][][]Sh +ape[][][]mpq[][][]class[][][]t[][] ph, + +Overfull \hbox (11.47173pt too wide) in paragraph at lines 179--181 +[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas +s[][][]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]Oct +agonal[][][][]Shape[][][]mpq[][][]class[] +[133 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2739--2741 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[] @@ -16558,7 +16592,7 @@ Overfull \hbox (39.79532pt too wide) in paragraph at lines 2776--2778 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension(+[]Dimension[] -[86] +[86]] Overfull \hbox (24.19531pt too wide) in paragraph at lines 2783--2785 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][] []Polyhedron[][][][]Grid[][][]from[][][]constraints(+[]Constraint[] @@ -16728,7 +16762,7 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas s[][][]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]Octagonal[][][][] Shape[][][]mpq[][][]class[][][]t[][] ph, -[134] +[134 Overfull \hbox (15.2138pt too wide) in paragraph at lines 2876--2878 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) @@ -16764,7 +16798,7 @@ Overfull \hbox (50.5953pt too wide) in paragraph at lines 2913--2915 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]affine[][][]dimension(+[]Handle, ?Dimension[] -[89] +[89]] Overfull \hbox (21.2138pt too wide) in paragraph at lines 2916--2918 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]relation[][][]with[][][]constraint(+[]Handle, @@ -16837,6 +16871,46 @@ []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]topological[][][]closure[][][]assign(+[] [91] +Overfull \hbox (6.19531pt too wide) in paragraph at lines 2995--2997 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension(+[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 2998--3000 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[] + +Overfull \hbox (9.2138pt too wide) in paragraph at lines 3001--3003 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, + +Overfull \hbox (2.5953pt too wide) in paragraph at lines 3004--3006 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]affine[][][]preimage(+[]Handle, +[]P[]P[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 3007--3009 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounded[][][]affine[][][]image(+[]Handle, +[] + +Overfull \hbox (15.2138pt too wide) in paragraph at lines 3010--3012 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]bounded[][][]affine[][][]preimage(+[]Handle, + +Overfull \hbox (21.2138pt too wide) in paragraph at lines 3013--3015 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Handle, + +Overfull \hbox (6.19531pt too wide) in paragraph at lines 3016--3018 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 3019--3021 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] + +Overfull \hbox (15.79532pt too wide) in paragraph at lines 3022--3024 +[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed +ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[] +[92] Overfull \hbox (0.54193pt too wide) in paragraph at lines 229--231 []\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[ ][][][]M[]S[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][ @@ -16891,47 +16965,7 @@ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]cla ss[][][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][] [][]Octagonal[][][][]Shape[][][]mpq[][][]class[] -[135 -Overfull \hbox (6.19531pt too wide) in paragraph at lines 2995--2997 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension(+[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 2998--3000 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[] - -Overfull \hbox (9.2138pt too wide) in paragraph at lines 3001--3003 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, - -Overfull \hbox (2.5953pt too wide) in paragraph at lines 3004--3006 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]affine[][][]preimage(+[]Handle, +[]P[]P[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 3007--3009 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounded[][][]affine[][][]image(+[]Handle, +[] - -Overfull \hbox (15.2138pt too wide) in paragraph at lines 3010--3012 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]bounded[][][]affine[][][]preimage(+[]Handle, - -Overfull \hbox (21.2138pt too wide) in paragraph at lines 3013--3015 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Handle, - -Overfull \hbox (6.19531pt too wide) in paragraph at lines 3016--3018 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 3019--3021 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][] - -Overfull \hbox (15.79532pt too wide) in paragraph at lines 3022--3024 -[]\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed -ron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[] -[92]] +[135] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3029--3031 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed ron[][][][]Grid[][][]intersection[][][]assign(+[]Handle[][][] @@ -16996,6 +17030,45 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]from[][][]space[][][]dimension(+[]Dimension[] [94] +Overfull \hbox (21.2138pt too wide) in paragraph at lines 3111--3113 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][]constraints(+[]Constraint[][][][]System, + +Overfull \hbox (21.2138pt too wide) in paragraph at lines 3114--3116 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][]congruences(+[]Congruence[][][][]System, + +Underfull \hbox (badness 10000) in paragraph at lines 3122--3123 + + +Overfull \hbox (31.39532pt too wide) in paragraph at lines 3128--3130 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron +(+[] + +Overfull \hbox (10.35161pt too wide) in paragraph at lines 3128--3130 +\OT1/ptm/m/it/10 Builds a new pointset pow-er-set \OT1/pcr/m/sl/10 P[][][]1 \OT +1/ptm/m/it/10 from the pointset[][][]powerset[][][]c[][][]polyhedron ref-er-enc +ed by han-dle \OT1/pcr/m/sl/10 Handle[] + +Overfull \hbox (27.79532pt too wide) in paragraph at lines 3131--3133 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][][]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] + +Overfull \hbox (19.39532pt too wide) in paragraph at lines 3134--3136 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron +[] + +Overfull \hbox (10.35161pt too wide) in paragraph at lines 3134--3136 +\OT1/ptm/m/it/10 Builds a new pointset pow-er-set \OT1/pcr/m/sl/10 P[][][]1 \OT +1/ptm/m/it/10 from the pointset[][][]powerset[][][]c[][][]polyhedron ref-er-enc +ed by han-dle \OT1/pcr/m/sl/10 Handle[] + +Overfull \hbox (19.39532pt too wide) in paragraph at lines 3137--3139 +[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] +Polyhedron[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[] +[95] Overfull \hbox (1.20328pt too wide) in paragraph at lines 287--288 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]cla ss[][][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]n @@ -17036,45 +17109,6 @@ ss[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/ m/n/8 int ppl[][][]new[][][][]Octagonal[] [136] -Overfull \hbox (21.2138pt too wide) in paragraph at lines 3111--3113 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][]constraints(+[]Constraint[][][][]System, - -Overfull \hbox (21.2138pt too wide) in paragraph at lines 3114--3116 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][]congruences(+[]Congruence[][][][]System, - -Underfull \hbox (badness 10000) in paragraph at lines 3122--3123 - - -Overfull \hbox (31.39532pt too wide) in paragraph at lines 3128--3130 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron -(+[] - -Overfull \hbox (10.35161pt too wide) in paragraph at lines 3128--3130 -\OT1/ptm/m/it/10 Builds a new pointset pow-er-set \OT1/pcr/m/sl/10 P[][][]1 \OT -1/ptm/m/it/10 from the pointset[][][]powerset[][][]c[][][]polyhedron ref-er-enc -ed by han-dle \OT1/pcr/m/sl/10 Handle[] - -Overfull \hbox (27.79532pt too wide) in paragraph at lines 3131--3133 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][][]C[][][][]Polyhedron(+[]Handle[][][]1, -[]Handle[] - -Overfull \hbox (19.39532pt too wide) in paragraph at lines 3134--3136 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron -[] - -Overfull \hbox (10.35161pt too wide) in paragraph at lines 3134--3136 -\OT1/ptm/m/it/10 Builds a new pointset pow-er-set \OT1/pcr/m/sl/10 P[][][]1 \OT -1/ptm/m/it/10 from the pointset[][][]powerset[][][]c[][][]polyhedron ref-er-enc -ed by han-dle \OT1/pcr/m/sl/10 Handle[] - -Overfull \hbox (19.39532pt too wide) in paragraph at lines 3137--3139 -[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] -Polyhedron[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[] -[95] Overfull \hbox (3.2138pt too wide) in paragraph at lines 3171--3173 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) @@ -17150,7 +17184,7 @@ Overfull \hbox (15.2138pt too wide) in paragraph at lines 3243--3245 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) -[97 +[97] Overfull \hbox (29.79253pt too wide) in paragraph at lines 335--336 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]cla ss[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT @@ -17185,7 +17219,7 @@ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]cla ss[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]c omplexity()[] \OT1/pcr/m/n/8 int ppl[] -[137]] +[137 Overfull \hbox (2.0138pt too wide) in paragraph at lines 3262--3264 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]add[][][]constraint(+[]Handle, +[]Constraint) @@ -17217,7 +17251,7 @@ Overfull \hbox (2.5953pt too wide) in paragraph at lines 3283--3285 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]refine[][][]with[][][]congruences( +[]Handle, +[] -[98] +[98]] Overfull \hbox (20.5953pt too wide) in paragraph at lines 3299--3301 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]unconstrain[][][]space[][][]dimension(+[]Handle, +[] @@ -17267,43 +17301,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]intersection[][][]assign(+[]Handle[][][]1, +[]Handle[] [99] -Overfull \hbox (12.19531pt too wide) in paragraph at lines 3336--3338 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]upper[][][]bound[][][]assign(+[]Handle[][][]1, +[]Handle[] - -Overfull \hbox (8.5953pt too wide) in paragraph at lines 3339--3341 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 3342--3344 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[] - -Overfull \hbox (1.39532pt too wide) in paragraph at lines 3345--3347 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]upper[][][]bound[][][]assign[][][]if[][][]exact(+[]Handle[][][] - -Overfull \hbox (12.19531pt too wide) in paragraph at lines 3348--3350 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][]simplify[][][]using[][][]context[][][]assign(+[]Handle[] - -Overfull \hbox (9.79532pt too wide) in paragraph at lines 3355--3357 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][][]B[]H[]Z03[][][][]B[]H[]R[]Z03[][][][]B[]H[]R[]Z03[][][]widening[][][]a -ssign(+[] - -Overfull \hbox (9.79532pt too wide) in paragraph at lines 3358--3360 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][][]B[]H[]Z03[][][][]H79[][][][]H79[][][]widening[][][]assign(+[]Handle[] - -Overfull \hbox (0.19531pt too wide) in paragraph at lines 3361--3363 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][][]B[]G[]P99[][][][]B[]H[]R[]Z03[][][]extrapolation[][][]assign(+[] - -Overfull \hbox (18.19531pt too wide) in paragraph at lines 3364--3366 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro -n[][][][]B[]G[]P99[][][][]H79[][][]extrapolation[][][]assign(+[]Handle[] -[100 Overfull \hbox (7.13284pt too wide) in paragraph at lines 377--378 []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]cla ss[][][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]ne @@ -17343,7 +17340,44 @@ []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r elation[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal [][][][]Shape[][][]mpq[][][]class[] -[138]] +[138] +Overfull \hbox (12.19531pt too wide) in paragraph at lines 3336--3338 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]upper[][][]bound[][][]assign(+[]Handle[][][]1, +[]Handle[] + +Overfull \hbox (8.5953pt too wide) in paragraph at lines 3339--3341 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 3342--3344 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[] + +Overfull \hbox (1.39532pt too wide) in paragraph at lines 3345--3347 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]upper[][][]bound[][][]assign[][][]if[][][]exact(+[]Handle[][][] + +Overfull \hbox (12.19531pt too wide) in paragraph at lines 3348--3350 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][]simplify[][][]using[][][]context[][][]assign(+[]Handle[] + +Overfull \hbox (9.79532pt too wide) in paragraph at lines 3355--3357 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][][]B[]H[]Z03[][][][]B[]H[]R[]Z03[][][][]B[]H[]R[]Z03[][][]widening[][][]a +ssign(+[] + +Overfull \hbox (9.79532pt too wide) in paragraph at lines 3358--3360 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][][]B[]H[]Z03[][][][]H79[][][][]H79[][][]widening[][][]assign(+[]Handle[] + +Overfull \hbox (0.19531pt too wide) in paragraph at lines 3361--3363 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][][]B[]G[]P99[][][][]B[]H[]R[]Z03[][][]extrapolation[][][]assign(+[] + +Overfull \hbox (18.19531pt too wide) in paragraph at lines 3364--3366 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro +n[][][][]B[]G[]P99[][][][]H79[][][]extrapolation[][][]assign(+[]Handle[] +[100] Overfull \hbox (14.5953pt too wide) in paragraph at lines 3373--3375 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -17385,6 +17419,36 @@ []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]iterator[][][]from[][][]iterator(+[]Iterator[] [101] +Overfull \hbox (18.70169pt too wide) in paragraph at lines 425--426 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g +et[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ +][]mpq[][][]class[][][]get[][][]constraints + +Overfull \hbox (24.25175pt too wide) in paragraph at lines 431--432 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g +et[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ +][]mpq[][][]class[][][]get[][][]congruences + +Overfull \hbox (3.3225pt too wide) in paragraph at lines 437--438 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g +et[][][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[ +][][][]Shape[][][]mpq[][][]class[] + +Overfull \hbox (8.87256pt too wide) in paragraph at lines 443--444 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g +et[][][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[ +][][][]Shape[][][]mpq[][][]class[] + +Overfull \hbox (27.39282pt too wide) in paragraph at lines 467--468 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]c +ontains[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] +[][]Shape[][][]mpq[][][]class[][][]contains[] + +Overfull \hbox (0.92271pt too wide) in paragraph at lines 473--474 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i +s[][][]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ +][][]Shape[][][]mpq[][][]class[][][]is[][][] +[139 Overfull \hbox (0.19531pt too wide) in paragraph at lines 3414--3416 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][] @@ -17400,7 +17464,7 @@ Overfull \hbox (12.19531pt too wide) in paragraph at lines 3454--3456 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]from[][][]space[][][]dimension(+[]Dimension[] -[102] +[102]] Overfull \hbox (0.19531pt too wide) in paragraph at lines 3461--3463 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]from[][][]constraints(+[]Constraint[][][] @@ -17432,36 +17496,31 @@ [][][]Polyhedron[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]comp lexity(+[] [103] -Overfull \hbox (18.70169pt too wide) in paragraph at lines 425--426 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g -et[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ -][]mpq[][][]class[][][]get[][][]constraints - -Overfull \hbox (24.25175pt too wide) in paragraph at lines 431--432 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g -et[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ -][]mpq[][][]class[][][]get[][][]congruences +Overfull \hbox (1.49265pt too wide) in paragraph at lines 485--486 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]t +opological[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal +[][][][]Shape[][][]mpq[][][]class[] -Overfull \hbox (3.3225pt too wide) in paragraph at lines 437--438 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g -et[][][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[ -][][][]Shape[][][]mpq[][][]class[] +Overfull \hbox (6.86339pt too wide) in paragraph at lines 491--492 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]b +ounds[][][]from[][][]above()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]S +hape[][][]mpq[][][]class[][][]bounds[] -Overfull \hbox (8.87256pt too wide) in paragraph at lines 443--444 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g -et[][][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[ -][][][]Shape[][][]mpq[][][]class[] +Overfull \hbox (6.96324pt too wide) in paragraph at lines 497--498 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]b +ounds[][][]from[][][]below()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]S +hape[][][]mpq[][][]class[][][]bounds[] -Overfull \hbox (27.39282pt too wide) in paragraph at lines 467--468 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]c -ontains[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] -[][]Shape[][][]mpq[][][]class[][][]contains[] +Overfull \hbox (21.833pt too wide) in paragraph at lines 515--516 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]m +aximize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][ +]Shape[][][]mpq[][][]class[][][]maximize[] -Overfull \hbox (0.92271pt too wide) in paragraph at lines 473--474 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i -s[][][]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ -][][]Shape[][][]mpq[][][]class[][][]is[][][] -[139] +Overfull \hbox (20.17282pt too wide) in paragraph at lines 521--522 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]m +inimize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][ +]Shape[][][]mpq[][][]class[][][]minimize[] +[140] Overfull \hbox (15.2138pt too wide) in paragraph at lines 3521--3523 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) @@ -17576,31 +17635,36 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]topological[][][]closure[][][]assign(+[]Handle) [106] -Overfull \hbox (1.49265pt too wide) in paragraph at lines 485--486 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]t -opological[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal -[][][][]Shape[][][]mpq[][][]class[] +Overfull \hbox (6.39226pt too wide) in paragraph at lines 533--534 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]c +ontains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in +t ppl[][][][]Octagonal[][][][]Shape[] -Overfull \hbox (6.86339pt too wide) in paragraph at lines 491--492 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]b -ounds[][][]from[][][]above()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]S -hape[][][]mpq[][][]class[][][]bounds[] +Overfull \hbox (13.10172pt too wide) in paragraph at lines 539--540 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]s +trictly[][][]contains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT +1/pcr/m/n/8 int ppl[][][][]Octagonal[] -Overfull \hbox (6.96324pt too wide) in paragraph at lines 497--498 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]b -ounds[][][]from[][][]below()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]S -hape[][][]mpq[][][]class[][][]bounds[] +Overfull \hbox (10.97186pt too wide) in paragraph at lines 545--546 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i +s[][][]disjoint[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] + \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[] -Overfull \hbox (21.833pt too wide) in paragraph at lines 515--516 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]m -aximize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][ -]Shape[][][]mpq[][][]class[][][]maximize[] +Overfull \hbox (0.9423pt too wide) in paragraph at lines 551--552 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]e +quals[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int +ppl[][][][]Octagonal[][][][]Shape[][][] -Overfull \hbox (20.17282pt too wide) in paragraph at lines 521--522 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]m -inimize[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][ -]Shape[][][]mpq[][][]class[][][]minimize[] -[140] +Overfull \hbox (13.36177pt too wide) in paragraph at lines 563--564 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a +dd[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][] +[]mpq[][][]class[][][]add[][][]constraint + +Overfull \hbox (18.91183pt too wide) in paragraph at lines 569--570 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a +dd[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][] +[]mpq[][][]class[][][]add[][][]congruence +[141] Overfull \hbox (11.6138pt too wide) in paragraph at lines 3649--3651 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]unconstrain[][][]space[][][]dimension(+[]Handle, @@ -17646,6 +17710,46 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[] [107] +Overfull \hbox (22.05167pt too wide) in paragraph at lines 575--576 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a +dd[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ +][]mpq[][][]class[][][]add[][][]constraints + +Overfull \hbox (27.60173pt too wide) in paragraph at lines 581--582 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a +dd[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ +][]mpq[][][]class[][][]add[][][]congruences + +Overfull \hbox (16.4929pt too wide) in paragraph at lines 587--588 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r +efine[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] +[][]Shape[][][]mpq[][][]class[][][]refine[] + +Overfull \hbox (22.04297pt too wide) in paragraph at lines 593--594 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r +efine[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] +[][]Shape[][][]mpq[][][]class[][][]refine[] + +Overfull \hbox (20.3828pt too wide) in paragraph at lines 599--600 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r +efine[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ +][][]Shape[][][]mpq[][][]class[][][]refine[] + +Overfull \hbox (25.93286pt too wide) in paragraph at lines 605--606 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r +efine[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ +][][]Shape[][][]mpq[][][]class[][][]refine[] + +Overfull \hbox (31.32278pt too wide) in paragraph at lines 611--612 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i +ntersection[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shap +e[][][]mpq[][][]class[][][]intersection[] + +Overfull \hbox (4.13298pt too wide) in paragraph at lines 617--618 + []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]u +pper[][][]bound[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][] +Shape[][][]mpq[][][]class[][][]upper[] +[142] Overfull \hbox (32.5953pt too wide) in paragraph at lines 3683--3685 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]intersection[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -17689,36 +17793,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][][]B[]G[]P99[][][][]H79[][][]extrapolation[][][]assign(+[]Handle[] [108] -Overfull \hbox (6.39226pt too wide) in paragraph at lines 533--534 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]c -ontains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in -t ppl[][][][]Octagonal[][][][]Shape[] - -Overfull \hbox (13.10172pt too wide) in paragraph at lines 539--540 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]s -trictly[][][]contains[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT -1/pcr/m/n/8 int ppl[][][][]Octagonal[] - -Overfull \hbox (10.97186pt too wide) in paragraph at lines 545--546 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i -s[][][]disjoint[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] - \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[] - -Overfull \hbox (0.9423pt too wide) in paragraph at lines 551--552 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]e -quals[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int -ppl[][][][]Octagonal[][][][]Shape[][][] - -Overfull \hbox (13.36177pt too wide) in paragraph at lines 563--564 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a -dd[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][] -[]mpq[][][]class[][][]add[][][]constraint - -Overfull \hbox (18.91183pt too wide) in paragraph at lines 569--570 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a -dd[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][] -[]mpq[][][]class[][][]add[][][]congruence -[141 Overfull \hbox (26.5953pt too wide) in paragraph at lines 3723--3725 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[] @@ -17755,7 +17829,7 @@ Overfull \hbox (0.19531pt too wide) in paragraph at lines 3748--3750 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]map[][][]space[][][]dimensions(+[]Handle, +[]P[][][] -[109]] +[109] Overfull \hbox (18.19531pt too wide) in paragraph at lines 3755--3757 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[] [][][]Polyhedron[][][]iterator[][][]from[][][]iterator(+[]Iterator[] @@ -17772,76 +17846,6 @@ []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol yhedron[][][]iterator[][][]get[][][]disjunct(+[]Iterator, -[] ) -Overfull \hbox (4.9953pt too wide) in paragraph at lines 3785--199 -[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol -yhedron[][][]drop[][][]disjuncts(+[]Handle, +[]Iterator[] -(./PI_Compilation.tex) (./PI_SD_Features.tex [110] [111] -Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87 -[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c -on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared -[112] -Overfull \hbox (22.05167pt too wide) in paragraph at lines 575--576 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a -dd[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ -][]mpq[][][]class[][][]add[][][]constraints - -Overfull \hbox (27.60173pt too wide) in paragraph at lines 581--582 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a -dd[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][ -][]mpq[][][]class[][][]add[][][]congruences - -Overfull \hbox (16.4929pt too wide) in paragraph at lines 587--588 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r -efine[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] -[][]Shape[][][]mpq[][][]class[][][]refine[] - -Overfull \hbox (22.04297pt too wide) in paragraph at lines 593--594 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r -efine[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][] -[][]Shape[][][]mpq[][][]class[][][]refine[] - -Overfull \hbox (20.3828pt too wide) in paragraph at lines 599--600 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r -efine[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ -][][]Shape[][][]mpq[][][]class[][][]refine[] - -Overfull \hbox (25.93286pt too wide) in paragraph at lines 605--606 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]r -efine[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][ -][][]Shape[][][]mpq[][][]class[][][]refine[] - -Overfull \hbox (31.32278pt too wide) in paragraph at lines 611--612 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]i -ntersection[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shap -e[][][]mpq[][][]class[][][]intersection[] - -Overfull \hbox (4.13298pt too wide) in paragraph at lines 617--618 - []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]u -pper[][][]bound[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][] -Shape[][][]mpq[][][]class[][][]upper[] -[142 -Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101 -\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe -rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). -) -Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207 -[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you -should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[] -(./modules.tex)] (./group__PPL__Prolog__interface.tex) [113] [114] (./refman.ind - [115]) (./refman.aux) ) -(see the transcript file for additional information){/usr/share/texlive/texmf-d -ist/fonts/enc/dvips/base/8r.enc} -Output written on refman.pdf (121 pages, 626993 bytes). -Transcript written on refman.log. -make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-prolog-interface.latex-dir' -pdftops ppl-user-configured-prolog-interface-1.2.pdf ppl-user-configured-prolog-interface-1.2.ps - +[143 +Overfull \hbox (4.9953pt too wide) in paragraph at lines 3785--199 +[]\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol +yhedron[][][]drop[][][]disjuncts(+[]Handle, +[]Iterator[] +(./PI_Compilation.tex)] (./PI_SD_Features.tex [110] [111] +Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87 +[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c +on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared +[112] +Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101 +\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe +rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). +) +Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207 +[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you +should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[] +(./modules.tex) (./group__PPL__Prolog__interface.tex) [113] Overfull \hbox (3.352pt too wide) in paragraph at lines 671--672 []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a ffine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][][]Shape[][][] @@ -17917,7 +17931,22 @@ []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]g eneralized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[ ][][][]Octagonal[][][][]Shape[][][]mpq[] -[144] +[144 [114] (./refman.ind + [115]) (./refman.aux]) ) +(see the transcript file for additional information){/usr/share/texlive/texmf-d +ist/fonts/enc/dvips/base/8r.enc} Overfull \hbox (10.34235pt too wide) in paragraph at lines 719--720 []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]a dd[][][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][ @@ -17947,7 +17976,12 @@ []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]f old[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][ ][]Shape[][][]mpq[][][]class[][][]fold[] -[145] +[145 +Output written on refman.pdf (121 pages, 626913 bytes). +Transcript written on refman.log. +make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-prolog-interface.latex-dir' +pdftops ppl-user-configured-prolog-interface-1.2.pdf ppl-user-configured-prolog-interface-1.2.ps +] Overfull \hbox (5.6228pt too wide) in paragraph at lines 755--756 []\OT1/ptm/b/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]m ap[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Octagonal[][][] @@ -19279,7 +19313,8 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]Pointset[] [][][]Powerset[][][][]C[][][][]Polyhedron[] -[182] +[182]gzip -n --best --force ppl-user-configured-prolog-interface-1.2.ps + Overfull \hbox (0.48979pt too wide) in paragraph at lines 41--43 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]is[][][]empty[][] ([][]ppl[][][]const[][][][]Pointset[][][][]Po @@ -19462,8 +19497,7 @@ []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][ ][]Pointset[][][][]Powerset[] -[184]gzip -n --best --force ppl-user-configured-prolog-interface-1.2.ps - +[184] Overfull \hbox (27.69139pt too wide) in paragraph at lines 139--141 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][] Polyhedron[][][]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]Pointset[] @@ -22211,7 +22245,7 @@ ist/fonts/type1/urw/times/utmbi8a.pfb> -Output written on refman.pdf (276 pages, 1680694 bytes). +Output written on refman.pdf (276 pages, 1680604 bytes). Transcript written on refman.log. makeindex refman.idx This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). @@ -37733,7 +37767,7 @@ ist/fonts/type1/urw/times/utmbi8a.pfb> -Output written on refman.pdf (325 pages, 2050162 bytes). +Output written on refman.pdf (325 pages, 2050076 bytes). Transcript written on refman.log. latex_count=8 ; \ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\ @@ -53242,7 +53276,7 @@ ist/fonts/type1/urw/times/utmbi8a.pfb> -Output written on refman.pdf (325 pages, 2050269 bytes). +Output written on refman.pdf (325 pages, 2050056 bytes). Transcript written on refman.log. makeindex refman.idx This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support). @@ -68750,11 +68784,10 @@ ist/fonts/type1/urw/times/utmbi8a.pfb> -Output written on refman.pdf (325 pages, 2050269 bytes). +Output written on refman.pdf (325 pages, 2050056 bytes). Transcript written on refman.log. make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-c-interface.latex-dir' pdftops ppl-user-configured-c-interface-1.2.pdf ppl-user-configured-c-interface-1.2.ps -gzip -n --best --force ppl-user-configured-c-interface-1.2.ps rm -rf ppl-user-configured-c-interface-1.2-html rm -rf ppl-user-configured-prolog-interface-1.2-html /bin/sed -e 's//PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's//Configured C/' -e 's//configured-c-interface/' -e 's///' \ @@ -68763,16 +68796,16 @@ /bin/sed -e 's//PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's//Configured Prolog/' -e 's//configured-prolog-interface/' -e 's///' \ ./user-language-interface.tex \ > user-configured-prolog-interface.tex -/bin/sed -e 's//PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's//Configured Prolog/' -e 's//configured-prolog-interface/' -e 's///' -f ./interfaces-html.sed -e 's||ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \ - -e 's||'"./gpl.dox ./fdl.dox ./../interfaces/Prolog/Prolog_configured_interface.dox ./../interfaces/Prolog/Prolog_interface_sysindep.dox ../interfaces/Prolog/Prolog_configured_domains.dox ./../interfaces/Prolog/Prolog_interface_compilation.dox ./../interfaces/Prolog/Prolog_interface_sysdep.dox"'|' \ - user-language-interface.doxyconf \ - > Doxyfile.user-configured-prolog-interface-html /bin/sed -e 's//PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's//Configured C/' -e 's//configured-c-interface/' -e 's///' -f ./interfaces-html.sed -e 's||ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \ -e 's||'"./gpl.dox ./fdl.dox ./../interfaces/C/C_interface.dox ../interfaces/C/ppl_c.h"'|' \ user-language-interface.doxyconf \ > Doxyfile.user-configured-c-interface-html -TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-prolog-interface-html +/bin/sed -e 's//PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's//Configured Prolog/' -e 's//configured-prolog-interface/' -e 's///' -f ./interfaces-html.sed -e 's||ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \ + -e 's||'"./gpl.dox ./fdl.dox ./../interfaces/Prolog/Prolog_configured_interface.dox ./../interfaces/Prolog/Prolog_interface_sysindep.dox ../interfaces/Prolog/Prolog_configured_domains.dox ./../interfaces/Prolog/Prolog_interface_compilation.dox ./../interfaces/Prolog/Prolog_interface_sysdep.dox"'|' \ + user-language-interface.doxyconf \ + > Doxyfile.user-configured-prolog-interface-html TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-c-interface-html +TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-prolog-interface-html warning: doxygen no longer ships with the FreeSans font. You may want to clear or change DOT_FONTNAME. Otherwise you run the risk that the wrong font is being used for dot generated graphs. @@ -68780,9 +68813,9 @@ You may want to clear or change DOT_FONTNAME. Otherwise you run the risk that the wrong font is being used for dot generated graphs. /build/ppl-1.2/doc/gpl.dox:6: warning: multiple use of section label 'GPL' while adding anchor, (first occurrence: GPL) -/build/ppl-1.2/doc/fdl.dox:6: warning: multiple use of section label 'GFDL' while adding anchor, (first occurrence: GFDL) /build/ppl-1.2/doc/gpl.dox:6: warning: multiple use of section label 'GPL' while adding anchor, (first occurrence: GPL) /build/ppl-1.2/doc/fdl.dox:6: warning: multiple use of section label 'GFDL' while adding anchor, (first occurrence: GFDL) +/build/ppl-1.2/doc/fdl.dox:6: warning: multiple use of section label 'GFDL' while adding anchor, (first occurrence: GFDL) GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: GPL) GFDL:-1: warning: multiple use of section label 'GFDL', (first occurrence: GFDL) GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: GPL) @@ -68801,12 +68834,13 @@ tar cf ppl-user-configured-prolog-interface-1.2-html.tar ppl-user-configured-prolog-interface-1.2-html gzip -n --best --force ppl-user-configured-prolog-interface-1.2-html.tar +gzip -n --best --force ppl-user-configured-c-interface-1.2.ps tar cf ppl-user-configured-c-interface-1.2-html.tar ppl-user-configured-c-interface-1.2-html gzip -n --best --force ppl-user-configured-c-interface-1.2-html.tar make[2]: Leaving directory '/build/ppl-1.2/doc' make[1]: Leaving directory '/build/ppl-1.2' dh_auto_build -Nlibppl-doc - make -j3 + make -j4 make[1]: Entering directory '/build/ppl-1.2' make all-recursive make[2]: Entering directory '/build/ppl-1.2' @@ -68952,7 +68986,7 @@ # FIXME: there are test failures with swi-prolog 7.2 # for now just ignore these. dh_auto_test CFLAGS="-gstabs -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -gstabs -marm" CXXFLAGS="-gstabs -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -gstabs -fpermissive -marm" || true - make -j3 check VERBOSE=1 + make -j4 check VERBOSE=1 make[2]: Entering directory '/build/ppl-1.2' Making check in . make[3]: Entering directory '/build/ppl-1.2' @@ -69093,7 +69127,7 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o cotree1 cotree1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o cotree1 cotree1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/cotree1 cotree1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp make[5]: Leaving directory '/build/ppl-1.2/tests/CO_Tree' make check-TESTS @@ -69121,13 +69155,14 @@ g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o ascii_dump_load1.o ascii_dump_load1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o exceptions1.o exceptions1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o pipproblem1.o pipproblem1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o pipproblem2.o pipproblem2.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from exceptions1.cc:24: + from pipproblem1.cc:24: ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -69139,7 +69174,7 @@ from ../../src/ppl_include_files.hh:3, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from exceptions1.cc:24: + from pipproblem1.cc:24: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ @@ -69165,37 +69200,35 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -In file included from ../../src/Linear_System_templates.hh:30, - from ../../src/Linear_System_defs.hh:580, - from ../../src/Constraint_System_defs.hh:29, - from ../../src/Box_inlines.hh:28, - from ../../src/Box_defs.hh:2285, - from ../../src/Linear_Form_templates.hh:29, - from ../../src/ppl_include_files.hh:9, +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from exceptions1.cc:24: -../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': -../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ -../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': -../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ + from pipproblem2.cc:24: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from pipproblem2.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from pipproblem1.cc:24: + from exceptions1.cc:24: ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -69207,7 +69240,7 @@ from ../../src/ppl_include_files.hh:3, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from pipproblem1.cc:24: + from exceptions1.cc:24: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ @@ -69220,7 +69253,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from ascii_dump_load1.cc:24: + from pipproblem1.cc:24: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69244,7 +69277,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from pipproblem1.cc:24: + from ascii_dump_load1.cc:24: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69259,30 +69292,30 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o pipproblem2.o pipproblem2.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o pipproblem3.o pipproblem3.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from pipproblem2.cc:24: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, +In file included from ../../src/Linear_System_templates.hh:30, + from ../../src/Linear_System_defs.hh:580, + from ../../src/Constraint_System_defs.hh:29, + from ../../src/Box_inlines.hh:28, + from ../../src/Box_defs.hh:2285, + from ../../src/Linear_Form_templates.hh:29, + from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, from pipproblem2.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ +../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': +../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ +../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': +../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69292,7 +69325,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from pipproblem2.cc:24: + from exceptions1.cc:24: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69307,6 +69340,13 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o pipproblem3.o pipproblem3.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o weightwatch1.o weightwatch1.cc +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69329,6 +69369,29 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from weightwatch1.cc:24: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from weightwatch1.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69353,29 +69416,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../utils -I../../tests -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o weightwatch1.o weightwatch1.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from weightwatch1.cc:24: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from weightwatch1.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69400,26 +69440,20 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp -libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp -libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem1 pipproblem1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem1 pipproblem1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem1 pipproblem1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem3 pipproblem3.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem3 pipproblem3.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem3 pipproblem3.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp -libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp -/bin/bash ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o weightwatch1 weightwatch1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp +/bin/sh ../../libtool --tag=CXX --mode=link g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z,relro -o weightwatch1 weightwatch1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -Wl,-z -Wl,relro -o .libs/weightwatch1 weightwatch1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp make[5]: Leaving directory '/build/ppl-1.2/tests/PIP_Problem' make check-TESTS make[5]: Entering directory '/build/ppl-1.2/tests/PIP_Problem' make[6]: Entering directory '/build/ppl-1.2/tests/PIP_Problem' +PASS: pipproblem2 PASS: ascii_dump_load1 PASS: exceptions1 PASS: pipproblem1 -PASS: pipproblem2 PASS: pipproblem3 PASS: weightwatch1 ============================================================================ @@ -69443,24 +69477,36 @@ g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o addcongruences1.o addcongruences1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o addconstraints1.o addconstraints1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o affinedimension1.o affinedimension1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o affineimage1.o affineimage1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from addcongruences1.cc:25: + from affinedimension1.cc:24: ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from affinedimension1.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from addconstraints1.cc:25: + from affineimage1.cc:26: ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -69472,10 +69518,21 @@ from ../../src/ppl_include_files.hh:3, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from addconstraints1.cc:25: + from affineimage1.cc:26: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from addcongruences1.cc:25: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ In file included from ../../src/mp_std_bits_defs.hh:28, from ../../src/checked_defs.hh:27, from ../../src/Checked_Number_defs.hh:28, @@ -69487,13 +69544,37 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/Linear_System_templates.hh:30, + from ../../src/Linear_System_defs.hh:580, + from ../../src/Constraint_System_defs.hh:29, + from ../../src/Box_inlines.hh:28, + from ../../src/Box_defs.hh:2285, + from ../../src/Linear_Form_templates.hh:29, + from ../../src/ppl_include_files.hh:9, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from affinedimension1.cc:24: +../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': +../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ +../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': +../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, from ../../src/ppl_include_files.hh:8, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from affinedimension1.cc:24: + from addconstraints1.cc:25: ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] std::memcpy(&to, &from, sizeof(data_type)); @@ -69505,7 +69586,7 @@ from ../../src/ppl_include_files.hh:3, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from affinedimension1.cc:24: + from addconstraints1.cc:25: /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ @@ -69518,11 +69599,21 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from addcongruences1.cc:25: + from affineimage1.cc:26: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) ^ +../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ +../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': +../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + ? static_cast(&Scalar_Products::sign) + ^ +../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] + : static_cast(&Scalar_Products::reduced_sign)) { + ^ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69532,7 +69623,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from addconstraints1.cc:25: + from addcongruences1.cc:25: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69540,16 +69631,6 @@ ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ -../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': -../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69566,7 +69647,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from affinedimension1.cc:24: + from addconstraints1.cc:25: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -69581,31 +69662,9 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o affineimage1.o affineimage1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o affinepreimage1.o affinepreimage1.cc g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o bounded1.o bounded1.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from affineimage1.cc:26: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from affineimage1.cc:26: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o bounds1.o bounds1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69637,30 +69696,6 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from affineimage1.cc:26: -../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': -../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ -../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': -../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - ? static_cast(&Scalar_Products::sign) - ^ -../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] - : static_cast(&Scalar_Products::reduced_sign)) { - ^ -In file included from ../../src/Linear_System_templates.hh:30, - from ../../src/Linear_System_defs.hh:580, - from ../../src/Constraint_System_defs.hh:29, - from ../../src/Box_inlines.hh:28, - from ../../src/Box_defs.hh:2285, - from ../../src/Linear_Form_templates.hh:29, - from ../../src/ppl_include_files.hh:9, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, from affinepreimage1.cc:26: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] @@ -69698,6 +69733,28 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from bounds1.cc:25: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from bounds1.cc:25: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69722,30 +69779,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o bounds1.o bounds1.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o closed1.o closed1.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from bounds1.cc:25: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from bounds1.cc:25: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69770,6 +69803,8 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o closed1.o closed1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o closure1.o closure1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69792,6 +69827,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o collapse1.o collapse1.cc In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -69816,7 +69852,7 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o closure1.o closure1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o concatenate1.o concatenate1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69863,8 +69899,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o collapse1.o collapse1.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o concatenate1.o concatenate1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69958,6 +69992,7 @@ : static_cast(&Scalar_Products::reduced_sign)) { ^ g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o contains1.o contains1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o containsintegerpoint1.o containsintegerpoint1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -69980,6 +70015,28 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from containsintegerpoint1.cc:24: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from containsintegerpoint1.cc:24: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70004,30 +70061,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o containsintegerpoint1.o containsintegerpoint1.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o difference1.o difference1.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from containsintegerpoint1.cc:24: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from containsintegerpoint1.cc:24: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70052,7 +70085,7 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o discrete1.o discrete1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o difference1.o difference1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70099,6 +70132,9 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o discrete1.o discrete1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o disjoint1.o disjoint1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o disjunct1.o disjunct1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70145,8 +70181,28 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o disjoint1.o disjoint1.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o disjunct1.o disjunct1.cc +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from disjunct1.cc:25: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from disjunct1.cc:25: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70169,7 +70225,6 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o empty1.o empty1.cc In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70179,7 +70234,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from disjoint1.cc:24: + from disjunct1.cc:25: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -70194,28 +70249,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from disjunct1.cc:25: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from disjunct1.cc:25: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70225,7 +70258,7 @@ from ../../src/ppl_include_files.hh:9, from ../../src/ppl_header.hh:38, from ../../tests/ppl_test.hh:27, - from disjunct1.cc:25: + from disjoint1.cc:24: ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] ? static_cast(&Scalar_Products::sign) @@ -70240,6 +70273,8 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o empty1.o empty1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o entails1.o entails1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70262,6 +70297,7 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o equals1.o equals1.cc In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70286,7 +70322,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o entails1.o entails1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70309,6 +70344,28 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from equals1.cc:25: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from equals1.cc:25: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70333,29 +70390,6 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o equals1.o equals1.cc -In file included from ../../src/CO_Tree_defs.hh:1557, - from ../../src/Sparse_Row_defs.hh:29, - from ../../src/Linear_Expression_Impl_defs.hh:33, - from ../../src/ppl_include_files.hh:8, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from equals1.cc:25: -../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] - std::memcpy(&to, &from, sizeof(data_type)); - ^ -In file included from ../../src/mp_std_bits_defs.hh:28, - from ../../src/checked_defs.hh:27, - from ../../src/Checked_Number_defs.hh:28, - from ../../src/checked_numeric_limits.hh:27, - from ../../src/ppl_include_files.hh:3, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from equals1.cc:25: -/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here - class __gmp_expr - ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70380,8 +70414,22 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ +In file included from ../../src/Pointset_Powerset_defs.hh:1454, + from ../../src/algorithms.hh:28, + from ../../src/ppl_include_files.hh:18, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from equals1.cc:25: +../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]': +../../src/Pointset_Powerset_inlines.hh:262:43: required from 'bool Parma_Polyhedra_Library::Pointset_Powerset::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset&) const [with PSET = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >]' +equals1.cc:44:50: required from here +../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195 + y_end = y.end(); i != y_end; ++i) { + ~~^~~~~~~~ +Please submit a full bug report, +with preprocessed source if appropriate. +See for instructions. g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o frombdshape1.o frombdshape1.cc -g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o frombox1.o frombox1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70428,21 +70476,8 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -In file included from ../../src/Pointset_Powerset_defs.hh:1454, - from ../../src/algorithms.hh:28, - from ../../src/ppl_include_files.hh:18, - from ../../src/ppl_header.hh:38, - from ../../tests/ppl_test.hh:27, - from equals1.cc:25: -../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]': -../../src/Pointset_Powerset_inlines.hh:262:43: required from 'bool Parma_Polyhedra_Library::Pointset_Powerset::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset&) const [with PSET = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >]' -equals1.cc:44:50: required from here -../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195 - y_end = y.end(); i != y_end; ++i) { - ~~^~~~~~~~ -Please submit a full bug report, -with preprocessed source if appropriate. -See for instructions. +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o frombox1.o frombox1.cc +g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -marm -W -Wall -c -o fromcongruences1.o fromcongruences1.cc In file included from ../../src/CO_Tree_defs.hh:1557, from ../../src/Sparse_Row_defs.hh:29, from ../../src/Linear_Expression_Impl_defs.hh:33, @@ -70465,6 +70500,28 @@ /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here class __gmp_expr ^~~~~~~~~~~~~~~~~~~~~~~~ +In file included from ../../src/CO_Tree_defs.hh:1557, + from ../../src/Sparse_Row_defs.hh:29, + from ../../src/Linear_Expression_Impl_defs.hh:33, + from ../../src/ppl_include_files.hh:8, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from fromcongruences1.cc:25: +../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': +../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] + std::memcpy(&to, &from, sizeof(data_type)); + ^ +In file included from ../../src/mp_std_bits_defs.hh:28, + from ../../src/checked_defs.hh:27, + from ../../src/Checked_Number_defs.hh:28, + from ../../src/checked_numeric_limits.hh:27, + from ../../src/ppl_include_files.hh:3, + from ../../src/ppl_header.hh:38, + from ../../tests/ppl_test.hh:27, + from fromcongruences1.cc:25: +/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here + class __gmp_expr + ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../../src/Linear_System_templates.hh:30, from ../../src/Linear_System_defs.hh:580, from ../../src/Constraint_System_defs.hh:29, @@ -70489,159027 +70546,38 @@ ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] : static_cast(&Scalar_Products::reduced_sign)) { ^ -Preprocessed source stored into /tmp/ccli7HMJ.out file, please attach this to your bugreport. -=== BEGIN GCC DUMP === -23376: // Target: arm-linux-gnueabihf -23376: // Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --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-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf -23376: // Thread model: posix -23376: // gcc version 8.3.0 (Debian 8.3.0-6) -23376: // -23376: // In file included from ../../src/CO_Tree_defs.hh:1557, -23376: // from ../../src/Sparse_Row_defs.hh:29, -23376: // from ../../src/Linear_Expression_Impl_defs.hh:33, -23376: // from ../../src/ppl_include_files.hh:8, -23376: // from ../../src/ppl_header.hh:38, -23376: // from ../../tests/ppl_test.hh:27, -23376: // from equals1.cc:25: -23376: // ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)': -23376: // ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] -23376: // std::memcpy(&to, &from, sizeof(data_type)); -23376: // ^ -23376: // In file included from ../../src/mp_std_bits_defs.hh:28, -23376: // from ../../src/checked_defs.hh:27, -23376: // from ../../src/Checked_Number_defs.hh:28, -23376: // from ../../src/checked_numeric_limits.hh:27, -23376: // from ../../src/ppl_include_files.hh:3, -23376: // from ../../src/ppl_header.hh:38, -23376: // from ../../tests/ppl_test.hh:27, -23376: // from equals1.cc:25: -23376: // /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here -23376: // class __gmp_expr -23376: // ^~~~~~~~~~~~~~~~~~~~~~~~ -23376: // In file included from ../../src/Linear_System_templates.hh:30, -23376: // from ../../src/Linear_System_defs.hh:580, -23376: // from ../../src/Constraint_System_defs.hh:29, -23376: // from ../../src/Box_inlines.hh:28, -23376: // from ../../src/Box_defs.hh:2285, -23376: // from ../../src/Linear_Form_templates.hh:29, -23376: // from ../../src/ppl_include_files.hh:9, -23376: // from ../../src/ppl_header.hh:38, -23376: // from ../../tests/ppl_test.hh:27, -23376: // from equals1.cc:25: -23376: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)': -23376: // ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] -23376: // ? static_cast(&Scalar_Products::sign) -23376: // ^ -23376: // ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] -23376: // : static_cast(&Scalar_Products::reduced_sign)) { -23376: // ^ -23376: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)': -23376: // ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] -23376: // ? static_cast(&Scalar_Products::sign) -23376: // ^ -23376: // ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers] -23376: // : static_cast(&Scalar_Products::reduced_sign)) { -23376: // ^ -23376: // In file included from ../../src/Pointset_Powerset_defs.hh:1454, -23376: // from ../../src/algorithms.hh:28, -23376: // from ../../src/ppl_include_files.hh:18, -23376: // from ../../src/ppl_header.hh:38, -23376: // from ../../tests/ppl_test.hh:27, -23376: // from equals1.cc:25: -23376: // ../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]': -23376: // ../../src/Pointset_Powerset_inlines.hh:262:43: required from 'bool Parma_Polyhedra_Library::Pointset_Powerset::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset&) const [with PSET = Parma_Polyhedra_Library::Box, Parma_Polyhedra_Library::Interval_Info_Bitset > >]' -23376: // equals1.cc:44:50: required from here -23376: // ../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195 -23376: // y_end = y.end(); i != y_end; ++i) { -23376: // ~~^~~~~~~~ -23376: // Please submit a full bug report, -23376: // with preprocessed source if appropriate. -23376: // See for instructions. -23376: -23376: // /usr/lib/gcc/arm-linux-gnueabihf/8/cc1plus -quiet -I . -I ../.. -I ../../src -I ../../src -I ../../tests -I ../../utils -imultilib . -imultiarch arm-linux-gnueabihf -D_GNU_SOURCE -D HAVE_CONFIG_H -D NDEBUG=1 -D _FORTIFY_SOURCE=2 equals1.cc -quiet -dumpbase equals1.cc -marm -mfloat-abi=hard -mfpu=vfpv3-d16 -mtls-dialect=gnu -march=armv7-a+fp -auxbase-strip equals1.o -g -g -g -O2 -O2 -Wdate-time -Wformat=1 -Werror=format-security -Wextra -Wall -frounding-math -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -fpermissive -o - -frandom-seed=0 -fdump-noaddr -23376: -23376: # 1 "equals1.cc" -23376: # 1 "/build/ppl-1.2/tests/Powerset//" -23376: # 1 "" -23376: # 1 "" -23376: # 1 "/usr/include/stdc-predef.h" 1 3 4 -23376: # 1 "" 2 -23376: # 1 "equals1.cc" -23376: # 25 "equals1.cc" -23376: # 1 "../../tests/ppl_test.hh" 1 -23376: # 27 "../../tests/ppl_test.hh" -23376: # 1 "../../src/ppl_header.hh" 1 -23376: # 36 "../../src/ppl_header.hh" -23376: # 1 "../../ppl-config.h" 1 -23376: # 402 "../../ppl-config.h" -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdint.h" 1 3 4 -23376: # 9 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdint.h" 3 4 -23376: # 1 "/usr/include/stdint.h" 1 3 4 -23376: # 26 "/usr/include/stdint.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 33 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 3 4 -23376: # 1 "/usr/include/features.h" 1 3 4 -23376: # 424 "/usr/include/features.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 1 3 4 -23376: # 442 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 -23376: # 443 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/long-double.h" 1 3 4 -23376: # 444 "/usr/include/arm-linux-gnueabihf/sys/cdefs.h" 2 3 4 -23376: # 425 "/usr/include/features.h" 2 3 4 -23376: # 448 "/usr/include/features.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 1 3 4 -23376: # 10 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/gnu/stubs-hard.h" 1 3 4 -23376: # 11 "/usr/include/arm-linux-gnueabihf/gnu/stubs.h" 2 3 4 -23376: # 449 "/usr/include/features.h" 2 3 4 -23376: # 34 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 2 3 4 -23376: # 27 "/usr/include/stdint.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 -23376: # 28 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 -23376: -23376: -23376: -23376: # 30 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 -23376: typedef unsigned char __u_char; -23376: typedef unsigned short int __u_short; -23376: typedef unsigned int __u_int; -23376: typedef unsigned long int __u_long; -23376: -23376: -23376: typedef signed char __int8_t; -23376: typedef unsigned char __uint8_t; -23376: typedef signed short int __int16_t; -23376: typedef unsigned short int __uint16_t; -23376: typedef signed int __int32_t; -23376: typedef unsigned int __uint32_t; -23376: -23376: -23376: -23376: -23376: __extension__ typedef signed long long int __int64_t; -23376: __extension__ typedef unsigned long long int __uint64_t; -23376: -23376: -23376: -23376: typedef __int8_t __int_least8_t; -23376: typedef __uint8_t __uint_least8_t; -23376: typedef __int16_t __int_least16_t; -23376: typedef __uint16_t __uint_least16_t; -23376: typedef __int32_t __int_least32_t; -23376: typedef __uint32_t __uint_least32_t; -23376: typedef __int64_t __int_least64_t; -23376: typedef __uint64_t __uint_least64_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: __extension__ typedef long long int __quad_t; -23376: __extension__ typedef unsigned long long int __u_quad_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: __extension__ typedef long long int __intmax_t; -23376: __extension__ typedef unsigned long long int __uintmax_t; -23376: # 140 "/usr/include/arm-linux-gnueabihf/bits/types.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/typesizes.h" 1 3 4 -23376: # 141 "/usr/include/arm-linux-gnueabihf/bits/types.h" 2 3 4 -23376: -23376: -23376: __extension__ typedef __u_quad_t __dev_t; -23376: __extension__ typedef unsigned int __uid_t; -23376: __extension__ typedef unsigned int __gid_t; -23376: __extension__ typedef unsigned long int __ino_t; -23376: __extension__ typedef __u_quad_t __ino64_t; -23376: __extension__ typedef unsigned int __mode_t; -23376: __extension__ typedef unsigned int __nlink_t; -23376: __extension__ typedef long int __off_t; -23376: __extension__ typedef __quad_t __off64_t; -23376: __extension__ typedef int __pid_t; -23376: __extension__ typedef struct { int __val[2]; } __fsid_t; -23376: __extension__ typedef long int __clock_t; -23376: __extension__ typedef unsigned long int __rlim_t; -23376: __extension__ typedef __u_quad_t __rlim64_t; -23376: __extension__ typedef unsigned int __id_t; -23376: __extension__ typedef long int __time_t; -23376: __extension__ typedef unsigned int __useconds_t; -23376: __extension__ typedef long int __suseconds_t; -23376: -23376: __extension__ typedef int __daddr_t; -23376: __extension__ typedef int __key_t; -23376: -23376: -23376: __extension__ typedef int __clockid_t; -23376: -23376: -23376: __extension__ typedef void * __timer_t; -23376: -23376: -23376: __extension__ typedef long int __blksize_t; -23376: -23376: -23376: -23376: -23376: __extension__ typedef long int __blkcnt_t; -23376: __extension__ typedef __quad_t __blkcnt64_t; -23376: -23376: -23376: __extension__ typedef unsigned long int __fsblkcnt_t; -23376: __extension__ typedef __u_quad_t __fsblkcnt64_t; -23376: -23376: -23376: __extension__ typedef unsigned long int __fsfilcnt_t; -23376: __extension__ typedef __u_quad_t __fsfilcnt64_t; -23376: -23376: -23376: __extension__ typedef int __fsword_t; -23376: -23376: __extension__ typedef int __ssize_t; -23376: -23376: -23376: __extension__ typedef long int __syscall_slong_t; -23376: -23376: __extension__ typedef unsigned long int __syscall_ulong_t; -23376: -23376: -23376: -23376: typedef __off64_t __loff_t; -23376: typedef char *__caddr_t; -23376: -23376: -23376: __extension__ typedef int __intptr_t; -23376: -23376: -23376: __extension__ typedef unsigned int __socklen_t; -23376: -23376: -23376: -23376: -23376: typedef int __sig_atomic_t; -23376: # 28 "/usr/include/stdint.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar.h" 1 3 4 -23376: # 29 "/usr/include/stdint.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 -23376: # 30 "/usr/include/stdint.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-intn.h" 3 4 -23376: typedef __int8_t int8_t; -23376: typedef __int16_t int16_t; -23376: typedef __int32_t int32_t; -23376: typedef __int64_t int64_t; -23376: # 35 "/usr/include/stdint.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdint-uintn.h" 3 4 -23376: typedef __uint8_t uint8_t; -23376: typedef __uint16_t uint16_t; -23376: typedef __uint32_t uint32_t; -23376: typedef __uint64_t uint64_t; -23376: # 38 "/usr/include/stdint.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: typedef __int_least8_t int_least8_t; -23376: typedef __int_least16_t int_least16_t; -23376: typedef __int_least32_t int_least32_t; -23376: typedef __int_least64_t int_least64_t; -23376: -23376: -23376: typedef __uint_least8_t uint_least8_t; -23376: typedef __uint_least16_t uint_least16_t; -23376: typedef __uint_least32_t uint_least32_t; -23376: typedef __uint_least64_t uint_least64_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef signed char int_fast8_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef int int_fast16_t; -23376: typedef int int_fast32_t; -23376: __extension__ -23376: typedef long long int int_fast64_t; -23376: -23376: -23376: -23376: typedef unsigned char uint_fast8_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef unsigned int uint_fast16_t; -23376: typedef unsigned int uint_fast32_t; -23376: __extension__ -23376: typedef unsigned long long int uint_fast64_t; -23376: # 93 "/usr/include/stdint.h" 3 4 -23376: typedef int intptr_t; -23376: -23376: -23376: typedef unsigned int uintptr_t; -23376: -23376: -23376: -23376: -23376: typedef __intmax_t intmax_t; -23376: typedef __uintmax_t uintmax_t; -23376: # 10 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdint.h" 2 3 4 -23376: # 403 "../../ppl-config.h" 2 -23376: -23376: -23376: -23376: # 1 "/usr/include/inttypes.h" 1 3 4 -23376: # 266 "/usr/include/inttypes.h" 3 4 -23376: extern "C" { -23376: # 280 "/usr/include/inttypes.h" 3 4 -23376: typedef struct -23376: { -23376: __extension__ long long int quot; -23376: __extension__ long long int rem; -23376: } imaxdiv_t; -23376: -23376: -23376: -23376: -23376: -23376: extern intmax_t imaxabs (intmax_t __n) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) -23376: throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern intmax_t strtoimax (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) throw (); -23376: -23376: -23376: extern uintmax_t strtoumax (const char *__restrict __nptr, -23376: char ** __restrict __endptr, int __base) throw (); -23376: -23376: -23376: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base) -23376: throw (); -23376: -23376: -23376: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr, -23376: wchar_t ** __restrict __endptr, int __base) -23376: throw (); -23376: # 370 "/usr/include/inttypes.h" 3 4 -23376: __extension__ -23376: extern long long int __strtoll_internal (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: int __base, int __group) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) intmax_t -23376: __attribute__ ((__leaf__)) strtoimax (const char *__restrict nptr, char **__restrict endptr, int base) throw () -23376: -23376: { -23376: return __strtoll_internal (nptr, endptr, base, 0); -23376: } -23376: -23376: __extension__ -23376: extern unsigned long long int __strtoull_internal (const char * -23376: __restrict __nptr, -23376: char ** -23376: __restrict __endptr, -23376: int __base, -23376: int __group) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t -23376: __attribute__ ((__leaf__)) strtoumax (const char *__restrict nptr, char **__restrict endptr, int base) throw () -23376: -23376: { -23376: return __strtoull_internal (nptr, endptr, base, 0); -23376: } -23376: -23376: __extension__ -23376: extern long long int __wcstoll_internal (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base, int __group) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) intmax_t -23376: __attribute__ ((__leaf__)) wcstoimax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw () -23376: -23376: { -23376: return __wcstoll_internal (nptr, endptr, base, 0); -23376: } -23376: -23376: -23376: __extension__ -23376: extern unsigned long long int __wcstoull_internal (const wchar_t * -23376: __restrict __nptr, -23376: wchar_t ** -23376: __restrict __endptr, -23376: int __base, -23376: int __group) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t -23376: __attribute__ ((__leaf__)) wcstoumax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw () -23376: -23376: { -23376: return __wcstoull_internal (nptr, endptr, base, 0); -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 407 "../../ppl-config.h" 2 -23376: # 37 "../../src/ppl_header.hh" 2 -23376: # 1 "../../src/version.hh" 1 -23376: # 61 "../../src/version.hh" -23376: -23376: # 61 "../../src/version.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: unsigned -23376: version_major(); -23376: -23376: -23376: unsigned -23376: version_minor(); -23376: -23376: -23376: unsigned -23376: version_revision(); -23376: -23376: -23376: unsigned -23376: version_beta(); -23376: -23376: -23376: const char* version(); -23376: # 92 "../../src/version.hh" -23376: const char* banner(); -23376: -23376: -23376: -23376: } -23376: # 38 "../../src/ppl_header.hh" 2 -23376: # 1 "../../src/ppl_include_files.hh" 1 -23376: # 1 "../../src/namespaces.hh" 1 -23376: # 28 "../../src/namespaces.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 58 "../../src/namespaces.hh" -23376: namespace IO_Operators { -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace Checked { -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace Implementation { -23376: } -23376: -23376: -23376: -23376: -23376: namespace Interfaces { -23376: -23376: -23376: -23376: -23376: -23376: namespace C { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace Java { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace OCaml { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace Prolog { -23376: -23376: -23376: -23376: -23376: -23376: namespace Ciao { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace GNU { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace SICStus { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace SWI { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace XSB { -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: namespace YAP { -23376: -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: } -23376: # 180 "../../src/namespaces.hh" -23376: namespace std { -23376: } -23376: # 2 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/Interval_Info_types.hh" 1 -23376: # 16 "../../src/Interval_Info_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Interval_Info_Null; -23376: -23376: template -23376: class Interval_Info_Bitset; -23376: -23376: } -23376: # 3 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/checked_numeric_limits.hh" 1 -23376: # 27 "../../src/checked_numeric_limits.hh" -23376: # 1 "../../src/Checked_Number_defs.hh" 1 -23376: # 27 "../../src/Checked_Number_defs.hh" -23376: # 1 "../../src/Checked_Number_types.hh" 1 -23376: # 16 "../../src/Checked_Number_types.hh" -23376: # 1 "../../src/Coefficient_traits_template.hh" 1 -23376: # 27 "../../src/Coefficient_traits_template.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Coefficient_traits_template { -23376: }; -23376: -23376: } -23376: # 17 "../../src/Checked_Number_types.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: struct Extended_Number_Policy; -23376: -23376: template -23376: class Checked_Number; -23376: -23376: } -23376: # 28 "../../src/Checked_Number_defs.hh" 2 -23376: # 1 "../../src/checked_defs.hh" 1 -23376: # 27 "../../src/checked_defs.hh" -23376: # 1 "../../src/mp_std_bits_defs.hh" 1 -23376: # 28 "../../src/mp_std_bits_defs.hh" -23376: # 1 "/usr/include/gmpxx.h" 1 3 4 -23376: # 34 "/usr/include/gmpxx.h" 3 4 -23376: # 1 "/usr/include/c++/8/iosfwd" 1 3 4 -23376: # 36 "/usr/include/c++/8/iosfwd" 3 4 -23376: -23376: # 37 "/usr/include/c++/8/iosfwd" 3 -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 1 3 -23376: # 236 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 3 -23376: -23376: # 236 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 3 -23376: namespace std -23376: { -23376: typedef unsigned int size_t; -23376: typedef int ptrdiff_t; -23376: -23376: -23376: typedef decltype(nullptr) nullptr_t; -23376: -23376: } -23376: # 258 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 3 -23376: namespace std -23376: { -23376: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -23376: } -23376: namespace __gnu_cxx -23376: { -23376: inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -23376: } -23376: # 508 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 3 -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/os_defines.h" 1 3 -23376: # 509 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 2 3 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/cpu_defines.h" 1 3 -23376: # 512 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++config.h" 2 3 -23376: # 39 "/usr/include/c++/8/iosfwd" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stringfwd.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/stringfwd.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/stringfwd.h" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/memoryfwd.h" 1 3 -23376: # 46 "/usr/include/c++/8/bits/memoryfwd.h" 3 -23376: -23376: # 47 "/usr/include/c++/8/bits/memoryfwd.h" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 63 "/usr/include/c++/8/bits/memoryfwd.h" 3 -23376: template -23376: class allocator; -23376: -23376: template<> -23376: class allocator; -23376: -23376: -23376: template -23376: struct uses_allocator; -23376: -23376: -23376: -23376: -23376: } -23376: # 41 "/usr/include/c++/8/bits/stringfwd.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct char_traits; -23376: -23376: template<> struct char_traits; -23376: -23376: -23376: template<> struct char_traits; -23376: -23376: -23376: -23376: -23376: template<> struct char_traits; -23376: template<> struct char_traits; -23376: -23376: -23376: namespace __cxx11 { -23376: -23376: template, -23376: typename _Alloc = allocator<_CharT> > -23376: class basic_string; -23376: -23376: -23376: typedef basic_string string; -23376: -23376: -23376: -23376: typedef basic_string wstring; -23376: -23376: -23376: -23376: -23376: -23376: typedef basic_string u16string; -23376: -23376: -23376: typedef basic_string u32string; -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 40 "/usr/include/c++/8/iosfwd" 2 3 -23376: # 1 "/usr/include/c++/8/bits/postypes.h" 1 3 -23376: # 38 "/usr/include/c++/8/bits/postypes.h" 3 -23376: -23376: # 39 "/usr/include/c++/8/bits/postypes.h" 3 -23376: -23376: # 1 "/usr/include/c++/8/cwchar" 1 3 -23376: # 39 "/usr/include/c++/8/cwchar" 3 -23376: -23376: # 40 "/usr/include/c++/8/cwchar" 3 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/wchar.h" 1 3 4 -23376: # 27 "/usr/include/wchar.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 28 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 -23376: # 52 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 1 3 4 -23376: # 214 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 3 4 -23376: typedef float _Float32; -23376: # 238 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 3 4 -23376: typedef long double _Float64; -23376: # 268 "/usr/include/arm-linux-gnueabihf/bits/floatn-common.h" 3 4 -23376: typedef double _Float32x; -23376: # 52 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 2 3 4 -23376: # 31 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 216 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 3 4 -23376: typedef unsigned int size_t; -23376: # 36 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdarg.h" 1 3 4 -23376: # 40 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdarg.h" 3 4 -23376: typedef __builtin_va_list __gnuc_va_list; -23376: # 39 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 1 3 4 -23376: # 20 "/usr/include/arm-linux-gnueabihf/bits/types/wint_t.h" 3 4 -23376: typedef unsigned int wint_t; -23376: # 42 "/usr/include/wchar.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 1 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 1 3 4 -23376: # 13 "/usr/include/arm-linux-gnueabihf/bits/types/__mbstate_t.h" 3 4 -23376: typedef struct -23376: { -23376: int __count; -23376: union -23376: { -23376: unsigned int __wch; -23376: char __wchb[4]; -23376: } __value; -23376: } __mbstate_t; -23376: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/mbstate_t.h" 2 3 4 -23376: -23376: typedef __mbstate_t mbstate_t; -23376: # 43 "/usr/include/wchar.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__FILE.h" 1 3 4 -23376: -23376: -23376: -23376: struct _IO_FILE; -23376: typedef struct _IO_FILE __FILE; -23376: # 44 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/FILE.h" 1 3 4 -23376: -23376: -23376: -23376: struct _IO_FILE; -23376: -23376: -23376: typedef struct _IO_FILE FILE; -23376: # 47 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 1 3 4 -23376: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 1 3 4 -23376: # 28 "/usr/include/arm-linux-gnueabihf/bits/types/__locale_t.h" 3 4 -23376: struct __locale_struct -23376: { -23376: -23376: struct __locale_data *__locales[13]; -23376: -23376: -23376: const unsigned short int *__ctype_b; -23376: const int *__ctype_tolower; -23376: const int *__ctype_toupper; -23376: -23376: -23376: const char *__names[13]; -23376: }; -23376: -23376: typedef struct __locale_struct *__locale_t; -23376: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/locale_t.h" 2 3 4 -23376: -23376: typedef __locale_t locale_t; -23376: # 50 "/usr/include/wchar.h" 2 3 4 -23376: # 79 "/usr/include/wchar.h" 3 4 -23376: extern "C" { -23376: -23376: -23376: -23376: struct tm; -23376: -23376: -23376: -23376: extern wchar_t *wcscpy (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern wchar_t *wcsncpy (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern wchar_t *wcscat (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern wchar_t *wcsncat (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw (); -23376: -23376: -23376: extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, -23376: size_t __n) throw (); -23376: -23376: -23376: -23376: extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, -23376: locale_t __loc) throw (); -23376: -23376: extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, -23376: size_t __n, locale_t __loc) throw (); -23376: -23376: -23376: -23376: -23376: extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw (); -23376: -23376: -23376: -23376: extern size_t wcsxfrm (wchar_t *__restrict __s1, -23376: const wchar_t *__restrict __s2, size_t __n) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, -23376: locale_t __loc) throw (); -23376: -23376: -23376: -23376: -23376: extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, -23376: size_t __n, locale_t __loc) throw (); -23376: -23376: -23376: extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__)); -23376: -23376: -23376: -23376: -23376: extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) -23376: throw () __asm ("wcschr") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) -23376: throw () __asm ("wcschr") __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) -23376: throw () __asm ("wcsrchr") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) -23376: throw () __asm ("wcsrchr") __attribute__ ((__pure__)); -23376: # 181 "/usr/include/wchar.h" 3 4 -23376: extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) -23376: throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) -23376: throw () __attribute__ ((__pure__)); -23376: -23376: -23376: extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) -23376: throw () __attribute__ ((__pure__)); -23376: -23376: -23376: extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) -23376: throw () __asm ("wcspbrk") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, -23376: const wchar_t *__accept) -23376: throw () __asm ("wcspbrk") __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) -23376: throw () __asm ("wcsstr") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, -23376: const wchar_t *__needle) -23376: throw () __asm ("wcsstr") __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wchar_t *wcstok (wchar_t *__restrict __s, -23376: const wchar_t *__restrict __delim, -23376: wchar_t **__restrict __ptr) throw (); -23376: -23376: -23376: extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) -23376: throw () __asm ("wcswcs") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, -23376: const wchar_t *__needle) -23376: throw () __asm ("wcswcs") __attribute__ ((__pure__)); -23376: # 240 "/usr/include/wchar.h" 3 4 -23376: extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) -23376: throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) -23376: throw () __asm ("wmemchr") __attribute__ ((__pure__)); -23376: extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, -23376: size_t __n) -23376: throw () __asm ("wmemchr") __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)); -23376: -23376: -23376: extern wchar_t *wmemcpy (wchar_t *__restrict __s1, -23376: const wchar_t *__restrict __s2, size_t __n) throw (); -23376: -23376: -23376: -23376: extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) -23376: throw (); -23376: -23376: -23376: extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw (); -23376: -23376: -23376: -23376: -23376: extern wchar_t *wmempcpy (wchar_t *__restrict __s1, -23376: const wchar_t *__restrict __s2, size_t __n) -23376: throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t btowc (int __c) throw (); -23376: -23376: -23376: -23376: extern int wctob (wint_t __c) throw (); -23376: -23376: -23376: -23376: extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: extern size_t mbrtowc (wchar_t *__restrict __pwc, -23376: const char *__restrict __s, size_t __n, -23376: mbstate_t *__restrict __p) throw (); -23376: -23376: -23376: extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, -23376: mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: extern size_t __mbrlen (const char *__restrict __s, size_t __n, -23376: mbstate_t *__restrict __ps) throw (); -23376: extern size_t mbrlen (const char *__restrict __s, size_t __n, -23376: mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t __btowc_alias (int __c) __asm ("btowc"); -23376: extern __inline __attribute__ ((__gnu_inline__)) wint_t -23376: __attribute__ ((__leaf__)) btowc (int __c) throw () -23376: { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f' -23376: ? (wint_t) __c : __btowc_alias (__c)); } -23376: -23376: extern int __wctob_alias (wint_t __c) __asm ("wctob"); -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: __attribute__ ((__leaf__)) wctob (wint_t __wc) throw () -23376: { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f' -23376: ? (int) __wc : __wctob_alias (__wc)); } -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) size_t -23376: __attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) throw () -23376: -23376: { return (__ps != __null -23376: ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); } -23376: -23376: -23376: -23376: -23376: extern size_t mbsrtowcs (wchar_t *__restrict __dst, -23376: const char **__restrict __src, size_t __len, -23376: mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: -23376: extern size_t wcsrtombs (char *__restrict __dst, -23376: const wchar_t **__restrict __src, size_t __len, -23376: mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern size_t mbsnrtowcs (wchar_t *__restrict __dst, -23376: const char **__restrict __src, size_t __nmc, -23376: size_t __len, mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: -23376: extern size_t wcsnrtombs (char *__restrict __dst, -23376: const wchar_t **__restrict __src, -23376: size_t __nwc, size_t __len, -23376: mbstate_t *__restrict __ps) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int wcwidth (wchar_t __c) throw (); -23376: -23376: -23376: -23376: extern int wcswidth (const wchar_t *__s, size_t __n) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern double wcstod (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: -23376: -23376: -23376: extern float wcstof (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: extern long double wcstold (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: # 396 "/usr/include/wchar.h" 3 4 -23376: extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: -23376: -23376: -23376: extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: # 411 "/usr/include/wchar.h" 3 4 -23376: extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr) throw (); -23376: # 428 "/usr/include/wchar.h" 3 4 -23376: extern long int wcstol (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base) throw (); -23376: -23376: -23376: -23376: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base) -23376: throw (); -23376: -23376: -23376: -23376: -23376: __extension__ -23376: extern long long int wcstoll (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base) -23376: throw (); -23376: -23376: -23376: -23376: __extension__ -23376: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base) throw (); -23376: -23376: -23376: -23376: -23376: -23376: __extension__ -23376: extern long long int wcstoq (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base) -23376: throw (); -23376: -23376: -23376: -23376: __extension__ -23376: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int wcstol_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, int __base, -23376: locale_t __loc) throw (); -23376: -23376: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base, locale_t __loc) throw (); -23376: -23376: __extension__ -23376: extern long long int wcstoll_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base, locale_t __loc) throw (); -23376: -23376: __extension__ -23376: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: int __base, locale_t __loc) -23376: throw (); -23376: -23376: extern double wcstod_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, locale_t __loc) -23376: throw (); -23376: -23376: extern float wcstof_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, locale_t __loc) -23376: throw (); -23376: -23376: extern long double wcstold_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: locale_t __loc) throw (); -23376: # 511 "/usr/include/wchar.h" 3 4 -23376: extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: locale_t __loc) throw (); -23376: -23376: -23376: -23376: extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: locale_t __loc) throw (); -23376: # 529 "/usr/include/wchar.h" 3 4 -23376: extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, -23376: wchar_t **__restrict __endptr, -23376: locale_t __loc) throw (); -23376: # 551 "/usr/include/wchar.h" 3 4 -23376: extern wchar_t *wcpcpy (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src) throw (); -23376: -23376: -23376: -23376: extern wchar_t *wcpncpy (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, size_t __n) -23376: throw (); -23376: # 567 "/usr/include/wchar.h" 3 4 -23376: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int fwide (__FILE *__fp, int __mode) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fwprintf (__FILE *__restrict __stream, -23376: const wchar_t *__restrict __format, ...) -23376: ; -23376: -23376: -23376: -23376: -23376: extern int wprintf (const wchar_t *__restrict __format, ...) -23376: ; -23376: -23376: extern int swprintf (wchar_t *__restrict __s, size_t __n, -23376: const wchar_t *__restrict __format, ...) -23376: throw () ; -23376: -23376: -23376: -23376: -23376: -23376: extern int vfwprintf (__FILE *__restrict __s, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: ; -23376: -23376: -23376: -23376: -23376: extern int vwprintf (const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: ; -23376: -23376: -23376: extern int vswprintf (wchar_t *__restrict __s, size_t __n, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: throw () ; -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fwscanf (__FILE *__restrict __stream, -23376: const wchar_t *__restrict __format, ...) -23376: ; -23376: -23376: -23376: -23376: -23376: extern int wscanf (const wchar_t *__restrict __format, ...) -23376: ; -23376: -23376: extern int swscanf (const wchar_t *__restrict __s, -23376: const wchar_t *__restrict __format, ...) -23376: throw () ; -23376: # 673 "/usr/include/wchar.h" 3 4 -23376: extern int vfwscanf (__FILE *__restrict __s, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: ; -23376: -23376: -23376: -23376: -23376: extern int vwscanf (const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: ; -23376: -23376: extern int vswscanf (const wchar_t *__restrict __s, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: throw () ; -23376: # 727 "/usr/include/wchar.h" 3 4 -23376: extern wint_t fgetwc (__FILE *__stream); -23376: extern wint_t getwc (__FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t getwchar (void); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t fputwc (wchar_t __wc, __FILE *__stream); -23376: extern wint_t putwc (wchar_t __wc, __FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t putwchar (wchar_t __wc); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, -23376: __FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: extern int fputws (const wchar_t *__restrict __ws, -23376: __FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t ungetwc (wint_t __wc, __FILE *__stream); -23376: # 782 "/usr/include/wchar.h" 3 4 -23376: extern wint_t getwc_unlocked (__FILE *__stream); -23376: extern wint_t getwchar_unlocked (void); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t fgetwc_unlocked (__FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); -23376: # 808 "/usr/include/wchar.h" 3 4 -23376: extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); -23376: extern wint_t putwchar_unlocked (wchar_t __wc); -23376: # 818 "/usr/include/wchar.h" 3 4 -23376: extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, -23376: __FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fputws_unlocked (const wchar_t *__restrict __ws, -23376: __FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, -23376: const wchar_t *__restrict __format, -23376: const struct tm *__restrict __tp) throw (); -23376: -23376: -23376: -23376: -23376: extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, -23376: const wchar_t *__restrict __format, -23376: const struct tm *__restrict __tp, -23376: locale_t __loc) throw (); -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 -23376: extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1, -23376: const wchar_t *__restrict __s2, size_t __n, -23376: size_t __ns1) throw (); -23376: extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmemcpy") -23376: -23376: -23376: ; -23376: extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemcpy_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () -23376: -23376: { -23376: if (__builtin_object_size (__s1, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wmemcpy_chk (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: -23376: if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t)) -23376: return __wmemcpy_chk_warn (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: } -23376: return __wmemcpy_alias (__s1, __s2, __n); -23376: } -23376: -23376: -23376: extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2, -23376: size_t __n, size_t __ns1) throw (); -23376: extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw () __asm__ ("" "wmemmove") -23376: -23376: ; -23376: extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemmove_chk") -23376: -23376: -23376: __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw () -23376: { -23376: if (__builtin_object_size (__s1, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wmemmove_chk (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: -23376: if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t)) -23376: return __wmemmove_chk_warn (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: } -23376: return __wmemmove_alias (__s1, __s2, __n); -23376: } -23376: -23376: -23376: -23376: extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1, -23376: const wchar_t *__restrict __s2, size_t __n, -23376: size_t __ns1) throw (); -23376: extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmempcpy") -23376: -23376: -23376: ; -23376: extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmempcpy_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () -23376: -23376: { -23376: if (__builtin_object_size (__s1, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wmempcpy_chk (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: -23376: if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t)) -23376: return __wmempcpy_chk_warn (__s1, __s2, __n, -23376: __builtin_object_size (__s1, 0) / sizeof (wchar_t)); -23376: } -23376: return __wmempcpy_alias (__s1, __s2, __n); -23376: } -23376: -23376: -23376: -23376: extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n, -23376: size_t __ns) throw (); -23376: extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) throw () __asm__ ("" "wmemset") -23376: ; -23376: extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) throw () __asm__ ("" "__wmemset_chk") -23376: -23376: -23376: __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw () -23376: { -23376: if (__builtin_object_size (__s, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wmemset_chk (__s, __c, __n, __builtin_object_size (__s, 0) / sizeof (wchar_t)); -23376: -23376: if (__n > __builtin_object_size (__s, 0) / sizeof (wchar_t)) -23376: return __wmemset_chk_warn (__s, __c, __n, -23376: __builtin_object_size (__s, 0) / sizeof (wchar_t)); -23376: } -23376: return __wmemset_alias (__s, __c, __n); -23376: } -23376: -23376: -23376: extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, -23376: size_t __n) throw (); -23376: extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscpy") -23376: -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: return __wcscpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: return __wcscpy_alias (__dest, __src); -23376: } -23376: -23376: -23376: extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, -23376: size_t __destlen) throw (); -23376: extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcpcpy") -23376: -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: return __wcpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: return __wcpcpy_alias (__dest, __src); -23376: } -23376: -23376: -23376: extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, size_t __n, -23376: size_t __destlen) throw (); -23376: extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncpy") -23376: -23376: -23376: ; -23376: extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcsncpy_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wcsncpy_chk (__dest, __src, __n, -23376: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)) -23376: return __wcsncpy_chk_warn (__dest, __src, __n, -23376: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: } -23376: return __wcsncpy_alias (__dest, __src, __n); -23376: } -23376: -23376: -23376: extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, size_t __n, -23376: size_t __destlen) throw (); -23376: extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcpncpy") -23376: -23376: -23376: ; -23376: extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcpncpy_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n)) -23376: return __wcpncpy_chk (__dest, __src, __n, -23376: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)) -23376: return __wcpncpy_chk_warn (__dest, __src, __n, -23376: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: } -23376: return __wcpncpy_alias (__dest, __src, __n); -23376: } -23376: -23376: -23376: extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, -23376: size_t __destlen) throw (); -23376: extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscat") -23376: -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: return __wcscat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: return __wcscat_alias (__dest, __src); -23376: } -23376: -23376: -23376: extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest, -23376: const wchar_t *__restrict __src, -23376: size_t __n, size_t __destlen) throw (); -23376: extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncat") -23376: -23376: -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t * -23376: __attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1) -23376: return __wcsncat_chk (__dest, __src, __n, -23376: __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t)); -23376: return __wcsncat_alias (__dest, __src, __n); -23376: } -23376: -23376: -23376: extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n, -23376: int __flag, size_t __s_len, -23376: const wchar_t *__restrict __format, ...) -23376: throw () ; -23376: -23376: extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw () __asm__ ("" "swprintf") -23376: -23376: -23376: ; -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw () -23376: -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1) -23376: return __swprintf_chk (__s, __n, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), -23376: __fmt, __builtin_va_arg_pack ()); -23376: return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ()); -23376: } -23376: # 303 "/usr/include/arm-linux-gnueabihf/bits/wchar2.h" 3 4 -23376: extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n, -23376: int __flag, size_t __s_len, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __arg) -23376: throw () ; -23376: -23376: extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw () __asm__ ("" "vswprintf") -23376: -23376: -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw () -23376: -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1) -23376: return __vswprintf_chk (__s, __n, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), __fmt, __ap); -23376: return __vswprintf_alias (__s, __n, __fmt, __ap); -23376: } -23376: -23376: -23376: -23376: -23376: extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag, -23376: const wchar_t *__restrict __format, ...); -23376: extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format, -23376: ...); -23376: extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag, -23376: const wchar_t *__restrict __format, -23376: __gnuc_va_list __ap); -23376: extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format, -23376: __gnuc_va_list __ap); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: wprintf (const wchar_t *__restrict __fmt, ...) -23376: { -23376: return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...) -23376: { -23376: return __fwprintf_chk (__stream, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap) -23376: { -23376: return __vwprintf_chk (2 - 1, __fmt, __ap); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: vfwprintf (__FILE *__restrict __stream, -23376: const wchar_t *__restrict __fmt, __gnuc_va_list __ap) -23376: { -23376: return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap); -23376: } -23376: -23376: -23376: -23376: extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n, -23376: __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws") -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * -23376: fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n) || __n <= 0) -23376: return __fgetws_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), -23376: __n, __stream); -23376: -23376: if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t)) -23376: return __fgetws_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), -23376: __n, __stream); -23376: } -23376: return __fgetws_alias (__s, __n, __stream); -23376: } -23376: -23376: -23376: extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size, -23376: int __n, __FILE *__restrict __stream) -23376: __attribute__ ((__warn_unused_result__)); -23376: extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk") -23376: -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t * -23376: fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n) || __n <= 0) -23376: return __fgetws_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), -23376: __n, __stream); -23376: -23376: if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t)) -23376: return __fgetws_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), -23376: __n, __stream); -23376: } -23376: return __fgetws_unlocked_alias (__s, __n, __stream); -23376: } -23376: -23376: -23376: -23376: extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar, -23376: mbstate_t *__restrict __p, -23376: size_t __buflen) throw () __attribute__ ((__warn_unused_result__)); -23376: extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcrtomb") -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t -23376: __attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw () -23376: -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1)) -23376: return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1)); -23376: return __wcrtomb_alias (__s, __wchar, __ps); -23376: } -23376: -23376: -23376: extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst, -23376: const char **__restrict __src, -23376: size_t __len, mbstate_t *__restrict __ps, -23376: size_t __dstlen) throw (); -23376: extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsrtowcs") -23376: -23376: -23376: -23376: ; -23376: extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__mbsrtowcs_chk") -23376: -23376: -23376: -23376: -23376: __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __mbsrtowcs_chk (__dst, __src, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: -23376: if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)) -23376: return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: } -23376: return __mbsrtowcs_alias (__dst, __src, __len, __ps); -23376: } -23376: -23376: -23376: extern size_t __wcsrtombs_chk (char *__restrict __dst, -23376: const wchar_t **__restrict __src, -23376: size_t __len, mbstate_t *__restrict __ps, -23376: size_t __dstlen) throw (); -23376: extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsrtombs") -23376: -23376: -23376: -23376: ; -23376: extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__wcsrtombs_chk") -23376: -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len"))); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)); -23376: -23376: if (__len > __builtin_object_size (__dst, 2 > 1)) -23376: return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1)); -23376: } -23376: return __wcsrtombs_alias (__dst, __src, __len, __ps); -23376: } -23376: -23376: -23376: -23376: extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst, -23376: const char **__restrict __src, size_t __nmc, -23376: size_t __len, mbstate_t *__restrict __ps, -23376: size_t __dstlen) throw (); -23376: extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsnrtowcs") -23376: -23376: -23376: -23376: ; -23376: 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) throw () __asm__ ("" "__mbsnrtowcs_chk") -23376: -23376: -23376: -23376: -23376: __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: -23376: if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)) -23376: return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: } -23376: return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps); -23376: } -23376: -23376: -23376: extern size_t __wcsnrtombs_chk (char *__restrict __dst, -23376: const wchar_t **__restrict __src, -23376: size_t __nwc, size_t __len, -23376: mbstate_t *__restrict __ps, size_t __dstlen) -23376: throw (); -23376: extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsnrtombs") -23376: -23376: -23376: -23376: ; -23376: 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) throw () __asm__ ("" "__wcsnrtombs_chk") -23376: -23376: -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len"))); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1)); -23376: -23376: if (__len > __builtin_object_size (__dst, 2 > 1)) -23376: return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps, -23376: __builtin_object_size (__dst, 2 > 1)); -23376: } -23376: return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps); -23376: } -23376: # 851 "/usr/include/wchar.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 45 "/usr/include/c++/8/cwchar" 2 3 -23376: # 62 "/usr/include/c++/8/cwchar" 3 -23376: namespace std -23376: { -23376: using ::mbstate_t; -23376: } -23376: # 135 "/usr/include/c++/8/cwchar" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using ::wint_t; -23376: -23376: using ::btowc; -23376: using ::fgetwc; -23376: using ::fgetws; -23376: using ::fputwc; -23376: using ::fputws; -23376: using ::fwide; -23376: using ::fwprintf; -23376: using ::fwscanf; -23376: using ::getwc; -23376: using ::getwchar; -23376: using ::mbrlen; -23376: using ::mbrtowc; -23376: using ::mbsinit; -23376: using ::mbsrtowcs; -23376: using ::putwc; -23376: using ::putwchar; -23376: -23376: using ::swprintf; -23376: -23376: using ::swscanf; -23376: using ::ungetwc; -23376: using ::vfwprintf; -23376: -23376: using ::vfwscanf; -23376: -23376: -23376: using ::vswprintf; -23376: -23376: -23376: using ::vswscanf; -23376: -23376: using ::vwprintf; -23376: -23376: using ::vwscanf; -23376: -23376: using ::wcrtomb; -23376: using ::wcscat; -23376: using ::wcscmp; -23376: using ::wcscoll; -23376: using ::wcscpy; -23376: using ::wcscspn; -23376: using ::wcsftime; -23376: using ::wcslen; -23376: using ::wcsncat; -23376: using ::wcsncmp; -23376: using ::wcsncpy; -23376: using ::wcsrtombs; -23376: using ::wcsspn; -23376: using ::wcstod; -23376: -23376: using ::wcstof; -23376: -23376: using ::wcstok; -23376: using ::wcstol; -23376: using ::wcstoul; -23376: using ::wcsxfrm; -23376: using ::wctob; -23376: using ::wmemcmp; -23376: using ::wmemcpy; -23376: using ::wmemmove; -23376: using ::wmemset; -23376: using ::wprintf; -23376: using ::wscanf; -23376: using ::wcschr; -23376: using ::wcspbrk; -23376: using ::wcsrchr; -23376: using ::wcsstr; -23376: using ::wmemchr; -23376: # 232 "/usr/include/c++/8/cwchar" 3 -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx -23376: { -23376: -23376: -23376: -23376: -23376: -23376: using ::wcstold; -23376: # 257 "/usr/include/c++/8/cwchar" 3 -23376: using ::wcstoll; -23376: using ::wcstoull; -23376: -23376: } -23376: -23376: namespace std -23376: { -23376: using ::__gnu_cxx::wcstold; -23376: using ::__gnu_cxx::wcstoll; -23376: using ::__gnu_cxx::wcstoull; -23376: } -23376: # 277 "/usr/include/c++/8/cwchar" 3 -23376: namespace std -23376: { -23376: -23376: using std::wcstof; -23376: -23376: -23376: using std::vfwscanf; -23376: -23376: -23376: using std::vswscanf; -23376: -23376: -23376: using std::vwscanf; -23376: -23376: -23376: -23376: using std::wcstold; -23376: using std::wcstoll; -23376: using std::wcstoull; -23376: -23376: } -23376: # 41 "/usr/include/c++/8/bits/postypes.h" 2 3 -23376: # 68 "/usr/include/c++/8/bits/postypes.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 90 "/usr/include/c++/8/bits/postypes.h" 3 -23376: typedef long long streamoff; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef ptrdiff_t streamsize; -23376: # 111 "/usr/include/c++/8/bits/postypes.h" 3 -23376: template -23376: class fpos -23376: { -23376: private: -23376: streamoff _M_off; -23376: _StateT _M_state; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: fpos() -23376: : _M_off(0), _M_state() { } -23376: # 133 "/usr/include/c++/8/bits/postypes.h" 3 -23376: fpos(streamoff __off) -23376: : _M_off(__off), _M_state() { } -23376: -23376: -23376: operator streamoff() const { return _M_off; } -23376: -23376: -23376: void -23376: state(_StateT __st) -23376: { _M_state = __st; } -23376: -23376: -23376: _StateT -23376: state() const -23376: { return _M_state; } -23376: -23376: -23376: -23376: -23376: -23376: fpos& -23376: operator+=(streamoff __off) -23376: { -23376: _M_off += __off; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: fpos& -23376: operator-=(streamoff __off) -23376: { -23376: _M_off -= __off; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: fpos -23376: operator+(streamoff __off) const -23376: { -23376: fpos __pos(*this); -23376: __pos += __off; -23376: return __pos; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: fpos -23376: operator-(streamoff __off) const -23376: { -23376: fpos __pos(*this); -23376: __pos -= __off; -23376: return __pos; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: streamoff -23376: operator-(const fpos& __other) const -23376: { return _M_off - __other._M_off; } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) -23376: { return streamoff(__lhs) == streamoff(__rhs); } -23376: -23376: template -23376: inline bool -23376: operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) -23376: { return streamoff(__lhs) != streamoff(__rhs); } -23376: -23376: -23376: -23376: -23376: -23376: typedef fpos streampos; -23376: -23376: typedef fpos wstreampos; -23376: -23376: -23376: -23376: typedef fpos u16streampos; -23376: -23376: typedef fpos u32streampos; -23376: -23376: -23376: -23376: } -23376: # 41 "/usr/include/c++/8/iosfwd" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 74 "/usr/include/c++/8/iosfwd" 3 -23376: class ios_base; -23376: -23376: template > -23376: class basic_ios; -23376: -23376: template > -23376: class basic_streambuf; -23376: -23376: template > -23376: class basic_istream; -23376: -23376: template > -23376: class basic_ostream; -23376: -23376: template > -23376: class basic_iostream; -23376: -23376: -23376: namespace __cxx11 { -23376: -23376: template, -23376: typename _Alloc = allocator<_CharT> > -23376: class basic_stringbuf; -23376: -23376: template, -23376: typename _Alloc = allocator<_CharT> > -23376: class basic_istringstream; -23376: -23376: template, -23376: typename _Alloc = allocator<_CharT> > -23376: class basic_ostringstream; -23376: -23376: template, -23376: typename _Alloc = allocator<_CharT> > -23376: class basic_stringstream; -23376: -23376: } -23376: -23376: template > -23376: class basic_filebuf; -23376: -23376: template > -23376: class basic_ifstream; -23376: -23376: template > -23376: class basic_ofstream; -23376: -23376: template > -23376: class basic_fstream; -23376: -23376: template > -23376: class istreambuf_iterator; -23376: -23376: template > -23376: class ostreambuf_iterator; -23376: -23376: -23376: -23376: typedef basic_ios ios; -23376: -23376: -23376: typedef basic_streambuf streambuf; -23376: -23376: -23376: typedef basic_istream istream; -23376: -23376: -23376: typedef basic_ostream ostream; -23376: -23376: -23376: typedef basic_iostream iostream; -23376: -23376: -23376: typedef basic_stringbuf stringbuf; -23376: -23376: -23376: typedef basic_istringstream istringstream; -23376: -23376: -23376: typedef basic_ostringstream ostringstream; -23376: -23376: -23376: typedef basic_stringstream stringstream; -23376: -23376: -23376: typedef basic_filebuf filebuf; -23376: -23376: -23376: typedef basic_ifstream ifstream; -23376: -23376: -23376: typedef basic_ofstream ofstream; -23376: -23376: -23376: typedef basic_fstream fstream; -23376: -23376: -23376: -23376: typedef basic_ios wios; -23376: -23376: -23376: typedef basic_streambuf wstreambuf; -23376: -23376: -23376: typedef basic_istream wistream; -23376: -23376: -23376: typedef basic_ostream wostream; -23376: -23376: -23376: typedef basic_iostream wiostream; -23376: -23376: -23376: typedef basic_stringbuf wstringbuf; -23376: -23376: -23376: typedef basic_istringstream wistringstream; -23376: -23376: -23376: typedef basic_ostringstream wostringstream; -23376: -23376: -23376: typedef basic_stringstream wstringstream; -23376: -23376: -23376: typedef basic_filebuf wfilebuf; -23376: -23376: -23376: typedef basic_ifstream wifstream; -23376: -23376: -23376: typedef basic_ofstream wofstream; -23376: -23376: -23376: typedef basic_fstream wfstream; -23376: -23376: -23376: -23376: -23376: } -23376: # 35 "/usr/include/gmpxx.h" 2 3 4 -23376: -23376: # 1 "/usr/include/c++/8/cstring" 1 3 4 -23376: # 39 "/usr/include/c++/8/cstring" 3 4 -23376: -23376: # 40 "/usr/include/c++/8/cstring" 3 -23376: -23376: -23376: # 1 "/usr/include/string.h" 1 3 4 -23376: # 26 "/usr/include/string.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 27 "/usr/include/string.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 34 "/usr/include/string.h" 2 3 4 -23376: # 42 "/usr/include/string.h" 3 4 -23376: extern void *memcpy (void *__restrict __dest, const void *__restrict __src, -23376: size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern void *memmove (void *__dest, const void *__src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: -23376: extern void *memccpy (void *__restrict __dest, const void *__restrict __src, -23376: int __c, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int memcmp (const void *__s1, const void *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern "C++" -23376: { -23376: extern void *memchr (void *__s, int __c, size_t __n) -23376: throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern const void *memchr (const void *__s, int __c, size_t __n) -23376: throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * -23376: memchr (void *__s, int __c, size_t __n) throw () -23376: { -23376: return __builtin_memchr (__s, __c, __n); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void * -23376: memchr (const void *__s, int __c, size_t __n) throw () -23376: { -23376: return __builtin_memchr (__s, __c, __n); -23376: } -23376: -23376: } -23376: # 98 "/usr/include/string.h" 3 4 -23376: extern "C++" void *rawmemchr (void *__s, int __c) -23376: throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern "C++" const void *rawmemchr (const void *__s, int __c) -23376: throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" void *memrchr (void *__s, int __c, size_t __n) -23376: throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern "C++" const void *memrchr (const void *__s, int __c, size_t __n) -23376: throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: # 121 "/usr/include/string.h" 3 4 -23376: extern char *strcpy (char *__restrict __dest, const char *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern char *strncpy (char *__restrict __dest, -23376: const char *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern char *strcat (char *__restrict __dest, const char *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern char *strncat (char *__restrict __dest, const char *__restrict __src, -23376: size_t __n) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int strcmp (const char *__s1, const char *__s2) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern int strncmp (const char *__s1, const char *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int strcoll (const char *__s1, const char *__s2) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern size_t strxfrm (char *__restrict __dest, -23376: const char *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); -23376: -23376: -23376: extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, -23376: locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4))); -23376: -23376: -23376: -23376: -23376: -23376: extern char *strdup (const char *__s) -23376: throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern char *strndup (const char *__string, size_t __n) -23376: throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); -23376: # 203 "/usr/include/string.h" 3 4 -23376: extern "C++" -23376: { -23376: extern char *strchr (char *__s, int __c) -23376: throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern const char *strchr (const char *__s, int __c) -23376: throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: strchr (char *__s, int __c) throw () -23376: { -23376: return __builtin_strchr (__s, __c); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: strchr (const char *__s, int __c) throw () -23376: { -23376: return __builtin_strchr (__s, __c); -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" -23376: { -23376: extern char *strrchr (char *__s, int __c) -23376: throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern const char *strrchr (const char *__s, int __c) -23376: throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: strrchr (char *__s, int __c) throw () -23376: { -23376: return __builtin_strrchr (__s, __c); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: strrchr (const char *__s, int __c) throw () -23376: { -23376: return __builtin_strrchr (__s, __c); -23376: } -23376: -23376: } -23376: # 260 "/usr/include/string.h" 3 4 -23376: extern "C++" char *strchrnul (char *__s, int __c) -23376: throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern "C++" const char *strchrnul (const char *__s, int __c) -23376: throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: # 272 "/usr/include/string.h" 3 4 -23376: extern size_t strcspn (const char *__s, const char *__reject) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern size_t strspn (const char *__s, const char *__accept) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern "C++" -23376: { -23376: extern char *strpbrk (char *__s, const char *__accept) -23376: throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: extern const char *strpbrk (const char *__s, const char *__accept) -23376: throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: strpbrk (char *__s, const char *__accept) throw () -23376: { -23376: return __builtin_strpbrk (__s, __accept); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: strpbrk (const char *__s, const char *__accept) throw () -23376: { -23376: return __builtin_strpbrk (__s, __accept); -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" -23376: { -23376: extern char *strstr (char *__haystack, const char *__needle) -23376: throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: extern const char *strstr (const char *__haystack, const char *__needle) -23376: throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: strstr (char *__haystack, const char *__needle) throw () -23376: { -23376: return __builtin_strstr (__haystack, __needle); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: strstr (const char *__haystack, const char *__needle) throw () -23376: { -23376: return __builtin_strstr (__haystack, __needle); -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern char *strtok (char *__restrict __s, const char *__restrict __delim) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern char *__strtok_r (char *__restrict __s, -23376: const char *__restrict __delim, -23376: char **__restrict __save_ptr) -23376: throw () __attribute__ ((__nonnull__ (2, 3))); -23376: -23376: extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, -23376: char **__restrict __save_ptr) -23376: throw () __attribute__ ((__nonnull__ (2, 3))); -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" char *strcasestr (char *__haystack, const char *__needle) -23376: throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: extern "C++" const char *strcasestr (const char *__haystack, -23376: const char *__needle) -23376: throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: # 368 "/usr/include/string.h" 3 4 -23376: extern void *memmem (const void *__haystack, size_t __haystacklen, -23376: const void *__needle, size_t __needlelen) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: -23376: extern void *__mempcpy (void *__restrict __dest, -23376: const void *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern void *mempcpy (void *__restrict __dest, -23376: const void *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern size_t strlen (const char *__s) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: extern size_t strnlen (const char *__string, size_t __maxlen) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: extern char *strerror (int __errnum) throw (); -23376: # 420 "/usr/include/string.h" 3 4 -23376: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) -23376: throw () __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern char *strerror_l (int __errnum, locale_t __l) throw (); -23376: -23376: -23376: -23376: # 1 "/usr/include/strings.h" 1 3 4 -23376: # 23 "/usr/include/strings.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 24 "/usr/include/strings.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: extern int bcmp (const void *__s1, const void *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern void bcopy (const void *__src, void *__dest, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern "C++" -23376: { -23376: extern char *index (char *__s, int __c) -23376: throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern const char *index (const char *__s, int __c) -23376: throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: index (char *__s, int __c) throw () -23376: { -23376: return __builtin_index (__s, __c); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: index (const char *__s, int __c) throw () -23376: { -23376: return __builtin_index (__s, __c); -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" -23376: { -23376: extern char *rindex (char *__s, int __c) -23376: throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: extern const char *rindex (const char *__s, int __c) -23376: throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * -23376: rindex (char *__s, int __c) throw () -23376: { -23376: return __builtin_rindex (__s, __c); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char * -23376: rindex (const char *__s, int __c) throw () -23376: { -23376: return __builtin_rindex (__s, __c); -23376: } -23376: -23376: } -23376: # 104 "/usr/include/strings.h" 3 4 -23376: extern int ffs (int __i) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: -23376: extern int ffsl (long int __l) throw () __attribute__ ((__const__)); -23376: __extension__ extern int ffsll (long long int __ll) -23376: throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern int strcasecmp (const char *__s1, const char *__s2) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); -23376: -23376: -23376: -23376: extern int strncasecmp_l (const char *__s1, const char *__s2, -23376: size_t __n, locale_t __loc) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4))); -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 1 3 4 -23376: # 22 "/usr/include/arm-linux-gnueabihf/bits/strings_fortified.h" 3 4 -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void -23376: __attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) throw () -23376: { -23376: (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void -23376: __attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) throw () -23376: { -23376: (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0)); -23376: } -23376: # 145 "/usr/include/strings.h" 2 3 4 -23376: # 432 "/usr/include/string.h" 2 3 4 -23376: -23376: -23376: -23376: extern void explicit_bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern char *strsep (char **__restrict __stringp, -23376: const char *__restrict __delim) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern char *strsignal (int __sig) throw (); -23376: -23376: -23376: extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern char *__stpncpy (char *__restrict __dest, -23376: const char *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern char *stpncpy (char *__restrict __dest, -23376: const char *__restrict __src, size_t __n) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern int strverscmp (const char *__s1, const char *__s2) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C++" char *basename (char *__filename) -23376: throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); -23376: extern "C++" const char *basename (const char *__filename) -23376: throw () __asm ("basename") __attribute__ ((__nonnull__ (1))); -23376: # 494 "/usr/include/string.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 1 3 4 -23376: # 30 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * -23376: __attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * -23376: __attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) throw () -23376: { -23376: return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * -23376: __attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: # 58 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void * -23376: __attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) throw () -23376: { -23376: # 71 "/usr/include/arm-linux-gnueabihf/bits/string_fortified.h" 3 4 -23376: return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: -23376: -23376: -23376: -23376: void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void -23376: __attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) throw () -23376: { -23376: __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0)); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) throw () -23376: { -23376: return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) throw () -23376: { -23376: return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); -23376: } -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1)); -23376: } -23376: -23376: -23376: extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n, -23376: size_t __destlen) throw (); -23376: extern char *__stpncpy_alias (char *__dest, const char *__src, size_t __n) throw () __asm__ ("" "stpncpy") -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) throw () -23376: { -23376: if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1 -23376: && (!__builtin_constant_p (__n) || __n > __builtin_object_size (__dest, 2 > 1))) -23376: return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1)); -23376: return __stpncpy_alias (__dest, __src, __n); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) throw () -23376: { -23376: return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1)); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * -23376: __attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1)); -23376: } -23376: # 495 "/usr/include/string.h" 2 3 4 -23376: -23376: -23376: -23376: } -23376: # 43 "/usr/include/c++/8/cstring" 2 3 -23376: # 71 "/usr/include/c++/8/cstring" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using ::memchr; -23376: using ::memcmp; -23376: using ::memcpy; -23376: using ::memmove; -23376: using ::memset; -23376: using ::strcat; -23376: using ::strcmp; -23376: using ::strcoll; -23376: using ::strcpy; -23376: using ::strcspn; -23376: using ::strerror; -23376: using ::strlen; -23376: using ::strncat; -23376: using ::strncmp; -23376: using ::strncpy; -23376: using ::strspn; -23376: using ::strtok; -23376: using ::strxfrm; -23376: using ::strchr; -23376: using ::strpbrk; -23376: using ::strrchr; -23376: using ::strstr; -23376: # 120 "/usr/include/c++/8/cstring" 3 -23376: -23376: } -23376: # 37 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/limits" 1 3 4 -23376: # 40 "/usr/include/c++/8/limits" 3 4 -23376: -23376: # 41 "/usr/include/c++/8/limits" 3 -23376: # 158 "/usr/include/c++/8/limits" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum float_round_style -23376: { -23376: round_indeterminate = -1, -23376: round_toward_zero = 0, -23376: round_to_nearest = 1, -23376: round_toward_infinity = 2, -23376: round_toward_neg_infinity = 3 -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum float_denorm_style -23376: { -23376: -23376: denorm_indeterminate = -1, -23376: -23376: denorm_absent = 0, -23376: -23376: denorm_present = 1 -23376: }; -23376: # 202 "/usr/include/c++/8/limits" 3 -23376: struct __numeric_limits_base -23376: { -23376: -23376: -23376: static constexpr bool is_specialized = false; -23376: -23376: -23376: -23376: -23376: static constexpr int digits = 0; -23376: -23376: -23376: static constexpr int digits10 = 0; -23376: -23376: -23376: -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: -23376: -23376: static constexpr bool is_signed = false; -23376: -23376: -23376: static constexpr bool is_integer = false; -23376: -23376: -23376: -23376: -23376: static constexpr bool is_exact = false; -23376: -23376: -23376: -23376: static constexpr int radix = 0; -23376: -23376: -23376: -23376: static constexpr int min_exponent = 0; -23376: -23376: -23376: -23376: static constexpr int min_exponent10 = 0; -23376: -23376: -23376: -23376: -23376: static constexpr int max_exponent = 0; -23376: -23376: -23376: -23376: static constexpr int max_exponent10 = 0; -23376: -23376: -23376: static constexpr bool has_infinity = false; -23376: -23376: -23376: -23376: static constexpr bool has_quiet_NaN = false; -23376: -23376: -23376: -23376: static constexpr bool has_signaling_NaN = false; -23376: -23376: -23376: static constexpr float_denorm_style has_denorm = denorm_absent; -23376: -23376: -23376: -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: -23376: -23376: static constexpr bool is_iec559 = false; -23376: -23376: -23376: -23376: -23376: static constexpr bool is_bounded = false; -23376: # 288 "/usr/include/c++/8/limits" 3 -23376: static constexpr bool is_modulo = false; -23376: -23376: -23376: static constexpr bool traps = false; -23376: -23376: -23376: static constexpr bool tinyness_before = false; -23376: -23376: -23376: -23376: -23376: static constexpr float_round_style round_style = -23376: round_toward_zero; -23376: }; -23376: # 311 "/usr/include/c++/8/limits" 3 -23376: template -23376: struct numeric_limits : public __numeric_limits_base -23376: { -23376: -23376: -23376: static constexpr _Tp -23376: min() noexcept { return _Tp(); } -23376: -23376: -23376: static constexpr _Tp -23376: max() noexcept { return _Tp(); } -23376: -23376: -23376: -23376: -23376: static constexpr _Tp -23376: lowest() noexcept { return _Tp(); } -23376: -23376: -23376: -23376: -23376: static constexpr _Tp -23376: epsilon() noexcept { return _Tp(); } -23376: -23376: -23376: static constexpr _Tp -23376: round_error() noexcept { return _Tp(); } -23376: -23376: -23376: static constexpr _Tp -23376: infinity() noexcept { return _Tp(); } -23376: -23376: -23376: -23376: static constexpr _Tp -23376: quiet_NaN() noexcept { return _Tp(); } -23376: -23376: -23376: -23376: static constexpr _Tp -23376: signaling_NaN() noexcept { return _Tp(); } -23376: -23376: -23376: -23376: -23376: static constexpr _Tp -23376: denorm_min() noexcept { return _Tp(); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct numeric_limits -23376: : public numeric_limits<_Tp> { }; -23376: -23376: template -23376: struct numeric_limits -23376: : public numeric_limits<_Tp> { }; -23376: -23376: template -23376: struct numeric_limits -23376: : public numeric_limits<_Tp> { }; -23376: # 382 "/usr/include/c++/8/limits" 3 -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr bool -23376: min() noexcept { return false; } -23376: -23376: static constexpr bool -23376: max() noexcept { return true; } -23376: -23376: -23376: static constexpr bool -23376: lowest() noexcept { return min(); } -23376: -23376: static constexpr int digits = 1; -23376: static constexpr int digits10 = 0; -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr bool -23376: epsilon() noexcept { return false; } -23376: -23376: static constexpr bool -23376: round_error() noexcept { return false; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr bool -23376: infinity() noexcept { return false; } -23376: -23376: static constexpr bool -23376: quiet_NaN() noexcept { return false; } -23376: -23376: static constexpr bool -23376: signaling_NaN() noexcept { return false; } -23376: -23376: static constexpr bool -23376: denorm_min() noexcept { return false; } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: -23376: -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr char -23376: 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); } -23376: -23376: static constexpr char -23376: max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); } -23376: -23376: -23376: static constexpr char -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = ((char)(-1) < 0); -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr char -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr char -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr -23376: char infinity() noexcept { return char(); } -23376: -23376: static constexpr char -23376: quiet_NaN() noexcept { return char(); } -23376: -23376: static constexpr char -23376: signaling_NaN() noexcept { return char(); } -23376: -23376: static constexpr char -23376: denorm_min() noexcept { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = !is_signed; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr signed char -23376: min() noexcept { return -0x7f - 1; } -23376: -23376: static constexpr signed char -23376: max() noexcept { return 0x7f; } -23376: -23376: -23376: static constexpr signed char -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr signed char -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr signed char -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr signed char -23376: infinity() noexcept { return static_cast(0); } -23376: -23376: static constexpr signed char -23376: quiet_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr signed char -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr signed char -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr unsigned char -23376: min() noexcept { return 0; } -23376: -23376: static constexpr unsigned char -23376: max() noexcept { return 0x7f * 2U + 1; } -23376: -23376: -23376: static constexpr unsigned char -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr unsigned char -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr unsigned char -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr unsigned char -23376: infinity() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned char -23376: quiet_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned char -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned char -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = true; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr wchar_t -23376: 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); } -23376: -23376: static constexpr wchar_t -23376: 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); } -23376: -23376: -23376: static constexpr wchar_t -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = ((wchar_t)(-1) < 0); -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr wchar_t -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr wchar_t -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr wchar_t -23376: infinity() noexcept { return wchar_t(); } -23376: -23376: static constexpr wchar_t -23376: quiet_NaN() noexcept { return wchar_t(); } -23376: -23376: static constexpr wchar_t -23376: signaling_NaN() noexcept { return wchar_t(); } -23376: -23376: static constexpr wchar_t -23376: denorm_min() noexcept { return wchar_t(); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = !is_signed; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr char16_t -23376: 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); } -23376: -23376: static constexpr char16_t -23376: 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); } -23376: -23376: static constexpr char16_t -23376: lowest() noexcept { return min(); } -23376: -23376: static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136); -23376: static constexpr int max_digits10 = 0; -23376: static constexpr bool is_signed = ((char16_t)(-1) < 0); -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr char16_t -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr char16_t -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr char16_t -23376: infinity() noexcept { return char16_t(); } -23376: -23376: static constexpr char16_t -23376: quiet_NaN() noexcept { return char16_t(); } -23376: -23376: static constexpr char16_t -23376: signaling_NaN() noexcept { return char16_t(); } -23376: -23376: static constexpr char16_t -23376: denorm_min() noexcept { return char16_t(); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = !is_signed; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr char32_t -23376: 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); } -23376: -23376: static constexpr char32_t -23376: 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); } -23376: -23376: static constexpr char32_t -23376: lowest() noexcept { return min(); } -23376: -23376: static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136); -23376: static constexpr int max_digits10 = 0; -23376: static constexpr bool is_signed = ((char32_t)(-1) < 0); -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr char32_t -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr char32_t -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr char32_t -23376: infinity() noexcept { return char32_t(); } -23376: -23376: static constexpr char32_t -23376: quiet_NaN() noexcept { return char32_t(); } -23376: -23376: static constexpr char32_t -23376: signaling_NaN() noexcept { return char32_t(); } -23376: -23376: static constexpr char32_t -23376: denorm_min() noexcept { return char32_t(); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = !is_signed; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style = round_toward_zero; -23376: }; -23376: -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr short -23376: min() noexcept { return -0x7fff - 1; } -23376: -23376: static constexpr short -23376: max() noexcept { return 0x7fff; } -23376: -23376: -23376: static constexpr short -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr short -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr short -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr short -23376: infinity() noexcept { return short(); } -23376: -23376: static constexpr short -23376: quiet_NaN() noexcept { return short(); } -23376: -23376: static constexpr short -23376: signaling_NaN() noexcept { return short(); } -23376: -23376: static constexpr short -23376: denorm_min() noexcept { return short(); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr unsigned short -23376: min() noexcept { return 0; } -23376: -23376: static constexpr unsigned short -23376: max() noexcept { return 0x7fff * 2U + 1; } -23376: -23376: -23376: static constexpr unsigned short -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr unsigned short -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr unsigned short -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr unsigned short -23376: infinity() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned short -23376: quiet_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned short -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned short -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = true; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr int -23376: min() noexcept { return -0x7fffffff - 1; } -23376: -23376: static constexpr int -23376: max() noexcept { return 0x7fffffff; } -23376: -23376: -23376: static constexpr int -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr int -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr int -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr int -23376: infinity() noexcept { return static_cast(0); } -23376: -23376: static constexpr int -23376: quiet_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr int -23376: signaling_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr int -23376: denorm_min() noexcept { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr unsigned int -23376: min() noexcept { return 0; } -23376: -23376: static constexpr unsigned int -23376: max() noexcept { return 0x7fffffff * 2U + 1; } -23376: -23376: -23376: static constexpr unsigned int -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr unsigned int -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr unsigned int -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr unsigned int -23376: infinity() noexcept { return static_cast(0); } -23376: -23376: static constexpr unsigned int -23376: quiet_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned int -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned int -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = true; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr long -23376: min() noexcept { return -0x7fffffffL - 1; } -23376: -23376: static constexpr long -23376: max() noexcept { return 0x7fffffffL; } -23376: -23376: -23376: static constexpr long -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0)); -23376: static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr long -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr long -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr long -23376: infinity() noexcept { return static_cast(0); } -23376: -23376: static constexpr long -23376: quiet_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr long -23376: signaling_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr long -23376: denorm_min() noexcept { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr unsigned long -23376: min() noexcept { return 0; } -23376: -23376: static constexpr unsigned long -23376: max() noexcept { return 0x7fffffffL * 2UL + 1; } -23376: -23376: -23376: static constexpr unsigned long -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr unsigned long -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr unsigned long -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr unsigned long -23376: infinity() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long -23376: quiet_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = true; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr long long -23376: min() noexcept { return -0x7fffffffffffffffLL - 1; } -23376: -23376: static constexpr long long -23376: max() noexcept { return 0x7fffffffffffffffLL; } -23376: -23376: -23376: static constexpr long long -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(long long) * 8 - ((long long)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr long long -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr long long -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr long long -23376: infinity() noexcept { return static_cast(0); } -23376: -23376: static constexpr long long -23376: quiet_NaN() noexcept { return static_cast(0); } -23376: -23376: static constexpr long long -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr long long -23376: denorm_min() noexcept { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr unsigned long long -23376: min() noexcept { return 0; } -23376: -23376: static constexpr unsigned long long -23376: max() noexcept { return 0x7fffffffffffffffLL * 2ULL + 1; } -23376: -23376: -23376: static constexpr unsigned long long -23376: lowest() noexcept { return min(); } -23376: -23376: -23376: static constexpr int digits -23376: = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)); -23376: static constexpr int digits10 -23376: = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136); -23376: -23376: static constexpr int max_digits10 = 0; -23376: -23376: static constexpr bool is_signed = false; -23376: static constexpr bool is_integer = true; -23376: static constexpr bool is_exact = true; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr unsigned long long -23376: epsilon() noexcept { return 0; } -23376: -23376: static constexpr unsigned long long -23376: round_error() noexcept { return 0; } -23376: -23376: static constexpr int min_exponent = 0; -23376: static constexpr int min_exponent10 = 0; -23376: static constexpr int max_exponent = 0; -23376: static constexpr int max_exponent10 = 0; -23376: -23376: static constexpr bool has_infinity = false; -23376: static constexpr bool has_quiet_NaN = false; -23376: static constexpr bool has_signaling_NaN = false; -23376: static constexpr float_denorm_style has_denorm -23376: = denorm_absent; -23376: static constexpr bool has_denorm_loss = false; -23376: -23376: static constexpr unsigned long long -23376: infinity() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long long -23376: quiet_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long long -23376: signaling_NaN() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr unsigned long long -23376: denorm_min() noexcept -23376: { return static_cast(0); } -23376: -23376: static constexpr bool is_iec559 = false; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = true; -23376: -23376: static constexpr bool traps = true; -23376: static constexpr bool tinyness_before = false; -23376: static constexpr float_round_style round_style -23376: = round_toward_zero; -23376: }; -23376: # 1593 "/usr/include/c++/8/limits" 3 -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr float -23376: min() noexcept { return 1.1754943508222875e-38F; } -23376: -23376: static constexpr float -23376: max() noexcept { return 3.4028234663852886e+38F; } -23376: -23376: -23376: static constexpr float -23376: lowest() noexcept { return -3.4028234663852886e+38F; } -23376: -23376: -23376: static constexpr int digits = 24; -23376: static constexpr int digits10 = 6; -23376: -23376: static constexpr int max_digits10 -23376: = (2 + (24) * 643L / 2136); -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = false; -23376: static constexpr bool is_exact = false; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr float -23376: epsilon() noexcept { return 1.1920928955078125e-7F; } -23376: -23376: static constexpr float -23376: round_error() noexcept { return 0.5F; } -23376: -23376: static constexpr int min_exponent = (-125); -23376: static constexpr int min_exponent10 = (-37); -23376: static constexpr int max_exponent = 128; -23376: static constexpr int max_exponent10 = 38; -23376: -23376: static constexpr bool has_infinity = 1; -23376: static constexpr bool has_quiet_NaN = 1; -23376: static constexpr bool has_signaling_NaN = has_quiet_NaN; -23376: static constexpr float_denorm_style has_denorm -23376: = bool(1) ? denorm_present : denorm_absent; -23376: static constexpr bool has_denorm_loss -23376: = false; -23376: -23376: static constexpr float -23376: infinity() noexcept { return __builtin_huge_valf(); } -23376: -23376: static constexpr float -23376: quiet_NaN() noexcept { return __builtin_nanf(""); } -23376: -23376: static constexpr float -23376: signaling_NaN() noexcept { return __builtin_nansf(""); } -23376: -23376: static constexpr float -23376: denorm_min() noexcept { return 1.4012984643248171e-45F; } -23376: -23376: static constexpr bool is_iec559 -23376: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = false; -23376: static constexpr bool tinyness_before -23376: = false; -23376: static constexpr float_round_style round_style -23376: = round_to_nearest; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr double -23376: min() noexcept { return double(2.2250738585072014e-308L); } -23376: -23376: static constexpr double -23376: max() noexcept { return double(1.7976931348623157e+308L); } -23376: -23376: -23376: static constexpr double -23376: lowest() noexcept { return -double(1.7976931348623157e+308L); } -23376: -23376: -23376: static constexpr int digits = 53; -23376: static constexpr int digits10 = 15; -23376: -23376: static constexpr int max_digits10 -23376: = (2 + (53) * 643L / 2136); -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = false; -23376: static constexpr bool is_exact = false; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr double -23376: epsilon() noexcept { return double(2.2204460492503131e-16L); } -23376: -23376: static constexpr double -23376: round_error() noexcept { return 0.5; } -23376: -23376: static constexpr int min_exponent = (-1021); -23376: static constexpr int min_exponent10 = (-307); -23376: static constexpr int max_exponent = 1024; -23376: static constexpr int max_exponent10 = 308; -23376: -23376: static constexpr bool has_infinity = 1; -23376: static constexpr bool has_quiet_NaN = 1; -23376: static constexpr bool has_signaling_NaN = has_quiet_NaN; -23376: static constexpr float_denorm_style has_denorm -23376: = bool(1) ? denorm_present : denorm_absent; -23376: static constexpr bool has_denorm_loss -23376: = false; -23376: -23376: static constexpr double -23376: infinity() noexcept { return __builtin_huge_val(); } -23376: -23376: static constexpr double -23376: quiet_NaN() noexcept { return __builtin_nan(""); } -23376: -23376: static constexpr double -23376: signaling_NaN() noexcept { return __builtin_nans(""); } -23376: -23376: static constexpr double -23376: denorm_min() noexcept { return double(4.9406564584124654e-324L); } -23376: -23376: static constexpr bool is_iec559 -23376: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = false; -23376: static constexpr bool tinyness_before -23376: = false; -23376: static constexpr float_round_style round_style -23376: = round_to_nearest; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct numeric_limits -23376: { -23376: static constexpr bool is_specialized = true; -23376: -23376: static constexpr long double -23376: min() noexcept { return 2.2250738585072014e-308L; } -23376: -23376: static constexpr long double -23376: max() noexcept { return 1.7976931348623157e+308L; } -23376: -23376: -23376: static constexpr long double -23376: lowest() noexcept { return -1.7976931348623157e+308L; } -23376: -23376: -23376: static constexpr int digits = 53; -23376: static constexpr int digits10 = 15; -23376: -23376: static constexpr int max_digits10 -23376: = (2 + (53) * 643L / 2136); -23376: -23376: static constexpr bool is_signed = true; -23376: static constexpr bool is_integer = false; -23376: static constexpr bool is_exact = false; -23376: static constexpr int radix = 2; -23376: -23376: static constexpr long double -23376: epsilon() noexcept { return 2.2204460492503131e-16L; } -23376: -23376: static constexpr long double -23376: round_error() noexcept { return 0.5L; } -23376: -23376: static constexpr int min_exponent = (-1021); -23376: static constexpr int min_exponent10 = (-307); -23376: static constexpr int max_exponent = 1024; -23376: static constexpr int max_exponent10 = 308; -23376: -23376: static constexpr bool has_infinity = 1; -23376: static constexpr bool has_quiet_NaN = 1; -23376: static constexpr bool has_signaling_NaN = has_quiet_NaN; -23376: static constexpr float_denorm_style has_denorm -23376: = bool(1) ? denorm_present : denorm_absent; -23376: static constexpr bool has_denorm_loss -23376: = false; -23376: -23376: static constexpr long double -23376: infinity() noexcept { return __builtin_huge_vall(); } -23376: -23376: static constexpr long double -23376: quiet_NaN() noexcept { return __builtin_nanl(""); } -23376: -23376: static constexpr long double -23376: signaling_NaN() noexcept { return __builtin_nansl(""); } -23376: -23376: static constexpr long double -23376: denorm_min() noexcept { return 4.9406564584124654e-324L; } -23376: -23376: static constexpr bool is_iec559 -23376: = has_infinity && has_quiet_NaN && has_denorm == denorm_present; -23376: static constexpr bool is_bounded = true; -23376: static constexpr bool is_modulo = false; -23376: -23376: static constexpr bool traps = false; -23376: static constexpr bool tinyness_before = -23376: false; -23376: static constexpr float_round_style round_style = -23376: round_to_nearest; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 38 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/utility" 1 3 4 -23376: # 58 "/usr/include/c++/8/utility" 3 4 -23376: -23376: # 59 "/usr/include/c++/8/utility" 3 -23376: # 69 "/usr/include/c++/8/utility" 3 -23376: # 1 "/usr/include/c++/8/bits/stl_relops.h" 1 3 -23376: # 67 "/usr/include/c++/8/bits/stl_relops.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: namespace rel_ops -23376: { -23376: # 85 "/usr/include/c++/8/bits/stl_relops.h" 3 -23376: template -23376: inline bool -23376: operator!=(const _Tp& __x, const _Tp& __y) -23376: { return !(__x == __y); } -23376: # 98 "/usr/include/c++/8/bits/stl_relops.h" 3 -23376: template -23376: inline bool -23376: operator>(const _Tp& __x, const _Tp& __y) -23376: { return __y < __x; } -23376: # 111 "/usr/include/c++/8/bits/stl_relops.h" 3 -23376: template -23376: inline bool -23376: operator<=(const _Tp& __x, const _Tp& __y) -23376: { return !(__y < __x); } -23376: # 124 "/usr/include/c++/8/bits/stl_relops.h" 3 -23376: template -23376: inline bool -23376: operator>=(const _Tp& __x, const _Tp& __y) -23376: { return !(__x < __y); } -23376: } -23376: -23376: -23376: } -23376: # 70 "/usr/include/c++/8/utility" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_pair.h" 1 3 -23376: # 59 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: # 1 "/usr/include/c++/8/bits/move.h" 1 3 -23376: # 34 "/usr/include/c++/8/bits/move.h" 3 -23376: # 1 "/usr/include/c++/8/bits/concept_check.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/concept_check.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/concept_check.h" 3 -23376: # 35 "/usr/include/c++/8/bits/move.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr _Tp* -23376: __addressof(_Tp& __r) noexcept -23376: { return __builtin_addressof(__r); } -23376: -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/type_traits" 1 3 -23376: # 32 "/usr/include/c++/8/type_traits" 3 -23376: -23376: # 33 "/usr/include/c++/8/type_traits" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 56 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct integral_constant -23376: { -23376: static constexpr _Tp value = __v; -23376: typedef _Tp value_type; -23376: typedef integral_constant<_Tp, __v> type; -23376: constexpr operator value_type() const noexcept { return value; } -23376: -23376: -23376: -23376: -23376: constexpr value_type operator()() const noexcept { return value; } -23376: -23376: }; -23376: -23376: template -23376: constexpr _Tp integral_constant<_Tp, __v>::value; -23376: -23376: -23376: typedef integral_constant true_type; -23376: -23376: -23376: typedef integral_constant false_type; -23376: -23376: template -23376: using __bool_constant = integral_constant; -23376: # 91 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct conditional; -23376: -23376: template -23376: struct __or_; -23376: -23376: template<> -23376: struct __or_<> -23376: : public false_type -23376: { }; -23376: -23376: template -23376: struct __or_<_B1> -23376: : public _B1 -23376: { }; -23376: -23376: template -23376: struct __or_<_B1, _B2> -23376: : public conditional<_B1::value, _B1, _B2>::type -23376: { }; -23376: -23376: template -23376: struct __or_<_B1, _B2, _B3, _Bn...> -23376: : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type -23376: { }; -23376: -23376: template -23376: struct __and_; -23376: -23376: template<> -23376: struct __and_<> -23376: : public true_type -23376: { }; -23376: -23376: template -23376: struct __and_<_B1> -23376: : public _B1 -23376: { }; -23376: -23376: template -23376: struct __and_<_B1, _B2> -23376: : public conditional<_B1::value, _B2, _B1>::type -23376: { }; -23376: -23376: template -23376: struct __and_<_B1, _B2, _B3, _Bn...> -23376: : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type -23376: { }; -23376: -23376: template -23376: struct __not_ -23376: : public __bool_constant -23376: { }; -23376: # 180 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct __success_type -23376: { typedef _Tp type; }; -23376: -23376: struct __failure_type -23376: { }; -23376: -23376: -23376: -23376: template -23376: struct remove_cv; -23376: -23376: template -23376: struct __is_void_helper -23376: : public false_type { }; -23376: -23376: template<> -23376: struct __is_void_helper -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_void -23376: : public __is_void_helper::type>::type -23376: { }; -23376: -23376: template -23376: struct __is_integral_helper -23376: : public false_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_integral_helper -23376: : public true_type { }; -23376: # 312 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct is_integral -23376: : public __is_integral_helper::type>::type -23376: { }; -23376: -23376: template -23376: struct __is_floating_point_helper -23376: : public false_type { }; -23376: -23376: template<> -23376: struct __is_floating_point_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_floating_point_helper -23376: : public true_type { }; -23376: -23376: template<> -23376: struct __is_floating_point_helper -23376: : public true_type { }; -23376: # 340 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct is_floating_point -23376: : public __is_floating_point_helper::type>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_array -23376: : public false_type { }; -23376: -23376: template -23376: struct is_array<_Tp[_Size]> -23376: : public true_type { }; -23376: -23376: template -23376: struct is_array<_Tp[]> -23376: : public true_type { }; -23376: -23376: template -23376: struct __is_pointer_helper -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_pointer_helper<_Tp*> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_pointer -23376: : public __is_pointer_helper::type>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_lvalue_reference -23376: : public false_type { }; -23376: -23376: template -23376: struct is_lvalue_reference<_Tp&> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_rvalue_reference -23376: : public false_type { }; -23376: -23376: template -23376: struct is_rvalue_reference<_Tp&&> -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function; -23376: -23376: template -23376: struct __is_member_object_pointer_helper -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_member_object_pointer_helper<_Tp _Cp::*> -23376: : public integral_constant::value> { }; -23376: -23376: -23376: template -23376: struct is_member_object_pointer -23376: : public __is_member_object_pointer_helper< -23376: typename remove_cv<_Tp>::type>::type -23376: { }; -23376: -23376: template -23376: struct __is_member_function_pointer_helper -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_member_function_pointer_helper<_Tp _Cp::*> -23376: : public integral_constant::value> { }; -23376: -23376: -23376: template -23376: struct is_member_function_pointer -23376: : public __is_member_function_pointer_helper< -23376: typename remove_cv<_Tp>::type>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_enum -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_union -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_class -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_function -23376: : public false_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) volatile > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) volatile & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) volatile && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) volatile > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) volatile & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) volatile && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const volatile > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const volatile & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes...) const volatile && > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const volatile > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const volatile & > -23376: : public true_type { }; -23376: -23376: template -23376: struct is_function<_Res(_ArgTypes......) const volatile && > -23376: : public true_type { }; -23376: -23376: -23376: -23376: template -23376: struct __is_null_pointer_helper -23376: : public false_type { }; -23376: -23376: template<> -23376: struct __is_null_pointer_helper -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_null_pointer -23376: : public __is_null_pointer_helper::type>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __is_nullptr_t -23376: : public is_null_pointer<_Tp> -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct is_reference -23376: : public __or_, -23376: is_rvalue_reference<_Tp>>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_arithmetic -23376: : public __or_, is_floating_point<_Tp>>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_fundamental -23376: : public __or_, is_void<_Tp>, -23376: is_null_pointer<_Tp>>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_object -23376: : public __not_<__or_, is_reference<_Tp>, -23376: is_void<_Tp>>>::type -23376: { }; -23376: -23376: template -23376: struct is_member_pointer; -23376: -23376: -23376: template -23376: struct is_scalar -23376: : public __or_, is_enum<_Tp>, is_pointer<_Tp>, -23376: is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_compound -23376: : public integral_constant::value> { }; -23376: -23376: template -23376: struct __is_member_pointer_helper -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_member_pointer_helper<_Tp _Cp::*> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_member_pointer -23376: : public __is_member_pointer_helper::type>::type -23376: { }; -23376: -23376: -23376: -23376: template -23376: struct __is_referenceable -23376: : public __or_, is_reference<_Tp>>::type -23376: { }; -23376: -23376: template -23376: struct __is_referenceable<_Res(_Args...) > -23376: : public true_type -23376: { }; -23376: -23376: template -23376: struct __is_referenceable<_Res(_Args......) > -23376: : public true_type -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct is_const -23376: : public false_type { }; -23376: -23376: template -23376: struct is_const<_Tp const> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_volatile -23376: : public false_type { }; -23376: -23376: template -23376: struct is_volatile<_Tp volatile> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_trivial -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_trivially_copyable -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_standard_layout -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: -23376: template -23376: struct is_pod -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_literal_type -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_empty -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_polymorphic -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct is_final -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: -23376: template -23376: struct is_abstract -23376: : public integral_constant -23376: { }; -23376: -23376: template::value> -23376: struct __is_signed_helper -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_signed_helper<_Tp, true> -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: template -23376: struct is_signed -23376: : public __is_signed_helper<_Tp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_unsigned -23376: : public __and_, __not_>> -23376: { }; -23376: # 747 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: _Up -23376: __declval(int); -23376: -23376: template -23376: _Tp -23376: __declval(long); -23376: -23376: template -23376: auto declval() noexcept -> decltype(__declval<_Tp>(0)); -23376: -23376: template -23376: struct extent; -23376: -23376: template -23376: struct remove_all_extents; -23376: -23376: template -23376: struct __is_array_known_bounds -23376: : public integral_constant::value > 0)> -23376: { }; -23376: -23376: template -23376: struct __is_array_unknown_bounds -23376: : public __and_, __not_>> -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct __do_is_destructible_impl -23376: { -23376: template().~_Tp())> -23376: static true_type __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: template -23376: struct __is_destructible_impl -23376: : public __do_is_destructible_impl -23376: { -23376: typedef decltype(__test<_Tp>(0)) type; -23376: }; -23376: -23376: template, -23376: __is_array_unknown_bounds<_Tp>, -23376: is_function<_Tp>>::value, -23376: bool = __or_, is_scalar<_Tp>>::value> -23376: struct __is_destructible_safe; -23376: -23376: template -23376: struct __is_destructible_safe<_Tp, false, false> -23376: : public __is_destructible_impl::type>::type -23376: { }; -23376: -23376: template -23376: struct __is_destructible_safe<_Tp, true, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_destructible_safe<_Tp, false, true> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_destructible -23376: : public __is_destructible_safe<_Tp>::type -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: struct __do_is_nt_destructible_impl -23376: { -23376: template -23376: static integral_constant().~_Tp())> -23376: __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: template -23376: struct __is_nt_destructible_impl -23376: : public __do_is_nt_destructible_impl -23376: { -23376: typedef decltype(__test<_Tp>(0)) type; -23376: }; -23376: -23376: template, -23376: __is_array_unknown_bounds<_Tp>, -23376: is_function<_Tp>>::value, -23376: bool = __or_, is_scalar<_Tp>>::value> -23376: struct __is_nt_destructible_safe; -23376: -23376: template -23376: struct __is_nt_destructible_safe<_Tp, false, false> -23376: : public __is_nt_destructible_impl::type>::type -23376: { }; -23376: -23376: template -23376: struct __is_nt_destructible_safe<_Tp, true, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_nt_destructible_safe<_Tp, false, true> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_nothrow_destructible -23376: : public __is_nt_destructible_safe<_Tp>::type -23376: { }; -23376: -23376: struct __do_is_default_constructible_impl -23376: { -23376: template -23376: static true_type __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: template -23376: struct __is_default_constructible_impl -23376: : public __do_is_default_constructible_impl -23376: { -23376: typedef decltype(__test<_Tp>(0)) type; -23376: }; -23376: -23376: template -23376: struct __is_default_constructible_atom -23376: : public __and_<__not_>, -23376: __is_default_constructible_impl<_Tp>> -23376: { }; -23376: -23376: template::value> -23376: struct __is_default_constructible_safe; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_default_constructible_safe<_Tp, true> -23376: : public __and_<__is_array_known_bounds<_Tp>, -23376: __is_default_constructible_atom::type>> -23376: { }; -23376: -23376: template -23376: struct __is_default_constructible_safe<_Tp, false> -23376: : public __is_default_constructible_atom<_Tp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_default_constructible -23376: : public __is_default_constructible_safe<_Tp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_constructible -23376: : public __bool_constant<__is_constructible(_Tp, _Args...)> -23376: { }; -23376: -23376: template::value> -23376: struct __is_copy_constructible_impl; -23376: -23376: template -23376: struct __is_copy_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_copy_constructible_impl<_Tp, true> -23376: : public is_constructible<_Tp, const _Tp&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_copy_constructible -23376: : public __is_copy_constructible_impl<_Tp> -23376: { }; -23376: -23376: template::value> -23376: struct __is_move_constructible_impl; -23376: -23376: template -23376: struct __is_move_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_move_constructible_impl<_Tp, true> -23376: : public is_constructible<_Tp, _Tp&&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_move_constructible -23376: : public __is_move_constructible_impl<_Tp> -23376: { }; -23376: -23376: template -23376: struct __is_nt_default_constructible_atom -23376: : public integral_constant -23376: { }; -23376: -23376: template::value> -23376: struct __is_nt_default_constructible_impl; -23376: -23376: template -23376: struct __is_nt_default_constructible_impl<_Tp, true> -23376: : public __and_<__is_array_known_bounds<_Tp>, -23376: __is_nt_default_constructible_atom::type>> -23376: { }; -23376: -23376: template -23376: struct __is_nt_default_constructible_impl<_Tp, false> -23376: : public __is_nt_default_constructible_atom<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_default_constructible -23376: : public __and_, -23376: __is_nt_default_constructible_impl<_Tp>> -23376: { }; -23376: -23376: template -23376: struct __is_nt_constructible_impl -23376: : public integral_constant()...))> -23376: { }; -23376: -23376: template -23376: struct __is_nt_constructible_impl<_Tp, _Arg> -23376: : public integral_constant(declval<_Arg>()))> -23376: { }; -23376: -23376: template -23376: struct __is_nt_constructible_impl<_Tp> -23376: : public is_nothrow_default_constructible<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_constructible -23376: : public __and_, -23376: __is_nt_constructible_impl<_Tp, _Args...>> -23376: { }; -23376: -23376: template::value> -23376: struct __is_nothrow_copy_constructible_impl; -23376: -23376: template -23376: struct __is_nothrow_copy_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_nothrow_copy_constructible_impl<_Tp, true> -23376: : public is_nothrow_constructible<_Tp, const _Tp&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_copy_constructible -23376: : public __is_nothrow_copy_constructible_impl<_Tp> -23376: { }; -23376: -23376: template::value> -23376: struct __is_nothrow_move_constructible_impl; -23376: -23376: template -23376: struct __is_nothrow_move_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_nothrow_move_constructible_impl<_Tp, true> -23376: : public is_nothrow_constructible<_Tp, _Tp&&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_move_constructible -23376: : public __is_nothrow_move_constructible_impl<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_assignable -23376: : public __bool_constant<__is_assignable(_Tp, _Up)> -23376: { }; -23376: -23376: template::value> -23376: struct __is_copy_assignable_impl; -23376: -23376: template -23376: struct __is_copy_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_copy_assignable_impl<_Tp, true> -23376: : public is_assignable<_Tp&, const _Tp&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_copy_assignable -23376: : public __is_copy_assignable_impl<_Tp> -23376: { }; -23376: -23376: template::value> -23376: struct __is_move_assignable_impl; -23376: -23376: template -23376: struct __is_move_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_move_assignable_impl<_Tp, true> -23376: : public is_assignable<_Tp&, _Tp&&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_move_assignable -23376: : public __is_move_assignable_impl<_Tp> -23376: { }; -23376: -23376: template -23376: struct __is_nt_assignable_impl -23376: : public integral_constant() = declval<_Up>())> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_assignable -23376: : public __and_, -23376: __is_nt_assignable_impl<_Tp, _Up>> -23376: { }; -23376: -23376: template::value> -23376: struct __is_nt_copy_assignable_impl; -23376: -23376: template -23376: struct __is_nt_copy_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_nt_copy_assignable_impl<_Tp, true> -23376: : public is_nothrow_assignable<_Tp&, const _Tp&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_copy_assignable -23376: : public __is_nt_copy_assignable_impl<_Tp> -23376: { }; -23376: -23376: template::value> -23376: struct __is_nt_move_assignable_impl; -23376: -23376: template -23376: struct __is_nt_move_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_nt_move_assignable_impl<_Tp, true> -23376: : public is_nothrow_assignable<_Tp&, _Tp&&> -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_move_assignable -23376: : public __is_nt_move_assignable_impl<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_trivially_constructible -23376: : public __and_, __bool_constant< -23376: __is_trivially_constructible(_Tp, _Args...)>>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_trivially_default_constructible -23376: : public is_trivially_constructible<_Tp>::type -23376: { }; -23376: -23376: struct __do_is_implicitly_default_constructible_impl -23376: { -23376: template -23376: static void __helper(const _Tp&); -23376: -23376: template -23376: static true_type __test(const _Tp&, -23376: decltype(__helper({}))* = 0); -23376: -23376: static false_type __test(...); -23376: }; -23376: -23376: template -23376: struct __is_implicitly_default_constructible_impl -23376: : public __do_is_implicitly_default_constructible_impl -23376: { -23376: typedef decltype(__test(declval<_Tp>())) type; -23376: }; -23376: -23376: template -23376: struct __is_implicitly_default_constructible_safe -23376: : public __is_implicitly_default_constructible_impl<_Tp>::type -23376: { }; -23376: -23376: template -23376: struct __is_implicitly_default_constructible -23376: : public __and_, -23376: __is_implicitly_default_constructible_safe<_Tp>> -23376: { }; -23376: -23376: -23376: -23376: template::value> -23376: struct __is_trivially_copy_constructible_impl; -23376: -23376: template -23376: struct __is_trivially_copy_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_trivially_copy_constructible_impl<_Tp, true> -23376: : public __and_, -23376: integral_constant> -23376: { }; -23376: -23376: template -23376: struct is_trivially_copy_constructible -23376: : public __is_trivially_copy_constructible_impl<_Tp> -23376: { }; -23376: -23376: -23376: -23376: template::value> -23376: struct __is_trivially_move_constructible_impl; -23376: -23376: template -23376: struct __is_trivially_move_constructible_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_trivially_move_constructible_impl<_Tp, true> -23376: : public __and_, -23376: integral_constant> -23376: { }; -23376: -23376: template -23376: struct is_trivially_move_constructible -23376: : public __is_trivially_move_constructible_impl<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_trivially_assignable -23376: : public __bool_constant<__is_trivially_assignable(_Tp, _Up)> -23376: { }; -23376: -23376: -23376: -23376: template::value> -23376: struct __is_trivially_copy_assignable_impl; -23376: -23376: template -23376: struct __is_trivially_copy_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_trivially_copy_assignable_impl<_Tp, true> -23376: : public __and_, -23376: integral_constant> -23376: { }; -23376: -23376: template -23376: struct is_trivially_copy_assignable -23376: : public __is_trivially_copy_assignable_impl<_Tp> -23376: { }; -23376: -23376: -23376: -23376: template::value> -23376: struct __is_trivially_move_assignable_impl; -23376: -23376: template -23376: struct __is_trivially_move_assignable_impl<_Tp, false> -23376: : public false_type { }; -23376: -23376: template -23376: struct __is_trivially_move_assignable_impl<_Tp, true> -23376: : public __and_, -23376: integral_constant> -23376: { }; -23376: -23376: template -23376: struct is_trivially_move_assignable -23376: : public __is_trivially_move_assignable_impl<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct is_trivially_destructible -23376: : public __and_, integral_constant> -23376: { }; -23376: -23376: -23376: -23376: template -23376: struct has_virtual_destructor -23376: : public integral_constant -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct alignment_of -23376: : public integral_constant { }; -23376: -23376: -23376: template -23376: struct rank -23376: : public integral_constant { }; -23376: -23376: template -23376: struct rank<_Tp[_Size]> -23376: : public integral_constant::value> { }; -23376: -23376: template -23376: struct rank<_Tp[]> -23376: : public integral_constant::value> { }; -23376: -23376: -23376: template -23376: struct extent -23376: : public integral_constant { }; -23376: -23376: template -23376: struct extent<_Tp[_Size], _Uint> -23376: : public integral_constant::value> -23376: { }; -23376: -23376: template -23376: struct extent<_Tp[], _Uint> -23376: : public integral_constant::value> -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct is_same -23376: : public false_type { }; -23376: -23376: template -23376: struct is_same<_Tp, _Tp> -23376: : public true_type { }; -23376: -23376: -23376: template -23376: struct is_base_of -23376: : public integral_constant -23376: { }; -23376: -23376: template, is_function<_To>, -23376: is_array<_To>>::value> -23376: struct __is_convertible_helper -23376: { typedef typename is_void<_To>::type type; }; -23376: -23376: template -23376: class __is_convertible_helper<_From, _To, false> -23376: { -23376: template -23376: static void __test_aux(_To1); -23376: -23376: template(std::declval<_From1>()))> -23376: static true_type -23376: __test(int); -23376: -23376: template -23376: static false_type -23376: __test(...); -23376: -23376: public: -23376: typedef decltype(__test<_From, _To>(0)) type; -23376: }; -23376: -23376: -23376: -23376: template -23376: struct is_convertible -23376: : public __is_convertible_helper<_From, _To>::type -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct remove_const -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_const<_Tp const> -23376: { typedef _Tp type; }; -23376: -23376: -23376: template -23376: struct remove_volatile -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_volatile<_Tp volatile> -23376: { typedef _Tp type; }; -23376: -23376: -23376: template -23376: struct remove_cv -23376: { -23376: typedef typename -23376: remove_const::type>::type type; -23376: }; -23376: -23376: -23376: template -23376: struct add_const -23376: { typedef _Tp const type; }; -23376: -23376: -23376: template -23376: struct add_volatile -23376: { typedef _Tp volatile type; }; -23376: -23376: -23376: template -23376: struct add_cv -23376: { -23376: typedef typename -23376: add_const::type>::type type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: using remove_const_t = typename remove_const<_Tp>::type; -23376: -23376: -23376: template -23376: using remove_volatile_t = typename remove_volatile<_Tp>::type; -23376: -23376: -23376: template -23376: using remove_cv_t = typename remove_cv<_Tp>::type; -23376: -23376: -23376: template -23376: using add_const_t = typename add_const<_Tp>::type; -23376: -23376: -23376: template -23376: using add_volatile_t = typename add_volatile<_Tp>::type; -23376: -23376: -23376: template -23376: using add_cv_t = typename add_cv<_Tp>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct remove_reference -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_reference<_Tp&> -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_reference<_Tp&&> -23376: { typedef _Tp type; }; -23376: -23376: template::value> -23376: struct __add_lvalue_reference_helper -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct __add_lvalue_reference_helper<_Tp, true> -23376: { typedef _Tp& type; }; -23376: -23376: -23376: template -23376: struct add_lvalue_reference -23376: : public __add_lvalue_reference_helper<_Tp> -23376: { }; -23376: -23376: template::value> -23376: struct __add_rvalue_reference_helper -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct __add_rvalue_reference_helper<_Tp, true> -23376: { typedef _Tp&& type; }; -23376: -23376: -23376: template -23376: struct add_rvalue_reference -23376: : public __add_rvalue_reference_helper<_Tp> -23376: { }; -23376: -23376: -23376: -23376: template -23376: using remove_reference_t = typename remove_reference<_Tp>::type; -23376: -23376: -23376: template -23376: using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; -23376: -23376: -23376: template -23376: using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __cv_selector; -23376: -23376: template -23376: struct __cv_selector<_Unqualified, false, false> -23376: { typedef _Unqualified __type; }; -23376: -23376: template -23376: struct __cv_selector<_Unqualified, false, true> -23376: { typedef volatile _Unqualified __type; }; -23376: -23376: template -23376: struct __cv_selector<_Unqualified, true, false> -23376: { typedef const _Unqualified __type; }; -23376: -23376: template -23376: struct __cv_selector<_Unqualified, true, true> -23376: { typedef const volatile _Unqualified __type; }; -23376: -23376: template::value, -23376: bool _IsVol = is_volatile<_Qualified>::value> -23376: class __match_cv_qualifiers -23376: { -23376: typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match; -23376: -23376: public: -23376: typedef typename __match::__type __type; -23376: }; -23376: -23376: -23376: template -23376: struct __make_unsigned -23376: { typedef _Tp __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned char __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned char __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned short __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned int __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned long __type; }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { typedef unsigned long long __type; }; -23376: # 1590 "/usr/include/c++/8/type_traits" 3 -23376: template::value, -23376: bool _IsEnum = is_enum<_Tp>::value> -23376: class __make_unsigned_selector; -23376: -23376: template -23376: class __make_unsigned_selector<_Tp, true, false> -23376: { -23376: typedef __make_unsigned::type> __unsignedt; -23376: typedef typename __unsignedt::__type __unsigned_type; -23376: typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned; -23376: -23376: public: -23376: typedef typename __cv_unsigned::__type __type; -23376: }; -23376: -23376: template -23376: class __make_unsigned_selector<_Tp, false, true> -23376: { -23376: -23376: typedef unsigned char __smallest; -23376: static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest); -23376: static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short); -23376: static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int); -23376: static const bool __b3 = sizeof(_Tp) <= sizeof(unsigned long); -23376: typedef conditional<__b3, unsigned long, unsigned long long> __cond3; -23376: typedef typename __cond3::type __cond3_type; -23376: typedef conditional<__b2, unsigned int, __cond3_type> __cond2; -23376: typedef typename __cond2::type __cond2_type; -23376: typedef conditional<__b1, unsigned short, __cond2_type> __cond1; -23376: typedef typename __cond1::type __cond1_type; -23376: -23376: typedef typename conditional<__b0, __smallest, __cond1_type>::type -23376: __unsigned_type; -23376: typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned; -23376: -23376: public: -23376: typedef typename __cv_unsigned::__type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct make_unsigned -23376: { typedef typename __make_unsigned_selector<_Tp>::__type type; }; -23376: -23376: -23376: template<> -23376: struct make_unsigned; -23376: -23376: -23376: -23376: template -23376: struct __make_signed -23376: { typedef _Tp __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed char __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed char __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed short __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed int __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed long __type; }; -23376: -23376: template<> -23376: struct __make_signed -23376: { typedef signed long long __type; }; -23376: # 1694 "/usr/include/c++/8/type_traits" 3 -23376: template::value, -23376: bool _IsEnum = is_enum<_Tp>::value> -23376: class __make_signed_selector; -23376: -23376: template -23376: class __make_signed_selector<_Tp, true, false> -23376: { -23376: typedef __make_signed::type> __signedt; -23376: typedef typename __signedt::__type __signed_type; -23376: typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed; -23376: -23376: public: -23376: typedef typename __cv_signed::__type __type; -23376: }; -23376: -23376: template -23376: class __make_signed_selector<_Tp, false, true> -23376: { -23376: typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type; -23376: -23376: public: -23376: typedef typename __make_signed_selector<__unsigned_type>::__type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct make_signed -23376: { typedef typename __make_signed_selector<_Tp>::__type type; }; -23376: -23376: -23376: template<> -23376: struct make_signed; -23376: -23376: -23376: -23376: template -23376: using make_signed_t = typename make_signed<_Tp>::type; -23376: -23376: -23376: template -23376: using make_unsigned_t = typename make_unsigned<_Tp>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct remove_extent -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_extent<_Tp[_Size]> -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_extent<_Tp[]> -23376: { typedef _Tp type; }; -23376: -23376: -23376: template -23376: struct remove_all_extents -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct remove_all_extents<_Tp[_Size]> -23376: { typedef typename remove_all_extents<_Tp>::type type; }; -23376: -23376: template -23376: struct remove_all_extents<_Tp[]> -23376: { typedef typename remove_all_extents<_Tp>::type type; }; -23376: -23376: -23376: -23376: template -23376: using remove_extent_t = typename remove_extent<_Tp>::type; -23376: -23376: -23376: template -23376: using remove_all_extents_t = typename remove_all_extents<_Tp>::type; -23376: -23376: -23376: -23376: -23376: template -23376: struct __remove_pointer_helper -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct __remove_pointer_helper<_Tp, _Up*> -23376: { typedef _Up type; }; -23376: -23376: -23376: template -23376: struct remove_pointer -23376: : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type> -23376: { }; -23376: -23376: -23376: template, -23376: is_void<_Tp>>::value> -23376: struct __add_pointer_helper -23376: { typedef _Tp type; }; -23376: -23376: template -23376: struct __add_pointer_helper<_Tp, true> -23376: { typedef typename remove_reference<_Tp>::type* type; }; -23376: -23376: template -23376: struct add_pointer -23376: : public __add_pointer_helper<_Tp> -23376: { }; -23376: -23376: -23376: -23376: template -23376: using remove_pointer_t = typename remove_pointer<_Tp>::type; -23376: -23376: -23376: template -23376: using add_pointer_t = typename add_pointer<_Tp>::type; -23376: -23376: -23376: template -23376: struct __aligned_storage_msa -23376: { -23376: union __type -23376: { -23376: unsigned char __data[_Len]; -23376: struct __attribute__((__aligned__)) { } __align; -23376: }; -23376: }; -23376: # 1840 "/usr/include/c++/8/type_traits" 3 -23376: template::__type)> -23376: struct aligned_storage -23376: { -23376: union type -23376: { -23376: unsigned char __data[_Len]; -23376: struct __attribute__((__aligned__((_Align)))) { } __align; -23376: }; -23376: }; -23376: -23376: template -23376: struct __strictest_alignment -23376: { -23376: static const size_t _S_alignment = 0; -23376: static const size_t _S_size = 0; -23376: }; -23376: -23376: template -23376: struct __strictest_alignment<_Tp, _Types...> -23376: { -23376: static const size_t _S_alignment = -23376: alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment -23376: ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; -23376: static const size_t _S_size = -23376: sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size -23376: ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; -23376: }; -23376: # 1879 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct aligned_union -23376: { -23376: private: -23376: static_assert(sizeof...(_Types) != 0, "At least one type is required"); -23376: -23376: using __strictest = __strictest_alignment<_Types...>; -23376: static const size_t _S_len = _Len > __strictest::_S_size -23376: ? _Len : __strictest::_S_size; -23376: public: -23376: -23376: static const size_t alignment_value = __strictest::_S_alignment; -23376: -23376: typedef typename aligned_storage<_S_len, alignment_value>::type type; -23376: }; -23376: -23376: template -23376: const size_t aligned_union<_Len, _Types...>::alignment_value; -23376: -23376: -23376: -23376: template::value, -23376: bool _IsFunction = is_function<_Up>::value> -23376: struct __decay_selector; -23376: -23376: -23376: template -23376: struct __decay_selector<_Up, false, false> -23376: { typedef typename remove_cv<_Up>::type __type; }; -23376: -23376: template -23376: struct __decay_selector<_Up, true, false> -23376: { typedef typename remove_extent<_Up>::type* __type; }; -23376: -23376: template -23376: struct __decay_selector<_Up, false, true> -23376: { typedef typename add_pointer<_Up>::type __type; }; -23376: -23376: -23376: template -23376: class decay -23376: { -23376: typedef typename remove_reference<_Tp>::type __remove_type; -23376: -23376: public: -23376: typedef typename __decay_selector<__remove_type>::__type type; -23376: }; -23376: -23376: template -23376: class reference_wrapper; -23376: -23376: -23376: template -23376: struct __strip_reference_wrapper -23376: { -23376: typedef _Tp __type; -23376: }; -23376: -23376: template -23376: struct __strip_reference_wrapper > -23376: { -23376: typedef _Tp& __type; -23376: }; -23376: -23376: template -23376: struct __decay_and_strip -23376: { -23376: typedef typename __strip_reference_wrapper< -23376: typename decay<_Tp>::type>::__type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct enable_if -23376: { }; -23376: -23376: -23376: template -23376: struct enable_if -23376: { typedef _Tp type; }; -23376: -23376: template -23376: using _Require = typename enable_if<__and_<_Cond...>::value>::type; -23376: -23376: -23376: -23376: template -23376: struct conditional -23376: { typedef _Iftrue type; }; -23376: -23376: -23376: template -23376: struct conditional -23376: { typedef _Iffalse type; }; -23376: -23376: -23376: template -23376: struct common_type; -23376: -23376: -23376: -23376: struct __do_common_type_impl -23376: { -23376: template -23376: static __success_type() -23376: : std::declval<_Up>())>::type> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __common_type_impl -23376: : private __do_common_type_impl -23376: { -23376: typedef decltype(_S_test<_Tp, _Up>(0)) type; -23376: }; -23376: -23376: struct __do_member_type_wrapper -23376: { -23376: template -23376: static __success_type _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __member_type_wrapper -23376: : private __do_member_type_wrapper -23376: { -23376: typedef decltype(_S_test<_Tp>(0)) type; -23376: }; -23376: -23376: template -23376: struct __expanded_common_type_wrapper -23376: { -23376: typedef common_type type; -23376: }; -23376: -23376: template -23376: struct __expanded_common_type_wrapper<__failure_type, _Args...> -23376: { typedef __failure_type type; }; -23376: -23376: template -23376: struct common_type<_Tp> -23376: { typedef typename decay<_Tp>::type type; }; -23376: -23376: template -23376: struct common_type<_Tp, _Up> -23376: : public __common_type_impl<_Tp, _Up>::type -23376: { }; -23376: -23376: template -23376: struct common_type<_Tp, _Up, _Vp...> -23376: : public __expanded_common_type_wrapper>::type, _Vp...>::type -23376: { }; -23376: -23376: -23376: template -23376: struct underlying_type -23376: { -23376: typedef __underlying_type(_Tp) type; -23376: }; -23376: -23376: template -23376: struct __declval_protector -23376: { -23376: static const bool __stop = false; -23376: }; -23376: -23376: template -23376: auto declval() noexcept -> decltype(__declval<_Tp>(0)) -23376: { -23376: static_assert(__declval_protector<_Tp>::__stop, -23376: "declval() must not be used!"); -23376: return __declval<_Tp>(0); -23376: } -23376: # 2072 "/usr/include/c++/8/type_traits" 3 -23376: template<> -23376: struct __make_unsigned -23376: { -23376: using __type -23376: = typename __make_unsigned_selector::__type; -23376: }; -23376: -23376: template<> -23376: struct __make_signed -23376: { -23376: using __type -23376: = typename __make_signed_selector::__type; -23376: }; -23376: -23376: -23376: template<> -23376: struct __make_unsigned -23376: { -23376: using __type -23376: = typename __make_unsigned_selector::__type; -23376: }; -23376: -23376: template<> -23376: struct __make_signed -23376: { -23376: using __type -23376: = typename __make_signed_selector::__type; -23376: }; -23376: -23376: template<> -23376: struct __make_unsigned -23376: { -23376: using __type -23376: = typename __make_unsigned_selector::__type; -23376: }; -23376: -23376: template<> -23376: struct __make_signed -23376: { -23376: using __type -23376: = typename __make_signed_selector::__type; -23376: }; -23376: -23376: -23376: -23376: template -23376: class result_of; -23376: -23376: -23376: -23376: -23376: -23376: struct __invoke_memfun_ref { }; -23376: struct __invoke_memfun_deref { }; -23376: struct __invoke_memobj_ref { }; -23376: struct __invoke_memobj_deref { }; -23376: struct __invoke_other { }; -23376: -23376: -23376: template -23376: struct __result_of_success : __success_type<_Tp> -23376: { using __invoke_type = _Tag; }; -23376: -23376: -23376: struct __result_of_memfun_ref_impl -23376: { -23376: template -23376: static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) -23376: ), __invoke_memfun_ref> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __result_of_memfun_ref -23376: : private __result_of_memfun_ref_impl -23376: { -23376: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; -23376: }; -23376: -23376: -23376: struct __result_of_memfun_deref_impl -23376: { -23376: template -23376: static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) -23376: ), __invoke_memfun_deref> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __result_of_memfun_deref -23376: : private __result_of_memfun_deref_impl -23376: { -23376: typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; -23376: }; -23376: -23376: -23376: struct __result_of_memobj_ref_impl -23376: { -23376: template -23376: static __result_of_success().*std::declval<_Fp>() -23376: ), __invoke_memobj_ref> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __result_of_memobj_ref -23376: : private __result_of_memobj_ref_impl -23376: { -23376: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; -23376: }; -23376: -23376: -23376: struct __result_of_memobj_deref_impl -23376: { -23376: template -23376: static __result_of_success()).*std::declval<_Fp>() -23376: ), __invoke_memobj_deref> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __result_of_memobj_deref -23376: : private __result_of_memobj_deref_impl -23376: { -23376: typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; -23376: }; -23376: -23376: template -23376: struct __result_of_memobj; -23376: -23376: template -23376: struct __result_of_memobj<_Res _Class::*, _Arg> -23376: { -23376: typedef typename remove_cv::type>::type _Argval; -23376: typedef _Res _Class::* _MemPtr; -23376: typedef typename conditional<__or_, -23376: is_base_of<_Class, _Argval>>::value, -23376: __result_of_memobj_ref<_MemPtr, _Arg>, -23376: __result_of_memobj_deref<_MemPtr, _Arg> -23376: >::type::type type; -23376: }; -23376: -23376: template -23376: struct __result_of_memfun; -23376: -23376: template -23376: struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> -23376: { -23376: typedef typename remove_cv::type>::type _Argval; -23376: typedef _Res _Class::* _MemPtr; -23376: typedef typename conditional<__or_, -23376: is_base_of<_Class, _Argval>>::value, -23376: __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, -23376: __result_of_memfun_deref<_MemPtr, _Arg, _Args...> -23376: >::type::type type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template::type> -23376: struct __inv_unwrap -23376: { -23376: using type = _Tp; -23376: }; -23376: -23376: template -23376: struct __inv_unwrap<_Tp, reference_wrapper<_Up>> -23376: { -23376: using type = _Up&; -23376: }; -23376: -23376: template -23376: struct __result_of_impl -23376: { -23376: typedef __failure_type type; -23376: }; -23376: -23376: template -23376: struct __result_of_impl -23376: : public __result_of_memobj::type, -23376: typename __inv_unwrap<_Arg>::type> -23376: { }; -23376: -23376: template -23376: struct __result_of_impl -23376: : public __result_of_memfun::type, -23376: typename __inv_unwrap<_Arg>::type, _Args...> -23376: { }; -23376: -23376: -23376: struct __result_of_other_impl -23376: { -23376: template -23376: static __result_of_success()(std::declval<_Args>()...) -23376: ), __invoke_other> _S_test(int); -23376: -23376: template -23376: static __failure_type _S_test(...); -23376: }; -23376: -23376: template -23376: struct __result_of_impl -23376: : private __result_of_other_impl -23376: { -23376: typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type; -23376: }; -23376: -23376: -23376: template -23376: struct __invoke_result -23376: : public __result_of_impl< -23376: is_member_object_pointer< -23376: typename remove_reference<_Functor>::type -23376: >::value, -23376: is_member_function_pointer< -23376: typename remove_reference<_Functor>::type -23376: >::value, -23376: _Functor, _ArgTypes... -23376: >::type -23376: { }; -23376: -23376: template -23376: struct result_of<_Functor(_ArgTypes...)> -23376: : public __invoke_result<_Functor, _ArgTypes...> -23376: { }; -23376: -23376: -23376: -23376: template::__type)> -23376: using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; -23376: -23376: template -23376: using aligned_union_t = typename aligned_union<_Len, _Types...>::type; -23376: -23376: -23376: template -23376: using decay_t = typename decay<_Tp>::type; -23376: -23376: -23376: template -23376: using enable_if_t = typename enable_if<_Cond, _Tp>::type; -23376: -23376: -23376: template -23376: using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; -23376: -23376: -23376: template -23376: using common_type_t = typename common_type<_Tp...>::type; -23376: -23376: -23376: template -23376: using underlying_type_t = typename underlying_type<_Tp>::type; -23376: -23376: -23376: template -23376: using result_of_t = typename result_of<_Tp>::type; -23376: -23376: -23376: -23376: template -23376: using __enable_if_t = typename enable_if<_Cond, _Tp>::type; -23376: -23376: -23376: template using __void_t = void; -23376: -23376: -23376: -23376: -23376: template using void_t = void; -23376: -23376: -23376: -23376: template class _Op, typename... _Args> -23376: struct __detector -23376: { -23376: using value_t = false_type; -23376: using type = _Default; -23376: }; -23376: -23376: -23376: template class _Op, -23376: typename... _Args> -23376: struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> -23376: { -23376: using value_t = true_type; -23376: using type = _Op<_Args...>; -23376: }; -23376: -23376: -23376: template class _Op, -23376: typename... _Args> -23376: using __detected_or = __detector<_Default, void, _Op, _Args...>; -23376: -23376: -23376: template class _Op, -23376: typename... _Args> -23376: using __detected_or_t -23376: = typename __detected_or<_Default, _Op, _Args...>::type; -23376: # 2408 "/usr/include/c++/8/type_traits" 3 -23376: template -23376: struct __is_swappable; -23376: -23376: template -23376: struct __is_nothrow_swappable; -23376: -23376: template -23376: class tuple; -23376: -23376: template -23376: struct __is_tuple_like_impl : false_type -23376: { }; -23376: -23376: template -23376: struct __is_tuple_like_impl> : true_type -23376: { }; -23376: -23376: -23376: template -23376: struct __is_tuple_like -23376: : public __is_tuple_like_impl::type>::type>::type -23376: { }; -23376: -23376: template -23376: inline -23376: typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, -23376: is_move_constructible<_Tp>, -23376: is_move_assignable<_Tp>>::value>::type -23376: swap(_Tp&, _Tp&) -23376: noexcept(__and_, -23376: is_nothrow_move_assignable<_Tp>>::value); -23376: -23376: template -23376: inline -23376: typename enable_if<__is_swappable<_Tp>::value>::type -23376: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) -23376: noexcept(__is_nothrow_swappable<_Tp>::value); -23376: -23376: namespace __swappable_details { -23376: using std::swap; -23376: -23376: struct __do_is_swappable_impl -23376: { -23376: template(), std::declval<_Tp&>()))> -23376: static true_type __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: struct __do_is_nothrow_swappable_impl -23376: { -23376: template -23376: static __bool_constant< -23376: noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) -23376: > __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: } -23376: -23376: template -23376: struct __is_swappable_impl -23376: : public __swappable_details::__do_is_swappable_impl -23376: { -23376: typedef decltype(__test<_Tp>(0)) type; -23376: }; -23376: -23376: template -23376: struct __is_nothrow_swappable_impl -23376: : public __swappable_details::__do_is_nothrow_swappable_impl -23376: { -23376: typedef decltype(__test<_Tp>(0)) type; -23376: }; -23376: -23376: template -23376: struct __is_swappable -23376: : public __is_swappable_impl<_Tp>::type -23376: { }; -23376: -23376: template -23376: struct __is_nothrow_swappable -23376: : public __is_nothrow_swappable_impl<_Tp>::type -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct is_swappable -23376: : public __is_swappable_impl<_Tp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_swappable -23376: : public __is_nothrow_swappable_impl<_Tp>::type -23376: { }; -23376: -23376: -23376: -23376: template -23376: constexpr bool is_swappable_v = -23376: is_swappable<_Tp>::value; -23376: -23376: -23376: template -23376: constexpr bool is_nothrow_swappable_v = -23376: is_nothrow_swappable<_Tp>::value; -23376: -23376: -23376: namespace __swappable_with_details { -23376: using std::swap; -23376: -23376: struct __do_is_swappable_with_impl -23376: { -23376: template(), std::declval<_Up>())), -23376: typename -23376: = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> -23376: static true_type __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: struct __do_is_nothrow_swappable_with_impl -23376: { -23376: template -23376: static __bool_constant< -23376: noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) -23376: && -23376: noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) -23376: > __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: }; -23376: -23376: } -23376: -23376: template -23376: struct __is_swappable_with_impl -23376: : public __swappable_with_details::__do_is_swappable_with_impl -23376: { -23376: typedef decltype(__test<_Tp, _Up>(0)) type; -23376: }; -23376: -23376: -23376: template -23376: struct __is_swappable_with_impl<_Tp&, _Tp&> -23376: : public __swappable_details::__do_is_swappable_impl -23376: { -23376: typedef decltype(__test<_Tp&>(0)) type; -23376: }; -23376: -23376: template -23376: struct __is_nothrow_swappable_with_impl -23376: : public __swappable_with_details::__do_is_nothrow_swappable_with_impl -23376: { -23376: typedef decltype(__test<_Tp, _Up>(0)) type; -23376: }; -23376: -23376: -23376: template -23376: struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> -23376: : public __swappable_details::__do_is_nothrow_swappable_impl -23376: { -23376: typedef decltype(__test<_Tp&>(0)) type; -23376: }; -23376: -23376: -23376: template -23376: struct is_swappable_with -23376: : public __is_swappable_with_impl<_Tp, _Up>::type -23376: { }; -23376: -23376: -23376: template -23376: struct is_nothrow_swappable_with -23376: : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type -23376: { }; -23376: -23376: -23376: -23376: template -23376: constexpr bool is_swappable_with_v = -23376: is_swappable_with<_Tp, _Up>::value; -23376: -23376: -23376: template -23376: constexpr bool is_nothrow_swappable_with_v = -23376: is_nothrow_swappable_with<_Tp, _Up>::value; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_invocable_impl : false_type { }; -23376: -23376: template -23376: struct __is_invocable_impl<_Result, _Ret, __void_t> -23376: : __or_, is_convertible>::type -23376: { }; -23376: -23376: template -23376: struct __is_invocable -23376: : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type -23376: { }; -23376: -23376: template -23376: constexpr bool __call_is_nt(__invoke_memfun_ref) -23376: { -23376: using _Up = typename __inv_unwrap<_Tp>::type; -23376: return noexcept((std::declval<_Up>().*std::declval<_Fn>())( -23376: std::declval<_Args>()...)); -23376: } -23376: -23376: template -23376: constexpr bool __call_is_nt(__invoke_memfun_deref) -23376: { -23376: return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( -23376: std::declval<_Args>()...)); -23376: } -23376: -23376: template -23376: constexpr bool __call_is_nt(__invoke_memobj_ref) -23376: { -23376: using _Up = typename __inv_unwrap<_Tp>::type; -23376: return noexcept(std::declval<_Up>().*std::declval<_Fn>()); -23376: } -23376: -23376: template -23376: constexpr bool __call_is_nt(__invoke_memobj_deref) -23376: { -23376: return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); -23376: } -23376: -23376: template -23376: constexpr bool __call_is_nt(__invoke_other) -23376: { -23376: return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); -23376: } -23376: -23376: template -23376: struct __call_is_nothrow -23376: : __bool_constant< -23376: std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) -23376: > -23376: { }; -23376: -23376: template -23376: using __call_is_nothrow_ -23376: = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; -23376: -23376: -23376: template -23376: struct __is_nothrow_invocable -23376: : __and_<__is_invocable<_Fn, _Args...>, -23376: __call_is_nothrow_<_Fn, _Args...>>::type -23376: { }; -23376: -23376: struct __nonesuch { -23376: __nonesuch() = delete; -23376: ~__nonesuch() = delete; -23376: __nonesuch(__nonesuch const&) = delete; -23376: void operator=(__nonesuch const&) = delete; -23376: }; -23376: # 2973 "/usr/include/c++/8/type_traits" 3 -23376: -23376: } -23376: # 56 "/usr/include/c++/8/bits/move.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 72 "/usr/include/c++/8/bits/move.h" 3 -23376: template -23376: constexpr _Tp&& -23376: forward(typename std::remove_reference<_Tp>::type& __t) noexcept -23376: { return static_cast<_Tp&&>(__t); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr _Tp&& -23376: forward(typename std::remove_reference<_Tp>::type&& __t) noexcept -23376: { -23376: static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument" -23376: " substituting _Tp is an lvalue reference type"); -23376: return static_cast<_Tp&&>(__t); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr typename std::remove_reference<_Tp>::type&& -23376: move(_Tp&& __t) noexcept -23376: { return static_cast::type&&>(__t); } -23376: -23376: -23376: template -23376: struct __move_if_noexcept_cond -23376: : public __and_<__not_>, -23376: is_copy_constructible<_Tp>>::type { }; -23376: # 116 "/usr/include/c++/8/bits/move.h" 3 -23376: template -23376: constexpr typename -23376: conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type -23376: move_if_noexcept(_Tp& __x) noexcept -23376: { return std::move(__x); } -23376: # 136 "/usr/include/c++/8/bits/move.h" 3 -23376: template -23376: inline _Tp* -23376: addressof(_Tp& __r) noexcept -23376: { return std::__addressof(__r); } -23376: -23376: -23376: -23376: template -23376: const _Tp* addressof(const _Tp&&) = delete; -23376: -23376: -23376: template -23376: inline _Tp -23376: __exchange(_Tp& __obj, _Up&& __new_val) -23376: { -23376: _Tp __old_val = std::move(__obj); -23376: __obj = std::forward<_Up>(__new_val); -23376: return __old_val; -23376: } -23376: # 176 "/usr/include/c++/8/bits/move.h" 3 -23376: template -23376: inline -23376: -23376: typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, -23376: is_move_constructible<_Tp>, -23376: is_move_assignable<_Tp>>::value>::type -23376: swap(_Tp& __a, _Tp& __b) -23376: noexcept(__and_, -23376: is_nothrow_move_assignable<_Tp>>::value) -23376: -23376: -23376: -23376: -23376: { -23376: -23376: -23376: -23376: _Tp __tmp = std::move(__a); -23376: __a = std::move(__b); -23376: __b = std::move(__tmp); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline -23376: -23376: typename enable_if<__is_swappable<_Tp>::value>::type -23376: swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) -23376: noexcept(__is_nothrow_swappable<_Tp>::value) -23376: -23376: -23376: -23376: -23376: { -23376: for (size_t __n = 0; __n < _Nm; ++__n) -23376: swap(__a[__n], __b[__n]); -23376: } -23376: -23376: -23376: -23376: } -23376: # 60 "/usr/include/c++/8/bits/stl_pair.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 76 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; -23376: -23376: -23376: constexpr piecewise_construct_t piecewise_construct = -23376: piecewise_construct_t(); -23376: -23376: -23376: template -23376: class tuple; -23376: -23376: template -23376: struct _Index_tuple; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _PCC -23376: { -23376: template -23376: static constexpr bool _ConstructiblePair() -23376: { -23376: return __and_, -23376: is_constructible<_T2, const _U2&>>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyConvertiblePair() -23376: { -23376: return __and_, -23376: is_convertible>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _MoveConstructiblePair() -23376: { -23376: return __and_, -23376: is_constructible<_T2, _U2&&>>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyMoveConvertiblePair() -23376: { -23376: return __and_, -23376: is_convertible<_U2&&, _T2>>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _CopyMovePair() -23376: { -23376: using __do_converts = __and_, -23376: is_convertible<_U2&&, _T2>>; -23376: using __converts = typename conditional<__implicit, -23376: __do_converts, -23376: __not_<__do_converts>>::type; -23376: return __and_, -23376: is_constructible<_T2, _U2&&>, -23376: __converts -23376: >::value; -23376: } -23376: -23376: template -23376: static constexpr bool _MoveCopyPair() -23376: { -23376: using __do_converts = __and_, -23376: is_convertible>; -23376: using __converts = typename conditional<__implicit, -23376: __do_converts, -23376: __not_<__do_converts>>::type; -23376: return __and_, -23376: is_constructible<_T2, const _U2&&>, -23376: __converts -23376: >::value; -23376: } -23376: }; -23376: -23376: template -23376: struct _PCC -23376: { -23376: template -23376: static constexpr bool _ConstructiblePair() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyConvertiblePair() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _MoveConstructiblePair() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyMoveConvertiblePair() -23376: { -23376: return false; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: struct __nonesuch_no_braces : std::__nonesuch { -23376: explicit __nonesuch_no_braces(const __nonesuch&) = delete; -23376: }; -23376: -23376: -23376: template class __pair_base -23376: { -23376: -23376: template friend struct pair; -23376: __pair_base() = default; -23376: ~__pair_base() = default; -23376: __pair_base(const __pair_base&) = default; -23376: __pair_base& operator=(const __pair_base&) = delete; -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct pair -23376: : private __pair_base<_T1, _T2> -23376: { -23376: typedef _T1 first_type; -23376: typedef _T2 second_type; -23376: -23376: _T1 first; -23376: _T2 second; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template , -23376: __is_implicitly_default_constructible<_U2>> -23376: ::value, bool>::type = true> -23376: -23376: constexpr pair() -23376: : first(), second() { } -23376: -23376: -23376: template , -23376: is_default_constructible<_U2>, -23376: __not_< -23376: __and_<__is_implicitly_default_constructible<_U1>, -23376: __is_implicitly_default_constructible<_U2>>>> -23376: ::value, bool>::type = false> -23376: explicit constexpr pair() -23376: : first(), second() { } -23376: # 252 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: using _PCCP = _PCC; -23376: -23376: template() -23376: && _PCCP::template -23376: _ImplicitlyConvertiblePair<_U1, _U2>(), -23376: bool>::type=true> -23376: constexpr pair(const _T1& __a, const _T2& __b) -23376: : first(__a), second(__b) { } -23376: -23376: template() -23376: && !_PCCP::template -23376: _ImplicitlyConvertiblePair<_U1, _U2>(), -23376: bool>::type=false> -23376: explicit constexpr pair(const _T1& __a, const _T2& __b) -23376: : first(__a), second(__b) { } -23376: # 280 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: template -23376: using _PCCFP = _PCC::value -23376: || !is_same<_T2, _U2>::value, -23376: _T1, _T2>; -23376: -23376: template::template -23376: _ConstructiblePair<_U1, _U2>() -23376: && _PCCFP<_U1, _U2>::template -23376: _ImplicitlyConvertiblePair<_U1, _U2>(), -23376: bool>::type=true> -23376: constexpr pair(const pair<_U1, _U2>& __p) -23376: : first(__p.first), second(__p.second) { } -23376: -23376: template::template -23376: _ConstructiblePair<_U1, _U2>() -23376: && !_PCCFP<_U1, _U2>::template -23376: _ImplicitlyConvertiblePair<_U1, _U2>(), -23376: bool>::type=false> -23376: explicit constexpr pair(const pair<_U1, _U2>& __p) -23376: : first(__p.first), second(__p.second) { } -23376: -23376: constexpr pair(const pair&) = default; -23376: constexpr pair(pair&&) = default; -23376: -23376: -23376: template(), -23376: bool>::type=true> -23376: constexpr pair(_U1&& __x, const _T2& __y) -23376: : first(std::forward<_U1>(__x)), second(__y) { } -23376: -23376: template(), -23376: bool>::type=false> -23376: explicit constexpr pair(_U1&& __x, const _T2& __y) -23376: : first(std::forward<_U1>(__x)), second(__y) { } -23376: -23376: template(), -23376: bool>::type=true> -23376: constexpr pair(const _T1& __x, _U2&& __y) -23376: : first(__x), second(std::forward<_U2>(__y)) { } -23376: -23376: template(), -23376: bool>::type=false> -23376: explicit pair(const _T1& __x, _U2&& __y) -23376: : first(__x), second(std::forward<_U2>(__y)) { } -23376: -23376: template() -23376: && _PCCP::template -23376: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), -23376: bool>::type=true> -23376: constexpr pair(_U1&& __x, _U2&& __y) -23376: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } -23376: -23376: template() -23376: && !_PCCP::template -23376: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), -23376: bool>::type=false> -23376: explicit constexpr pair(_U1&& __x, _U2&& __y) -23376: : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } -23376: -23376: -23376: template::template -23376: _MoveConstructiblePair<_U1, _U2>() -23376: && _PCCFP<_U1, _U2>::template -23376: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), -23376: bool>::type=true> -23376: constexpr pair(pair<_U1, _U2>&& __p) -23376: : first(std::forward<_U1>(__p.first)), -23376: second(std::forward<_U2>(__p.second)) { } -23376: -23376: template::template -23376: _MoveConstructiblePair<_U1, _U2>() -23376: && !_PCCFP<_U1, _U2>::template -23376: _ImplicitlyMoveConvertiblePair<_U1, _U2>(), -23376: bool>::type=false> -23376: explicit constexpr pair(pair<_U1, _U2>&& __p) -23376: : first(std::forward<_U1>(__p.first)), -23376: second(std::forward<_U2>(__p.second)) { } -23376: -23376: template -23376: pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); -23376: -23376: pair& -23376: operator=(typename conditional< -23376: __and_, -23376: is_copy_assignable<_T2>>::value, -23376: const pair&, const __nonesuch_no_braces&>::type __p) -23376: { -23376: first = __p.first; -23376: second = __p.second; -23376: return *this; -23376: } -23376: -23376: pair& -23376: operator=(typename conditional< -23376: __and_, -23376: is_move_assignable<_T2>>::value, -23376: pair&&, __nonesuch_no_braces&&>::type __p) -23376: noexcept(__and_, -23376: is_nothrow_move_assignable<_T2>>::value) -23376: { -23376: first = std::forward(__p.first); -23376: second = std::forward(__p.second); -23376: return *this; -23376: } -23376: -23376: template -23376: typename enable_if<__and_, -23376: is_assignable<_T2&, const _U2&>>::value, -23376: pair&>::type -23376: operator=(const pair<_U1, _U2>& __p) -23376: { -23376: first = __p.first; -23376: second = __p.second; -23376: return *this; -23376: } -23376: -23376: template -23376: typename enable_if<__and_, -23376: is_assignable<_T2&, _U2&&>>::value, -23376: pair&>::type -23376: operator=(pair<_U1, _U2>&& __p) -23376: { -23376: first = std::forward<_U1>(__p.first); -23376: second = std::forward<_U2>(__p.second); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(pair& __p) -23376: noexcept(__and_<__is_nothrow_swappable<_T1>, -23376: __is_nothrow_swappable<_T2>>::value) -23376: { -23376: using std::swap; -23376: swap(first, __p.first); -23376: swap(second, __p.second); -23376: } -23376: -23376: private: -23376: template -23376: pair(tuple<_Args1...>&, tuple<_Args2...>&, -23376: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return __x.first == __y.first && __x.second == __y.second; } -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return __x.first < __y.first -23376: || (!(__y.first < __x.first) && __x.second < __y.second); } -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline constexpr bool -23376: operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline -23376: -23376: -23376: typename enable_if<__and_<__is_swappable<_T1>, -23376: __is_swappable<_T2>>::value>::type -23376: -23376: -23376: -23376: swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: typename enable_if, -23376: __is_swappable<_T2>>::value>::type -23376: swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; -23376: # 521 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: template -23376: constexpr pair::__type, -23376: typename __decay_and_strip<_T2>::__type> -23376: make_pair(_T1&& __x, _T2&& __y) -23376: { -23376: typedef typename __decay_and_strip<_T1>::__type __ds_type1; -23376: typedef typename __decay_and_strip<_T2>::__type __ds_type2; -23376: typedef pair<__ds_type1, __ds_type2> __pair_type; -23376: return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); -23376: } -23376: # 540 "/usr/include/c++/8/bits/stl_pair.h" 3 -23376: -23376: } -23376: # 71 "/usr/include/c++/8/utility" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/initializer_list" 1 3 -23376: # 33 "/usr/include/c++/8/initializer_list" 3 -23376: -23376: # 34 "/usr/include/c++/8/initializer_list" 3 -23376: -23376: -23376: -23376: -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: -23376: -23376: namespace std -23376: { -23376: -23376: template -23376: class initializer_list -23376: { -23376: public: -23376: typedef _E value_type; -23376: typedef const _E& reference; -23376: typedef const _E& const_reference; -23376: typedef size_t size_type; -23376: typedef const _E* iterator; -23376: typedef const _E* const_iterator; -23376: -23376: private: -23376: iterator _M_array; -23376: size_type _M_len; -23376: -23376: -23376: constexpr initializer_list(const_iterator __a, size_type __l) -23376: : _M_array(__a), _M_len(__l) { } -23376: -23376: public: -23376: constexpr initializer_list() noexcept -23376: : _M_array(0), _M_len(0) { } -23376: -23376: -23376: constexpr size_type -23376: size() const noexcept { return _M_len; } -23376: -23376: -23376: constexpr const_iterator -23376: begin() const noexcept { return _M_array; } -23376: -23376: -23376: constexpr const_iterator -23376: end() const noexcept { return begin() + size(); } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr const _Tp* -23376: begin(initializer_list<_Tp> __ils) noexcept -23376: { return __ils.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr const _Tp* -23376: end(initializer_list<_Tp> __ils) noexcept -23376: { return __ils.end(); } -23376: } -23376: -23376: #pragma GCC visibility pop -23376: # 77 "/usr/include/c++/8/utility" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: struct tuple_size; -23376: -23376: -23376: -23376: -23376: -23376: template::type, -23376: typename = typename enable_if::value>::type, -23376: size_t = tuple_size<_Tp>::value> -23376: using __enable_if_has_tuple_size = _Tp; -23376: -23376: template -23376: struct tuple_size> -23376: : public tuple_size<_Tp> { }; -23376: -23376: template -23376: struct tuple_size> -23376: : public tuple_size<_Tp> { }; -23376: -23376: template -23376: struct tuple_size> -23376: : public tuple_size<_Tp> { }; -23376: -23376: -23376: template -23376: struct tuple_element; -23376: -23376: -23376: template -23376: using __tuple_element_t = typename tuple_element<__i, _Tp>::type; -23376: -23376: template -23376: struct tuple_element<__i, const _Tp> -23376: { -23376: typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type; -23376: }; -23376: -23376: template -23376: struct tuple_element<__i, volatile _Tp> -23376: { -23376: typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type; -23376: }; -23376: -23376: template -23376: struct tuple_element<__i, const volatile _Tp> -23376: { -23376: typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: using tuple_element_t = typename tuple_element<__i, _Tp>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_tuple_like_impl> : true_type -23376: { }; -23376: -23376: -23376: template -23376: struct tuple_size> -23376: : public integral_constant { }; -23376: -23376: -23376: template -23376: struct tuple_element<0, std::pair<_Tp1, _Tp2>> -23376: { typedef _Tp1 type; }; -23376: -23376: -23376: template -23376: struct tuple_element<1, std::pair<_Tp1, _Tp2>> -23376: { typedef _Tp2 type; }; -23376: -23376: template -23376: struct __pair_get; -23376: -23376: template<> -23376: struct __pair_get<0> -23376: { -23376: template -23376: static constexpr _Tp1& -23376: __get(std::pair<_Tp1, _Tp2>& __pair) noexcept -23376: { return __pair.first; } -23376: -23376: template -23376: static constexpr _Tp1&& -23376: __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept -23376: { return std::forward<_Tp1>(__pair.first); } -23376: -23376: template -23376: static constexpr const _Tp1& -23376: __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept -23376: { return __pair.first; } -23376: -23376: template -23376: static constexpr const _Tp1&& -23376: __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept -23376: { return std::forward(__pair.first); } -23376: }; -23376: -23376: template<> -23376: struct __pair_get<1> -23376: { -23376: template -23376: static constexpr _Tp2& -23376: __get(std::pair<_Tp1, _Tp2>& __pair) noexcept -23376: { return __pair.second; } -23376: -23376: template -23376: static constexpr _Tp2&& -23376: __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept -23376: { return std::forward<_Tp2>(__pair.second); } -23376: -23376: template -23376: static constexpr const _Tp2& -23376: __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept -23376: { return __pair.second; } -23376: -23376: template -23376: static constexpr const _Tp2&& -23376: __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept -23376: { return std::forward(__pair.second); } -23376: }; -23376: -23376: template -23376: constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& -23376: get(std::pair<_Tp1, _Tp2>& __in) noexcept -23376: { return __pair_get<_Int>::__get(__in); } -23376: -23376: template -23376: constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& -23376: get(std::pair<_Tp1, _Tp2>&& __in) noexcept -23376: { return __pair_get<_Int>::__move_get(std::move(__in)); } -23376: -23376: template -23376: constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& -23376: get(const std::pair<_Tp1, _Tp2>& __in) noexcept -23376: { return __pair_get<_Int>::__const_get(__in); } -23376: -23376: template -23376: constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& -23376: get(const std::pair<_Tp1, _Tp2>&& __in) noexcept -23376: { return __pair_get<_Int>::__const_move_get(std::move(__in)); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr _Tp& -23376: get(pair<_Tp, _Up>& __p) noexcept -23376: { return __p.first; } -23376: -23376: template -23376: constexpr const _Tp& -23376: get(const pair<_Tp, _Up>& __p) noexcept -23376: { return __p.first; } -23376: -23376: template -23376: constexpr _Tp&& -23376: get(pair<_Tp, _Up>&& __p) noexcept -23376: { return std::move(__p.first); } -23376: -23376: template -23376: constexpr const _Tp&& -23376: get(const pair<_Tp, _Up>&& __p) noexcept -23376: { return std::move(__p.first); } -23376: -23376: template -23376: constexpr _Tp& -23376: get(pair<_Up, _Tp>& __p) noexcept -23376: { return __p.second; } -23376: -23376: template -23376: constexpr const _Tp& -23376: get(const pair<_Up, _Tp>& __p) noexcept -23376: { return __p.second; } -23376: -23376: template -23376: constexpr _Tp&& -23376: get(pair<_Up, _Tp>&& __p) noexcept -23376: { return std::move(__p.second); } -23376: -23376: template -23376: constexpr const _Tp&& -23376: get(const pair<_Up, _Tp>&& __p) noexcept -23376: { return std::move(__p.second); } -23376: -23376: -23376: -23376: -23376: template -23376: inline _Tp -23376: exchange(_Tp& __obj, _Up&& __new_val) -23376: { return std::__exchange(__obj, std::forward<_Up>(__new_val)); } -23376: -23376: -23376: -23376: -23376: template struct _Index_tuple { }; -23376: # 298 "/usr/include/c++/8/utility" 3 -23376: template -23376: struct _Build_index_tuple -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: using __type = _Index_tuple<__integer_pack(_Num)...>; -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct integer_sequence -23376: { -23376: typedef _Tp value_type; -23376: static constexpr size_t size() noexcept { return sizeof...(_Idx); } -23376: }; -23376: -23376: -23376: template -23376: using make_integer_sequence -23376: -23376: -23376: -23376: = integer_sequence<_Tp, __integer_pack(_Num)...>; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: using index_sequence = integer_sequence; -23376: -23376: -23376: template -23376: using make_index_sequence = make_integer_sequence; -23376: -23376: -23376: template -23376: using index_sequence_for = make_index_sequence; -23376: # 393 "/usr/include/c++/8/utility" 3 -23376: -23376: } -23376: # 39 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/algorithm" 1 3 4 -23376: # 58 "/usr/include/c++/8/algorithm" 3 4 -23376: -23376: # 59 "/usr/include/c++/8/algorithm" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_algobase.h" 1 3 -23376: # 60 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: # 1 "/usr/include/c++/8/bits/functexcept.h" 1 3 -23376: # 40 "/usr/include/c++/8/bits/functexcept.h" 3 -23376: # 1 "/usr/include/c++/8/bits/exception_defines.h" 1 3 -23376: # 41 "/usr/include/c++/8/bits/functexcept.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: void -23376: __throw_bad_exception(void) __attribute__((__noreturn__)); -23376: -23376: -23376: void -23376: __throw_bad_alloc(void) __attribute__((__noreturn__)); -23376: -23376: -23376: void -23376: __throw_bad_cast(void) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_bad_typeid(void) __attribute__((__noreturn__)); -23376: -23376: -23376: void -23376: __throw_logic_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_domain_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_invalid_argument(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_length_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_out_of_range(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)) -23376: __attribute__((__format__(__gnu_printf__, 1, 2))); -23376: -23376: void -23376: __throw_runtime_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_range_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_overflow_error(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_underflow_error(const char*) __attribute__((__noreturn__)); -23376: -23376: -23376: void -23376: __throw_ios_failure(const char*) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_system_error(int) __attribute__((__noreturn__)); -23376: -23376: void -23376: __throw_future_error(int) __attribute__((__noreturn__)); -23376: -23376: -23376: void -23376: __throw_bad_function_call() __attribute__((__noreturn__)); -23376: -23376: -23376: } -23376: # 61 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/cpp_type_traits.h" 1 3 -23376: # 35 "/usr/include/c++/8/bits/cpp_type_traits.h" 3 -23376: -23376: # 36 "/usr/include/c++/8/bits/cpp_type_traits.h" 3 -23376: # 67 "/usr/include/c++/8/bits/cpp_type_traits.h" 3 -23376: extern "C++" { -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: struct __true_type { }; -23376: struct __false_type { }; -23376: -23376: template -23376: struct __truth_type -23376: { typedef __false_type __type; }; -23376: -23376: template<> -23376: struct __truth_type -23376: { typedef __true_type __type; }; -23376: -23376: -23376: -23376: template -23376: struct __traitor -23376: { -23376: enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; -23376: typedef typename __truth_type<__value>::__type __type; -23376: }; -23376: -23376: -23376: template -23376: struct __are_same -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: template -23376: struct __are_same<_Tp, _Tp> -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: template -23376: struct __is_void -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_void -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_integer -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_integer -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: # 278 "/usr/include/c++/8/bits/cpp_type_traits.h" 3 -23376: template -23376: struct __is_floating -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: -23376: template<> -23376: struct __is_floating -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_floating -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_floating -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_pointer -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: template -23376: struct __is_pointer<_Tp*> -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_arithmetic -23376: : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_scalar -23376: : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_char -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_char -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: template<> -23376: struct __is_char -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: -23376: template -23376: struct __is_byte -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_byte -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_byte -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template<> -23376: struct __is_byte -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: # 408 "/usr/include/c++/8/bits/cpp_type_traits.h" 3 -23376: template -23376: struct __is_move_iterator -23376: { -23376: enum { __value = 0 }; -23376: typedef __false_type __type; -23376: }; -23376: -23376: -23376: -23376: template -23376: inline _Iterator -23376: __miter_base(_Iterator __it) -23376: { return __it; } -23376: -23376: -23376: } -23376: } -23376: # 62 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: # 1 "/usr/include/c++/8/ext/type_traits.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/type_traits.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/type_traits.h" 3 -23376: -23376: -23376: -23376: -23376: extern "C++" { -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: struct __enable_if -23376: { }; -23376: -23376: template -23376: struct __enable_if -23376: { typedef _Tp __type; }; -23376: -23376: -23376: -23376: template -23376: struct __conditional_type -23376: { typedef _Iftrue __type; }; -23376: -23376: template -23376: struct __conditional_type -23376: { typedef _Iffalse __type; }; -23376: -23376: -23376: -23376: template -23376: struct __add_unsigned -23376: { -23376: private: -23376: typedef __enable_if::__value, _Tp> __if_type; -23376: -23376: public: -23376: typedef typename __if_type::__type __type; -23376: }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned char __type; }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned char __type; }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned short __type; }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned int __type; }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned long __type; }; -23376: -23376: template<> -23376: struct __add_unsigned -23376: { typedef unsigned long long __type; }; -23376: -23376: -23376: template<> -23376: struct __add_unsigned; -23376: -23376: template<> -23376: struct __add_unsigned; -23376: -23376: -23376: -23376: template -23376: struct __remove_unsigned -23376: { -23376: private: -23376: typedef __enable_if::__value, _Tp> __if_type; -23376: -23376: public: -23376: typedef typename __if_type::__type __type; -23376: }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef signed char __type; }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef signed char __type; }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef short __type; }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef int __type; }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef long __type; }; -23376: -23376: template<> -23376: struct __remove_unsigned -23376: { typedef long long __type; }; -23376: -23376: -23376: template<> -23376: struct __remove_unsigned; -23376: -23376: template<> -23376: struct __remove_unsigned; -23376: -23376: -23376: -23376: template -23376: inline bool -23376: __is_null_pointer(_Type* __ptr) -23376: { return __ptr == 0; } -23376: -23376: template -23376: inline bool -23376: __is_null_pointer(_Type) -23376: { return false; } -23376: -23376: -23376: inline bool -23376: __is_null_pointer(std::nullptr_t) -23376: { return true; } -23376: -23376: -23376: -23376: template::__value> -23376: struct __promote -23376: { typedef double __type; }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __promote<_Tp, false> -23376: { }; -23376: -23376: template<> -23376: struct __promote -23376: { typedef long double __type; }; -23376: -23376: template<> -23376: struct __promote -23376: { typedef double __type; }; -23376: -23376: template<> -23376: struct __promote -23376: { typedef float __type; }; -23376: -23376: template::__type, -23376: typename _Up2 = typename __promote<_Up>::__type> -23376: struct __promote_2 -23376: { -23376: typedef __typeof__(_Tp2() + _Up2()) __type; -23376: }; -23376: -23376: template::__type, -23376: typename _Up2 = typename __promote<_Up>::__type, -23376: typename _Vp2 = typename __promote<_Vp>::__type> -23376: struct __promote_3 -23376: { -23376: typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type; -23376: }; -23376: -23376: template::__type, -23376: typename _Up2 = typename __promote<_Up>::__type, -23376: typename _Vp2 = typename __promote<_Vp>::__type, -23376: typename _Wp2 = typename __promote<_Wp>::__type> -23376: struct __promote_4 -23376: { -23376: typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; -23376: }; -23376: -23376: -23376: } -23376: } -23376: # 63 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: # 1 "/usr/include/c++/8/ext/numeric_traits.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/numeric_traits.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/numeric_traits.h" 3 -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 54 "/usr/include/c++/8/ext/numeric_traits.h" 3 -23376: template -23376: struct __numeric_traits_integer -23376: { -23376: -23376: static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0); -23376: static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0); -23376: -23376: -23376: -23376: static const bool __is_signed = ((_Value)(-1) < 0); -23376: static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0)); -23376: }; -23376: -23376: template -23376: const _Value __numeric_traits_integer<_Value>::__min; -23376: -23376: template -23376: const _Value __numeric_traits_integer<_Value>::__max; -23376: -23376: template -23376: const bool __numeric_traits_integer<_Value>::__is_signed; -23376: -23376: template -23376: const int __numeric_traits_integer<_Value>::__digits; -23376: # 99 "/usr/include/c++/8/ext/numeric_traits.h" 3 -23376: template -23376: struct __numeric_traits_floating -23376: { -23376: -23376: static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 53) * 643L / 2136); -23376: -23376: -23376: static const bool __is_signed = true; -23376: static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 15); -23376: static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 308); -23376: }; -23376: -23376: template -23376: const int __numeric_traits_floating<_Value>::__max_digits10; -23376: -23376: template -23376: const bool __numeric_traits_floating<_Value>::__is_signed; -23376: -23376: template -23376: const int __numeric_traits_floating<_Value>::__digits10; -23376: -23376: template -23376: const int __numeric_traits_floating<_Value>::__max_exponent10; -23376: -23376: template -23376: struct __numeric_traits -23376: : public __conditional_type::__value, -23376: __numeric_traits_integer<_Value>, -23376: __numeric_traits_floating<_Value> >::__type -23376: { }; -23376: -23376: -23376: } -23376: # 64 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 1 3 -23376: # 62 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: -23376: # 63 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 89 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: struct input_iterator_tag { }; -23376: -23376: -23376: struct output_iterator_tag { }; -23376: -23376: -23376: struct forward_iterator_tag : public input_iterator_tag { }; -23376: -23376: -23376: -23376: struct bidirectional_iterator_tag : public forward_iterator_tag { }; -23376: -23376: -23376: -23376: struct random_access_iterator_tag : public bidirectional_iterator_tag { }; -23376: # 116 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: template -23376: struct iterator -23376: { -23376: -23376: typedef _Category iterator_category; -23376: -23376: typedef _Tp value_type; -23376: -23376: typedef _Distance difference_type; -23376: -23376: typedef _Pointer pointer; -23376: -23376: typedef _Reference reference; -23376: }; -23376: # 143 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: template> -23376: struct __iterator_traits { }; -23376: -23376: template -23376: struct __iterator_traits<_Iterator, -23376: __void_t> -23376: { -23376: typedef typename _Iterator::iterator_category iterator_category; -23376: typedef typename _Iterator::value_type value_type; -23376: typedef typename _Iterator::difference_type difference_type; -23376: typedef typename _Iterator::pointer pointer; -23376: typedef typename _Iterator::reference reference; -23376: }; -23376: -23376: template -23376: struct iterator_traits -23376: : public __iterator_traits<_Iterator> { }; -23376: # 177 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: template -23376: struct iterator_traits<_Tp*> -23376: { -23376: typedef random_access_iterator_tag iterator_category; -23376: typedef _Tp value_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Tp* pointer; -23376: typedef _Tp& reference; -23376: }; -23376: -23376: -23376: template -23376: struct iterator_traits -23376: { -23376: typedef random_access_iterator_tag iterator_category; -23376: typedef _Tp value_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef const _Tp* pointer; -23376: typedef const _Tp& reference; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr -23376: typename iterator_traits<_Iter>::iterator_category -23376: __iterator_category(const _Iter&) -23376: { return typename iterator_traits<_Iter>::iterator_category(); } -23376: # 231 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3 -23376: template -23376: using _RequireInputIter = typename -23376: enable_if::iterator_category, -23376: input_iterator_tag>::value>::type; -23376: -23376: -23376: -23376: } -23376: # 66 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 1 3 -23376: # 62 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3 -23376: -23376: # 63 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/debug/assertions.h" 1 3 -23376: # 66 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template struct _List_iterator; -23376: template struct _List_const_iterator; -23376: -23376: -23376: template -23376: inline constexpr -23376: typename iterator_traits<_InputIterator>::difference_type -23376: __distance(_InputIterator __first, _InputIterator __last, -23376: input_iterator_tag) -23376: { -23376: -23376: -23376: -23376: typename iterator_traits<_InputIterator>::difference_type __n = 0; -23376: while (__first != __last) -23376: { -23376: ++__first; -23376: ++__n; -23376: } -23376: return __n; -23376: } -23376: -23376: template -23376: inline constexpr -23376: typename iterator_traits<_RandomAccessIterator>::difference_type -23376: __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: random_access_iterator_tag) -23376: { -23376: -23376: -23376: -23376: return __last - __first; -23376: } -23376: -23376: -23376: -23376: template -23376: ptrdiff_t -23376: __distance(std::_List_iterator<_Tp>, -23376: std::_List_iterator<_Tp>, -23376: input_iterator_tag); -23376: -23376: template -23376: ptrdiff_t -23376: __distance(std::_List_const_iterator<_Tp>, -23376: std::_List_const_iterator<_Tp>, -23376: input_iterator_tag); -23376: # 135 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3 -23376: template -23376: inline -23376: typename iterator_traits<_InputIterator>::difference_type -23376: distance(_InputIterator __first, _InputIterator __last) -23376: { -23376: -23376: return std::__distance(__first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: template -23376: inline constexpr void -23376: __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) -23376: { -23376: -23376: -23376: ; -23376: while (__n--) -23376: ++__i; -23376: } -23376: -23376: template -23376: inline constexpr void -23376: __advance(_BidirectionalIterator& __i, _Distance __n, -23376: bidirectional_iterator_tag) -23376: { -23376: -23376: -23376: -23376: if (__n > 0) -23376: while (__n--) -23376: ++__i; -23376: else -23376: while (__n++) -23376: --__i; -23376: } -23376: -23376: template -23376: inline constexpr void -23376: __advance(_RandomAccessIterator& __i, _Distance __n, -23376: random_access_iterator_tag) -23376: { -23376: -23376: -23376: -23376: if (__builtin_constant_p(__n) && __n == 1) -23376: ++__i; -23376: else if (__builtin_constant_p(__n) && __n == -1) -23376: --__i; -23376: else -23376: __i += __n; -23376: } -23376: # 200 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3 -23376: template -23376: inline void -23376: advance(_InputIterator& __i, _Distance __n) -23376: { -23376: -23376: typename iterator_traits<_InputIterator>::difference_type __d = __n; -23376: std::__advance(__i, __d, std::__iterator_category(__i)); -23376: } -23376: -23376: -23376: -23376: template -23376: inline _InputIterator -23376: next(_InputIterator __x, typename -23376: iterator_traits<_InputIterator>::difference_type __n = 1) -23376: { -23376: -23376: -23376: std::advance(__x, __n); -23376: return __x; -23376: } -23376: -23376: template -23376: inline _BidirectionalIterator -23376: prev(_BidirectionalIterator __x, typename -23376: iterator_traits<_BidirectionalIterator>::difference_type __n = 1) -23376: { -23376: -23376: -23376: -23376: std::advance(__x, -__n); -23376: return __x; -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 67 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_iterator.h" 1 3 -23376: # 66 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: # 1 "/usr/include/c++/8/bits/ptr_traits.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/ptr_traits.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: class __undefined; -23376: -23376: -23376: template -23376: struct __get_first_arg -23376: { using type = __undefined; }; -23376: -23376: template class _Template, typename _Tp, -23376: typename... _Types> -23376: struct __get_first_arg<_Template<_Tp, _Types...>> -23376: { using type = _Tp; }; -23376: -23376: template -23376: using __get_first_arg_t = typename __get_first_arg<_Tp>::type; -23376: -23376: -23376: template -23376: struct __replace_first_arg -23376: { }; -23376: -23376: template class _Template, typename _Up, -23376: typename _Tp, typename... _Types> -23376: struct __replace_first_arg<_Template<_Tp, _Types...>, _Up> -23376: { using type = _Template<_Up, _Types...>; }; -23376: -23376: template -23376: using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type; -23376: -23376: template -23376: using __make_not_void -23376: = typename conditional::value, __undefined, _Tp>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct pointer_traits -23376: { -23376: private: -23376: template -23376: using __element_type = typename _Tp::element_type; -23376: -23376: template -23376: using __difference_type = typename _Tp::difference_type; -23376: -23376: template -23376: struct __rebind : __replace_first_arg<_Tp, _Up> { }; -23376: -23376: template -23376: struct __rebind<_Tp, _Up, __void_t>> -23376: { using type = typename _Tp::template rebind<_Up>; }; -23376: -23376: public: -23376: -23376: using pointer = _Ptr; -23376: -23376: -23376: using element_type -23376: = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>; -23376: -23376: -23376: using difference_type -23376: = __detected_or_t; -23376: -23376: -23376: template -23376: using rebind = typename __rebind<_Ptr, _Up>::type; -23376: -23376: static _Ptr -23376: pointer_to(__make_not_void& __e) -23376: { return _Ptr::pointer_to(__e); } -23376: -23376: static_assert(!is_same::value, -23376: "pointer type defines element_type or is like SomePointer"); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct pointer_traits<_Tp*> -23376: { -23376: -23376: typedef _Tp* pointer; -23376: -23376: typedef _Tp element_type; -23376: -23376: typedef ptrdiff_t difference_type; -23376: -23376: template -23376: using rebind = _Up*; -23376: -23376: -23376: -23376: -23376: -23376: -23376: static pointer -23376: pointer_to(__make_not_void& __r) noexcept -23376: { return std::addressof(__r); } -23376: }; -23376: -23376: -23376: template -23376: using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; -23376: -23376: template -23376: constexpr _Tp* -23376: __to_address(_Tp* __ptr) noexcept -23376: { -23376: static_assert(!std::is_function<_Tp>::value, "not a function pointer"); -23376: return __ptr; -23376: } -23376: -23376: -23376: template -23376: constexpr typename std::pointer_traits<_Ptr>::element_type* -23376: __to_address(const _Ptr& __ptr) -23376: { return std::__to_address(__ptr.operator->()); } -23376: # 198 "/usr/include/c++/8/bits/ptr_traits.h" 3 -23376: -23376: } -23376: # 67 "/usr/include/c++/8/bits/stl_iterator.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 100 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: class reverse_iterator -23376: : public iterator::iterator_category, -23376: typename iterator_traits<_Iterator>::value_type, -23376: typename iterator_traits<_Iterator>::difference_type, -23376: typename iterator_traits<_Iterator>::pointer, -23376: typename iterator_traits<_Iterator>::reference> -23376: { -23376: protected: -23376: _Iterator current; -23376: -23376: typedef iterator_traits<_Iterator> __traits_type; -23376: -23376: public: -23376: typedef _Iterator iterator_type; -23376: typedef typename __traits_type::difference_type difference_type; -23376: typedef typename __traits_type::pointer pointer; -23376: typedef typename __traits_type::reference reference; -23376: # 126 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: -23376: reverse_iterator() : current() { } -23376: -23376: -23376: -23376: -23376: explicit -23376: reverse_iterator(iterator_type __x) : current(__x) { } -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator(const reverse_iterator& __x) -23376: : current(__x.current) { } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: -23376: reverse_iterator(const reverse_iterator<_Iter>& __x) -23376: : current(__x.base()) { } -23376: -23376: -23376: -23376: -23376: iterator_type -23376: base() const -23376: { return current; } -23376: # 168 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: reference -23376: operator*() const -23376: { -23376: _Iterator __tmp = current; -23376: return *--__tmp; -23376: } -23376: # 182 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: pointer -23376: operator->() const -23376: { return std::__addressof(operator*()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator& -23376: operator++() -23376: { -23376: --current; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: operator++(int) -23376: { -23376: reverse_iterator __tmp = *this; -23376: --current; -23376: return __tmp; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator& -23376: operator--() -23376: { -23376: ++current; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: operator--(int) -23376: { -23376: reverse_iterator __tmp = *this; -23376: ++current; -23376: return __tmp; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: operator+(difference_type __n) const -23376: { return reverse_iterator(current - __n); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator& -23376: operator+=(difference_type __n) -23376: { -23376: current -= __n; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: operator-(difference_type __n) const -23376: { return reverse_iterator(current + __n); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator& -23376: operator-=(difference_type __n) -23376: { -23376: current += __n; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: operator[](difference_type __n) const -23376: { return *(*this + __n); } -23376: }; -23376: # 300 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline bool -23376: operator==(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return __x.base() == __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator<(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return __y.base() < __x.base(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator>(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator<=(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>=(const reverse_iterator<_Iterator>& __x, -23376: const reverse_iterator<_Iterator>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return __x.base() == __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator<(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return __y.base() < __x.base(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator>(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator<=(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>=(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: { return !(__x < __y); } -23376: # 390 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline auto -23376: operator-(const reverse_iterator<_IteratorL>& __x, -23376: const reverse_iterator<_IteratorR>& __y) -23376: -> decltype(__y.base() - __x.base()) -23376: { return __y.base() - __x.base(); } -23376: -23376: -23376: template -23376: inline reverse_iterator<_Iterator> -23376: operator+(typename reverse_iterator<_Iterator>::difference_type __n, -23376: const reverse_iterator<_Iterator>& __x) -23376: { return reverse_iterator<_Iterator>(__x.base() - __n); } -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator<_Iterator> -23376: __make_reverse_iterator(_Iterator __i) -23376: { return reverse_iterator<_Iterator>(__i); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator<_Iterator> -23376: make_reverse_iterator(_Iterator __i) -23376: { return reverse_iterator<_Iterator>(__i); } -23376: -23376: -23376: -23376: -23376: template -23376: auto -23376: __niter_base(reverse_iterator<_Iterator> __it) -23376: -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) -23376: { return __make_reverse_iterator(__niter_base(__it.base())); } -23376: -23376: template -23376: struct __is_move_iterator > -23376: : __is_move_iterator<_Iterator> -23376: { }; -23376: -23376: template -23376: auto -23376: __miter_base(reverse_iterator<_Iterator> __it) -23376: -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) -23376: { return __make_reverse_iterator(__miter_base(__it.base())); } -23376: # 454 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: class back_insert_iterator -23376: : public iterator -23376: { -23376: protected: -23376: _Container* container; -23376: -23376: public: -23376: -23376: typedef _Container container_type; -23376: -23376: -23376: explicit -23376: back_insert_iterator(_Container& __x) -23376: : container(std::__addressof(__x)) { } -23376: # 489 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: back_insert_iterator& -23376: operator=(const typename _Container::value_type& __value) -23376: { -23376: container->push_back(__value); -23376: return *this; -23376: } -23376: -23376: back_insert_iterator& -23376: operator=(typename _Container::value_type&& __value) -23376: { -23376: container->push_back(std::move(__value)); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: back_insert_iterator& -23376: operator*() -23376: { return *this; } -23376: -23376: -23376: back_insert_iterator& -23376: operator++() -23376: { return *this; } -23376: -23376: -23376: back_insert_iterator -23376: operator++(int) -23376: { return *this; } -23376: }; -23376: # 531 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline back_insert_iterator<_Container> -23376: back_inserter(_Container& __x) -23376: { return back_insert_iterator<_Container>(__x); } -23376: # 546 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: class front_insert_iterator -23376: : public iterator -23376: { -23376: protected: -23376: _Container* container; -23376: -23376: public: -23376: -23376: typedef _Container container_type; -23376: -23376: -23376: explicit front_insert_iterator(_Container& __x) -23376: : container(std::__addressof(__x)) { } -23376: # 580 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: front_insert_iterator& -23376: operator=(const typename _Container::value_type& __value) -23376: { -23376: container->push_front(__value); -23376: return *this; -23376: } -23376: -23376: front_insert_iterator& -23376: operator=(typename _Container::value_type&& __value) -23376: { -23376: container->push_front(std::move(__value)); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: front_insert_iterator& -23376: operator*() -23376: { return *this; } -23376: -23376: -23376: front_insert_iterator& -23376: operator++() -23376: { return *this; } -23376: -23376: -23376: front_insert_iterator -23376: operator++(int) -23376: { return *this; } -23376: }; -23376: # 622 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline front_insert_iterator<_Container> -23376: front_inserter(_Container& __x) -23376: { return front_insert_iterator<_Container>(__x); } -23376: # 641 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: class insert_iterator -23376: : public iterator -23376: { -23376: protected: -23376: _Container* container; -23376: typename _Container::iterator iter; -23376: -23376: public: -23376: -23376: typedef _Container container_type; -23376: -23376: -23376: -23376: -23376: -23376: insert_iterator(_Container& __x, typename _Container::iterator __i) -23376: : container(std::__addressof(__x)), iter(__i) {} -23376: # 692 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: insert_iterator& -23376: operator=(const typename _Container::value_type& __value) -23376: { -23376: iter = container->insert(iter, __value); -23376: ++iter; -23376: return *this; -23376: } -23376: -23376: insert_iterator& -23376: operator=(typename _Container::value_type&& __value) -23376: { -23376: iter = container->insert(iter, std::move(__value)); -23376: ++iter; -23376: return *this; -23376: } -23376: -23376: -23376: -23376: insert_iterator& -23376: operator*() -23376: { return *this; } -23376: -23376: -23376: insert_iterator& -23376: operator++() -23376: { return *this; } -23376: -23376: -23376: insert_iterator& -23376: operator++(int) -23376: { return *this; } -23376: }; -23376: # 737 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline insert_iterator<_Container> -23376: inserter(_Container& __x, _Iterator __i) -23376: { -23376: return insert_iterator<_Container>(__x, -23376: typename _Container::iterator(__i)); -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 761 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: using std::iterator_traits; -23376: using std::iterator; -23376: template -23376: class __normal_iterator -23376: { -23376: protected: -23376: _Iterator _M_current; -23376: -23376: typedef iterator_traits<_Iterator> __traits_type; -23376: -23376: public: -23376: typedef _Iterator iterator_type; -23376: typedef typename __traits_type::iterator_category iterator_category; -23376: typedef typename __traits_type::value_type value_type; -23376: typedef typename __traits_type::difference_type difference_type; -23376: typedef typename __traits_type::reference reference; -23376: typedef typename __traits_type::pointer pointer; -23376: -23376: constexpr __normal_iterator() noexcept -23376: : _M_current(_Iterator()) { } -23376: -23376: explicit -23376: __normal_iterator(const _Iterator& __i) noexcept -23376: : _M_current(__i) { } -23376: -23376: -23376: template -23376: __normal_iterator(const __normal_iterator<_Iter, -23376: typename __enable_if< -23376: (std::__are_same<_Iter, typename _Container::pointer>::__value), -23376: _Container>::__type>& __i) noexcept -23376: : _M_current(__i.base()) { } -23376: -23376: -23376: reference -23376: operator*() const noexcept -23376: { return *_M_current; } -23376: -23376: pointer -23376: operator->() const noexcept -23376: { return _M_current; } -23376: -23376: __normal_iterator& -23376: operator++() noexcept -23376: { -23376: ++_M_current; -23376: return *this; -23376: } -23376: -23376: __normal_iterator -23376: operator++(int) noexcept -23376: { return __normal_iterator(_M_current++); } -23376: -23376: -23376: __normal_iterator& -23376: operator--() noexcept -23376: { -23376: --_M_current; -23376: return *this; -23376: } -23376: -23376: __normal_iterator -23376: operator--(int) noexcept -23376: { return __normal_iterator(_M_current--); } -23376: -23376: -23376: reference -23376: operator[](difference_type __n) const noexcept -23376: { return _M_current[__n]; } -23376: -23376: __normal_iterator& -23376: operator+=(difference_type __n) noexcept -23376: { _M_current += __n; return *this; } -23376: -23376: __normal_iterator -23376: operator+(difference_type __n) const noexcept -23376: { return __normal_iterator(_M_current + __n); } -23376: -23376: __normal_iterator& -23376: operator-=(difference_type __n) noexcept -23376: { _M_current -= __n; return *this; } -23376: -23376: __normal_iterator -23376: operator-(difference_type __n) const noexcept -23376: { return __normal_iterator(_M_current - __n); } -23376: -23376: const _Iterator& -23376: base() const noexcept -23376: { return _M_current; } -23376: }; -23376: # 861 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: inline bool -23376: operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() == __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator==(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() == __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() != __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() != __rhs.base(); } -23376: -23376: -23376: template -23376: inline bool -23376: operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() < __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator<(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() < __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() > __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator>(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() > __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() <= __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() <= __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() >= __rhs.base(); } -23376: -23376: template -23376: inline bool -23376: operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() >= __rhs.base(); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: -23376: -23376: inline auto -23376: operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, -23376: const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept -23376: -> decltype(__lhs.base() - __rhs.base()) -23376: -23376: -23376: -23376: -23376: -23376: { return __lhs.base() - __rhs.base(); } -23376: -23376: template -23376: inline typename __normal_iterator<_Iterator, _Container>::difference_type -23376: operator-(const __normal_iterator<_Iterator, _Container>& __lhs, -23376: const __normal_iterator<_Iterator, _Container>& __rhs) -23376: noexcept -23376: { return __lhs.base() - __rhs.base(); } -23376: -23376: template -23376: inline __normal_iterator<_Iterator, _Container> -23376: operator+(typename __normal_iterator<_Iterator, _Container>::difference_type -23376: __n, const __normal_iterator<_Iterator, _Container>& __i) -23376: noexcept -23376: { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } -23376: -23376: -23376: } -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: _Iterator -23376: __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) -23376: { return __it.base(); } -23376: # 1006 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: template -23376: class move_iterator -23376: { -23376: protected: -23376: _Iterator _M_current; -23376: -23376: typedef iterator_traits<_Iterator> __traits_type; -23376: typedef typename __traits_type::reference __base_ref; -23376: -23376: public: -23376: typedef _Iterator iterator_type; -23376: typedef typename __traits_type::iterator_category iterator_category; -23376: typedef typename __traits_type::value_type value_type; -23376: typedef typename __traits_type::difference_type difference_type; -23376: -23376: typedef _Iterator pointer; -23376: -23376: -23376: typedef typename conditional::value, -23376: typename remove_reference<__base_ref>::type&&, -23376: __base_ref>::type reference; -23376: -23376: -23376: move_iterator() -23376: : _M_current() { } -23376: -23376: explicit -23376: move_iterator(iterator_type __i) -23376: : _M_current(__i) { } -23376: -23376: template -23376: -23376: move_iterator(const move_iterator<_Iter>& __i) -23376: : _M_current(__i.base()) { } -23376: -23376: iterator_type -23376: base() const -23376: { return _M_current; } -23376: -23376: reference -23376: operator*() const -23376: { return static_cast(*_M_current); } -23376: -23376: pointer -23376: operator->() const -23376: { return _M_current; } -23376: -23376: move_iterator& -23376: operator++() -23376: { -23376: ++_M_current; -23376: return *this; -23376: } -23376: -23376: move_iterator -23376: operator++(int) -23376: { -23376: move_iterator __tmp = *this; -23376: ++_M_current; -23376: return __tmp; -23376: } -23376: -23376: move_iterator& -23376: operator--() -23376: { -23376: --_M_current; -23376: return *this; -23376: } -23376: -23376: move_iterator -23376: operator--(int) -23376: { -23376: move_iterator __tmp = *this; -23376: --_M_current; -23376: return __tmp; -23376: } -23376: -23376: move_iterator -23376: operator+(difference_type __n) const -23376: { return move_iterator(_M_current + __n); } -23376: -23376: move_iterator& -23376: operator+=(difference_type __n) -23376: { -23376: _M_current += __n; -23376: return *this; -23376: } -23376: -23376: move_iterator -23376: operator-(difference_type __n) const -23376: { return move_iterator(_M_current - __n); } -23376: -23376: move_iterator& -23376: operator-=(difference_type __n) -23376: { -23376: _M_current -= __n; -23376: return *this; -23376: } -23376: -23376: reference -23376: operator[](difference_type __n) const -23376: { return std::move(_M_current[__n]); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return __x.base() == __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator==(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return __x.base() == __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator!=(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator<(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return __x.base() < __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator<(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return __x.base() < __y.base(); } -23376: -23376: template -23376: inline bool -23376: operator<=(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator<=(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator>(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator>=(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: { return !(__x < __y); } -23376: -23376: template -23376: inline bool -23376: operator>=(const move_iterator<_Iterator>& __x, -23376: const move_iterator<_Iterator>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline auto -23376: operator-(const move_iterator<_IteratorL>& __x, -23376: const move_iterator<_IteratorR>& __y) -23376: -> decltype(__x.base() - __y.base()) -23376: { return __x.base() - __y.base(); } -23376: -23376: template -23376: inline move_iterator<_Iterator> -23376: operator+(typename move_iterator<_Iterator>::difference_type __n, -23376: const move_iterator<_Iterator>& __x) -23376: { return __x + __n; } -23376: -23376: template -23376: inline move_iterator<_Iterator> -23376: make_move_iterator(_Iterator __i) -23376: { return move_iterator<_Iterator>(__i); } -23376: -23376: template::value_type>::value, -23376: _Iterator, move_iterator<_Iterator>>::type> -23376: inline _ReturnType -23376: __make_move_if_noexcept_iterator(_Iterator __i) -23376: { return _ReturnType(__i); } -23376: -23376: -23376: -23376: template::value, -23376: const _Tp*, move_iterator<_Tp*>>::type> -23376: inline _ReturnType -23376: __make_move_if_noexcept_iterator(_Tp* __i) -23376: { return _ReturnType(__i); } -23376: -23376: -23376: -23376: template -23376: auto -23376: __niter_base(move_iterator<_Iterator> __it) -23376: -> decltype(make_move_iterator(__niter_base(__it.base()))) -23376: { return make_move_iterator(__niter_base(__it.base())); } -23376: -23376: template -23376: struct __is_move_iterator > -23376: { -23376: enum { __value = 1 }; -23376: typedef __true_type __type; -23376: }; -23376: -23376: template -23376: auto -23376: __miter_base(move_iterator<_Iterator> __it) -23376: -> decltype(__miter_base(__it.base())) -23376: { return __miter_base(__it.base()); } -23376: # 1271 "/usr/include/c++/8/bits/stl_iterator.h" 3 -23376: -23376: } -23376: # 68 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/debug/debug.h" 1 3 -23376: # 48 "/usr/include/c++/8/debug/debug.h" 3 -23376: namespace std -23376: { -23376: namespace __debug { } -23376: } -23376: -23376: -23376: -23376: -23376: namespace __gnu_debug -23376: { -23376: using namespace std::__debug; -23376: } -23376: # 70 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/predefined_ops.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/predefined_ops.h" 3 -23376: namespace __gnu_cxx -23376: { -23376: namespace __ops -23376: { -23376: struct _Iter_less_iter -23376: { -23376: template -23376: constexpr -23376: bool -23376: operator()(_Iterator1 __it1, _Iterator2 __it2) const -23376: { return *__it1 < *__it2; } -23376: }; -23376: -23376: constexpr -23376: inline _Iter_less_iter -23376: __iter_less_iter() -23376: { return _Iter_less_iter(); } -23376: -23376: struct _Iter_less_val -23376: { -23376: -23376: constexpr _Iter_less_val() = default; -23376: -23376: -23376: -23376: -23376: explicit -23376: _Iter_less_val(_Iter_less_iter) { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it, _Value& __val) const -23376: { return *__it < __val; } -23376: }; -23376: -23376: inline _Iter_less_val -23376: __iter_less_val() -23376: { return _Iter_less_val(); } -23376: -23376: inline _Iter_less_val -23376: __iter_comp_val(_Iter_less_iter) -23376: { return _Iter_less_val(); } -23376: -23376: struct _Val_less_iter -23376: { -23376: -23376: constexpr _Val_less_iter() = default; -23376: -23376: -23376: -23376: -23376: explicit -23376: _Val_less_iter(_Iter_less_iter) { } -23376: -23376: template -23376: bool -23376: operator()(_Value& __val, _Iterator __it) const -23376: { return __val < *__it; } -23376: }; -23376: -23376: inline _Val_less_iter -23376: __val_less_iter() -23376: { return _Val_less_iter(); } -23376: -23376: inline _Val_less_iter -23376: __val_comp_iter(_Iter_less_iter) -23376: { return _Val_less_iter(); } -23376: -23376: struct _Iter_equal_to_iter -23376: { -23376: template -23376: bool -23376: operator()(_Iterator1 __it1, _Iterator2 __it2) const -23376: { return *__it1 == *__it2; } -23376: }; -23376: -23376: inline _Iter_equal_to_iter -23376: __iter_equal_to_iter() -23376: { return _Iter_equal_to_iter(); } -23376: -23376: struct _Iter_equal_to_val -23376: { -23376: template -23376: bool -23376: operator()(_Iterator __it, _Value& __val) const -23376: { return *__it == __val; } -23376: }; -23376: -23376: inline _Iter_equal_to_val -23376: __iter_equal_to_val() -23376: { return _Iter_equal_to_val(); } -23376: -23376: inline _Iter_equal_to_val -23376: __iter_comp_val(_Iter_equal_to_iter) -23376: { return _Iter_equal_to_val(); } -23376: -23376: template -23376: struct _Iter_comp_iter -23376: { -23376: _Compare _M_comp; -23376: -23376: explicit constexpr -23376: _Iter_comp_iter(_Compare __comp) -23376: : _M_comp(std::move(__comp)) -23376: { } -23376: -23376: template -23376: constexpr -23376: bool -23376: operator()(_Iterator1 __it1, _Iterator2 __it2) -23376: { return bool(_M_comp(*__it1, *__it2)); } -23376: }; -23376: -23376: template -23376: constexpr -23376: inline _Iter_comp_iter<_Compare> -23376: __iter_comp_iter(_Compare __comp) -23376: { return _Iter_comp_iter<_Compare>(std::move(__comp)); } -23376: -23376: template -23376: struct _Iter_comp_val -23376: { -23376: _Compare _M_comp; -23376: -23376: explicit -23376: _Iter_comp_val(_Compare __comp) -23376: : _M_comp(std::move(__comp)) -23376: { } -23376: -23376: explicit -23376: _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) -23376: : _M_comp(__comp._M_comp) -23376: { } -23376: -23376: -23376: explicit -23376: _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) -23376: : _M_comp(std::move(__comp._M_comp)) -23376: { } -23376: -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it, _Value& __val) -23376: { return bool(_M_comp(*__it, __val)); } -23376: }; -23376: -23376: template -23376: inline _Iter_comp_val<_Compare> -23376: __iter_comp_val(_Compare __comp) -23376: { return _Iter_comp_val<_Compare>(std::move(__comp)); } -23376: -23376: template -23376: inline _Iter_comp_val<_Compare> -23376: __iter_comp_val(_Iter_comp_iter<_Compare> __comp) -23376: { return _Iter_comp_val<_Compare>(std::move(__comp)); } -23376: -23376: template -23376: struct _Val_comp_iter -23376: { -23376: _Compare _M_comp; -23376: -23376: explicit -23376: _Val_comp_iter(_Compare __comp) -23376: : _M_comp(std::move(__comp)) -23376: { } -23376: -23376: explicit -23376: _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) -23376: : _M_comp(__comp._M_comp) -23376: { } -23376: -23376: -23376: explicit -23376: _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) -23376: : _M_comp(std::move(__comp._M_comp)) -23376: { } -23376: -23376: -23376: template -23376: bool -23376: operator()(_Value& __val, _Iterator __it) -23376: { return bool(_M_comp(__val, *__it)); } -23376: }; -23376: -23376: template -23376: inline _Val_comp_iter<_Compare> -23376: __val_comp_iter(_Compare __comp) -23376: { return _Val_comp_iter<_Compare>(std::move(__comp)); } -23376: -23376: template -23376: inline _Val_comp_iter<_Compare> -23376: __val_comp_iter(_Iter_comp_iter<_Compare> __comp) -23376: { return _Val_comp_iter<_Compare>(std::move(__comp)); } -23376: -23376: template -23376: struct _Iter_equals_val -23376: { -23376: _Value& _M_value; -23376: -23376: explicit -23376: _Iter_equals_val(_Value& __value) -23376: : _M_value(__value) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it) -23376: { return *__it == _M_value; } -23376: }; -23376: -23376: template -23376: inline _Iter_equals_val<_Value> -23376: __iter_equals_val(_Value& __val) -23376: { return _Iter_equals_val<_Value>(__val); } -23376: -23376: template -23376: struct _Iter_equals_iter -23376: { -23376: _Iterator1 _M_it1; -23376: -23376: explicit -23376: _Iter_equals_iter(_Iterator1 __it1) -23376: : _M_it1(__it1) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator2 __it2) -23376: { return *__it2 == *_M_it1; } -23376: }; -23376: -23376: template -23376: inline _Iter_equals_iter<_Iterator> -23376: __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) -23376: { return _Iter_equals_iter<_Iterator>(__it); } -23376: -23376: template -23376: struct _Iter_pred -23376: { -23376: _Predicate _M_pred; -23376: -23376: explicit -23376: _Iter_pred(_Predicate __pred) -23376: : _M_pred(std::move(__pred)) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it) -23376: { return bool(_M_pred(*__it)); } -23376: }; -23376: -23376: template -23376: inline _Iter_pred<_Predicate> -23376: __pred_iter(_Predicate __pred) -23376: { return _Iter_pred<_Predicate>(std::move(__pred)); } -23376: -23376: template -23376: struct _Iter_comp_to_val -23376: { -23376: _Compare _M_comp; -23376: _Value& _M_value; -23376: -23376: _Iter_comp_to_val(_Compare __comp, _Value& __value) -23376: : _M_comp(std::move(__comp)), _M_value(__value) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it) -23376: { return bool(_M_comp(*__it, _M_value)); } -23376: }; -23376: -23376: template -23376: _Iter_comp_to_val<_Compare, _Value> -23376: __iter_comp_val(_Compare __comp, _Value &__val) -23376: { -23376: return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val); -23376: } -23376: -23376: template -23376: struct _Iter_comp_to_iter -23376: { -23376: _Compare _M_comp; -23376: _Iterator1 _M_it1; -23376: -23376: _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) -23376: : _M_comp(std::move(__comp)), _M_it1(__it1) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator2 __it2) -23376: { return bool(_M_comp(*__it2, *_M_it1)); } -23376: }; -23376: -23376: template -23376: inline _Iter_comp_to_iter<_Compare, _Iterator> -23376: __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) -23376: { -23376: return _Iter_comp_to_iter<_Compare, _Iterator>( -23376: std::move(__comp._M_comp), __it); -23376: } -23376: -23376: template -23376: struct _Iter_negate -23376: { -23376: _Predicate _M_pred; -23376: -23376: explicit -23376: _Iter_negate(_Predicate __pred) -23376: : _M_pred(std::move(__pred)) -23376: { } -23376: -23376: template -23376: bool -23376: operator()(_Iterator __it) -23376: { return !bool(_M_pred(*__it)); } -23376: }; -23376: -23376: template -23376: inline _Iter_negate<_Predicate> -23376: __negate(_Iter_pred<_Predicate> __pred) -23376: { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); } -23376: -23376: } -23376: } -23376: # 72 "/usr/include/c++/8/bits/stl_algobase.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 118 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline void -23376: iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) -23376: { -23376: -23376: -23376: -23376: -23376: # 148 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: swap(*__a, *__b); -23376: -23376: } -23376: # 164 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: _ForwardIterator2 -23376: swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first1 != __last1; ++__first1, (void)++__first2) -23376: std::iter_swap(__first1, __first2); -23376: return __first2; -23376: } -23376: # 192 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: constexpr -23376: inline const _Tp& -23376: min(const _Tp& __a, const _Tp& __b) -23376: { -23376: -23376: -23376: -23376: if (__b < __a) -23376: return __b; -23376: return __a; -23376: } -23376: # 216 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: constexpr -23376: inline const _Tp& -23376: max(const _Tp& __a, const _Tp& __b) -23376: { -23376: -23376: -23376: -23376: if (__a < __b) -23376: return __b; -23376: return __a; -23376: } -23376: # 240 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: constexpr -23376: inline const _Tp& -23376: min(const _Tp& __a, const _Tp& __b, _Compare __comp) -23376: { -23376: -23376: if (__comp(__b, __a)) -23376: return __b; -23376: return __a; -23376: } -23376: # 262 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: constexpr -23376: inline const _Tp& -23376: max(const _Tp& __a, const _Tp& __b, _Compare __comp) -23376: { -23376: -23376: if (__comp(__a, __b)) -23376: return __b; -23376: return __a; -23376: } -23376: -23376: -23376: -23376: template -23376: inline _Iterator -23376: __niter_base(_Iterator __it) -23376: { return __it; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __copy_move -23376: { -23376: template -23376: static _OI -23376: __copy_m(_II __first, _II __last, _OI __result) -23376: { -23376: for (; __first != __last; ++__result, (void)++__first) -23376: *__result = *__first; -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct __copy_move -23376: { -23376: template -23376: static _OI -23376: __copy_m(_II __first, _II __last, _OI __result) -23376: { -23376: for (; __first != __last; ++__result, (void)++__first) -23376: *__result = std::move(*__first); -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct __copy_move -23376: { -23376: template -23376: static _OI -23376: __copy_m(_II __first, _II __last, _OI __result) -23376: { -23376: typedef typename iterator_traits<_II>::difference_type _Distance; -23376: for(_Distance __n = __last - __first; __n > 0; --__n) -23376: { -23376: *__result = *__first; -23376: ++__first; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct __copy_move -23376: { -23376: template -23376: static _OI -23376: __copy_m(_II __first, _II __last, _OI __result) -23376: { -23376: typedef typename iterator_traits<_II>::difference_type _Distance; -23376: for(_Distance __n = __last - __first; __n > 0; --__n) -23376: { -23376: *__result = std::move(*__first); -23376: ++__first; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct __copy_move<_IsMove, true, random_access_iterator_tag> -23376: { -23376: template -23376: static _Tp* -23376: __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) -23376: { -23376: -23376: using __assignable = conditional<_IsMove, -23376: is_move_assignable<_Tp>, -23376: is_copy_assignable<_Tp>>; -23376: -23376: static_assert( __assignable::type::value, "type is not assignable" ); -23376: -23376: const ptrdiff_t _Num = __last - __first; -23376: if (_Num) -23376: __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); -23376: return __result + _Num; -23376: } -23376: }; -23376: -23376: template -23376: inline _OI -23376: __copy_move_a(_II __first, _II __last, _OI __result) -23376: { -23376: typedef typename iterator_traits<_II>::value_type _ValueTypeI; -23376: typedef typename iterator_traits<_OI>::value_type _ValueTypeO; -23376: typedef typename iterator_traits<_II>::iterator_category _Category; -23376: const bool __simple = (__is_trivial(_ValueTypeI) -23376: && __is_pointer<_II>::__value -23376: && __is_pointer<_OI>::__value -23376: && __are_same<_ValueTypeI, _ValueTypeO>::__value); -23376: -23376: return std::__copy_move<_IsMove, __simple, -23376: _Category>::__copy_m(__first, __last, __result); -23376: } -23376: -23376: -23376: -23376: template -23376: struct char_traits; -23376: -23376: template -23376: class istreambuf_iterator; -23376: -23376: template -23376: class ostreambuf_iterator; -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type -23376: __copy_move_a2(_CharT*, _CharT*, -23376: ostreambuf_iterator<_CharT, char_traits<_CharT> >); -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type -23376: __copy_move_a2(const _CharT*, const _CharT*, -23376: ostreambuf_iterator<_CharT, char_traits<_CharT> >); -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: _CharT*>::__type -23376: __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, -23376: istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); -23376: -23376: template -23376: inline _OI -23376: __copy_move_a2(_II __first, _II __last, _OI __result) -23376: { -23376: return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first), -23376: std::__niter_base(__last), -23376: std::__niter_base(__result))); -23376: } -23376: # 444 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _OI -23376: copy(_II __first, _II __last, _OI __result) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return (std::__copy_move_a2<__is_move_iterator<_II>::__value> -23376: (std::__miter_base(__first), std::__miter_base(__last), -23376: __result)); -23376: } -23376: # 477 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _OI -23376: move(_II __first, _II __last, _OI __result) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__copy_move_a2(std::__miter_base(__first), -23376: std::__miter_base(__last), __result); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __copy_move_backward -23376: { -23376: template -23376: static _BI2 -23376: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: while (__first != __last) -23376: *--__result = *--__last; -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct __copy_move_backward -23376: { -23376: template -23376: static _BI2 -23376: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: while (__first != __last) -23376: *--__result = std::move(*--__last); -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct __copy_move_backward -23376: { -23376: template -23376: static _BI2 -23376: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: typename iterator_traits<_BI1>::difference_type __n; -23376: for (__n = __last - __first; __n > 0; --__n) -23376: *--__result = *--__last; -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct __copy_move_backward -23376: { -23376: template -23376: static _BI2 -23376: __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: typename iterator_traits<_BI1>::difference_type __n; -23376: for (__n = __last - __first; __n > 0; --__n) -23376: *--__result = std::move(*--__last); -23376: return __result; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> -23376: { -23376: template -23376: static _Tp* -23376: __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) -23376: { -23376: -23376: using __assignable = conditional<_IsMove, -23376: is_move_assignable<_Tp>, -23376: is_copy_assignable<_Tp>>; -23376: -23376: static_assert( __assignable::type::value, "type is not assignable" ); -23376: -23376: const ptrdiff_t _Num = __last - __first; -23376: if (_Num) -23376: __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); -23376: return __result - _Num; -23376: } -23376: }; -23376: -23376: template -23376: inline _BI2 -23376: __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: typedef typename iterator_traits<_BI1>::value_type _ValueType1; -23376: typedef typename iterator_traits<_BI2>::value_type _ValueType2; -23376: typedef typename iterator_traits<_BI1>::iterator_category _Category; -23376: const bool __simple = (__is_trivial(_ValueType1) -23376: && __is_pointer<_BI1>::__value -23376: && __is_pointer<_BI2>::__value -23376: && __are_same<_ValueType1, _ValueType2>::__value); -23376: -23376: return std::__copy_move_backward<_IsMove, __simple, -23376: _Category>::__copy_move_b(__first, -23376: __last, -23376: __result); -23376: } -23376: -23376: template -23376: inline _BI2 -23376: __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: return _BI2(std::__copy_move_backward_a<_IsMove> -23376: (std::__niter_base(__first), std::__niter_base(__last), -23376: std::__niter_base(__result))); -23376: } -23376: # 620 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _BI2 -23376: copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value> -23376: (std::__miter_base(__first), std::__miter_base(__last), -23376: __result)); -23376: } -23376: # 656 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _BI2 -23376: move_backward(_BI1 __first, _BI1 __last, _BI2 __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__copy_move_backward_a2(std::__miter_base(__first), -23376: std::__miter_base(__last), -23376: __result); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if::__value, void>::__type -23376: __fill_a(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __value) -23376: { -23376: for (; __first != __last; ++__first) -23376: *__first = __value; -23376: } -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type -23376: __fill_a(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __value) -23376: { -23376: const _Tp __tmp = __value; -23376: for (; __first != __last; ++__first) -23376: *__first = __tmp; -23376: } -23376: -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type -23376: __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c) -23376: { -23376: const _Tp __tmp = __c; -23376: if (const size_t __len = __last - __first) -23376: __builtin_memset(__first, static_cast(__tmp), __len); -23376: } -23376: # 722 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline void -23376: fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: std::__fill_a(std::__niter_base(__first), std::__niter_base(__last), -23376: __value); -23376: } -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if::__value, _OutputIterator>::__type -23376: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) -23376: { -23376: for (__decltype(__n + 0) __niter = __n; -23376: __niter > 0; --__niter, (void) ++__first) -23376: *__first = __value; -23376: return __first; -23376: } -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type -23376: __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) -23376: { -23376: const _Tp __tmp = __value; -23376: for (__decltype(__n + 0) __niter = __n; -23376: __niter > 0; --__niter, (void) ++__first) -23376: *__first = __tmp; -23376: return __first; -23376: } -23376: -23376: template -23376: inline typename -23376: __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type -23376: __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c) -23376: { -23376: std::__fill_a(__first, __first + __n, __c); -23376: return __first + __n; -23376: } -23376: # 782 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _OI -23376: fill_n(_OI __first, _Size __n, const _Tp& __value) -23376: { -23376: -23376: -23376: -23376: return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value)); -23376: } -23376: -23376: template -23376: struct __equal -23376: { -23376: template -23376: static bool -23376: equal(_II1 __first1, _II1 __last1, _II2 __first2) -23376: { -23376: for (; __first1 != __last1; ++__first1, (void) ++__first2) -23376: if (!(*__first1 == *__first2)) -23376: return false; -23376: return true; -23376: } -23376: }; -23376: -23376: template<> -23376: struct __equal -23376: { -23376: template -23376: static bool -23376: equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) -23376: { -23376: if (const size_t __len = (__last1 - __first1)) -23376: return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len); -23376: return true; -23376: } -23376: }; -23376: -23376: template -23376: inline bool -23376: __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) -23376: { -23376: typedef typename iterator_traits<_II1>::value_type _ValueType1; -23376: typedef typename iterator_traits<_II2>::value_type _ValueType2; -23376: const bool __simple = ((__is_integer<_ValueType1>::__value -23376: || __is_pointer<_ValueType1>::__value) -23376: && __is_pointer<_II1>::__value -23376: && __is_pointer<_II2>::__value -23376: && __are_same<_ValueType1, _ValueType2>::__value); -23376: -23376: return std::__equal<__simple>::equal(__first1, __last1, __first2); -23376: } -23376: -23376: template -23376: struct __lc_rai -23376: { -23376: template -23376: static _II1 -23376: __newlast1(_II1, _II1 __last1, _II2, _II2) -23376: { return __last1; } -23376: -23376: template -23376: static bool -23376: __cnd2(_II __first, _II __last) -23376: { return __first != __last; } -23376: }; -23376: -23376: template<> -23376: struct __lc_rai -23376: { -23376: template -23376: static _RAI1 -23376: __newlast1(_RAI1 __first1, _RAI1 __last1, -23376: _RAI2 __first2, _RAI2 __last2) -23376: { -23376: const typename iterator_traits<_RAI1>::difference_type -23376: __diff1 = __last1 - __first1; -23376: const typename iterator_traits<_RAI2>::difference_type -23376: __diff2 = __last2 - __first2; -23376: return __diff2 < __diff1 ? __first1 + __diff2 : __last1; -23376: } -23376: -23376: template -23376: static bool -23376: __cnd2(_RAI, _RAI) -23376: { return true; } -23376: }; -23376: -23376: template -23376: bool -23376: __lexicographical_compare_impl(_II1 __first1, _II1 __last1, -23376: _II2 __first2, _II2 __last2, -23376: _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_II1>::iterator_category _Category1; -23376: typedef typename iterator_traits<_II2>::iterator_category _Category2; -23376: typedef std::__lc_rai<_Category1, _Category2> __rai_type; -23376: -23376: __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); -23376: for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); -23376: ++__first1, (void)++__first2) -23376: { -23376: if (__comp(__first1, __first2)) -23376: return true; -23376: if (__comp(__first2, __first1)) -23376: return false; -23376: } -23376: return __first1 == __last1 && __first2 != __last2; -23376: } -23376: -23376: template -23376: struct __lexicographical_compare -23376: { -23376: template -23376: static bool __lc(_II1, _II1, _II2, _II2); -23376: }; -23376: -23376: template -23376: template -23376: bool -23376: __lexicographical_compare<_BoolType>:: -23376: __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) -23376: { -23376: return std::__lexicographical_compare_impl(__first1, __last1, -23376: __first2, __last2, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: -23376: template<> -23376: struct __lexicographical_compare -23376: { -23376: template -23376: static bool -23376: __lc(const _Tp* __first1, const _Tp* __last1, -23376: const _Up* __first2, const _Up* __last2) -23376: { -23376: const size_t __len1 = __last1 - __first1; -23376: const size_t __len2 = __last2 - __first2; -23376: if (const size_t __len = std::min(__len1, __len2)) -23376: if (int __result = __builtin_memcmp(__first1, __first2, __len)) -23376: return __result < 0; -23376: return __len1 < __len2; -23376: } -23376: }; -23376: -23376: template -23376: inline bool -23376: __lexicographical_compare_aux(_II1 __first1, _II1 __last1, -23376: _II2 __first2, _II2 __last2) -23376: { -23376: typedef typename iterator_traits<_II1>::value_type _ValueType1; -23376: typedef typename iterator_traits<_II2>::value_type _ValueType2; -23376: const bool __simple = -23376: (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value -23376: && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed -23376: && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed -23376: && __is_pointer<_II1>::__value -23376: && __is_pointer<_II2>::__value); -23376: -23376: return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, -23376: __first2, __last2); -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __lower_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::difference_type -23376: _DistanceType; -23376: -23376: _DistanceType __len = std::distance(__first, __last); -23376: -23376: while (__len > 0) -23376: { -23376: _DistanceType __half = __len >> 1; -23376: _ForwardIterator __middle = __first; -23376: std::advance(__middle, __half); -23376: if (__comp(__middle, __val)) -23376: { -23376: __first = __middle; -23376: ++__first; -23376: __len = __len - __half - 1; -23376: } -23376: else -23376: __len = __half; -23376: } -23376: return __first; -23376: } -23376: # 982 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline _ForwardIterator -23376: lower_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__lower_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_less_val()); -23376: } -23376: -23376: -23376: -23376: inline constexpr int -23376: __lg(int __n) -23376: { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } -23376: -23376: inline constexpr unsigned -23376: __lg(unsigned __n) -23376: { return sizeof(int) * 8 - 1 - __builtin_clz(__n); } -23376: -23376: inline constexpr long -23376: __lg(long __n) -23376: { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } -23376: -23376: inline constexpr unsigned long -23376: __lg(unsigned long __n) -23376: { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); } -23376: -23376: inline constexpr long long -23376: __lg(long long __n) -23376: { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } -23376: -23376: inline constexpr unsigned long long -23376: __lg(unsigned long long __n) -23376: { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } -23376: -23376: -23376: # 1037 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: equal(_II1 __first1, _II1 __last1, _II2 __first2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__equal_aux(std::__niter_base(__first1), -23376: std::__niter_base(__last1), -23376: std::__niter_base(__first2)); -23376: } -23376: # 1069 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: equal(_IIter1 __first1, _IIter1 __last1, -23376: _IIter2 __first2, _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first1 != __last1; ++__first1, (void)++__first2) -23376: if (!bool(__binary_pred(*__first1, *__first2))) -23376: return false; -23376: return true; -23376: } -23376: -23376: -23376: -23376: template -23376: inline bool -23376: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) -23376: { -23376: using _RATag = random_access_iterator_tag; -23376: using _Cat1 = typename iterator_traits<_II1>::iterator_category; -23376: using _Cat2 = typename iterator_traits<_II2>::iterator_category; -23376: using _RAIters = __and_, is_same<_Cat2, _RATag>>; -23376: if (_RAIters()) -23376: { -23376: auto __d1 = std::distance(__first1, __last1); -23376: auto __d2 = std::distance(__first2, __last2); -23376: if (__d1 != __d2) -23376: return false; -23376: return std::equal(__first1, __last1, __first2); -23376: } -23376: -23376: for (; __first1 != __last1 && __first2 != __last2; -23376: ++__first1, (void)++__first2) -23376: if (!(*__first1 == *__first2)) -23376: return false; -23376: return __first1 == __last1 && __first2 == __last2; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: using _RATag = random_access_iterator_tag; -23376: using _Cat1 = typename iterator_traits<_II1>::iterator_category; -23376: using _Cat2 = typename iterator_traits<_II2>::iterator_category; -23376: using _RAIters = __and_, is_same<_Cat2, _RATag>>; -23376: if (_RAIters()) -23376: { -23376: auto __d1 = std::distance(__first1, __last1); -23376: auto __d2 = std::distance(__first2, __last2); -23376: if (__d1 != __d2) -23376: return false; -23376: return std::equal(__first1, __last1, __first2, -23376: __binary_pred); -23376: } -23376: -23376: for (; __first1 != __last1 && __first2 != __last2; -23376: ++__first1, (void)++__first2) -23376: if (!bool(__binary_pred(*__first1, *__first2))) -23376: return false; -23376: return __first1 == __last1 && __first2 == __last2; -23376: } -23376: # 1156 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__equal4(__first1, __last1, __first2, __last2); -23376: } -23376: # 1188 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: equal(_IIter1 __first1, _IIter1 __last1, -23376: _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__equal4(__first1, __last1, __first2, __last2, -23376: __binary_pred); -23376: } -23376: # 1219 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: lexicographical_compare(_II1 __first1, _II1 __last1, -23376: _II2 __first2, _II2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__lexicographical_compare_aux(std::__niter_base(__first1), -23376: std::__niter_base(__last1), -23376: std::__niter_base(__first2), -23376: std::__niter_base(__last2)); -23376: } -23376: # 1255 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline bool -23376: lexicographical_compare(_II1 __first1, _II1 __last1, -23376: _II2 __first2, _II2 __last2, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__lexicographical_compare_impl -23376: (__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: pair<_InputIterator1, _InputIterator2> -23376: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _BinaryPredicate __binary_pred) -23376: { -23376: while (__first1 != __last1 && __binary_pred(__first1, __first2)) -23376: { -23376: ++__first1; -23376: ++__first2; -23376: } -23376: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); -23376: } -23376: # 1298 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline pair<_InputIterator1, _InputIterator2> -23376: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__mismatch(__first1, __last1, __first2, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 1331 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline pair<_InputIterator1, _InputIterator2> -23376: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__mismatch(__first1, __last1, __first2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); -23376: } -23376: -23376: -23376: -23376: template -23376: pair<_InputIterator1, _InputIterator2> -23376: __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2 -23376: && __binary_pred(__first1, __first2)) -23376: { -23376: ++__first1; -23376: ++__first2; -23376: } -23376: return pair<_InputIterator1, _InputIterator2>(__first1, __first2); -23376: } -23376: # 1378 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline pair<_InputIterator1, _InputIterator2> -23376: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__mismatch(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 1413 "/usr/include/c++/8/bits/stl_algobase.h" 3 -23376: template -23376: inline pair<_InputIterator1, _InputIterator2> -23376: mismatch(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__mismatch(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 62 "/usr/include/c++/8/algorithm" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_algo.h" 1 3 -23376: # 59 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: # 1 "/usr/include/c++/8/cstdlib" 1 3 -23376: # 39 "/usr/include/c++/8/cstdlib" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdlib" 3 -23376: # 75 "/usr/include/c++/8/cstdlib" 3 -23376: # 1 "/usr/include/stdlib.h" 1 3 4 -23376: # 25 "/usr/include/stdlib.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 26 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 32 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitflags.h" 1 3 4 -23376: # 52 "/usr/include/arm-linux-gnueabihf/bits/waitflags.h" 3 4 -23376: typedef enum -23376: { -23376: P_ALL, -23376: P_PID, -23376: P_PGID -23376: } idtype_t; -23376: # 40 "/usr/include/stdlib.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/waitstatus.h" 1 3 4 -23376: # 41 "/usr/include/stdlib.h" 2 3 4 -23376: # 55 "/usr/include/stdlib.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 -23376: # 56 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: typedef struct -23376: { -23376: int quot; -23376: int rem; -23376: } div_t; -23376: -23376: -23376: -23376: typedef struct -23376: { -23376: long int quot; -23376: long int rem; -23376: } ldiv_t; -23376: -23376: -23376: -23376: -23376: -23376: __extension__ typedef struct -23376: { -23376: long long int quot; -23376: long long int rem; -23376: } lldiv_t; -23376: # 97 "/usr/include/stdlib.h" 3 4 -23376: extern size_t __ctype_get_mb_cur_max (void) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern double atof (const char *__nptr) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern int atoi (const char *__nptr) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern long int atol (const char *__nptr) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: __extension__ extern long long int atoll (const char *__nptr) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern double strtod (const char *__restrict __nptr, -23376: char **__restrict __endptr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern float strtof (const char *__restrict __nptr, -23376: char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: extern long double strtold (const char *__restrict __nptr, -23376: char **__restrict __endptr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 140 "/usr/include/stdlib.h" 3 4 -23376: extern _Float32 strtof32 (const char *__restrict __nptr, -23376: char **__restrict __endptr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern _Float64 strtof64 (const char *__restrict __nptr, -23376: char **__restrict __endptr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 158 "/usr/include/stdlib.h" 3 4 -23376: extern _Float32x strtof32x (const char *__restrict __nptr, -23376: char **__restrict __endptr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 176 "/usr/include/stdlib.h" 3 4 -23376: extern long int strtol (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: extern unsigned long int strtoul (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: __extension__ -23376: extern long long int strtoq (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: __extension__ -23376: extern unsigned long long int strtouq (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: __extension__ -23376: extern long long int strtoll (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: __extension__ -23376: extern unsigned long long int strtoull (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: extern int strfromd (char *__dest, size_t __size, const char *__format, -23376: double __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: -23376: extern int strfromf (char *__dest, size_t __size, const char *__format, -23376: float __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: -23376: extern int strfroml (char *__dest, size_t __size, const char *__format, -23376: long double __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: # 232 "/usr/include/stdlib.h" 3 4 -23376: extern int strfromf32 (char *__dest, size_t __size, const char * __format, -23376: _Float32 __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: -23376: -23376: -23376: extern int strfromf64 (char *__dest, size_t __size, const char * __format, -23376: _Float64 __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: # 250 "/usr/include/stdlib.h" 3 4 -23376: extern int strfromf32x (char *__dest, size_t __size, const char * __format, -23376: _Float32x __f) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: # 274 "/usr/include/stdlib.h" 3 4 -23376: extern long int strtol_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base, -23376: locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: extern unsigned long int strtoul_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: int __base, locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: __extension__ -23376: extern long long int strtoll_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, int __base, -23376: locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: __extension__ -23376: extern unsigned long long int strtoull_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: int __base, locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: extern double strtod_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: extern float strtof_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: extern long double strtold_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: # 316 "/usr/include/stdlib.h" 3 4 -23376: extern _Float32 strtof32_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: -23376: extern _Float64 strtof64_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: # 337 "/usr/include/stdlib.h" 3 4 -23376: extern _Float32x strtof32x_l (const char *__restrict __nptr, -23376: char **__restrict __endptr, -23376: locale_t __loc) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: # 360 "/usr/include/stdlib.h" 3 4 -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: __attribute__ ((__leaf__)) atoi (const char *__nptr) throw () -23376: { -23376: return (int) strtol (__nptr, (char **) __null, 10); -23376: } -23376: extern __inline __attribute__ ((__gnu_inline__)) long int -23376: __attribute__ ((__leaf__)) atol (const char *__nptr) throw () -23376: { -23376: return strtol (__nptr, (char **) __null, 10); -23376: } -23376: -23376: -23376: __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int -23376: __attribute__ ((__leaf__)) atoll (const char *__nptr) throw () -23376: { -23376: return strtoll (__nptr, (char **) __null, 10); -23376: } -23376: # 385 "/usr/include/stdlib.h" 3 4 -23376: extern char *l64a (long int __n) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: extern long int a64l (const char *__s) -23376: throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/sys/types.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: -23376: typedef __u_char u_char; -23376: typedef __u_short u_short; -23376: typedef __u_int u_int; -23376: typedef __u_long u_long; -23376: typedef __quad_t quad_t; -23376: typedef __u_quad_t u_quad_t; -23376: typedef __fsid_t fsid_t; -23376: -23376: -23376: typedef __loff_t loff_t; -23376: -23376: -23376: -23376: -23376: typedef __ino_t ino_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __ino64_t ino64_t; -23376: -23376: -23376: -23376: -23376: typedef __dev_t dev_t; -23376: -23376: -23376: -23376: -23376: typedef __gid_t gid_t; -23376: -23376: -23376: -23376: -23376: typedef __mode_t mode_t; -23376: -23376: -23376: -23376: -23376: typedef __nlink_t nlink_t; -23376: -23376: -23376: -23376: -23376: typedef __uid_t uid_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef __off_t off_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __off64_t off64_t; -23376: -23376: -23376: -23376: -23376: typedef __pid_t pid_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef __id_t id_t; -23376: -23376: -23376: -23376: -23376: typedef __ssize_t ssize_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef __daddr_t daddr_t; -23376: typedef __caddr_t caddr_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef __key_t key_t; -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clock_t.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __clock_t clock_t; -23376: # 127 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/clockid_t.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __clockid_t clockid_t; -23376: # 129 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/time_t.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __time_t time_t; -23376: # 130 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/timer_t.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __timer_t timer_t; -23376: # 131 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: -23376: -23376: typedef __useconds_t useconds_t; -23376: -23376: -23376: -23376: typedef __suseconds_t suseconds_t; -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 145 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: -23376: -23376: typedef unsigned long int ulong; -23376: typedef unsigned short int ushort; -23376: typedef unsigned int uint; -23376: # 177 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 -23376: typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__))); -23376: typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__))); -23376: typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__))); -23376: typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__))); -23376: -23376: typedef int register_t __attribute__ ((__mode__ (__word__))); -23376: # 193 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 -23376: # 1 "/usr/include/endian.h" 1 3 4 -23376: # 36 "/usr/include/endian.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/endian.h" 1 3 4 -23376: # 37 "/usr/include/endian.h" 2 3 4 -23376: # 60 "/usr/include/endian.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 1 3 4 -23376: # 33 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 -23376: static __inline __uint16_t -23376: __bswap_16 (__uint16_t __bsx) -23376: { -23376: -23376: return __builtin_bswap16 (__bsx); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: static __inline __uint32_t -23376: __bswap_32 (__uint32_t __bsx) -23376: { -23376: -23376: return __builtin_bswap32 (__bsx); -23376: -23376: -23376: -23376: } -23376: # 69 "/usr/include/arm-linux-gnueabihf/bits/byteswap.h" 3 4 -23376: __extension__ static __inline __uint64_t -23376: __bswap_64 (__uint64_t __bsx) -23376: { -23376: -23376: return __builtin_bswap64 (__bsx); -23376: -23376: -23376: -23376: } -23376: # 61 "/usr/include/endian.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 1 3 4 -23376: # 32 "/usr/include/arm-linux-gnueabihf/bits/uintn-identity.h" 3 4 -23376: static __inline __uint16_t -23376: __uint16_identity (__uint16_t __x) -23376: { -23376: return __x; -23376: } -23376: -23376: static __inline __uint32_t -23376: __uint32_identity (__uint32_t __x) -23376: { -23376: return __x; -23376: } -23376: -23376: static __inline __uint64_t -23376: __uint64_identity (__uint64_t __x) -23376: { -23376: return __x; -23376: } -23376: # 62 "/usr/include/endian.h" 2 3 4 -23376: # 194 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/sys/select.h" 1 3 4 -23376: # 30 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/select.h" 1 3 4 -23376: # 31 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 1 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__sigset_t.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: typedef struct -23376: { -23376: unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; -23376: } __sigset_t; -23376: # 5 "/usr/include/arm-linux-gnueabihf/bits/types/sigset_t.h" 2 3 4 -23376: -23376: -23376: typedef __sigset_t sigset_t; -23376: # 34 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timeval.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct timeval -23376: { -23376: __time_t tv_sec; -23376: __suseconds_t tv_usec; -23376: }; -23376: # 38 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 1 3 4 -23376: # 9 "/usr/include/arm-linux-gnueabihf/bits/types/struct_timespec.h" 3 4 -23376: struct timespec -23376: { -23376: __time_t tv_sec; -23376: __syscall_slong_t tv_nsec; -23376: }; -23376: # 40 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 -23376: # 49 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: typedef long int __fd_mask; -23376: # 59 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: typedef struct -23376: { -23376: -23376: -23376: -23376: __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; -23376: -23376: -23376: -23376: -23376: -23376: } fd_set; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __fd_mask fd_mask; -23376: # 91 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: extern "C" { -23376: # 101 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: extern int select (int __nfds, fd_set *__restrict __readfds, -23376: fd_set *__restrict __writefds, -23376: fd_set *__restrict __exceptfds, -23376: struct timeval *__restrict __timeout); -23376: # 113 "/usr/include/arm-linux-gnueabihf/sys/select.h" 3 4 -23376: extern int pselect (int __nfds, fd_set *__restrict __readfds, -23376: fd_set *__restrict __writefds, -23376: fd_set *__restrict __exceptfds, -23376: const struct timespec *__restrict __timeout, -23376: const __sigset_t *__restrict __sigmask); -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/select2.h" 3 4 -23376: extern long int __fdelt_chk (long int __d); -23376: extern long int __fdelt_warn (long int __d) -23376: __attribute__((__warning__ ("bit outside of fd_set selected"))); -23376: # 124 "/usr/include/arm-linux-gnueabihf/sys/select.h" 2 3 4 -23376: -23376: -23376: } -23376: # 197 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: typedef __blksize_t blksize_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __blkcnt_t blkcnt_t; -23376: -23376: -23376: -23376: typedef __fsblkcnt_t fsblkcnt_t; -23376: -23376: -23376: -23376: typedef __fsfilcnt_t fsfilcnt_t; -23376: # 236 "/usr/include/arm-linux-gnueabihf/sys/types.h" 3 4 -23376: typedef __blkcnt64_t blkcnt64_t; -23376: typedef __fsblkcnt64_t fsblkcnt64_t; -23376: typedef __fsfilcnt64_t fsfilcnt64_t; -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 1 3 4 -23376: # 23 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 1 3 4 -23376: # 77 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 1 3 4 -23376: # 43 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 3 4 -23376: struct __pthread_rwlock_arch_t -23376: { -23376: unsigned int __readers; -23376: unsigned int __writers; -23376: unsigned int __wrphase_futex; -23376: unsigned int __writers_futex; -23376: unsigned int __pad3; -23376: unsigned int __pad4; -23376: # 61 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes-arch.h" 3 4 -23376: unsigned char __flags; -23376: unsigned char __shared; -23376: unsigned char __pad1; -23376: unsigned char __pad2; -23376: -23376: int __cur_writer; -23376: }; -23376: # 78 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 2 3 4 -23376: # 88 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 -23376: typedef struct __pthread_internal_slist -23376: { -23376: struct __pthread_internal_slist *__next; -23376: } __pthread_slist_t; -23376: # 118 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 -23376: struct __pthread_mutex_s -23376: { -23376: int __lock ; -23376: unsigned int __count; -23376: int __owner; -23376: # 148 "/usr/include/arm-linux-gnueabihf/bits/thread-shared-types.h" 3 4 -23376: int __kind; -23376: -23376: -23376: unsigned int __nusers; -23376: -23376: -23376: -23376: -23376: -23376: -23376: __extension__ union -23376: { -23376: int __spins; -23376: __pthread_slist_t __list; -23376: }; -23376: -23376: -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: struct __pthread_cond_s -23376: { -23376: __extension__ union -23376: { -23376: __extension__ unsigned long long int __wseq; -23376: struct -23376: { -23376: unsigned int __low; -23376: unsigned int __high; -23376: } __wseq32; -23376: }; -23376: __extension__ union -23376: { -23376: __extension__ unsigned long long int __g1_start; -23376: struct -23376: { -23376: unsigned int __low; -23376: unsigned int __high; -23376: } __g1_start32; -23376: }; -23376: unsigned int __g_refs[2] ; -23376: unsigned int __g_size[2]; -23376: unsigned int __g1_orig_size; -23376: unsigned int __wrefs; -23376: unsigned int __g_signals[2]; -23376: }; -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/pthreadtypes.h" 2 3 4 -23376: -23376: -23376: -23376: typedef unsigned long int pthread_t; -23376: -23376: -23376: -23376: -23376: typedef union -23376: { -23376: char __size[4]; -23376: int __align; -23376: } pthread_mutexattr_t; -23376: -23376: -23376: -23376: -23376: typedef union -23376: { -23376: char __size[4]; -23376: int __align; -23376: } pthread_condattr_t; -23376: -23376: -23376: -23376: typedef unsigned int pthread_key_t; -23376: -23376: -23376: -23376: typedef int pthread_once_t; -23376: -23376: -23376: union pthread_attr_t -23376: { -23376: char __size[36]; -23376: long int __align; -23376: }; -23376: -23376: typedef union pthread_attr_t pthread_attr_t; -23376: -23376: -23376: -23376: -23376: typedef union -23376: { -23376: struct __pthread_mutex_s __data; -23376: char __size[24]; -23376: long int __align; -23376: } pthread_mutex_t; -23376: -23376: -23376: typedef union -23376: { -23376: struct __pthread_cond_s __data; -23376: char __size[48]; -23376: __extension__ long long int __align; -23376: } pthread_cond_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef union -23376: { -23376: struct __pthread_rwlock_arch_t __data; -23376: char __size[32]; -23376: long int __align; -23376: } pthread_rwlock_t; -23376: -23376: typedef union -23376: { -23376: char __size[8]; -23376: long int __align; -23376: } pthread_rwlockattr_t; -23376: -23376: -23376: -23376: -23376: -23376: typedef volatile int pthread_spinlock_t; -23376: -23376: -23376: -23376: -23376: typedef union -23376: { -23376: char __size[20]; -23376: long int __align; -23376: } pthread_barrier_t; -23376: -23376: typedef union -23376: { -23376: char __size[4]; -23376: int __align; -23376: } pthread_barrierattr_t; -23376: # 245 "/usr/include/arm-linux-gnueabihf/sys/types.h" 2 3 4 -23376: -23376: -23376: } -23376: # 395 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int random (void) throw (); -23376: -23376: -23376: extern void srandom (unsigned int __seed) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern char *initstate (unsigned int __seed, char *__statebuf, -23376: size_t __statelen) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct random_data -23376: { -23376: int32_t *fptr; -23376: int32_t *rptr; -23376: int32_t *state; -23376: int rand_type; -23376: int rand_deg; -23376: int rand_sep; -23376: int32_t *end_ptr; -23376: }; -23376: -23376: extern int random_r (struct random_data *__restrict __buf, -23376: int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern int srandom_r (unsigned int __seed, struct random_data *__buf) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, -23376: size_t __statelen, -23376: struct random_data *__restrict __buf) -23376: throw () __attribute__ ((__nonnull__ (2, 4))); -23376: -23376: extern int setstate_r (char *__restrict __statebuf, -23376: struct random_data *__restrict __buf) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: -23376: extern int rand (void) throw (); -23376: -23376: extern void srand (unsigned int __seed) throw (); -23376: -23376: -23376: -23376: extern int rand_r (unsigned int *__seed) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double drand48 (void) throw (); -23376: extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern long int lrand48 (void) throw (); -23376: extern long int nrand48 (unsigned short int __xsubi[3]) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern long int mrand48 (void) throw (); -23376: extern long int jrand48 (unsigned short int __xsubi[3]) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern void srand48 (long int __seedval) throw (); -23376: extern unsigned short int *seed48 (unsigned short int __seed16v[3]) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: struct drand48_data -23376: { -23376: unsigned short int __x[3]; -23376: unsigned short int __old_x[3]; -23376: unsigned short int __c; -23376: unsigned short int __init; -23376: __extension__ unsigned long long int __a; -23376: -23376: }; -23376: -23376: -23376: extern int drand48_r (struct drand48_data *__restrict __buffer, -23376: double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern int erand48_r (unsigned short int __xsubi[3], -23376: struct drand48_data *__restrict __buffer, -23376: double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int lrand48_r (struct drand48_data *__restrict __buffer, -23376: long int *__restrict __result) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern int nrand48_r (unsigned short int __xsubi[3], -23376: struct drand48_data *__restrict __buffer, -23376: long int *__restrict __result) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int mrand48_r (struct drand48_data *__restrict __buffer, -23376: long int *__restrict __result) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: extern int jrand48_r (unsigned short int __xsubi[3], -23376: struct drand48_data *__restrict __buffer, -23376: long int *__restrict __result) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int srand48_r (long int __seedval, struct drand48_data *__buffer) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: extern int seed48_r (unsigned short int __seed16v[3], -23376: struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern int lcong48_r (unsigned short int __param[7], -23376: struct drand48_data *__buffer) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern void *calloc (size_t __nmemb, size_t __size) -23376: throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern void *realloc (void *__ptr, size_t __size) -23376: throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) -23376: throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern void free (void *__ptr) throw (); -23376: -23376: -23376: # 1 "/usr/include/alloca.h" 1 3 4 -23376: # 24 "/usr/include/alloca.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 25 "/usr/include/alloca.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: -23376: extern void *alloca (size_t __size) throw (); -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 567 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern void *aligned_alloc (size_t __alignment, size_t __size) -23376: throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern void abort (void) throw () __attribute__ ((__noreturn__)); -23376: -23376: -23376: -23376: extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: extern "C++" int at_quick_exit (void (*__func) (void)) -23376: throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); -23376: # 607 "/usr/include/stdlib.h" 3 4 -23376: extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: extern void exit (int __status) throw () __attribute__ ((__noreturn__)); -23376: -23376: -23376: -23376: -23376: -23376: extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__)); -23376: -23376: -23376: -23376: -23376: -23376: extern void _Exit (int __status) throw () __attribute__ ((__noreturn__)); -23376: -23376: -23376: -23376: -23376: extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern char *secure_getenv (const char *__name) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: extern int setenv (const char *__name, const char *__value, int __replace) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int clearenv (void) throw (); -23376: # 672 "/usr/include/stdlib.h" 3 4 -23376: extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))); -23376: # 685 "/usr/include/stdlib.h" 3 4 -23376: extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 695 "/usr/include/stdlib.h" 3 4 -23376: extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 707 "/usr/include/stdlib.h" 3 4 -23376: extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 717 "/usr/include/stdlib.h" 3 4 -23376: extern int mkstemps64 (char *__template, int __suffixlen) -23376: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 728 "/usr/include/stdlib.h" 3 4 -23376: extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 739 "/usr/include/stdlib.h" 3 4 -23376: extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 749 "/usr/include/stdlib.h" 3 4 -23376: extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 759 "/usr/include/stdlib.h" 3 4 -23376: extern int mkostemps (char *__template, int __suffixlen, int __flags) -23376: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 771 "/usr/include/stdlib.h" 3 4 -23376: extern int mkostemps64 (char *__template, int __suffixlen, int __flags) -23376: __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 781 "/usr/include/stdlib.h" 3 4 -23376: extern int system (const char *__command) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern char *canonicalize_file_name (const char *__name) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 797 "/usr/include/stdlib.h" 3 4 -23376: extern char *realpath (const char *__restrict __name, -23376: char *__restrict __resolved) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef int (*__compar_fn_t) (const void *, const void *); -23376: -23376: -23376: typedef __compar_fn_t comparison_fn_t; -23376: -23376: -23376: -23376: typedef int (*__compar_d_fn_t) (const void *, const void *, void *); -23376: -23376: -23376: -23376: -23376: extern void *bsearch (const void *__key, const void *__base, -23376: size_t __nmemb, size_t __size, __compar_fn_t __compar) -23376: __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 1 3 4 -23376: # 19 "/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h" 3 4 -23376: extern __inline __attribute__ ((__gnu_inline__)) void * -23376: bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, -23376: __compar_fn_t __compar) -23376: { -23376: size_t __l, __u, __idx; -23376: const void *__p; -23376: int __comparison; -23376: -23376: __l = 0; -23376: __u = __nmemb; -23376: while (__l < __u) -23376: { -23376: __idx = (__l + __u) / 2; -23376: __p = (void *) (((const char *) __base) + (__idx * __size)); -23376: __comparison = (*__compar) (__key, __p); -23376: if (__comparison < 0) -23376: __u = __idx; -23376: else if (__comparison > 0) -23376: __l = __idx + 1; -23376: else -23376: return (void *) __p; -23376: } -23376: -23376: return __null; -23376: } -23376: # 823 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: extern void qsort (void *__base, size_t __nmemb, size_t __size, -23376: __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: extern void qsort_r (void *__base, size_t __nmemb, size_t __size, -23376: __compar_d_fn_t __compar, void *__arg) -23376: __attribute__ ((__nonnull__ (1, 4))); -23376: -23376: -23376: -23376: -23376: extern int abs (int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: extern long int labs (long int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: __extension__ extern long long int llabs (long long int __x) -23376: throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern div_t div (int __numer, int __denom) -23376: throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: extern ldiv_t ldiv (long int __numer, long int __denom) -23376: throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: __extension__ extern lldiv_t lldiv (long long int __numer, -23376: long long int __denom) -23376: throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__)); -23376: # 869 "/usr/include/stdlib.h" 3 4 -23376: extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, -23376: int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, -23376: int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern char *gcvt (double __value, int __ndigit, char *__buf) -23376: throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern char *qecvt (long double __value, int __ndigit, -23376: int *__restrict __decpt, int *__restrict __sign) -23376: throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); -23376: extern char *qfcvt (long double __value, int __ndigit, -23376: int *__restrict __decpt, int *__restrict __sign) -23376: throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__)); -23376: extern char *qgcvt (long double __value, int __ndigit, char *__buf) -23376: throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, -23376: int *__restrict __sign, char *__restrict __buf, -23376: size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); -23376: extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, -23376: int *__restrict __sign, char *__restrict __buf, -23376: size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); -23376: -23376: extern int qecvt_r (long double __value, int __ndigit, -23376: int *__restrict __decpt, int *__restrict __sign, -23376: char *__restrict __buf, size_t __len) -23376: throw () __attribute__ ((__nonnull__ (3, 4, 5))); -23376: extern int qfcvt_r (long double __value, int __ndigit, -23376: int *__restrict __decpt, int *__restrict __sign, -23376: char *__restrict __buf, size_t __len) -23376: throw () __attribute__ ((__nonnull__ (3, 4, 5))); -23376: -23376: -23376: -23376: -23376: -23376: extern int mblen (const char *__s, size_t __n) throw (); -23376: -23376: -23376: extern int mbtowc (wchar_t *__restrict __pwc, -23376: const char *__restrict __s, size_t __n) throw (); -23376: -23376: -23376: extern int wctomb (char *__s, wchar_t __wchar) throw (); -23376: -23376: -23376: -23376: extern size_t mbstowcs (wchar_t *__restrict __pwcs, -23376: const char *__restrict __s, size_t __n) throw (); -23376: -23376: extern size_t wcstombs (char *__restrict __s, -23376: const wchar_t *__restrict __pwcs, size_t __n) -23376: throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__)); -23376: # 954 "/usr/include/stdlib.h" 3 4 -23376: extern int getsubopt (char **__restrict __optionp, -23376: char *const *__restrict __tokens, -23376: char **__restrict __valuep) -23376: throw () __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int grantpt (int __fd) throw (); -23376: -23376: -23376: -23376: extern int unlockpt (int __fd) throw (); -23376: -23376: -23376: -23376: -23376: extern char *ptsname (int __fd) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int ptsname_r (int __fd, char *__buf, size_t __buflen) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: extern int getpt (void); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int getloadavg (double __loadavg[], int __nelem) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 1010 "/usr/include/stdlib.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/stdlib-float.h" 3 4 -23376: extern __inline __attribute__ ((__gnu_inline__)) double -23376: __attribute__ ((__leaf__)) atof (const char *__nptr) throw () -23376: { -23376: return strtod (__nptr, (char **) __null); -23376: } -23376: # 1011 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 1 3 4 -23376: # 23 "/usr/include/arm-linux-gnueabihf/bits/stdlib.h" 3 4 -23376: extern char *__realpath_chk (const char *__restrict __name, -23376: char *__restrict __resolved, -23376: size_t __resolvedlen) throw () __attribute__ ((__warn_unused_result__)); -23376: extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) throw () __asm__ ("" "realpath") -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) throw () __asm__ ("" "__realpath_chk") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) -23376: __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * -23376: __attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) throw () -23376: { -23376: if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1) -23376: { -23376: -23376: -23376: -23376: -23376: return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1)); -23376: } -23376: -23376: return __realpath_alias (__name, __resolved); -23376: } -23376: -23376: -23376: extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen, -23376: size_t __nreal) throw () __attribute__ ((__nonnull__ (2))); -23376: extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) throw () __asm__ ("" "ptsname_r") -23376: -23376: __attribute__ ((__nonnull__ (2))); -23376: extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) throw () __asm__ ("" "__ptsname_r_chk") -23376: -23376: -23376: __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) throw () -23376: { -23376: if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__buflen)) -23376: return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)); -23376: if (__buflen > __builtin_object_size (__buf, 2 > 1)) -23376: return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1)); -23376: } -23376: return __ptsname_r_alias (__fd, __buf, __buflen); -23376: } -23376: -23376: -23376: extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen) -23376: throw () __attribute__ ((__warn_unused_result__)); -23376: extern int __wctomb_alias (char *__s, wchar_t __wchar) throw () __asm__ ("" "wctomb") -23376: __attribute__ ((__warn_unused_result__)); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int -23376: __attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) throw () -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1)) -23376: return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1)); -23376: return __wctomb_alias (__s, __wchar); -23376: } -23376: -23376: -23376: extern size_t __mbstowcs_chk (wchar_t *__restrict __dst, -23376: const char *__restrict __src, -23376: size_t __len, size_t __dstlen) throw (); -23376: extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw () __asm__ ("" "mbstowcs") -23376: -23376: -23376: ; -23376: extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__mbstowcs_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __mbstowcs_chk (__dst, __src, __len, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: -23376: if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)) -23376: return __mbstowcs_chk_warn (__dst, __src, __len, -23376: __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t)); -23376: } -23376: return __mbstowcs_alias (__dst, __src, __len); -23376: } -23376: -23376: -23376: extern size_t __wcstombs_chk (char *__restrict __dst, -23376: const wchar_t *__restrict __src, -23376: size_t __len, size_t __dstlen) throw (); -23376: extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw () __asm__ ("" "wcstombs") -23376: -23376: -23376: ; -23376: extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__wcstombs_chk") -23376: -23376: -23376: -23376: __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len"))); -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t -23376: __attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw () -23376: -23376: { -23376: if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__len)) -23376: return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)); -23376: if (__len > __builtin_object_size (__dst, 2 > 1)) -23376: return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1)); -23376: } -23376: return __wcstombs_alias (__dst, __src, __len); -23376: } -23376: # 1015 "/usr/include/stdlib.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 76 "/usr/include/c++/8/cstdlib" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/std_abs.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/std_abs.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/std_abs.h" 3 -23376: # 46 "/usr/include/c++/8/bits/std_abs.h" 3 -23376: extern "C++" -23376: { -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using ::abs; -23376: -23376: -23376: inline long -23376: abs(long __i) { return __builtin_labs(__i); } -23376: -23376: -23376: -23376: inline long long -23376: abs(long long __x) { return __builtin_llabs (__x); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: inline constexpr double -23376: abs(double __x) -23376: { return __builtin_fabs(__x); } -23376: -23376: inline constexpr float -23376: abs(float __x) -23376: { return __builtin_fabsf(__x); } -23376: -23376: inline constexpr long double -23376: abs(long double __x) -23376: { return __builtin_fabsl(__x); } -23376: # 106 "/usr/include/c++/8/bits/std_abs.h" 3 -23376: -23376: } -23376: } -23376: # 78 "/usr/include/c++/8/cstdlib" 2 3 -23376: # 121 "/usr/include/c++/8/cstdlib" 3 -23376: extern "C++" -23376: { -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using ::div_t; -23376: using ::ldiv_t; -23376: -23376: using ::abort; -23376: -23376: -23376: -23376: using ::atexit; -23376: -23376: -23376: using ::at_quick_exit; -23376: -23376: -23376: using ::atof; -23376: using ::atoi; -23376: using ::atol; -23376: using ::bsearch; -23376: using ::calloc; -23376: using ::div; -23376: using ::exit; -23376: using ::free; -23376: using ::getenv; -23376: using ::labs; -23376: using ::ldiv; -23376: using ::malloc; -23376: -23376: using ::mblen; -23376: using ::mbstowcs; -23376: using ::mbtowc; -23376: -23376: using ::qsort; -23376: -23376: -23376: using ::quick_exit; -23376: -23376: -23376: using ::rand; -23376: using ::realloc; -23376: using ::srand; -23376: using ::strtod; -23376: using ::strtol; -23376: using ::strtoul; -23376: using ::system; -23376: -23376: using ::wcstombs; -23376: using ::wctomb; -23376: -23376: -23376: -23376: inline ldiv_t -23376: div(long __i, long __j) { return ldiv(__i, __j); } -23376: -23376: -23376: -23376: -23376: } -23376: # 195 "/usr/include/c++/8/cstdlib" 3 -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: using ::lldiv_t; -23376: -23376: -23376: -23376: -23376: -23376: using ::_Exit; -23376: -23376: -23376: -23376: using ::llabs; -23376: -23376: inline lldiv_t -23376: div(long long __n, long long __d) -23376: { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } -23376: -23376: using ::lldiv; -23376: # 227 "/usr/include/c++/8/cstdlib" 3 -23376: using ::atoll; -23376: using ::strtoll; -23376: using ::strtoull; -23376: -23376: using ::strtof; -23376: using ::strtold; -23376: -23376: -23376: } -23376: -23376: namespace std -23376: { -23376: -23376: using ::__gnu_cxx::lldiv_t; -23376: -23376: using ::__gnu_cxx::_Exit; -23376: -23376: using ::__gnu_cxx::llabs; -23376: using ::__gnu_cxx::div; -23376: using ::__gnu_cxx::lldiv; -23376: -23376: using ::__gnu_cxx::atoll; -23376: using ::__gnu_cxx::strtof; -23376: using ::__gnu_cxx::strtoll; -23376: using ::__gnu_cxx::strtoull; -23376: using ::__gnu_cxx::strtold; -23376: } -23376: -23376: -23376: -23376: } -23376: # 60 "/usr/include/c++/8/bits/stl_algo.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/algorithmfwd.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: # 42 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 195 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: template -23376: bool -23376: all_of(_IIter, _IIter, _Predicate); -23376: -23376: template -23376: bool -23376: any_of(_IIter, _IIter, _Predicate); -23376: -23376: -23376: template -23376: bool -23376: binary_search(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: bool -23376: binary_search(_FIter, _FIter, const _Tp&, _Compare); -23376: # 224 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: template -23376: _OIter -23376: copy(_IIter, _IIter, _OIter); -23376: -23376: template -23376: _BIter2 -23376: copy_backward(_BIter1, _BIter1, _BIter2); -23376: -23376: -23376: template -23376: _OIter -23376: copy_if(_IIter, _IIter, _OIter, _Predicate); -23376: -23376: template -23376: _OIter -23376: copy_n(_IIter, _Size, _OIter); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: pair<_FIter, _FIter> -23376: equal_range(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: pair<_FIter, _FIter> -23376: equal_range(_FIter, _FIter, const _Tp&, _Compare); -23376: -23376: template -23376: void -23376: fill(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: _OIter -23376: fill_n(_OIter, _Size, const _Tp&); -23376: -23376: -23376: -23376: template -23376: _FIter1 -23376: find_end(_FIter1, _FIter1, _FIter2, _FIter2); -23376: -23376: template -23376: _FIter1 -23376: find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _IIter -23376: find_if_not(_IIter, _IIter, _Predicate); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: includes(_IIter1, _IIter1, _IIter2, _IIter2); -23376: -23376: template -23376: bool -23376: includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); -23376: -23376: template -23376: void -23376: inplace_merge(_BIter, _BIter, _BIter); -23376: -23376: template -23376: void -23376: inplace_merge(_BIter, _BIter, _BIter, _Compare); -23376: -23376: -23376: template -23376: bool -23376: is_heap(_RAIter, _RAIter); -23376: -23376: template -23376: bool -23376: is_heap(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: _RAIter -23376: is_heap_until(_RAIter, _RAIter); -23376: -23376: template -23376: _RAIter -23376: is_heap_until(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: bool -23376: is_partitioned(_IIter, _IIter, _Predicate); -23376: -23376: template -23376: bool -23376: is_permutation(_FIter1, _FIter1, _FIter2); -23376: -23376: template -23376: bool -23376: is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate); -23376: -23376: template -23376: bool -23376: is_sorted(_FIter, _FIter); -23376: -23376: template -23376: bool -23376: is_sorted(_FIter, _FIter, _Compare); -23376: -23376: template -23376: _FIter -23376: is_sorted_until(_FIter, _FIter); -23376: -23376: template -23376: _FIter -23376: is_sorted_until(_FIter, _FIter, _Compare); -23376: -23376: -23376: template -23376: void -23376: iter_swap(_FIter1, _FIter2); -23376: -23376: template -23376: _FIter -23376: lower_bound(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: _FIter -23376: lower_bound(_FIter, _FIter, const _Tp&, _Compare); -23376: -23376: template -23376: void -23376: make_heap(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: make_heap(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: constexpr -23376: const _Tp& -23376: max(const _Tp&, const _Tp&); -23376: -23376: template -23376: constexpr -23376: const _Tp& -23376: max(const _Tp&, const _Tp&, _Compare); -23376: -23376: -23376: -23376: -23376: template -23376: constexpr -23376: const _Tp& -23376: min(const _Tp&, const _Tp&); -23376: -23376: template -23376: constexpr -23376: const _Tp& -23376: min(const _Tp&, const _Tp&, _Compare); -23376: -23376: -23376: -23376: -23376: template -23376: constexpr -23376: pair -23376: minmax(const _Tp&, const _Tp&); -23376: -23376: template -23376: constexpr -23376: pair -23376: minmax(const _Tp&, const _Tp&, _Compare); -23376: -23376: template -23376: constexpr -23376: pair<_FIter, _FIter> -23376: minmax_element(_FIter, _FIter); -23376: -23376: template -23376: constexpr -23376: pair<_FIter, _FIter> -23376: minmax_element(_FIter, _FIter, _Compare); -23376: -23376: template -23376: constexpr -23376: _Tp -23376: min(initializer_list<_Tp>); -23376: -23376: template -23376: constexpr -23376: _Tp -23376: min(initializer_list<_Tp>, _Compare); -23376: -23376: template -23376: constexpr -23376: _Tp -23376: max(initializer_list<_Tp>); -23376: -23376: template -23376: constexpr -23376: _Tp -23376: max(initializer_list<_Tp>, _Compare); -23376: -23376: template -23376: constexpr -23376: pair<_Tp, _Tp> -23376: minmax(initializer_list<_Tp>); -23376: -23376: template -23376: constexpr -23376: pair<_Tp, _Tp> -23376: minmax(initializer_list<_Tp>, _Compare); -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: next_permutation(_BIter, _BIter); -23376: -23376: template -23376: bool -23376: next_permutation(_BIter, _BIter, _Compare); -23376: -23376: -23376: template -23376: bool -23376: none_of(_IIter, _IIter, _Predicate); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _RAIter -23376: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); -23376: -23376: template -23376: _RAIter -23376: partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); -23376: -23376: -23376: -23376: -23376: template -23376: pair<_OIter1, _OIter2> -23376: partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate); -23376: -23376: template -23376: _FIter -23376: partition_point(_FIter, _FIter, _Predicate); -23376: -23376: -23376: template -23376: void -23376: pop_heap(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: pop_heap(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: bool -23376: prev_permutation(_BIter, _BIter); -23376: -23376: template -23376: bool -23376: prev_permutation(_BIter, _BIter, _Compare); -23376: -23376: template -23376: void -23376: push_heap(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: push_heap(_RAIter, _RAIter, _Compare); -23376: -23376: -23376: -23376: template -23376: _FIter -23376: remove(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: _FIter -23376: remove_if(_FIter, _FIter, _Predicate); -23376: -23376: template -23376: _OIter -23376: remove_copy(_IIter, _IIter, _OIter, const _Tp&); -23376: -23376: template -23376: _OIter -23376: remove_copy_if(_IIter, _IIter, _OIter, _Predicate); -23376: -23376: -23376: -23376: template -23376: _OIter -23376: replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&); -23376: -23376: template -23376: _OIter -23376: replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&); -23376: -23376: -23376: -23376: template -23376: void -23376: reverse(_BIter, _BIter); -23376: -23376: template -23376: _OIter -23376: reverse_copy(_BIter, _BIter, _OIter); -23376: -23376: inline namespace _V2 -23376: { -23376: template -23376: _FIter -23376: rotate(_FIter, _FIter, _FIter); -23376: } -23376: -23376: template -23376: _OIter -23376: rotate_copy(_FIter, _FIter, _FIter, _OIter); -23376: # 565 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: template -23376: void -23376: shuffle(_RAIter, _RAIter, _UGenerator&&); -23376: -23376: -23376: template -23376: void -23376: sort_heap(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: sort_heap(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: _BIter -23376: stable_partition(_BIter, _BIter, _Predicate); -23376: # 594 "/usr/include/c++/8/bits/algorithmfwd.h" 3 -23376: template -23376: _FIter2 -23376: swap_ranges(_FIter1, _FIter1, _FIter2); -23376: -23376: -23376: -23376: template -23376: _FIter -23376: unique(_FIter, _FIter); -23376: -23376: template -23376: _FIter -23376: unique(_FIter, _FIter, _BinaryPredicate); -23376: -23376: -23376: -23376: template -23376: _FIter -23376: upper_bound(_FIter, _FIter, const _Tp&); -23376: -23376: template -23376: _FIter -23376: upper_bound(_FIter, _FIter, const _Tp&, _Compare); -23376: -23376: -23376: -23376: template -23376: _FIter -23376: adjacent_find(_FIter, _FIter); -23376: -23376: template -23376: _FIter -23376: adjacent_find(_FIter, _FIter, _BinaryPredicate); -23376: -23376: template -23376: typename iterator_traits<_IIter>::difference_type -23376: count(_IIter, _IIter, const _Tp&); -23376: -23376: template -23376: typename iterator_traits<_IIter>::difference_type -23376: count_if(_IIter, _IIter, _Predicate); -23376: -23376: template -23376: bool -23376: equal(_IIter1, _IIter1, _IIter2); -23376: -23376: template -23376: bool -23376: equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate); -23376: -23376: template -23376: _IIter -23376: find(_IIter, _IIter, const _Tp&); -23376: -23376: template -23376: _FIter1 -23376: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2); -23376: -23376: template -23376: _FIter1 -23376: find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); -23376: -23376: template -23376: _IIter -23376: find_if(_IIter, _IIter, _Predicate); -23376: -23376: template -23376: _Funct -23376: for_each(_IIter, _IIter, _Funct); -23376: -23376: template -23376: void -23376: generate(_FIter, _FIter, _Generator); -23376: -23376: template -23376: _OIter -23376: generate_n(_OIter, _Size, _Generator); -23376: -23376: template -23376: bool -23376: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2); -23376: -23376: template -23376: bool -23376: lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare); -23376: -23376: template -23376: constexpr -23376: _FIter -23376: max_element(_FIter, _FIter); -23376: -23376: template -23376: constexpr -23376: _FIter -23376: max_element(_FIter, _FIter, _Compare); -23376: -23376: template -23376: _OIter -23376: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); -23376: -23376: template -23376: _OIter -23376: merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); -23376: -23376: template -23376: constexpr -23376: _FIter -23376: min_element(_FIter, _FIter); -23376: -23376: template -23376: constexpr -23376: _FIter -23376: min_element(_FIter, _FIter, _Compare); -23376: -23376: template -23376: pair<_IIter1, _IIter2> -23376: mismatch(_IIter1, _IIter1, _IIter2); -23376: -23376: template -23376: pair<_IIter1, _IIter2> -23376: mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); -23376: -23376: template -23376: void -23376: nth_element(_RAIter, _RAIter, _RAIter); -23376: -23376: template -23376: void -23376: nth_element(_RAIter, _RAIter, _RAIter, _Compare); -23376: -23376: template -23376: void -23376: partial_sort(_RAIter, _RAIter, _RAIter); -23376: -23376: template -23376: void -23376: partial_sort(_RAIter, _RAIter, _RAIter, _Compare); -23376: -23376: template -23376: _BIter -23376: partition(_BIter, _BIter, _Predicate); -23376: -23376: template -23376: void -23376: random_shuffle(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: random_shuffle(_RAIter, _RAIter, -23376: -23376: _Generator&&); -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: replace(_FIter, _FIter, const _Tp&, const _Tp&); -23376: -23376: template -23376: void -23376: replace_if(_FIter, _FIter, _Predicate, const _Tp&); -23376: -23376: template -23376: _FIter1 -23376: search(_FIter1, _FIter1, _FIter2, _FIter2); -23376: -23376: template -23376: _FIter1 -23376: search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate); -23376: -23376: template -23376: _FIter -23376: search_n(_FIter, _FIter, _Size, const _Tp&); -23376: -23376: template -23376: _FIter -23376: search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate); -23376: -23376: template -23376: _OIter -23376: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); -23376: -23376: template -23376: _OIter -23376: set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); -23376: -23376: template -23376: _OIter -23376: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); -23376: -23376: template -23376: _OIter -23376: set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); -23376: -23376: template -23376: _OIter -23376: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); -23376: -23376: template -23376: _OIter -23376: set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, -23376: _OIter, _Compare); -23376: -23376: template -23376: _OIter -23376: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter); -23376: -23376: template -23376: _OIter -23376: set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); -23376: -23376: template -23376: void -23376: sort(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: sort(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: void -23376: stable_sort(_RAIter, _RAIter); -23376: -23376: template -23376: void -23376: stable_sort(_RAIter, _RAIter, _Compare); -23376: -23376: template -23376: _OIter -23376: transform(_IIter, _IIter, _OIter, _UnaryOperation); -23376: -23376: template -23376: _OIter -23376: transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation); -23376: -23376: template -23376: _OIter -23376: unique_copy(_IIter, _IIter, _OIter); -23376: -23376: template -23376: _OIter -23376: unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate); -23376: -23376: -23376: -23376: } -23376: # 61 "/usr/include/c++/8/bits/stl_algo.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_heap.h" 1 3 -23376: # 62 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _Distance -23376: __is_heap_until(_RandomAccessIterator __first, _Distance __n, -23376: _Compare& __comp) -23376: { -23376: _Distance __parent = 0; -23376: for (_Distance __child = 1; __child < __n; ++__child) -23376: { -23376: if (__comp(__first + __parent, __first + __child)) -23376: return __child; -23376: if ((__child & 1) == 0) -23376: ++__parent; -23376: } -23376: return __n; -23376: } -23376: -23376: -23376: -23376: template -23376: inline bool -23376: __is_heap(_RandomAccessIterator __first, _Distance __n) -23376: { -23376: __gnu_cxx::__ops::_Iter_less_iter __comp; -23376: return std::__is_heap_until(__first, __n, __comp) == __n; -23376: } -23376: -23376: template -23376: inline bool -23376: __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n) -23376: { -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: return std::__is_heap_until(__first, __n, __cmp) == __n; -23376: } -23376: -23376: template -23376: inline bool -23376: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { return std::__is_heap(__first, std::distance(__first, __last)); } -23376: -23376: template -23376: inline bool -23376: __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: return std::__is_heap(__first, std::move(__comp), -23376: std::distance(__first, __last)); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: __push_heap(_RandomAccessIterator __first, -23376: _Distance __holeIndex, _Distance __topIndex, _Tp __value, -23376: _Compare& __comp) -23376: { -23376: _Distance __parent = (__holeIndex - 1) / 2; -23376: while (__holeIndex > __topIndex && __comp(__first + __parent, __value)) -23376: { -23376: *(__first + __holeIndex) = std::move(*(__first + __parent)); -23376: __holeIndex = __parent; -23376: __parent = (__holeIndex - 1) / 2; -23376: } -23376: *(__first + __holeIndex) = std::move(__value); -23376: } -23376: # 152 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: __gnu_cxx::__ops::_Iter_less_val __comp; -23376: _ValueType __value = std::move(*(__last - 1)); -23376: std::__push_heap(__first, _DistanceType((__last - __first) - 1), -23376: _DistanceType(0), std::move(__value), __comp); -23376: } -23376: # 187 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) -23376: __cmp(std::move(__comp)); -23376: _ValueType __value = std::move(*(__last - 1)); -23376: std::__push_heap(__first, _DistanceType((__last - __first) - 1), -23376: _DistanceType(0), std::move(__value), __cmp); -23376: } -23376: -23376: template -23376: void -23376: __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, -23376: _Distance __len, _Tp __value, _Compare __comp) -23376: { -23376: const _Distance __topIndex = __holeIndex; -23376: _Distance __secondChild = __holeIndex; -23376: while (__secondChild < (__len - 1) / 2) -23376: { -23376: __secondChild = 2 * (__secondChild + 1); -23376: if (__comp(__first + __secondChild, -23376: __first + (__secondChild - 1))) -23376: __secondChild--; -23376: *(__first + __holeIndex) = std::move(*(__first + __secondChild)); -23376: __holeIndex = __secondChild; -23376: } -23376: if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2) -23376: { -23376: __secondChild = 2 * (__secondChild + 1); -23376: *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1))) -23376: ; -23376: __holeIndex = __secondChild - 1; -23376: } -23376: __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp))) -23376: __cmp(std::move(__comp)); -23376: std::__push_heap(__first, __holeIndex, __topIndex, -23376: std::move(__value), __cmp); -23376: } -23376: -23376: template -23376: inline void -23376: __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _RandomAccessIterator __result, _Compare& __comp) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: _ValueType __value = std::move(*__result); -23376: *__result = std::move(*__first); -23376: std::__adjust_heap(__first, _DistanceType(0), -23376: _DistanceType(__last - __first), -23376: std::move(__value), __comp); -23376: } -23376: # 269 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: if (__last - __first > 1) -23376: { -23376: --__last; -23376: __gnu_cxx::__ops::_Iter_less_iter __comp; -23376: std::__pop_heap(__first, __last, __last, __comp); -23376: } -23376: } -23376: # 302 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: pop_heap(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: if (__last - __first > 1) -23376: { -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: --__last; -23376: std::__pop_heap(__first, __last, __last, __cmp); -23376: } -23376: } -23376: -23376: template -23376: void -23376: __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare& __comp) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: if (__last - __first < 2) -23376: return; -23376: -23376: const _DistanceType __len = __last - __first; -23376: _DistanceType __parent = (__len - 2) / 2; -23376: while (true) -23376: { -23376: _ValueType __value = std::move(*(__first + __parent)); -23376: std::__adjust_heap(__first, __parent, __len, std::move(__value), -23376: __comp); -23376: if (__parent == 0) -23376: return; -23376: __parent--; -23376: } -23376: } -23376: # 358 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: __gnu_cxx::__ops::_Iter_less_iter __comp; -23376: std::__make_heap(__first, __last, __comp); -23376: } -23376: # 384 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: std::__make_heap(__first, __last, __cmp); -23376: } -23376: -23376: template -23376: void -23376: __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare& __comp) -23376: { -23376: while (__last - __first > 1) -23376: { -23376: --__last; -23376: std::__pop_heap(__first, __last, __last, __comp); -23376: } -23376: } -23376: # 420 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: __gnu_cxx::__ops::_Iter_less_iter __comp; -23376: std::__sort_heap(__first, __last, __comp); -23376: } -23376: # 447 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline void -23376: sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: std::__sort_heap(__first, __last, __cmp); -23376: } -23376: # 475 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline _RandomAccessIterator -23376: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: __gnu_cxx::__ops::_Iter_less_iter __comp; -23376: return __first + -23376: std::__is_heap_until(__first, std::distance(__first, __last), __comp); -23376: } -23376: # 503 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline _RandomAccessIterator -23376: is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: return __first -23376: + std::__is_heap_until(__first, std::distance(__first, __last), __cmp); -23376: } -23376: # 527 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline bool -23376: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { return std::is_heap_until(__first, __last) == __last; } -23376: # 540 "/usr/include/c++/8/bits/stl_heap.h" 3 -23376: template -23376: inline bool -23376: is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: const auto __dist = std::distance(__first, __last); -23376: typedef __decltype(__comp) _Cmp; -23376: __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp)); -23376: return std::__is_heap_until(__first, __dist, __cmp) == __dist; -23376: } -23376: -23376: -23376: -23376: } -23376: # 62 "/usr/include/c++/8/bits/stl_algo.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_tempbuf.h" 1 3 -23376: # 60 "/usr/include/c++/8/bits/stl_tempbuf.h" 3 -23376: # 1 "/usr/include/c++/8/bits/stl_construct.h" 1 3 -23376: # 59 "/usr/include/c++/8/bits/stl_construct.h" 3 -23376: # 1 "/usr/include/c++/8/new" 1 3 -23376: # 37 "/usr/include/c++/8/new" 3 -23376: -23376: # 38 "/usr/include/c++/8/new" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/exception" 1 3 -23376: # 33 "/usr/include/c++/8/exception" 3 -23376: -23376: # 34 "/usr/include/c++/8/exception" 3 -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/exception.h" 1 3 -23376: # 34 "/usr/include/c++/8/bits/exception.h" 3 -23376: -23376: # 35 "/usr/include/c++/8/bits/exception.h" 3 -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: -23376: -23376: extern "C++" { -23376: -23376: namespace std -23376: { -23376: # 60 "/usr/include/c++/8/bits/exception.h" 3 -23376: class exception -23376: { -23376: public: -23376: exception() noexcept { } -23376: virtual ~exception() noexcept; -23376: -23376: -23376: -23376: virtual const char* -23376: what() const noexcept; -23376: }; -23376: -23376: } -23376: -23376: } -23376: -23376: #pragma GCC visibility pop -23376: # 39 "/usr/include/c++/8/exception" 2 3 -23376: -23376: extern "C++" { -23376: -23376: namespace std -23376: { -23376: -23376: -23376: class bad_exception : public exception -23376: { -23376: public: -23376: bad_exception() noexcept { } -23376: -23376: -23376: -23376: virtual ~bad_exception() noexcept; -23376: -23376: -23376: virtual const char* -23376: what() const noexcept; -23376: }; -23376: -23376: -23376: typedef void (*terminate_handler) (); -23376: -23376: -23376: typedef void (*unexpected_handler) (); -23376: -23376: -23376: terminate_handler set_terminate(terminate_handler) noexcept; -23376: -23376: -23376: -23376: terminate_handler get_terminate() noexcept; -23376: -23376: -23376: -23376: -23376: void terminate() noexcept __attribute__ ((__noreturn__)); -23376: -23376: -23376: unexpected_handler set_unexpected(unexpected_handler) noexcept; -23376: -23376: -23376: -23376: unexpected_handler get_unexpected() noexcept; -23376: -23376: -23376: -23376: -23376: void unexpected() __attribute__ ((__noreturn__)); -23376: # 101 "/usr/include/c++/8/exception" 3 -23376: -23376: bool uncaught_exception() noexcept __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: int uncaught_exceptions() noexcept __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: } -23376: -23376: namespace __gnu_cxx -23376: { -23376: -23376: # 133 "/usr/include/c++/8/exception" 3 -23376: void __verbose_terminate_handler(); -23376: -23376: -23376: } -23376: -23376: } -23376: -23376: #pragma GCC visibility pop -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/exception_ptr.h" 1 3 -23376: # 34 "/usr/include/c++/8/bits/exception_ptr.h" 3 -23376: #pragma GCC visibility push(default) -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 1 3 -23376: # 34 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3 -23376: -23376: # 35 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3 -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 149 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 3 4 -23376: typedef int ptrdiff_t; -23376: # 426 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 3 4 -23376: typedef struct { -23376: long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); -23376: long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); -23376: # 437 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 3 4 -23376: } max_align_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef decltype(nullptr) nullptr_t; -23376: # 39 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 2 3 -23376: # 50 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3 -23376: namespace std -23376: { -23376: class type_info; -23376: } -23376: -23376: namespace __cxxabiv1 -23376: { -23376: struct __cxa_refcounted_exception; -23376: -23376: extern "C" -23376: { -23376: -23376: void* -23376: __cxa_allocate_exception(size_t) noexcept; -23376: -23376: void -23376: __cxa_free_exception(void*) noexcept; -23376: -23376: -23376: __cxa_refcounted_exception* -23376: __cxa_init_primary_exception(void *object, std::type_info *tinfo, -23376: void ( *dest) (void *)) noexcept; -23376: -23376: } -23376: } -23376: -23376: -23376: -23376: #pragma GCC visibility pop -23376: # 39 "/usr/include/c++/8/bits/exception_ptr.h" 2 3 -23376: # 1 "/usr/include/c++/8/typeinfo" 1 3 -23376: # 32 "/usr/include/c++/8/typeinfo" 3 -23376: -23376: # 33 "/usr/include/c++/8/typeinfo" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/hash_bytes.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/hash_bytes.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/hash_bytes.h" 3 -23376: -23376: -23376: -23376: namespace std -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: size_t -23376: _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); -23376: -23376: -23376: -23376: -23376: -23376: size_t -23376: _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); -23376: -23376: -23376: } -23376: # 37 "/usr/include/c++/8/typeinfo" 2 3 -23376: -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: extern "C++" { -23376: -23376: namespace __cxxabiv1 -23376: { -23376: class __class_type_info; -23376: } -23376: # 80 "/usr/include/c++/8/typeinfo" 3 -23376: namespace std -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: class type_info -23376: { -23376: public: -23376: -23376: -23376: -23376: -23376: virtual ~type_info(); -23376: -23376: -23376: -23376: const char* name() const noexcept -23376: { return __name[0] == '*' ? __name + 1 : __name; } -23376: -23376: -23376: -23376: -23376: -23376: bool before(const type_info& __arg) const noexcept; -23376: bool operator==(const type_info& __arg) const noexcept; -23376: # 136 "/usr/include/c++/8/typeinfo" 3 -23376: bool operator!=(const type_info& __arg) const noexcept -23376: { return !operator==(__arg); } -23376: -23376: -23376: size_t hash_code() const noexcept -23376: { -23376: -23376: return _Hash_bytes(name(), __builtin_strlen(name()), -23376: static_cast(0xc70f6907UL)); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: virtual bool __is_pointer_p() const; -23376: -23376: -23376: virtual bool __is_function_p() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, -23376: unsigned __outer) const; -23376: -23376: -23376: virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, -23376: void **__obj_ptr) const; -23376: -23376: protected: -23376: const char *__name; -23376: -23376: explicit type_info(const char *__n): __name(__n) { } -23376: -23376: private: -23376: -23376: type_info& operator=(const type_info&); -23376: type_info(const type_info&); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class bad_cast : public exception -23376: { -23376: public: -23376: bad_cast() noexcept { } -23376: -23376: -23376: -23376: virtual ~bad_cast() noexcept; -23376: -23376: -23376: virtual const char* what() const noexcept; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: class bad_typeid : public exception -23376: { -23376: public: -23376: bad_typeid () noexcept { } -23376: -23376: -23376: -23376: virtual ~bad_typeid() noexcept; -23376: -23376: -23376: virtual const char* what() const noexcept; -23376: }; -23376: } -23376: -23376: } -23376: -23376: #pragma GCC visibility pop -23376: # 40 "/usr/include/c++/8/bits/exception_ptr.h" 2 3 -23376: # 1 "/usr/include/c++/8/new" 1 3 -23376: # 41 "/usr/include/c++/8/bits/exception_ptr.h" 2 3 -23376: -23376: extern "C++" { -23376: -23376: namespace std -23376: { -23376: class type_info; -23376: -23376: -23376: -23376: -23376: -23376: namespace __exception_ptr -23376: { -23376: class exception_ptr; -23376: } -23376: -23376: using __exception_ptr::exception_ptr; -23376: -23376: -23376: -23376: -23376: -23376: exception_ptr current_exception() noexcept; -23376: -23376: template -23376: exception_ptr make_exception_ptr(_Ex) noexcept; -23376: -23376: -23376: void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__)); -23376: -23376: namespace __exception_ptr -23376: { -23376: using std::rethrow_exception; -23376: -23376: -23376: -23376: -23376: -23376: class exception_ptr -23376: { -23376: void* _M_exception_object; -23376: -23376: explicit exception_ptr(void* __e) noexcept; -23376: -23376: void _M_addref() noexcept; -23376: void _M_release() noexcept; -23376: -23376: void *_M_get() const noexcept __attribute__ ((__pure__)); -23376: -23376: friend exception_ptr std::current_exception() noexcept; -23376: friend void std::rethrow_exception(exception_ptr); -23376: template -23376: friend exception_ptr std::make_exception_ptr(_Ex) noexcept; -23376: -23376: public: -23376: exception_ptr() noexcept; -23376: -23376: exception_ptr(const exception_ptr&) noexcept; -23376: -23376: -23376: exception_ptr(nullptr_t) noexcept -23376: : _M_exception_object(0) -23376: { } -23376: -23376: exception_ptr(exception_ptr&& __o) noexcept -23376: : _M_exception_object(__o._M_exception_object) -23376: { __o._M_exception_object = 0; } -23376: # 117 "/usr/include/c++/8/bits/exception_ptr.h" 3 -23376: exception_ptr& -23376: operator=(const exception_ptr&) noexcept; -23376: -23376: -23376: exception_ptr& -23376: operator=(exception_ptr&& __o) noexcept -23376: { -23376: exception_ptr(static_cast(__o)).swap(*this); -23376: return *this; -23376: } -23376: -23376: -23376: ~exception_ptr() noexcept; -23376: -23376: void -23376: swap(exception_ptr&) noexcept; -23376: # 144 "/usr/include/c++/8/bits/exception_ptr.h" 3 -23376: explicit operator bool() const -23376: { return _M_exception_object; } -23376: -23376: -23376: friend bool -23376: operator==(const exception_ptr&, const exception_ptr&) -23376: noexcept __attribute__ ((__pure__)); -23376: -23376: const class std::type_info* -23376: __cxa_exception_type() const noexcept -23376: __attribute__ ((__pure__)); -23376: }; -23376: -23376: bool -23376: operator==(const exception_ptr&, const exception_ptr&) -23376: noexcept __attribute__ ((__pure__)); -23376: -23376: bool -23376: operator!=(const exception_ptr&, const exception_ptr&) -23376: noexcept __attribute__ ((__pure__)); -23376: -23376: inline void -23376: swap(exception_ptr& __lhs, exception_ptr& __rhs) -23376: { __lhs.swap(__rhs); } -23376: -23376: template -23376: inline void -23376: __dest_thunk(void* __x) -23376: { static_cast<_Ex*>(__x)->~_Ex(); } -23376: -23376: } -23376: -23376: -23376: template -23376: exception_ptr -23376: make_exception_ptr(_Ex __ex) noexcept -23376: { -23376: -23376: void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); -23376: (void) __cxxabiv1::__cxa_init_primary_exception( -23376: __e, const_cast(&typeid(__ex)), -23376: __exception_ptr::__dest_thunk<_Ex>); -23376: try -23376: { -23376: ::new (__e) _Ex(__ex); -23376: return exception_ptr(__e); -23376: } -23376: catch(...) -23376: { -23376: __cxxabiv1::__cxa_free_exception(__e); -23376: return current_exception(); -23376: } -23376: # 208 "/usr/include/c++/8/bits/exception_ptr.h" 3 -23376: } -23376: -23376: -23376: } -23376: -23376: } -23376: -23376: #pragma GCC visibility pop -23376: # 144 "/usr/include/c++/8/exception" 2 3 -23376: # 1 "/usr/include/c++/8/bits/nested_exception.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/nested_exception.h" 3 -23376: #pragma GCC visibility push(default) -23376: # 42 "/usr/include/c++/8/bits/nested_exception.h" 3 -23376: extern "C++" { -23376: -23376: namespace std -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: class nested_exception -23376: { -23376: exception_ptr _M_ptr; -23376: -23376: public: -23376: nested_exception() noexcept : _M_ptr(current_exception()) { } -23376: -23376: nested_exception(const nested_exception&) noexcept = default; -23376: -23376: nested_exception& operator=(const nested_exception&) noexcept = default; -23376: -23376: virtual ~nested_exception() noexcept; -23376: -23376: [[noreturn]] -23376: void -23376: rethrow_nested() const -23376: { -23376: if (_M_ptr) -23376: rethrow_exception(_M_ptr); -23376: std::terminate(); -23376: } -23376: -23376: exception_ptr -23376: nested_ptr() const noexcept -23376: { return _M_ptr; } -23376: }; -23376: -23376: template -23376: struct _Nested_exception : public _Except, public nested_exception -23376: { -23376: explicit _Nested_exception(const _Except& __ex) -23376: : _Except(__ex) -23376: { } -23376: -23376: explicit _Nested_exception(_Except&& __ex) -23376: : _Except(static_cast<_Except&&>(__ex)) -23376: { } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: [[noreturn]] -23376: inline void -23376: __throw_with_nested_impl(_Tp&& __t, true_type) -23376: { -23376: using _Up = typename remove_reference<_Tp>::type; -23376: throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; -23376: } -23376: -23376: template -23376: [[noreturn]] -23376: inline void -23376: __throw_with_nested_impl(_Tp&& __t, false_type) -23376: { throw std::forward<_Tp>(__t); } -23376: -23376: -23376: -23376: template -23376: [[noreturn]] -23376: inline void -23376: throw_with_nested(_Tp&& __t) -23376: { -23376: using _Up = typename decay<_Tp>::type; -23376: using _CopyConstructible -23376: = __and_, is_move_constructible<_Up>>; -23376: static_assert(_CopyConstructible::value, -23376: "throw_with_nested argument must be CopyConstructible"); -23376: using __nest = __and_, __bool_constant, -23376: __not_>>; -23376: std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{}); -23376: } -23376: -23376: -23376: template -23376: using __rethrow_if_nested_cond = typename enable_if< -23376: __and_, -23376: __or_<__not_>, -23376: is_convertible<_Tp*, nested_exception*>>>::value -23376: >::type; -23376: -23376: -23376: template -23376: inline __rethrow_if_nested_cond<_Ex> -23376: __rethrow_if_nested_impl(const _Ex* __ptr) -23376: { -23376: if (auto __ne_ptr = dynamic_cast(__ptr)) -23376: __ne_ptr->rethrow_nested(); -23376: } -23376: -23376: -23376: inline void -23376: __rethrow_if_nested_impl(const void*) -23376: { } -23376: -23376: -23376: template -23376: inline void -23376: rethrow_if_nested(const _Ex& __ex) -23376: { std::__rethrow_if_nested_impl(std::__addressof(__ex)); } -23376: -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: #pragma GCC visibility pop -23376: # 145 "/usr/include/c++/8/exception" 2 3 -23376: # 41 "/usr/include/c++/8/new" 2 3 -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: extern "C++" { -23376: -23376: namespace std -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: class bad_alloc : public exception -23376: { -23376: public: -23376: bad_alloc() throw() { } -23376: -23376: -23376: -23376: virtual ~bad_alloc() throw(); -23376: -23376: -23376: virtual const char* what() const throw(); -23376: }; -23376: -23376: -23376: class bad_array_new_length : public bad_alloc -23376: { -23376: public: -23376: bad_array_new_length() throw() { } -23376: -23376: -23376: -23376: virtual ~bad_array_new_length() throw(); -23376: -23376: -23376: virtual const char* what() const throw(); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct nothrow_t -23376: { -23376: -23376: explicit nothrow_t() = default; -23376: -23376: }; -23376: -23376: extern const nothrow_t nothrow; -23376: -23376: -23376: -23376: typedef void (*new_handler)(); -23376: -23376: -23376: -23376: new_handler set_new_handler(new_handler) throw(); -23376: -23376: -23376: -23376: new_handler get_new_handler() noexcept; -23376: -23376: } -23376: # 120 "/usr/include/c++/8/new" 3 -23376: void* operator new(std::size_t) -23376: __attribute__((__externally_visible__)); -23376: void* operator new[](std::size_t) -23376: __attribute__((__externally_visible__)); -23376: void operator delete(void*) noexcept -23376: __attribute__((__externally_visible__)); -23376: void operator delete[](void*) noexcept -23376: __attribute__((__externally_visible__)); -23376: -23376: void operator delete(void*, std::size_t) noexcept -23376: __attribute__((__externally_visible__)); -23376: void operator delete[](void*, std::size_t) noexcept -23376: __attribute__((__externally_visible__)); -23376: -23376: void* operator new(std::size_t, const std::nothrow_t&) noexcept -23376: __attribute__((__externally_visible__)); -23376: void* operator new[](std::size_t, const std::nothrow_t&) noexcept -23376: __attribute__((__externally_visible__)); -23376: void operator delete(void*, const std::nothrow_t&) noexcept -23376: __attribute__((__externally_visible__)); -23376: void operator delete[](void*, const std::nothrow_t&) noexcept -23376: __attribute__((__externally_visible__)); -23376: # 168 "/usr/include/c++/8/new" 3 -23376: inline void* operator new(std::size_t, void* __p) noexcept -23376: { return __p; } -23376: inline void* operator new[](std::size_t, void* __p) noexcept -23376: { return __p; } -23376: -23376: -23376: inline void operator delete (void*, void*) noexcept { } -23376: inline void operator delete[](void*, void*) noexcept { } -23376: -23376: } -23376: # 216 "/usr/include/c++/8/new" 3 -23376: #pragma GCC visibility pop -23376: # 60 "/usr/include/c++/8/bits/stl_construct.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/ext/alloc_traits.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/alloc_traits.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/alloc_traits.h" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/alloc_traits.h" 1 3 -23376: # 41 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: struct __allocator_traits_base -23376: { -23376: template -23376: struct __rebind : __replace_first_arg<_Tp, _Up> { }; -23376: -23376: template -23376: struct __rebind<_Tp, _Up, -23376: __void_t::other>> -23376: { using type = typename _Tp::template rebind<_Up>::other; }; -23376: -23376: protected: -23376: template -23376: using __pointer = typename _Tp::pointer; -23376: template -23376: using __c_pointer = typename _Tp::const_pointer; -23376: template -23376: using __v_pointer = typename _Tp::void_pointer; -23376: template -23376: using __cv_pointer = typename _Tp::const_void_pointer; -23376: template -23376: using __pocca = typename _Tp::propagate_on_container_copy_assignment; -23376: template -23376: using __pocma = typename _Tp::propagate_on_container_move_assignment; -23376: template -23376: using __pocs = typename _Tp::propagate_on_container_swap; -23376: template -23376: using __equal = typename _Tp::is_always_equal; -23376: }; -23376: -23376: template -23376: using __alloc_rebind -23376: = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct allocator_traits : __allocator_traits_base -23376: { -23376: -23376: typedef _Alloc allocator_type; -23376: -23376: typedef typename _Alloc::value_type value_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: using pointer = __detected_or_t; -23376: -23376: private: -23376: -23376: template class _Func, typename _Tp, typename = void> -23376: struct _Ptr -23376: { -23376: using type = typename pointer_traits::template rebind<_Tp>; -23376: }; -23376: -23376: template class _Func, typename _Tp> -23376: struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> -23376: { -23376: using type = _Func<_Alloc>; -23376: }; -23376: -23376: -23376: template -23376: struct _Diff -23376: { using type = typename pointer_traits<_PtrT>::difference_type; }; -23376: -23376: template -23376: struct _Diff<_A2, _PtrT, __void_t> -23376: { using type = typename _A2::difference_type; }; -23376: -23376: -23376: template -23376: struct _Size : make_unsigned<_DiffT> { }; -23376: -23376: template -23376: struct _Size<_A2, _DiffT, __void_t> -23376: { using type = typename _A2::size_type; }; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using void_pointer = typename _Ptr<__v_pointer, void>::type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using difference_type = typename _Diff<_Alloc, pointer>::type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using size_type = typename _Size<_Alloc, difference_type>::type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using propagate_on_container_copy_assignment -23376: = __detected_or_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using propagate_on_container_move_assignment -23376: = __detected_or_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using propagate_on_container_swap -23376: = __detected_or_t; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: using is_always_equal -23376: = __detected_or_t::type, __equal, _Alloc>; -23376: -23376: template -23376: using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; -23376: template -23376: using rebind_traits = allocator_traits>; -23376: -23376: private: -23376: template -23376: static auto -23376: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) -23376: -> decltype(__a.allocate(__n, __hint)) -23376: { return __a.allocate(__n, __hint); } -23376: -23376: template -23376: static pointer -23376: _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) -23376: { return __a.allocate(__n); } -23376: -23376: template -23376: struct __construct_helper -23376: { -23376: template()->construct( -23376: std::declval<_Tp*>(), std::declval<_Args>()...))> -23376: static true_type __test(int); -23376: -23376: template -23376: static false_type __test(...); -23376: -23376: using type = decltype(__test<_Alloc>(0)); -23376: }; -23376: -23376: template -23376: using __has_construct -23376: = typename __construct_helper<_Tp, _Args...>::type; -23376: -23376: template -23376: static _Require<__has_construct<_Tp, _Args...>> -23376: _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) -23376: { __a.construct(__p, std::forward<_Args>(__args)...); } -23376: -23376: template -23376: static -23376: _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, -23376: is_constructible<_Tp, _Args...>>> -23376: _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) -23376: { ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: static auto -23376: _S_destroy(_Alloc2& __a, _Tp* __p, int) -23376: -> decltype(__a.destroy(__p)) -23376: { __a.destroy(__p); } -23376: -23376: template -23376: static void -23376: _S_destroy(_Alloc2&, _Tp* __p, ...) -23376: { __p->~_Tp(); } -23376: -23376: template -23376: static auto -23376: _S_max_size(_Alloc2& __a, int) -23376: -> decltype(__a.max_size()) -23376: { return __a.max_size(); } -23376: -23376: template -23376: static size_type -23376: _S_max_size(_Alloc2&, ...) -23376: { -23376: -23376: -23376: return __gnu_cxx::__numeric_traits::__max -23376: / sizeof(value_type); -23376: } -23376: -23376: template -23376: static auto -23376: _S_select(_Alloc2& __a, int) -23376: -> decltype(__a.select_on_container_copy_construction()) -23376: { return __a.select_on_container_copy_construction(); } -23376: -23376: template -23376: static _Alloc2 -23376: _S_select(_Alloc2& __a, ...) -23376: { return __a; } -23376: -23376: public: -23376: # 299 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static pointer -23376: allocate(_Alloc& __a, size_type __n) -23376: { return __a.allocate(__n); } -23376: # 314 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static pointer -23376: allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) -23376: { return _S_allocate(__a, __n, __hint, 0); } -23376: # 326 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static void -23376: deallocate(_Alloc& __a, pointer __p, size_type __n) -23376: { __a.deallocate(__p, __n); } -23376: # 341 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: template -23376: static auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args) -23376: -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) -23376: { _S_construct(__a, __p, std::forward<_Args>(__args)...); } -23376: # 354 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: template -23376: static void destroy(_Alloc& __a, _Tp* __p) -23376: { _S_destroy(__a, __p, 0); } -23376: # 366 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static size_type max_size(const _Alloc& __a) noexcept -23376: { return _S_max_size(__a, 0); } -23376: # 377 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static _Alloc -23376: select_on_container_copy_construction(const _Alloc& __rhs) -23376: { return _S_select(__rhs, 0); } -23376: }; -23376: -23376: -23376: template -23376: struct allocator_traits> -23376: { -23376: -23376: using allocator_type = allocator<_Tp>; -23376: -23376: using value_type = _Tp; -23376: -23376: -23376: using pointer = _Tp*; -23376: -23376: -23376: using const_pointer = const _Tp*; -23376: -23376: -23376: using void_pointer = void*; -23376: -23376: -23376: using const_void_pointer = const void*; -23376: -23376: -23376: using difference_type = std::ptrdiff_t; -23376: -23376: -23376: using size_type = std::size_t; -23376: -23376: -23376: using propagate_on_container_copy_assignment = false_type; -23376: -23376: -23376: using propagate_on_container_move_assignment = true_type; -23376: -23376: -23376: using propagate_on_container_swap = false_type; -23376: -23376: -23376: using is_always_equal = true_type; -23376: -23376: template -23376: using rebind_alloc = allocator<_Up>; -23376: -23376: template -23376: using rebind_traits = allocator_traits>; -23376: # 434 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static pointer -23376: allocate(allocator_type& __a, size_type __n) -23376: { return __a.allocate(__n); } -23376: # 448 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static pointer -23376: allocate(allocator_type& __a, size_type __n, const_void_pointer __hint) -23376: { return __a.allocate(__n, __hint); } -23376: # 460 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: static void -23376: deallocate(allocator_type& __a, pointer __p, size_type __n) -23376: { __a.deallocate(__p, __n); } -23376: # 472 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: template -23376: static void -23376: construct(allocator_type& __a, _Up* __p, _Args&&... __args) -23376: { __a.construct(__p, std::forward<_Args>(__args)...); } -23376: # 484 "/usr/include/c++/8/bits/alloc_traits.h" 3 -23376: template -23376: static void -23376: destroy(allocator_type& __a, _Up* __p) -23376: { __a.destroy(__p); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: static size_type -23376: max_size(const allocator_type& __a) noexcept -23376: { return __a.max_size(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: static allocator_type -23376: select_on_container_copy_construction(const allocator_type& __rhs) -23376: { return __rhs; } -23376: }; -23376: -23376: -23376: template -23376: inline void -23376: __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type) -23376: { __one = __two; } -23376: -23376: template -23376: inline void -23376: __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type) -23376: { } -23376: -23376: template -23376: inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two) -23376: { -23376: typedef allocator_traits<_Alloc> __traits; -23376: typedef typename __traits::propagate_on_container_copy_assignment __pocca; -23376: __do_alloc_on_copy(__one, __two, __pocca()); -23376: } -23376: -23376: template -23376: inline _Alloc __alloc_on_copy(const _Alloc& __a) -23376: { -23376: typedef allocator_traits<_Alloc> __traits; -23376: return __traits::select_on_container_copy_construction(__a); -23376: } -23376: -23376: template -23376: inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type) -23376: { __one = std::move(__two); } -23376: -23376: template -23376: inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type) -23376: { } -23376: -23376: template -23376: inline void __alloc_on_move(_Alloc& __one, _Alloc& __two) -23376: { -23376: typedef allocator_traits<_Alloc> __traits; -23376: typedef typename __traits::propagate_on_container_move_assignment __pocma; -23376: __do_alloc_on_move(__one, __two, __pocma()); -23376: } -23376: -23376: template -23376: inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type) -23376: { -23376: using std::swap; -23376: swap(__one, __two); -23376: } -23376: -23376: template -23376: inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type) -23376: { } -23376: -23376: template -23376: inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two) -23376: { -23376: typedef allocator_traits<_Alloc> __traits; -23376: typedef typename __traits::propagate_on_container_swap __pocs; -23376: __do_alloc_on_swap(__one, __two, __pocs()); -23376: } -23376: -23376: template -23376: class __is_copy_insertable_impl -23376: { -23376: typedef allocator_traits<_Alloc> _Traits; -23376: -23376: template(), -23376: std::declval<_Up*>(), -23376: std::declval()))> -23376: static true_type -23376: _M_select(int); -23376: -23376: template -23376: static false_type -23376: _M_select(...); -23376: -23376: public: -23376: typedef decltype(_M_select(0)) type; -23376: }; -23376: -23376: -23376: template -23376: struct __is_copy_insertable -23376: : __is_copy_insertable_impl<_Alloc>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __is_copy_insertable> -23376: : is_copy_constructible<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct __is_allocator : false_type { }; -23376: -23376: template -23376: struct __is_allocator<_Alloc, -23376: __void_t().allocate(size_t{}))>> -23376: : true_type { }; -23376: -23376: template -23376: using _RequireAllocator -23376: = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; -23376: -23376: -23376: } -23376: # 37 "/usr/include/c++/8/ext/alloc_traits.h" 2 3 -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __alloc_traits -23376: -23376: : std::allocator_traits<_Alloc> -23376: -23376: { -23376: typedef _Alloc allocator_type; -23376: -23376: typedef std::allocator_traits<_Alloc> _Base_type; -23376: typedef typename _Base_type::value_type value_type; -23376: typedef typename _Base_type::pointer pointer; -23376: typedef typename _Base_type::const_pointer const_pointer; -23376: typedef typename _Base_type::size_type size_type; -23376: typedef typename _Base_type::difference_type difference_type; -23376: -23376: typedef value_type& reference; -23376: typedef const value_type& const_reference; -23376: using _Base_type::allocate; -23376: using _Base_type::deallocate; -23376: using _Base_type::construct; -23376: using _Base_type::destroy; -23376: using _Base_type::max_size; -23376: -23376: private: -23376: template -23376: using __is_custom_pointer -23376: = std::__and_, -23376: std::__not_>>; -23376: -23376: public: -23376: -23376: template -23376: static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type -23376: construct(_Alloc& __a, _Ptr __p, _Args&&... __args) -23376: { -23376: _Base_type::construct(__a, std::__to_address(__p), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: template -23376: static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type -23376: destroy(_Alloc& __a, _Ptr __p) -23376: { _Base_type::destroy(__a, std::__to_address(__p)); } -23376: -23376: static _Alloc _S_select_on_copy(const _Alloc& __a) -23376: { return _Base_type::select_on_container_copy_construction(__a); } -23376: -23376: static void _S_on_swap(_Alloc& __a, _Alloc& __b) -23376: { std::__alloc_on_swap(__a, __b); } -23376: -23376: static constexpr bool _S_propagate_on_copy_assign() -23376: { return _Base_type::propagate_on_container_copy_assignment::value; } -23376: -23376: static constexpr bool _S_propagate_on_move_assign() -23376: { return _Base_type::propagate_on_container_move_assignment::value; } -23376: -23376: static constexpr bool _S_propagate_on_swap() -23376: { return _Base_type::propagate_on_container_swap::value; } -23376: -23376: static constexpr bool _S_always_equal() -23376: { return _Base_type::is_always_equal::value; } -23376: -23376: static constexpr bool _S_nothrow_move() -23376: { return _S_propagate_on_move_assign() || _S_always_equal(); } -23376: -23376: template -23376: struct rebind -23376: { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; -23376: # 158 "/usr/include/c++/8/ext/alloc_traits.h" 3 -23376: }; -23376: -23376: -23376: } -23376: # 62 "/usr/include/c++/8/bits/stl_construct.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: _Construct(_T1* __p, _Args&&... __args) -23376: { ::new(static_cast(__p)) _T1(std::forward<_Args>(__args)...); } -23376: # 87 "/usr/include/c++/8/bits/stl_construct.h" 3 -23376: template -23376: inline void -23376: _Construct_novalue(_T1* __p) -23376: { ::new(static_cast(__p)) _T1; } -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: _Destroy(_Tp* __pointer) -23376: { __pointer->~_Tp(); } -23376: -23376: template -23376: struct _Destroy_aux -23376: { -23376: template -23376: static void -23376: __destroy(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: for (; __first != __last; ++__first) -23376: std::_Destroy(std::__addressof(*__first)); -23376: } -23376: }; -23376: -23376: template<> -23376: struct _Destroy_aux -23376: { -23376: template -23376: static void -23376: __destroy(_ForwardIterator, _ForwardIterator) { } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: _Destroy(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _Value_type; -23376: -23376: -23376: static_assert(is_destructible<_Value_type>::value, -23376: "value type is destructible"); -23376: -23376: std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: -23376: __destroy(__first, __last); -23376: } -23376: -23376: template -23376: struct _Destroy_n_aux -23376: { -23376: template -23376: static _ForwardIterator -23376: __destroy_n(_ForwardIterator __first, _Size __count) -23376: { -23376: for (; __count > 0; (void)++__first, --__count) -23376: std::_Destroy(std::__addressof(*__first)); -23376: return __first; -23376: } -23376: }; -23376: -23376: template<> -23376: struct _Destroy_n_aux -23376: { -23376: template -23376: static _ForwardIterator -23376: __destroy_n(_ForwardIterator __first, _Size __count) -23376: { -23376: std::advance(__first, __count); -23376: return __first; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline _ForwardIterator -23376: _Destroy_n(_ForwardIterator __first, _Size __count) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _Value_type; -23376: -23376: -23376: static_assert(is_destructible<_Value_type>::value, -23376: "value type is destructible"); -23376: -23376: return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: -23376: __destroy_n(__first, __count); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: _Destroy(_ForwardIterator __first, _ForwardIterator __last, -23376: _Allocator& __alloc) -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __first != __last; ++__first) -23376: __traits::destroy(__alloc, std::__addressof(*__first)); -23376: } -23376: -23376: template -23376: inline void -23376: _Destroy(_ForwardIterator __first, _ForwardIterator __last, -23376: allocator<_Tp>&) -23376: { -23376: _Destroy(__first, __last); -23376: } -23376: # 232 "/usr/include/c++/8/bits/stl_construct.h" 3 -23376: -23376: } -23376: # 61 "/usr/include/c++/8/bits/stl_tempbuf.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 83 "/usr/include/c++/8/bits/stl_tempbuf.h" 3 -23376: template -23376: pair<_Tp*, ptrdiff_t> -23376: get_temporary_buffer(ptrdiff_t __len) noexcept -23376: { -23376: const ptrdiff_t __max = -23376: __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); -23376: if (__len > __max) -23376: __len = __max; -23376: -23376: while (__len > 0) -23376: { -23376: _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), -23376: std::nothrow)); -23376: if (__tmp != 0) -23376: return std::pair<_Tp*, ptrdiff_t>(__tmp, __len); -23376: __len /= 2; -23376: } -23376: return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); -23376: } -23376: # 110 "/usr/include/c++/8/bits/stl_tempbuf.h" 3 -23376: template -23376: inline void -23376: return_temporary_buffer(_Tp* __p) -23376: { ::operator delete(__p, std::nothrow); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class _Temporary_buffer -23376: { -23376: -23376: -23376: -23376: public: -23376: typedef _Tp value_type; -23376: typedef value_type* pointer; -23376: typedef pointer iterator; -23376: typedef ptrdiff_t size_type; -23376: -23376: protected: -23376: size_type _M_original_len; -23376: size_type _M_len; -23376: pointer _M_buffer; -23376: -23376: public: -23376: -23376: size_type -23376: size() const -23376: { return _M_len; } -23376: -23376: -23376: size_type -23376: requested_size() const -23376: { return _M_original_len; } -23376: -23376: -23376: iterator -23376: begin() -23376: { return _M_buffer; } -23376: -23376: -23376: iterator -23376: end() -23376: { return _M_buffer + _M_len; } -23376: -23376: -23376: -23376: -23376: -23376: _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last); -23376: -23376: ~_Temporary_buffer() -23376: { -23376: std::_Destroy(_M_buffer, _M_buffer + _M_len); -23376: std::return_temporary_buffer(_M_buffer); -23376: } -23376: -23376: private: -23376: -23376: _Temporary_buffer(const _Temporary_buffer&); -23376: -23376: void -23376: operator=(const _Temporary_buffer&); -23376: }; -23376: -23376: -23376: template -23376: struct __uninitialized_construct_buf_dispatch -23376: { -23376: template -23376: static void -23376: __ucr(_Pointer __first, _Pointer __last, -23376: _ForwardIterator __seed) -23376: { -23376: if(__first == __last) -23376: return; -23376: -23376: _Pointer __cur = __first; -23376: try -23376: { -23376: std::_Construct(std::__addressof(*__first), -23376: std::move(*__seed)); -23376: _Pointer __prev = __cur; -23376: ++__cur; -23376: for(; __cur != __last; ++__cur, ++__prev) -23376: std::_Construct(std::__addressof(*__cur), -23376: std::move(*__prev)); -23376: *__seed = std::move(*__prev); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_construct_buf_dispatch -23376: { -23376: template -23376: static void -23376: __ucr(_Pointer, _Pointer, _ForwardIterator) { } -23376: }; -23376: # 229 "/usr/include/c++/8/bits/stl_tempbuf.h" 3 -23376: template -23376: inline void -23376: __uninitialized_construct_buf(_Pointer __first, _Pointer __last, -23376: _ForwardIterator __seed) -23376: { -23376: typedef typename std::iterator_traits<_Pointer>::value_type -23376: _ValueType; -23376: -23376: std::__uninitialized_construct_buf_dispatch< -23376: __has_trivial_constructor(_ValueType)>:: -23376: __ucr(__first, __last, __seed); -23376: } -23376: -23376: template -23376: _Temporary_buffer<_ForwardIterator, _Tp>:: -23376: _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) -23376: : _M_original_len(std::distance(__first, __last)), -23376: _M_len(0), _M_buffer(0) -23376: { -23376: try -23376: { -23376: std::pair __p(std::get_temporary_buffer< -23376: value_type>(_M_original_len)); -23376: _M_buffer = __p.first; -23376: _M_len = __p.second; -23376: if (_M_buffer) -23376: std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len, -23376: __first); -23376: } -23376: catch(...) -23376: { -23376: std::return_temporary_buffer(_M_buffer); -23376: _M_buffer = 0; -23376: _M_len = 0; -23376: throw; -23376: } -23376: } -23376: -23376: -23376: } -23376: # 63 "/usr/include/c++/8/bits/stl_algo.h" 2 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/uniform_int_dist.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/uniform_int_dist.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: namespace __detail -23376: { -23376: -23376: template -23376: inline bool -23376: _Power_of_2(_Tp __x) -23376: { -23376: return ((__x - 1) & __x) == 0; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class uniform_int_distribution -23376: { -23376: static_assert(std::is_integral<_IntType>::value, -23376: "template argument must be an integral type"); -23376: -23376: public: -23376: -23376: typedef _IntType result_type; -23376: -23376: struct param_type -23376: { -23376: typedef uniform_int_distribution<_IntType> distribution_type; -23376: -23376: explicit -23376: param_type(_IntType __a = 0, -23376: _IntType __b = std::numeric_limits<_IntType>::max()) -23376: : _M_a(__a), _M_b(__b) -23376: { -23376: ; -23376: } -23376: -23376: result_type -23376: a() const -23376: { return _M_a; } -23376: -23376: result_type -23376: b() const -23376: { return _M_b; } -23376: -23376: friend bool -23376: operator==(const param_type& __p1, const param_type& __p2) -23376: { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; } -23376: -23376: friend bool -23376: operator!=(const param_type& __p1, const param_type& __p2) -23376: { return !(__p1 == __p2); } -23376: -23376: private: -23376: _IntType _M_a; -23376: _IntType _M_b; -23376: }; -23376: -23376: public: -23376: -23376: -23376: -23376: explicit -23376: uniform_int_distribution(_IntType __a = 0, -23376: _IntType __b = std::numeric_limits<_IntType>::max()) -23376: : _M_param(__a, __b) -23376: { } -23376: -23376: explicit -23376: uniform_int_distribution(const param_type& __p) -23376: : _M_param(__p) -23376: { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: reset() { } -23376: -23376: result_type -23376: a() const -23376: { return _M_param.a(); } -23376: -23376: result_type -23376: b() const -23376: { return _M_param.b(); } -23376: -23376: -23376: -23376: -23376: param_type -23376: param() const -23376: { return _M_param; } -23376: -23376: -23376: -23376: -23376: -23376: void -23376: param(const param_type& __param) -23376: { _M_param = __param; } -23376: -23376: -23376: -23376: -23376: result_type -23376: min() const -23376: { return this->a(); } -23376: -23376: -23376: -23376: -23376: result_type -23376: max() const -23376: { return this->b(); } -23376: -23376: -23376: -23376: -23376: template -23376: result_type -23376: operator()(_UniformRandomNumberGenerator& __urng) -23376: { return this->operator()(__urng, _M_param); } -23376: -23376: template -23376: result_type -23376: operator()(_UniformRandomNumberGenerator& __urng, -23376: const param_type& __p); -23376: -23376: template -23376: void -23376: __generate(_ForwardIterator __f, _ForwardIterator __t, -23376: _UniformRandomNumberGenerator& __urng) -23376: { this->__generate(__f, __t, __urng, _M_param); } -23376: -23376: template -23376: void -23376: __generate(_ForwardIterator __f, _ForwardIterator __t, -23376: _UniformRandomNumberGenerator& __urng, -23376: const param_type& __p) -23376: { this->__generate_impl(__f, __t, __urng, __p); } -23376: -23376: template -23376: void -23376: __generate(result_type* __f, result_type* __t, -23376: _UniformRandomNumberGenerator& __urng, -23376: const param_type& __p) -23376: { this->__generate_impl(__f, __t, __urng, __p); } -23376: -23376: -23376: -23376: -23376: -23376: friend bool -23376: operator==(const uniform_int_distribution& __d1, -23376: const uniform_int_distribution& __d2) -23376: { return __d1._M_param == __d2._M_param; } -23376: -23376: private: -23376: template -23376: void -23376: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, -23376: _UniformRandomNumberGenerator& __urng, -23376: const param_type& __p); -23376: -23376: param_type _M_param; -23376: }; -23376: -23376: template -23376: template -23376: typename uniform_int_distribution<_IntType>::result_type -23376: uniform_int_distribution<_IntType>:: -23376: operator()(_UniformRandomNumberGenerator& __urng, -23376: const param_type& __param) -23376: { -23376: typedef typename _UniformRandomNumberGenerator::result_type -23376: _Gresult_type; -23376: typedef typename std::make_unsigned::type __utype; -23376: typedef typename std::common_type<_Gresult_type, __utype>::type -23376: __uctype; -23376: -23376: const __uctype __urngmin = __urng.min(); -23376: const __uctype __urngmax = __urng.max(); -23376: const __uctype __urngrange = __urngmax - __urngmin; -23376: const __uctype __urange -23376: = __uctype(__param.b()) - __uctype(__param.a()); -23376: -23376: __uctype __ret; -23376: -23376: if (__urngrange > __urange) -23376: { -23376: -23376: const __uctype __uerange = __urange + 1; -23376: const __uctype __scaling = __urngrange / __uerange; -23376: const __uctype __past = __uerange * __scaling; -23376: do -23376: __ret = __uctype(__urng()) - __urngmin; -23376: while (__ret >= __past); -23376: __ret /= __scaling; -23376: } -23376: else if (__urngrange < __urange) -23376: { -23376: # 264 "/usr/include/c++/8/bits/uniform_int_dist.h" 3 -23376: __uctype __tmp; -23376: do -23376: { -23376: const __uctype __uerngrange = __urngrange + 1; -23376: __tmp = (__uerngrange * operator() -23376: (__urng, param_type(0, __urange / __uerngrange))); -23376: __ret = __tmp + (__uctype(__urng()) - __urngmin); -23376: } -23376: while (__ret > __urange || __ret < __tmp); -23376: } -23376: else -23376: __ret = __uctype(__urng()) - __urngmin; -23376: -23376: return __ret + __param.a(); -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: uniform_int_distribution<_IntType>:: -23376: __generate_impl(_ForwardIterator __f, _ForwardIterator __t, -23376: _UniformRandomNumberGenerator& __urng, -23376: const param_type& __param) -23376: { -23376: -23376: typedef typename _UniformRandomNumberGenerator::result_type -23376: _Gresult_type; -23376: typedef typename std::make_unsigned::type __utype; -23376: typedef typename std::common_type<_Gresult_type, __utype>::type -23376: __uctype; -23376: -23376: const __uctype __urngmin = __urng.min(); -23376: const __uctype __urngmax = __urng.max(); -23376: const __uctype __urngrange = __urngmax - __urngmin; -23376: const __uctype __urange -23376: = __uctype(__param.b()) - __uctype(__param.a()); -23376: -23376: __uctype __ret; -23376: -23376: if (__urngrange > __urange) -23376: { -23376: if (__detail::_Power_of_2(__urngrange + 1) -23376: && __detail::_Power_of_2(__urange + 1)) -23376: { -23376: while (__f != __t) -23376: { -23376: __ret = __uctype(__urng()) - __urngmin; -23376: *__f++ = (__ret & __urange) + __param.a(); -23376: } -23376: } -23376: else -23376: { -23376: -23376: const __uctype __uerange = __urange + 1; -23376: const __uctype __scaling = __urngrange / __uerange; -23376: const __uctype __past = __uerange * __scaling; -23376: while (__f != __t) -23376: { -23376: do -23376: __ret = __uctype(__urng()) - __urngmin; -23376: while (__ret >= __past); -23376: *__f++ = __ret / __scaling + __param.a(); -23376: } -23376: } -23376: } -23376: else if (__urngrange < __urange) -23376: { -23376: # 348 "/usr/include/c++/8/bits/uniform_int_dist.h" 3 -23376: __uctype __tmp; -23376: while (__f != __t) -23376: { -23376: do -23376: { -23376: const __uctype __uerngrange = __urngrange + 1; -23376: __tmp = (__uerngrange * operator() -23376: (__urng, param_type(0, __urange / __uerngrange))); -23376: __ret = __tmp + (__uctype(__urng()) - __urngmin); -23376: } -23376: while (__ret > __urange || __ret < __tmp); -23376: *__f++ = __ret; -23376: } -23376: } -23376: else -23376: while (__f != __t) -23376: *__f++ = __uctype(__urng()) - __urngmin + __param.a(); -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 67 "/usr/include/c++/8/bits/stl_algo.h" 2 3 -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: void -23376: __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, -23376: _Iterator __c, _Compare __comp) -23376: { -23376: if (__comp(__a, __b)) -23376: { -23376: if (__comp(__b, __c)) -23376: std::iter_swap(__result, __b); -23376: else if (__comp(__a, __c)) -23376: std::iter_swap(__result, __c); -23376: else -23376: std::iter_swap(__result, __a); -23376: } -23376: else if (__comp(__a, __c)) -23376: std::iter_swap(__result, __a); -23376: else if (__comp(__b, __c)) -23376: std::iter_swap(__result, __c); -23376: else -23376: std::iter_swap(__result, __b); -23376: } -23376: -23376: -23376: template -23376: inline _InputIterator -23376: __find_if(_InputIterator __first, _InputIterator __last, -23376: _Predicate __pred, input_iterator_tag) -23376: { -23376: while (__first != __last && !__pred(__first)) -23376: ++__first; -23376: return __first; -23376: } -23376: -23376: -23376: template -23376: _RandomAccessIterator -23376: __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Predicate __pred, random_access_iterator_tag) -23376: { -23376: typename iterator_traits<_RandomAccessIterator>::difference_type -23376: __trip_count = (__last - __first) >> 2; -23376: -23376: for (; __trip_count > 0; --__trip_count) -23376: { -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: } -23376: -23376: switch (__last - __first) -23376: { -23376: case 3: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: case 2: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: case 1: -23376: if (__pred(__first)) -23376: return __first; -23376: ++__first; -23376: case 0: -23376: default: -23376: return __last; -23376: } -23376: } -23376: -23376: template -23376: inline _Iterator -23376: __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) -23376: { -23376: return __find_if(__first, __last, __pred, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: -23376: template -23376: inline _InputIterator -23376: __find_if_not(_InputIterator __first, _InputIterator __last, -23376: _Predicate __pred) -23376: { -23376: return std::__find_if(__first, __last, -23376: __gnu_cxx::__ops::__negate(__pred), -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: _InputIterator -23376: __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred) -23376: { -23376: for (; __len; --__len, (void) ++__first) -23376: if (!__pred(__first)) -23376: break; -23376: return __first; -23376: } -23376: # 202 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _ForwardIterator1 -23376: __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: _BinaryPredicate __predicate) -23376: { -23376: -23376: if (__first1 == __last1 || __first2 == __last2) -23376: return __first1; -23376: -23376: -23376: _ForwardIterator2 __p1(__first2); -23376: if (++__p1 == __last2) -23376: return std::__find_if(__first1, __last1, -23376: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); -23376: -23376: -23376: _ForwardIterator2 __p; -23376: _ForwardIterator1 __current = __first1; -23376: -23376: for (;;) -23376: { -23376: __first1 = -23376: std::__find_if(__first1, __last1, -23376: __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); -23376: -23376: if (__first1 == __last1) -23376: return __last1; -23376: -23376: __p = __p1; -23376: __current = __first1; -23376: if (++__current == __last1) -23376: return __last1; -23376: -23376: while (__predicate(__current, __p)) -23376: { -23376: if (++__p == __last2) -23376: return __first1; -23376: if (++__current == __last1) -23376: return __last1; -23376: } -23376: ++__first1; -23376: } -23376: return __first1; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __search_n_aux(_ForwardIterator __first, _ForwardIterator __last, -23376: _Integer __count, _UnaryPredicate __unary_pred, -23376: std::forward_iterator_tag) -23376: { -23376: __first = std::__find_if(__first, __last, __unary_pred); -23376: while (__first != __last) -23376: { -23376: typename iterator_traits<_ForwardIterator>::difference_type -23376: __n = __count; -23376: _ForwardIterator __i = __first; -23376: ++__i; -23376: while (__i != __last && __n != 1 && __unary_pred(__i)) -23376: { -23376: ++__i; -23376: --__n; -23376: } -23376: if (__n == 1) -23376: return __first; -23376: if (__i == __last) -23376: return __last; -23376: __first = std::__find_if(++__i, __last, __unary_pred); -23376: } -23376: return __last; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _RandomAccessIter -23376: __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last, -23376: _Integer __count, _UnaryPredicate __unary_pred, -23376: std::random_access_iterator_tag) -23376: { -23376: typedef typename std::iterator_traits<_RandomAccessIter>::difference_type -23376: _DistanceType; -23376: -23376: _DistanceType __tailSize = __last - __first; -23376: _DistanceType __remainder = __count; -23376: -23376: while (__remainder <= __tailSize) -23376: { -23376: __first += __remainder; -23376: __tailSize -= __remainder; -23376: -23376: -23376: _RandomAccessIter __backTrack = __first; -23376: while (__unary_pred(--__backTrack)) -23376: { -23376: if (--__remainder == 0) -23376: return (__first - __count); -23376: } -23376: __remainder = __count + 1 - (__first - __backTrack); -23376: } -23376: return __last; -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __search_n(_ForwardIterator __first, _ForwardIterator __last, -23376: _Integer __count, -23376: _UnaryPredicate __unary_pred) -23376: { -23376: if (__count <= 0) -23376: return __first; -23376: -23376: if (__count == 1) -23376: return std::__find_if(__first, __last, __unary_pred); -23376: -23376: return std::__search_n_aux(__first, __last, __count, __unary_pred, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: -23376: template -23376: _ForwardIterator1 -23376: __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: forward_iterator_tag, forward_iterator_tag, -23376: _BinaryPredicate __comp) -23376: { -23376: if (__first2 == __last2) -23376: return __last1; -23376: -23376: _ForwardIterator1 __result = __last1; -23376: while (1) -23376: { -23376: _ForwardIterator1 __new_result -23376: = std::__search(__first1, __last1, __first2, __last2, __comp); -23376: if (__new_result == __last1) -23376: return __result; -23376: else -23376: { -23376: __result = __new_result; -23376: __first1 = __new_result; -23376: ++__first1; -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: _BidirectionalIterator1 -23376: __find_end(_BidirectionalIterator1 __first1, -23376: _BidirectionalIterator1 __last1, -23376: _BidirectionalIterator2 __first2, -23376: _BidirectionalIterator2 __last2, -23376: bidirectional_iterator_tag, bidirectional_iterator_tag, -23376: _BinaryPredicate __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1; -23376: typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2; -23376: -23376: _RevIterator1 __rlast1(__first1); -23376: _RevIterator2 __rlast2(__first2); -23376: _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1, -23376: _RevIterator2(__last2), __rlast2, -23376: __comp); -23376: -23376: if (__rresult == __rlast1) -23376: return __last1; -23376: else -23376: { -23376: _BidirectionalIterator1 __result = __rresult.base(); -23376: std::advance(__result, -std::distance(__first2, __last2)); -23376: return __result; -23376: } -23376: } -23376: # 423 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator1 -23376: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__find_end(__first1, __last1, __first2, __last2, -23376: std::__iterator_category(__first1), -23376: std::__iterator_category(__first2), -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 471 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator1 -23376: find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: _BinaryPredicate __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__find_end(__first1, __last1, __first2, __last2, -23376: std::__iterator_category(__first1), -23376: std::__iterator_category(__first2), -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: # 506 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) -23376: { return __last == std::find_if_not(__first, __last, __pred); } -23376: # 523 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) -23376: { return __last == std::find_if(__first, __last, __pred); } -23376: # 541 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) -23376: { return !std::none_of(__first, __last, __pred); } -23376: # 556 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _InputIterator -23376: find_if_not(_InputIterator __first, _InputIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: return std::__find_if_not(__first, __last, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: # 580 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_partitioned(_InputIterator __first, _InputIterator __last, -23376: _Predicate __pred) -23376: { -23376: __first = std::find_if_not(__first, __last, __pred); -23376: if (__first == __last) -23376: return true; -23376: ++__first; -23376: return std::none_of(__first, __last, __pred); -23376: } -23376: # 601 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _ForwardIterator -23376: partition_point(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: typedef typename iterator_traits<_ForwardIterator>::difference_type -23376: _DistanceType; -23376: -23376: _DistanceType __len = std::distance(__first, __last); -23376: _DistanceType __half; -23376: _ForwardIterator __middle; -23376: -23376: while (__len > 0) -23376: { -23376: __half = __len >> 1; -23376: __middle = __first; -23376: std::advance(__middle, __half); -23376: if (__pred(*__middle)) -23376: { -23376: __first = __middle; -23376: ++__first; -23376: __len = __len - __half - 1; -23376: } -23376: else -23376: __len = __half; -23376: } -23376: return __first; -23376: } -23376: -23376: -23376: template -23376: _OutputIterator -23376: __remove_copy_if(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, _Predicate __pred) -23376: { -23376: for (; __first != __last; ++__first) -23376: if (!__pred(__first)) -23376: { -23376: *__result = *__first; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: # 668 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: remove_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, const _Tp& __value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__remove_copy_if(__first, __last, __result, -23376: __gnu_cxx::__ops::__iter_equals_val(__value)); -23376: } -23376: # 700 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: remove_copy_if(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__remove_copy_if(__first, __last, __result, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: # 734 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _OutputIterator -23376: copy_if(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first) -23376: if (__pred(*__first)) -23376: { -23376: *__result = *__first; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __copy_n(_InputIterator __first, _Size __n, -23376: _OutputIterator __result, input_iterator_tag) -23376: { -23376: if (__n > 0) -23376: { -23376: while (true) -23376: { -23376: *__result = *__first; -23376: ++__result; -23376: if (--__n > 0) -23376: ++__first; -23376: else -23376: break; -23376: } -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: inline _OutputIterator -23376: __copy_n(_RandomAccessIterator __first, _Size __n, -23376: _OutputIterator __result, random_access_iterator_tag) -23376: { return std::copy(__first, __first + __n, __result); } -23376: # 797 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: return std::__copy_n(__first, __n, __result, -23376: std::__iterator_category(__first)); -23376: } -23376: # 825 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: pair<_OutputIterator1, _OutputIterator2> -23376: partition_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator1 __out_true, _OutputIterator2 __out_false, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first) -23376: if (__pred(*__first)) -23376: { -23376: *__out_true = *__first; -23376: ++__out_true; -23376: } -23376: else -23376: { -23376: *__out_false = *__first; -23376: ++__out_false; -23376: } -23376: -23376: return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); -23376: } -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __remove_if(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: __first = std::__find_if(__first, __last, __pred); -23376: if (__first == __last) -23376: return __first; -23376: _ForwardIterator __result = __first; -23376: ++__first; -23376: for (; __first != __last; ++__first) -23376: if (!__pred(__first)) -23376: { -23376: *__result = std::move(*__first); -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: # 894 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: remove(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__remove_if(__first, __last, -23376: __gnu_cxx::__ops::__iter_equals_val(__value)); -23376: } -23376: # 927 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: remove_if(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__remove_if(__first, __last, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __adjacent_find(_ForwardIterator __first, _ForwardIterator __last, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: if (__first == __last) -23376: return __last; -23376: _ForwardIterator __next = __first; -23376: while (++__next != __last) -23376: { -23376: if (__binary_pred(__first, __next)) -23376: return __first; -23376: __first = __next; -23376: } -23376: return __last; -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __unique(_ForwardIterator __first, _ForwardIterator __last, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: __first = std::__adjacent_find(__first, __last, __binary_pred); -23376: if (__first == __last) -23376: return __last; -23376: -23376: -23376: _ForwardIterator __dest = __first; -23376: ++__first; -23376: while (++__first != __last) -23376: if (!__binary_pred(__dest, __first)) -23376: *++__dest = std::move(*__first); -23376: return ++__dest; -23376: } -23376: # 993 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: unique(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__unique(__first, __last, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 1023 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: unique(_ForwardIterator __first, _ForwardIterator __last, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__unique(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _OutputIterator -23376: __unique_copy(_ForwardIterator __first, _ForwardIterator __last, -23376: _OutputIterator __result, _BinaryPredicate __binary_pred, -23376: forward_iterator_tag, output_iterator_tag) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: _ForwardIterator __next = __first; -23376: *__result = *__first; -23376: while (++__next != __last) -23376: if (!__binary_pred(__first, __next)) -23376: { -23376: __first = __next; -23376: *++__result = *__first; -23376: } -23376: return ++__result; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _OutputIterator -23376: __unique_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, _BinaryPredicate __binary_pred, -23376: input_iterator_tag, output_iterator_tag) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: typename iterator_traits<_InputIterator>::value_type __value = *__first; -23376: __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred)) -23376: __rebound_pred -23376: = __gnu_cxx::__ops::__iter_comp_val(__binary_pred); -23376: *__result = __value; -23376: while (++__first != __last) -23376: if (!__rebound_pred(__first, __value)) -23376: { -23376: __value = *__first; -23376: *++__result = __value; -23376: } -23376: return ++__result; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __unique_copy(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result, _BinaryPredicate __binary_pred, -23376: input_iterator_tag, forward_iterator_tag) -23376: { -23376: -23376: -23376: -23376: -23376: *__result = *__first; -23376: while (++__first != __last) -23376: if (!__binary_pred(__result, __first)) -23376: *++__result = *__first; -23376: return ++__result; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, -23376: bidirectional_iterator_tag) -23376: { -23376: while (true) -23376: if (__first == __last || __first == --__last) -23376: return; -23376: else -23376: { -23376: std::iter_swap(__first, __last); -23376: ++__first; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: random_access_iterator_tag) -23376: { -23376: if (__first == __last) -23376: return; -23376: --__last; -23376: while (__first < __last) -23376: { -23376: std::iter_swap(__first, __last); -23376: ++__first; -23376: --__last; -23376: } -23376: } -23376: # 1178 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) -23376: { -23376: -23376: -23376: -23376: ; -23376: std::__reverse(__first, __last, std::__iterator_category(__first)); -23376: } -23376: # 1205 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _OutputIterator -23376: reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: while (__first != __last) -23376: { -23376: --__last; -23376: *__result = *__last; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _EuclideanRingElement -23376: __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) -23376: { -23376: while (__n != 0) -23376: { -23376: _EuclideanRingElement __t = __m % __n; -23376: __m = __n; -23376: __n = __t; -23376: } -23376: return __m; -23376: } -23376: -23376: inline namespace _V2 -23376: { -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __rotate(_ForwardIterator __first, -23376: _ForwardIterator __middle, -23376: _ForwardIterator __last, -23376: forward_iterator_tag) -23376: { -23376: if (__first == __middle) -23376: return __last; -23376: else if (__last == __middle) -23376: return __first; -23376: -23376: _ForwardIterator __first2 = __middle; -23376: do -23376: { -23376: std::iter_swap(__first, __first2); -23376: ++__first; -23376: ++__first2; -23376: if (__first == __middle) -23376: __middle = __first2; -23376: } -23376: while (__first2 != __last); -23376: -23376: _ForwardIterator __ret = __first; -23376: -23376: __first2 = __middle; -23376: -23376: while (__first2 != __last) -23376: { -23376: std::iter_swap(__first, __first2); -23376: ++__first; -23376: ++__first2; -23376: if (__first == __middle) -23376: __middle = __first2; -23376: else if (__first2 == __last) -23376: __first2 = __middle; -23376: } -23376: return __ret; -23376: } -23376: -23376: -23376: template -23376: _BidirectionalIterator -23376: __rotate(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last, -23376: bidirectional_iterator_tag) -23376: { -23376: -23376: -23376: -23376: -23376: if (__first == __middle) -23376: return __last; -23376: else if (__last == __middle) -23376: return __first; -23376: -23376: std::__reverse(__first, __middle, bidirectional_iterator_tag()); -23376: std::__reverse(__middle, __last, bidirectional_iterator_tag()); -23376: -23376: while (__first != __middle && __middle != __last) -23376: { -23376: std::iter_swap(__first, --__last); -23376: ++__first; -23376: } -23376: -23376: if (__first == __middle) -23376: { -23376: std::__reverse(__middle, __last, bidirectional_iterator_tag()); -23376: return __last; -23376: } -23376: else -23376: { -23376: std::__reverse(__first, __middle, bidirectional_iterator_tag()); -23376: return __first; -23376: } -23376: } -23376: -23376: -23376: template -23376: _RandomAccessIterator -23376: __rotate(_RandomAccessIterator __first, -23376: _RandomAccessIterator __middle, -23376: _RandomAccessIterator __last, -23376: random_access_iterator_tag) -23376: { -23376: -23376: -23376: -23376: -23376: if (__first == __middle) -23376: return __last; -23376: else if (__last == __middle) -23376: return __first; -23376: -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _Distance; -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: -23376: _Distance __n = __last - __first; -23376: _Distance __k = __middle - __first; -23376: -23376: if (__k == __n - __k) -23376: { -23376: std::swap_ranges(__first, __middle, __middle); -23376: return __middle; -23376: } -23376: -23376: _RandomAccessIterator __p = __first; -23376: _RandomAccessIterator __ret = __first + (__last - __middle); -23376: -23376: for (;;) -23376: { -23376: if (__k < __n - __k) -23376: { -23376: if (__is_pod(_ValueType) && __k == 1) -23376: { -23376: _ValueType __t = std::move(*__p); -23376: std::move(__p + 1, __p + __n, __p); -23376: *(__p + __n - 1) = std::move(__t); -23376: return __ret; -23376: } -23376: _RandomAccessIterator __q = __p + __k; -23376: for (_Distance __i = 0; __i < __n - __k; ++ __i) -23376: { -23376: std::iter_swap(__p, __q); -23376: ++__p; -23376: ++__q; -23376: } -23376: __n %= __k; -23376: if (__n == 0) -23376: return __ret; -23376: std::swap(__n, __k); -23376: __k = __n - __k; -23376: } -23376: else -23376: { -23376: __k = __n - __k; -23376: if (__is_pod(_ValueType) && __k == 1) -23376: { -23376: _ValueType __t = std::move(*(__p + __n - 1)); -23376: std::move_backward(__p, __p + __n - 1, __p + __n); -23376: *__p = std::move(__t); -23376: return __ret; -23376: } -23376: _RandomAccessIterator __q = __p + __n; -23376: __p = __q - __k; -23376: for (_Distance __i = 0; __i < __n - __k; ++ __i) -23376: { -23376: --__p; -23376: --__q; -23376: std::iter_swap(__p, __q); -23376: } -23376: __n %= __k; -23376: if (__n == 0) -23376: return __ret; -23376: std::swap(__n, __k); -23376: } -23376: } -23376: } -23376: # 1432 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: rotate(_ForwardIterator __first, _ForwardIterator __middle, -23376: _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__rotate(__first, __middle, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: } -23376: # 1469 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, -23376: _ForwardIterator __last, _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::copy(__first, __middle, -23376: std::copy(__middle, __last, __result)); -23376: } -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __partition(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred, forward_iterator_tag) -23376: { -23376: if (__first == __last) -23376: return __first; -23376: -23376: while (__pred(*__first)) -23376: if (++__first == __last) -23376: return __first; -23376: -23376: _ForwardIterator __next = __first; -23376: -23376: while (++__next != __last) -23376: if (__pred(*__next)) -23376: { -23376: std::iter_swap(__first, __next); -23376: ++__first; -23376: } -23376: -23376: return __first; -23376: } -23376: -23376: -23376: template -23376: _BidirectionalIterator -23376: __partition(_BidirectionalIterator __first, _BidirectionalIterator __last, -23376: _Predicate __pred, bidirectional_iterator_tag) -23376: { -23376: while (true) -23376: { -23376: while (true) -23376: if (__first == __last) -23376: return __first; -23376: else if (__pred(*__first)) -23376: ++__first; -23376: else -23376: break; -23376: --__last; -23376: while (true) -23376: if (__first == __last) -23376: return __first; -23376: else if (!bool(__pred(*__last))) -23376: --__last; -23376: else -23376: break; -23376: std::iter_swap(__first, __last); -23376: ++__first; -23376: } -23376: } -23376: # 1546 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _ForwardIterator -23376: __stable_partition_adaptive(_ForwardIterator __first, -23376: _ForwardIterator __last, -23376: _Predicate __pred, _Distance __len, -23376: _Pointer __buffer, -23376: _Distance __buffer_size) -23376: { -23376: if (__len == 1) -23376: return __first; -23376: -23376: if (__len <= __buffer_size) -23376: { -23376: _ForwardIterator __result1 = __first; -23376: _Pointer __result2 = __buffer; -23376: -23376: -23376: -23376: -23376: *__result2 = std::move(*__first); -23376: ++__result2; -23376: ++__first; -23376: for (; __first != __last; ++__first) -23376: if (__pred(__first)) -23376: { -23376: *__result1 = std::move(*__first); -23376: ++__result1; -23376: } -23376: else -23376: { -23376: *__result2 = std::move(*__first); -23376: ++__result2; -23376: } -23376: -23376: std::move(__buffer, __result2, __result1); -23376: return __result1; -23376: } -23376: -23376: _ForwardIterator __middle = __first; -23376: std::advance(__middle, __len / 2); -23376: _ForwardIterator __left_split = -23376: std::__stable_partition_adaptive(__first, __middle, __pred, -23376: __len / 2, __buffer, -23376: __buffer_size); -23376: -23376: -23376: -23376: _Distance __right_len = __len - __len / 2; -23376: _ForwardIterator __right_split = -23376: std::__find_if_not_n(__middle, __right_len, __pred); -23376: -23376: if (__right_len) -23376: __right_split = -23376: std::__stable_partition_adaptive(__right_split, __last, __pred, -23376: __right_len, -23376: __buffer, __buffer_size); -23376: -23376: std::rotate(__left_split, __middle, __right_split); -23376: std::advance(__left_split, std::distance(__middle, __right_split)); -23376: return __left_split; -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __stable_partition(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: __first = std::__find_if_not(__first, __last, __pred); -23376: -23376: if (__first == __last) -23376: return __first; -23376: -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_ForwardIterator>::difference_type -23376: _DistanceType; -23376: -23376: _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last); -23376: return -23376: std::__stable_partition_adaptive(__first, __last, __pred, -23376: _DistanceType(__buf.requested_size()), -23376: __buf.begin(), -23376: _DistanceType(__buf.size())); -23376: } -23376: # 1649 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: stable_partition(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__stable_partition(__first, __last, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: -23376: -23376: template -23376: void -23376: __heap_select(_RandomAccessIterator __first, -23376: _RandomAccessIterator __middle, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: std::__make_heap(__first, __middle, __comp); -23376: for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) -23376: if (__comp(__i, __first)) -23376: std::__pop_heap(__first, __middle, __i, __comp); -23376: } -23376: -23376: -23376: -23376: template -23376: _RandomAccessIterator -23376: __partial_sort_copy(_InputIterator __first, _InputIterator __last, -23376: _RandomAccessIterator __result_first, -23376: _RandomAccessIterator __result_last, -23376: _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_InputIterator>::value_type -23376: _InputValueType; -23376: typedef iterator_traits<_RandomAccessIterator> _RItTraits; -23376: typedef typename _RItTraits::difference_type _DistanceType; -23376: -23376: if (__result_first == __result_last) -23376: return __result_last; -23376: _RandomAccessIterator __result_real_last = __result_first; -23376: while (__first != __last && __result_real_last != __result_last) -23376: { -23376: *__result_real_last = *__first; -23376: ++__result_real_last; -23376: ++__first; -23376: } -23376: -23376: std::__make_heap(__result_first, __result_real_last, __comp); -23376: while (__first != __last) -23376: { -23376: if (__comp(__first, __result_first)) -23376: std::__adjust_heap(__result_first, _DistanceType(0), -23376: _DistanceType(__result_real_last -23376: - __result_first), -23376: _InputValueType(*__first), __comp); -23376: ++__first; -23376: } -23376: std::__sort_heap(__result_first, __result_real_last, __comp); -23376: return __result_real_last; -23376: } -23376: # 1735 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _RandomAccessIterator -23376: partial_sort_copy(_InputIterator __first, _InputIterator __last, -23376: _RandomAccessIterator __result_first, -23376: _RandomAccessIterator __result_last) -23376: { -23376: # 1749 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__partial_sort_copy(__first, __last, -23376: __result_first, __result_last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 1784 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _RandomAccessIterator -23376: partial_sort_copy(_InputIterator __first, _InputIterator __last, -23376: _RandomAccessIterator __result_first, -23376: _RandomAccessIterator __result_last, -23376: _Compare __comp) -23376: { -23376: # 1800 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__partial_sort_copy(__first, __last, -23376: __result_first, __result_last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: -23376: template -23376: void -23376: __unguarded_linear_insert(_RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: typename iterator_traits<_RandomAccessIterator>::value_type -23376: __val = std::move(*__last); -23376: _RandomAccessIterator __next = __last; -23376: --__next; -23376: while (__comp(__val, __next)) -23376: { -23376: *__last = std::move(*__next); -23376: __last = __next; -23376: --__next; -23376: } -23376: *__last = std::move(__val); -23376: } -23376: -23376: -23376: template -23376: void -23376: __insertion_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: if (__first == __last) return; -23376: -23376: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) -23376: { -23376: if (__comp(__i, __first)) -23376: { -23376: typename iterator_traits<_RandomAccessIterator>::value_type -23376: __val = std::move(*__i); -23376: std::move_backward(__first, __i, __i + 1); -23376: *__first = std::move(__val); -23376: } -23376: else -23376: std::__unguarded_linear_insert(__i, -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: } -23376: } -23376: -23376: -23376: template -23376: inline void -23376: __unguarded_insertion_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: for (_RandomAccessIterator __i = __first; __i != __last; ++__i) -23376: std::__unguarded_linear_insert(__i, -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: enum { _S_threshold = 16 }; -23376: -23376: -23376: template -23376: void -23376: __final_insertion_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: if (__last - __first > int(_S_threshold)) -23376: { -23376: std::__insertion_sort(__first, __first + int(_S_threshold), __comp); -23376: std::__unguarded_insertion_sort(__first + int(_S_threshold), __last, -23376: __comp); -23376: } -23376: else -23376: std::__insertion_sort(__first, __last, __comp); -23376: } -23376: -23376: -23376: template -23376: _RandomAccessIterator -23376: __unguarded_partition(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, -23376: _RandomAccessIterator __pivot, _Compare __comp) -23376: { -23376: while (true) -23376: { -23376: while (__comp(__first, __pivot)) -23376: ++__first; -23376: --__last; -23376: while (__comp(__pivot, __last)) -23376: --__last; -23376: if (!(__first < __last)) -23376: return __first; -23376: std::iter_swap(__first, __last); -23376: ++__first; -23376: } -23376: } -23376: -23376: -23376: template -23376: inline _RandomAccessIterator -23376: __unguarded_partition_pivot(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: _RandomAccessIterator __mid = __first + (__last - __first) / 2; -23376: std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, -23376: __comp); -23376: return std::__unguarded_partition(__first + 1, __last, __first, __comp); -23376: } -23376: -23376: template -23376: inline void -23376: __partial_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __middle, -23376: _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: std::__heap_select(__first, __middle, __last, __comp); -23376: std::__sort_heap(__first, __middle, __comp); -23376: } -23376: -23376: -23376: template -23376: void -23376: __introsort_loop(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, -23376: _Size __depth_limit, _Compare __comp) -23376: { -23376: while (__last - __first > int(_S_threshold)) -23376: { -23376: if (__depth_limit == 0) -23376: { -23376: std::__partial_sort(__first, __last, __last, __comp); -23376: return; -23376: } -23376: --__depth_limit; -23376: _RandomAccessIterator __cut = -23376: std::__unguarded_partition_pivot(__first, __last, __comp); -23376: std::__introsort_loop(__cut, __last, __depth_limit, __comp); -23376: __last = __cut; -23376: } -23376: } -23376: -23376: -23376: -23376: template -23376: inline void -23376: __sort(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: if (__first != __last) -23376: { -23376: std::__introsort_loop(__first, __last, -23376: std::__lg(__last - __first) * 2, -23376: __comp); -23376: std::__final_insertion_sort(__first, __last, __comp); -23376: } -23376: } -23376: -23376: template -23376: void -23376: __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth, -23376: _RandomAccessIterator __last, _Size __depth_limit, -23376: _Compare __comp) -23376: { -23376: while (__last - __first > 3) -23376: { -23376: if (__depth_limit == 0) -23376: { -23376: std::__heap_select(__first, __nth + 1, __last, __comp); -23376: -23376: std::iter_swap(__first, __nth); -23376: return; -23376: } -23376: --__depth_limit; -23376: _RandomAccessIterator __cut = -23376: std::__unguarded_partition_pivot(__first, __last, __comp); -23376: if (__cut <= __nth) -23376: __first = __cut; -23376: else -23376: __last = __cut; -23376: } -23376: std::__insertion_sort(__first, __last, __comp); -23376: } -23376: # 2021 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: lower_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__lower_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_comp_val(__comp)); -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __upper_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::difference_type -23376: _DistanceType; -23376: -23376: _DistanceType __len = std::distance(__first, __last); -23376: -23376: while (__len > 0) -23376: { -23376: _DistanceType __half = __len >> 1; -23376: _ForwardIterator __middle = __first; -23376: std::advance(__middle, __half); -23376: if (__comp(__val, __middle)) -23376: __len = __half; -23376: else -23376: { -23376: __first = __middle; -23376: ++__first; -23376: __len = __len - __half - 1; -23376: } -23376: } -23376: return __first; -23376: } -23376: # 2075 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: upper_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__upper_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__val_less_iter()); -23376: } -23376: # 2105 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: upper_bound(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__upper_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: pair<_ForwardIterator, _ForwardIterator> -23376: __equal_range(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, -23376: _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::difference_type -23376: _DistanceType; -23376: -23376: _DistanceType __len = std::distance(__first, __last); -23376: -23376: while (__len > 0) -23376: { -23376: _DistanceType __half = __len >> 1; -23376: _ForwardIterator __middle = __first; -23376: std::advance(__middle, __half); -23376: if (__comp_it_val(__middle, __val)) -23376: { -23376: __first = __middle; -23376: ++__first; -23376: __len = __len - __half - 1; -23376: } -23376: else if (__comp_val_it(__val, __middle)) -23376: __len = __half; -23376: else -23376: { -23376: _ForwardIterator __left -23376: = std::__lower_bound(__first, __middle, __val, __comp_it_val); -23376: std::advance(__first, __len); -23376: _ForwardIterator __right -23376: = std::__upper_bound(++__middle, __first, __val, __comp_val_it); -23376: return pair<_ForwardIterator, _ForwardIterator>(__left, __right); -23376: } -23376: } -23376: return pair<_ForwardIterator, _ForwardIterator>(__first, __first); -23376: } -23376: # 2176 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline pair<_ForwardIterator, _ForwardIterator> -23376: equal_range(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__equal_range(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_less_val(), -23376: __gnu_cxx::__ops::__val_less_iter()); -23376: } -23376: # 2212 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline pair<_ForwardIterator, _ForwardIterator> -23376: equal_range(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: ; -23376: -23376: return std::__equal_range(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_comp_val(__comp), -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: } -23376: # 2245 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: bool -23376: binary_search(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: _ForwardIterator __i -23376: = std::__lower_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_less_val()); -23376: return __i != __last && !(__val < *__i); -23376: } -23376: # 2278 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: bool -23376: binary_search(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __val, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: ; -23376: -23376: _ForwardIterator __i -23376: = std::__lower_bound(__first, __last, __val, -23376: __gnu_cxx::__ops::__iter_comp_val(__comp)); -23376: return __i != __last && !bool(__comp(__val, *__i)); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: { -23376: if (__comp(__first2, __first1)) -23376: { -23376: *__result = std::move(*__first2); -23376: ++__first2; -23376: } -23376: else -23376: { -23376: *__result = std::move(*__first1); -23376: ++__first1; -23376: } -23376: ++__result; -23376: } -23376: if (__first1 != __last1) -23376: std::move(__first1, __last1, __result); -23376: } -23376: -23376: -23376: template -23376: void -23376: __move_merge_adaptive_backward(_BidirectionalIterator1 __first1, -23376: _BidirectionalIterator1 __last1, -23376: _BidirectionalIterator2 __first2, -23376: _BidirectionalIterator2 __last2, -23376: _BidirectionalIterator3 __result, -23376: _Compare __comp) -23376: { -23376: if (__first1 == __last1) -23376: { -23376: std::move_backward(__first2, __last2, __result); -23376: return; -23376: } -23376: else if (__first2 == __last2) -23376: return; -23376: -23376: --__last1; -23376: --__last2; -23376: while (true) -23376: { -23376: if (__comp(__last2, __last1)) -23376: { -23376: *--__result = std::move(*__last1); -23376: if (__first1 == __last1) -23376: { -23376: std::move_backward(__first2, ++__last2, __result); -23376: return; -23376: } -23376: --__last1; -23376: } -23376: else -23376: { -23376: *--__result = std::move(*__last2); -23376: if (__first2 == __last2) -23376: return; -23376: --__last2; -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: _BidirectionalIterator1 -23376: __rotate_adaptive(_BidirectionalIterator1 __first, -23376: _BidirectionalIterator1 __middle, -23376: _BidirectionalIterator1 __last, -23376: _Distance __len1, _Distance __len2, -23376: _BidirectionalIterator2 __buffer, -23376: _Distance __buffer_size) -23376: { -23376: _BidirectionalIterator2 __buffer_end; -23376: if (__len1 > __len2 && __len2 <= __buffer_size) -23376: { -23376: if (__len2) -23376: { -23376: __buffer_end = std::move(__middle, __last, __buffer); -23376: std::move_backward(__first, __middle, __last); -23376: return std::move(__buffer, __buffer_end, __first); -23376: } -23376: else -23376: return __first; -23376: } -23376: else if (__len1 <= __buffer_size) -23376: { -23376: if (__len1) -23376: { -23376: __buffer_end = std::move(__first, __middle, __buffer); -23376: std::move(__middle, __last, __first); -23376: return std::move_backward(__buffer, __buffer_end, __last); -23376: } -23376: else -23376: return __last; -23376: } -23376: else -23376: { -23376: std::rotate(__first, __middle, __last); -23376: std::advance(__first, std::distance(__middle, __last)); -23376: return __first; -23376: } -23376: } -23376: -23376: -23376: template -23376: void -23376: __merge_adaptive(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last, -23376: _Distance __len1, _Distance __len2, -23376: _Pointer __buffer, _Distance __buffer_size, -23376: _Compare __comp) -23376: { -23376: if (__len1 <= __len2 && __len1 <= __buffer_size) -23376: { -23376: _Pointer __buffer_end = std::move(__first, __middle, __buffer); -23376: std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last, -23376: __first, __comp); -23376: } -23376: else if (__len2 <= __buffer_size) -23376: { -23376: _Pointer __buffer_end = std::move(__middle, __last, __buffer); -23376: std::__move_merge_adaptive_backward(__first, __middle, __buffer, -23376: __buffer_end, __last, __comp); -23376: } -23376: else -23376: { -23376: _BidirectionalIterator __first_cut = __first; -23376: _BidirectionalIterator __second_cut = __middle; -23376: _Distance __len11 = 0; -23376: _Distance __len22 = 0; -23376: if (__len1 > __len2) -23376: { -23376: __len11 = __len1 / 2; -23376: std::advance(__first_cut, __len11); -23376: __second_cut -23376: = std::__lower_bound(__middle, __last, *__first_cut, -23376: __gnu_cxx::__ops::__iter_comp_val(__comp)); -23376: __len22 = std::distance(__middle, __second_cut); -23376: } -23376: else -23376: { -23376: __len22 = __len2 / 2; -23376: std::advance(__second_cut, __len22); -23376: __first_cut -23376: = std::__upper_bound(__first, __middle, *__second_cut, -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: __len11 = std::distance(__first, __first_cut); -23376: } -23376: -23376: _BidirectionalIterator __new_middle -23376: = std::__rotate_adaptive(__first_cut, __middle, __second_cut, -23376: __len1 - __len11, __len22, __buffer, -23376: __buffer_size); -23376: std::__merge_adaptive(__first, __first_cut, __new_middle, __len11, -23376: __len22, __buffer, __buffer_size, __comp); -23376: std::__merge_adaptive(__new_middle, __second_cut, __last, -23376: __len1 - __len11, -23376: __len2 - __len22, __buffer, -23376: __buffer_size, __comp); -23376: } -23376: } -23376: -23376: -23376: template -23376: void -23376: __merge_without_buffer(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last, -23376: _Distance __len1, _Distance __len2, -23376: _Compare __comp) -23376: { -23376: if (__len1 == 0 || __len2 == 0) -23376: return; -23376: -23376: if (__len1 + __len2 == 2) -23376: { -23376: if (__comp(__middle, __first)) -23376: std::iter_swap(__first, __middle); -23376: return; -23376: } -23376: -23376: _BidirectionalIterator __first_cut = __first; -23376: _BidirectionalIterator __second_cut = __middle; -23376: _Distance __len11 = 0; -23376: _Distance __len22 = 0; -23376: if (__len1 > __len2) -23376: { -23376: __len11 = __len1 / 2; -23376: std::advance(__first_cut, __len11); -23376: __second_cut -23376: = std::__lower_bound(__middle, __last, *__first_cut, -23376: __gnu_cxx::__ops::__iter_comp_val(__comp)); -23376: __len22 = std::distance(__middle, __second_cut); -23376: } -23376: else -23376: { -23376: __len22 = __len2 / 2; -23376: std::advance(__second_cut, __len22); -23376: __first_cut -23376: = std::__upper_bound(__first, __middle, *__second_cut, -23376: __gnu_cxx::__ops::__val_comp_iter(__comp)); -23376: __len11 = std::distance(__first, __first_cut); -23376: } -23376: -23376: std::rotate(__first_cut, __middle, __second_cut); -23376: _BidirectionalIterator __new_middle = __first_cut; -23376: std::advance(__new_middle, std::distance(__middle, __second_cut)); -23376: std::__merge_without_buffer(__first, __first_cut, __new_middle, -23376: __len11, __len22, __comp); -23376: std::__merge_without_buffer(__new_middle, __second_cut, __last, -23376: __len1 - __len11, __len2 - __len22, __comp); -23376: } -23376: -23376: template -23376: void -23376: __inplace_merge(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last, -23376: _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_BidirectionalIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_BidirectionalIterator>::difference_type -23376: _DistanceType; -23376: -23376: if (__first == __middle || __middle == __last) -23376: return; -23376: -23376: const _DistanceType __len1 = std::distance(__first, __middle); -23376: const _DistanceType __len2 = std::distance(__middle, __last); -23376: -23376: typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf; -23376: _TmpBuf __buf(__first, __last); -23376: -23376: if (__buf.begin() == 0) -23376: std::__merge_without_buffer -23376: (__first, __middle, __last, __len1, __len2, __comp); -23376: else -23376: std::__merge_adaptive -23376: (__first, __middle, __last, __len1, __len2, __buf.begin(), -23376: _DistanceType(__buf.size()), __comp); -23376: } -23376: # 2572 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: inplace_merge(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: std::__inplace_merge(__first, __middle, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 2613 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: inplace_merge(_BidirectionalIterator __first, -23376: _BidirectionalIterator __middle, -23376: _BidirectionalIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: std::__inplace_merge(__first, __middle, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: -23376: -23376: template -23376: _OutputIterator -23376: __move_merge(_InputIterator __first1, _InputIterator __last1, -23376: _InputIterator __first2, _InputIterator __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: { -23376: if (__comp(__first2, __first1)) -23376: { -23376: *__result = std::move(*__first2); -23376: ++__first2; -23376: } -23376: else -23376: { -23376: *__result = std::move(*__first1); -23376: ++__first1; -23376: } -23376: ++__result; -23376: } -23376: return std::move(__first2, __last2, std::move(__first1, __last1, __result)) -23376: -23376: ; -23376: } -23376: -23376: template -23376: void -23376: __merge_sort_loop(_RandomAccessIterator1 __first, -23376: _RandomAccessIterator1 __last, -23376: _RandomAccessIterator2 __result, _Distance __step_size, -23376: _Compare __comp) -23376: { -23376: const _Distance __two_step = 2 * __step_size; -23376: -23376: while (__last - __first >= __two_step) -23376: { -23376: __result = std::__move_merge(__first, __first + __step_size, -23376: __first + __step_size, -23376: __first + __two_step, -23376: __result, __comp); -23376: __first += __two_step; -23376: } -23376: __step_size = std::min(_Distance(__last - __first), __step_size); -23376: -23376: std::__move_merge(__first, __first + __step_size, -23376: __first + __step_size, __last, __result, __comp); -23376: } -23376: -23376: template -23376: void -23376: __chunk_insertion_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, -23376: _Distance __chunk_size, _Compare __comp) -23376: { -23376: while (__last - __first >= __chunk_size) -23376: { -23376: std::__insertion_sort(__first, __first + __chunk_size, __comp); -23376: __first += __chunk_size; -23376: } -23376: std::__insertion_sort(__first, __last, __comp); -23376: } -23376: -23376: enum { _S_chunk_size = 7 }; -23376: -23376: template -23376: void -23376: __merge_sort_with_buffer(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, -23376: _Pointer __buffer, _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _Distance; -23376: -23376: const _Distance __len = __last - __first; -23376: const _Pointer __buffer_last = __buffer + __len; -23376: -23376: _Distance __step_size = _S_chunk_size; -23376: std::__chunk_insertion_sort(__first, __last, __step_size, __comp); -23376: -23376: while (__step_size < __len) -23376: { -23376: std::__merge_sort_loop(__first, __last, __buffer, -23376: __step_size, __comp); -23376: __step_size *= 2; -23376: std::__merge_sort_loop(__buffer, __buffer_last, __first, -23376: __step_size, __comp); -23376: __step_size *= 2; -23376: } -23376: } -23376: -23376: template -23376: void -23376: __stable_sort_adaptive(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, -23376: _Pointer __buffer, _Distance __buffer_size, -23376: _Compare __comp) -23376: { -23376: const _Distance __len = (__last - __first + 1) / 2; -23376: const _RandomAccessIterator __middle = __first + __len; -23376: if (__len > __buffer_size) -23376: { -23376: std::__stable_sort_adaptive(__first, __middle, __buffer, -23376: __buffer_size, __comp); -23376: std::__stable_sort_adaptive(__middle, __last, __buffer, -23376: __buffer_size, __comp); -23376: } -23376: else -23376: { -23376: std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp); -23376: std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp); -23376: } -23376: std::__merge_adaptive(__first, __middle, __last, -23376: _Distance(__middle - __first), -23376: _Distance(__last - __middle), -23376: __buffer, __buffer_size, -23376: __comp); -23376: } -23376: -23376: -23376: template -23376: void -23376: __inplace_stable_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: if (__last - __first < 15) -23376: { -23376: std::__insertion_sort(__first, __last, __comp); -23376: return; -23376: } -23376: _RandomAccessIterator __middle = __first + (__last - __first) / 2; -23376: std::__inplace_stable_sort(__first, __middle, __comp); -23376: std::__inplace_stable_sort(__middle, __last, __comp); -23376: std::__merge_without_buffer(__first, __middle, __last, -23376: __middle - __first, -23376: __last - __middle, -23376: __comp); -23376: } -23376: # 2785 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: bool -23376: __includes(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: if (__comp(__first2, __first1)) -23376: return false; -23376: else if (__comp(__first1, __first2)) -23376: ++__first1; -23376: else -23376: { -23376: ++__first1; -23376: ++__first2; -23376: } -23376: -23376: return __first2 == __last2; -23376: } -23376: # 2824 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: includes(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__includes(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 2868 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: includes(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__includes(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: # 2903 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: bool -23376: __next_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last, _Compare __comp) -23376: { -23376: if (__first == __last) -23376: return false; -23376: _BidirectionalIterator __i = __first; -23376: ++__i; -23376: if (__i == __last) -23376: return false; -23376: __i = __last; -23376: --__i; -23376: -23376: for(;;) -23376: { -23376: _BidirectionalIterator __ii = __i; -23376: --__i; -23376: if (__comp(__i, __ii)) -23376: { -23376: _BidirectionalIterator __j = __last; -23376: while (!__comp(__i, --__j)) -23376: {} -23376: std::iter_swap(__i, __j); -23376: std::__reverse(__ii, __last, -23376: std::__iterator_category(__first)); -23376: return true; -23376: } -23376: if (__i == __first) -23376: { -23376: std::__reverse(__first, __last, -23376: std::__iterator_category(__first)); -23376: return false; -23376: } -23376: } -23376: } -23376: # 2952 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: next_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__next_permutation -23376: (__first, __last, __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 2984 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: next_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__next_permutation -23376: (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: bool -23376: __prev_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last, _Compare __comp) -23376: { -23376: if (__first == __last) -23376: return false; -23376: _BidirectionalIterator __i = __first; -23376: ++__i; -23376: if (__i == __last) -23376: return false; -23376: __i = __last; -23376: --__i; -23376: -23376: for(;;) -23376: { -23376: _BidirectionalIterator __ii = __i; -23376: --__i; -23376: if (__comp(__ii, __i)) -23376: { -23376: _BidirectionalIterator __j = __last; -23376: while (!__comp(--__j, __i)) -23376: {} -23376: std::iter_swap(__i, __j); -23376: std::__reverse(__ii, __last, -23376: std::__iterator_category(__first)); -23376: return true; -23376: } -23376: if (__i == __first) -23376: { -23376: std::__reverse(__first, __last, -23376: std::__iterator_category(__first)); -23376: return false; -23376: } -23376: } -23376: } -23376: # 3052 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: prev_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__prev_permutation(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 3084 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: prev_permutation(_BidirectionalIterator __first, -23376: _BidirectionalIterator __last, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__prev_permutation(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: _OutputIterator -23376: __replace_copy_if(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, -23376: _Predicate __pred, const _Tp& __new_value) -23376: { -23376: for (; __first != __last; ++__first, (void)++__result) -23376: if (__pred(__first)) -23376: *__result = __new_value; -23376: else -23376: *__result = *__first; -23376: return __result; -23376: } -23376: # 3134 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: replace_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, -23376: const _Tp& __old_value, const _Tp& __new_value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__replace_copy_if(__first, __last, __result, -23376: __gnu_cxx::__ops::__iter_equals_val(__old_value), -23376: __new_value); -23376: } -23376: # 3168 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: replace_copy_if(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, -23376: _Predicate __pred, const _Tp& __new_value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__replace_copy_if(__first, __last, __result, -23376: __gnu_cxx::__ops::__pred_iter(__pred), -23376: __new_value); -23376: } -23376: -23376: template -23376: typename iterator_traits<_InputIterator>::difference_type -23376: __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) -23376: { -23376: typename iterator_traits<_InputIterator>::difference_type __n = 0; -23376: for (; __first != __last; ++__first) -23376: if (__pred(__first)) -23376: ++__n; -23376: return __n; -23376: } -23376: # 3207 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_sorted(_ForwardIterator __first, _ForwardIterator __last) -23376: { return std::is_sorted_until(__first, __last) == __last; } -23376: # 3221 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_sorted(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { return std::is_sorted_until(__first, __last, __comp) == __last; } -23376: -23376: template -23376: _ForwardIterator -23376: __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: if (__first == __last) -23376: return __last; -23376: -23376: _ForwardIterator __next = __first; -23376: for (++__next; __next != __last; __first = __next, (void)++__next) -23376: if (__comp(__next, __first)) -23376: return __next; -23376: return __next; -23376: } -23376: # 3250 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__is_sorted_until(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 3274 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__is_sorted_until(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: # 3299 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline pair -23376: minmax(const _Tp& __a, const _Tp& __b) -23376: { -23376: -23376: -23376: -23376: return __b < __a ? pair(__b, __a) -23376: : pair(__a, __b); -23376: } -23376: # 3320 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline pair -23376: minmax(const _Tp& __a, const _Tp& __b, _Compare __comp) -23376: { -23376: return __comp(__b, __a) ? pair(__b, __a) -23376: : pair(__a, __b); -23376: } -23376: -23376: template -23376: constexpr -23376: pair<_ForwardIterator, _ForwardIterator> -23376: __minmax_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: _ForwardIterator __next = __first; -23376: if (__first == __last -23376: || ++__next == __last) -23376: return std::make_pair(__first, __first); -23376: -23376: _ForwardIterator __min{}, __max{}; -23376: if (__comp(__next, __first)) -23376: { -23376: __min = __next; -23376: __max = __first; -23376: } -23376: else -23376: { -23376: __min = __first; -23376: __max = __next; -23376: } -23376: -23376: __first = __next; -23376: ++__first; -23376: -23376: while (__first != __last) -23376: { -23376: __next = __first; -23376: if (++__next == __last) -23376: { -23376: if (__comp(__first, __min)) -23376: __min = __first; -23376: else if (!__comp(__first, __max)) -23376: __max = __first; -23376: break; -23376: } -23376: -23376: if (__comp(__next, __first)) -23376: { -23376: if (__comp(__next, __min)) -23376: __min = __next; -23376: if (!__comp(__first, __max)) -23376: __max = __first; -23376: } -23376: else -23376: { -23376: if (__comp(__first, __min)) -23376: __min = __first; -23376: if (!__comp(__next, __max)) -23376: __max = __next; -23376: } -23376: -23376: __first = __next; -23376: ++__first; -23376: } -23376: -23376: return std::make_pair(__min, __max); -23376: } -23376: # 3400 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline pair<_ForwardIterator, _ForwardIterator> -23376: minmax_element(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__minmax_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 3428 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline pair<_ForwardIterator, _ForwardIterator> -23376: minmax_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__minmax_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: -23376: template -23376: constexpr -23376: inline _Tp -23376: min(initializer_list<_Tp> __l) -23376: { return *std::min_element(__l.begin(), __l.end()); } -23376: -23376: template -23376: constexpr -23376: inline _Tp -23376: min(initializer_list<_Tp> __l, _Compare __comp) -23376: { return *std::min_element(__l.begin(), __l.end(), __comp); } -23376: -23376: template -23376: constexpr -23376: inline _Tp -23376: max(initializer_list<_Tp> __l) -23376: { return *std::max_element(__l.begin(), __l.end()); } -23376: -23376: template -23376: constexpr -23376: inline _Tp -23376: max(initializer_list<_Tp> __l, _Compare __comp) -23376: { return *std::max_element(__l.begin(), __l.end(), __comp); } -23376: -23376: template -23376: constexpr -23376: inline pair<_Tp, _Tp> -23376: minmax(initializer_list<_Tp> __l) -23376: { -23376: pair __p = -23376: std::minmax_element(__l.begin(), __l.end()); -23376: return std::make_pair(*__p.first, *__p.second); -23376: } -23376: -23376: template -23376: constexpr -23376: inline pair<_Tp, _Tp> -23376: minmax(initializer_list<_Tp> __l, _Compare __comp) -23376: { -23376: pair __p = -23376: std::minmax_element(__l.begin(), __l.end(), __comp); -23376: return std::make_pair(*__p.first, *__p.second); -23376: } -23376: -23376: template -23376: bool -23376: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _BinaryPredicate __pred) -23376: { -23376: -23376: -23376: for (; __first1 != __last1; ++__first1, (void)++__first2) -23376: if (!__pred(__first1, __first2)) -23376: break; -23376: -23376: if (__first1 == __last1) -23376: return true; -23376: -23376: -23376: -23376: _ForwardIterator2 __last2 = __first2; -23376: std::advance(__last2, std::distance(__first1, __last1)); -23376: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) -23376: { -23376: if (__scan != std::__find_if(__first1, __scan, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) -23376: continue; -23376: -23376: auto __matches -23376: = std::__count_if(__first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); -23376: if (0 == __matches || -23376: std::__count_if(__scan, __last1, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) -23376: != __matches) -23376: return false; -23376: } -23376: return true; -23376: } -23376: # 3540 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__is_permutation(__first1, __last1, __first2, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 3571 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _BinaryPredicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__is_permutation(__first1, __last1, __first2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred)); -23376: } -23376: -23376: -23376: template -23376: bool -23376: __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: _BinaryPredicate __pred) -23376: { -23376: using _Cat1 -23376: = typename iterator_traits<_ForwardIterator1>::iterator_category; -23376: using _Cat2 -23376: = typename iterator_traits<_ForwardIterator2>::iterator_category; -23376: using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>; -23376: using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>; -23376: constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA(); -23376: if (__ra_iters) -23376: { -23376: auto __d1 = std::distance(__first1, __last1); -23376: auto __d2 = std::distance(__first2, __last2); -23376: if (__d1 != __d2) -23376: return false; -23376: } -23376: -23376: -23376: -23376: for (; __first1 != __last1 && __first2 != __last2; -23376: ++__first1, (void)++__first2) -23376: if (!__pred(__first1, __first2)) -23376: break; -23376: -23376: if (__ra_iters) -23376: { -23376: if (__first1 == __last1) -23376: return true; -23376: } -23376: else -23376: { -23376: auto __d1 = std::distance(__first1, __last1); -23376: auto __d2 = std::distance(__first2, __last2); -23376: if (__d1 == 0 && __d2 == 0) -23376: return true; -23376: if (__d1 != __d2) -23376: return false; -23376: } -23376: -23376: for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) -23376: { -23376: if (__scan != std::__find_if(__first1, __scan, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) -23376: continue; -23376: -23376: auto __matches = std::__count_if(__first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); -23376: if (0 == __matches -23376: || std::__count_if(__scan, __last1, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) -23376: != __matches) -23376: return false; -23376: } -23376: return true; -23376: } -23376: # 3664 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2) -23376: { -23376: ; -23376: ; -23376: -23376: return -23376: std::__is_permutation(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 3691 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline bool -23376: is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: _BinaryPredicate __pred) -23376: { -23376: ; -23376: ; -23376: -23376: return std::__is_permutation(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__pred)); -23376: } -23376: # 3767 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: pair<_IntType, _IntType> -23376: __gen_two_uniform_ints(_IntType __b0, _IntType __b1, -23376: _UniformRandomBitGenerator&& __g) -23376: { -23376: _IntType __x -23376: = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g); -23376: return std::make_pair(__x / __b1, __x % __b1); -23376: } -23376: # 3789 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: void -23376: shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _UniformRandomNumberGenerator&& __g) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: if (__first == __last) -23376: return; -23376: -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: typedef typename std::make_unsigned<_DistanceType>::type __ud_type; -23376: typedef typename std::uniform_int_distribution<__ud_type> __distr_type; -23376: typedef typename __distr_type::param_type __p_type; -23376: -23376: typedef typename remove_reference<_UniformRandomNumberGenerator>::type -23376: _Gen; -23376: typedef typename common_type::type -23376: __uc_type; -23376: -23376: const __uc_type __urngrange = __g.max() - __g.min(); -23376: const __uc_type __urange = __uc_type(__last - __first); -23376: -23376: if (__urngrange / __urange >= __urange) -23376: -23376: { -23376: _RandomAccessIterator __i = __first + 1; -23376: -23376: -23376: -23376: -23376: -23376: if ((__urange % 2) == 0) -23376: { -23376: __distr_type __d{0, 1}; -23376: std::iter_swap(__i++, __first + __d(__g)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: while (__i != __last) -23376: { -23376: const __uc_type __swap_range = __uc_type(__i - __first) + 1; -23376: -23376: const pair<__uc_type, __uc_type> __pospos = -23376: __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); -23376: -23376: std::iter_swap(__i++, __first + __pospos.first); -23376: std::iter_swap(__i++, __first + __pospos.second); -23376: } -23376: -23376: return; -23376: } -23376: -23376: __distr_type __d; -23376: -23376: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) -23376: std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first))); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: # 3874 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _Function -23376: for_each(_InputIterator __first, _InputIterator __last, _Function __f) -23376: { -23376: -23376: -23376: ; -23376: for (; __first != __last; ++__first) -23376: __f(*__first); -23376: return __f; -23376: } -23376: # 3895 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _InputIterator -23376: find(_InputIterator __first, _InputIterator __last, -23376: const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: return std::__find_if(__first, __last, -23376: __gnu_cxx::__ops::__iter_equals_val(__val)); -23376: } -23376: # 3919 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _InputIterator -23376: find_if(_InputIterator __first, _InputIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__find_if(__first, __last, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: # 3950 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _InputIterator -23376: find_first_of(_InputIterator __first1, _InputIterator __last1, -23376: _ForwardIterator __first2, _ForwardIterator __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: for (; __first1 != __last1; ++__first1) -23376: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) -23376: if (*__first1 == *__iter) -23376: return __first1; -23376: return __last1; -23376: } -23376: # 3990 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _InputIterator -23376: find_first_of(_InputIterator __first1, _InputIterator __last1, -23376: _ForwardIterator __first2, _ForwardIterator __last2, -23376: _BinaryPredicate __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: for (; __first1 != __last1; ++__first1) -23376: for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter) -23376: if (__comp(*__first1, *__iter)) -23376: return __first1; -23376: return __last1; -23376: } -23376: # 4022 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: adjacent_find(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__adjacent_find(__first, __last, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 4047 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: adjacent_find(_ForwardIterator __first, _ForwardIterator __last, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__adjacent_find(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); -23376: } -23376: # 4072 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline typename iterator_traits<_InputIterator>::difference_type -23376: count(_InputIterator __first, _InputIterator __last, const _Tp& __value) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__count_if(__first, __last, -23376: __gnu_cxx::__ops::__iter_equals_val(__value)); -23376: } -23376: # 4095 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline typename iterator_traits<_InputIterator>::difference_type -23376: count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__count_if(__first, __last, -23376: __gnu_cxx::__ops::__pred_iter(__pred)); -23376: } -23376: # 4135 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator1 -23376: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__search(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_equal_to_iter()); -23376: } -23376: # 4174 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator1 -23376: search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, -23376: _ForwardIterator2 __first2, _ForwardIterator2 __last2, -23376: _BinaryPredicate __predicate) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__search(__first1, __last1, __first2, __last2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__predicate)); -23376: } -23376: # 4209 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: search_n(_ForwardIterator __first, _ForwardIterator __last, -23376: _Integer __count, const _Tp& __val) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__search_n(__first, __last, __count, -23376: __gnu_cxx::__ops::__iter_equals_val(__val)); -23376: } -23376: # 4242 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: search_n(_ForwardIterator __first, _ForwardIterator __last, -23376: _Integer __count, const _Tp& __val, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__search_n(__first, __last, __count, -23376: __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val)); -23376: } -23376: # 4290 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _OutputIterator -23376: transform(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, _UnaryOperation __unary_op) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first, (void)++__result) -23376: *__result = __unary_op(*__first); -23376: return __result; -23376: } -23376: # 4327 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _OutputIterator -23376: transform(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _OutputIterator __result, -23376: _BinaryOperation __binary_op) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) -23376: *__result = __binary_op(*__first1, *__first2); -23376: return __result; -23376: } -23376: # 4360 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: void -23376: replace(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __old_value, const _Tp& __new_value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first) -23376: if (*__first == __old_value) -23376: *__first = __new_value; -23376: } -23376: # 4392 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: void -23376: replace_if(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred, const _Tp& __new_value) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first) -23376: if (__pred(*__first)) -23376: *__first = __new_value; -23376: } -23376: # 4424 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: void -23376: generate(_ForwardIterator __first, _ForwardIterator __last, -23376: _Generator __gen) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: for (; __first != __last; ++__first) -23376: *__first = __gen(); -23376: } -23376: # 4455 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: _OutputIterator -23376: generate_n(_OutputIterator __first, _Size __n, _Generator __gen) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: for (__decltype(__n + 0) __niter = __n; -23376: __niter > 0; --__niter, (void) ++__first) -23376: *__first = __gen(); -23376: return __first; -23376: } -23376: # 4491 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: unique_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: if (__first == __last) -23376: return __result; -23376: return std::__unique_copy(__first, __last, __result, -23376: __gnu_cxx::__ops::__iter_equal_to_iter(), -23376: std::__iterator_category(__first), -23376: std::__iterator_category(__result)); -23376: } -23376: # 4531 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: unique_copy(_InputIterator __first, _InputIterator __last, -23376: _OutputIterator __result, -23376: _BinaryPredicate __binary_pred) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: if (__first == __last) -23376: return __result; -23376: return std::__unique_copy(__first, __last, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__binary_pred), -23376: std::__iterator_category(__first), -23376: std::__iterator_category(__result)); -23376: } -23376: # 4564 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: if (__first != __last) -23376: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) -23376: { -23376: -23376: _RandomAccessIterator __j = __first -23376: + std::rand() % ((__i - __first) + 1); -23376: if (__i != __j) -23376: std::iter_swap(__i, __j); -23376: } -23376: } -23376: # 4599 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: void -23376: random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: -23376: _RandomNumberGenerator&& __rand) -23376: -23376: -23376: -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: if (__first == __last) -23376: return; -23376: for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) -23376: { -23376: _RandomAccessIterator __j = __first + __rand((__i - __first) + 1); -23376: if (__i != __j) -23376: std::iter_swap(__i, __j); -23376: } -23376: } -23376: # 4639 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _ForwardIterator -23376: partition(_ForwardIterator __first, _ForwardIterator __last, -23376: _Predicate __pred) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: -23376: return std::__partition(__first, __last, __pred, -23376: std::__iterator_category(__first)); -23376: } -23376: # 4672 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: partial_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __middle, -23376: _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: std::__partial_sort(__first, __middle, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 4710 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: partial_sort(_RandomAccessIterator __first, -23376: _RandomAccessIterator __middle, -23376: _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: std::__partial_sort(__first, __middle, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: # 4746 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, -23376: _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: if (__first == __last || __nth == __last) -23376: return; -23376: -23376: std::__introselect(__first, __nth, __last, -23376: std::__lg(__last - __first) * 2, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 4785 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, -23376: _RandomAccessIterator __last, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: if (__first == __last || __nth == __last) -23376: return; -23376: -23376: std::__introselect(__first, __nth, __last, -23376: std::__lg(__last - __first) * 2, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: # 4822 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: sort(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 4852 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: sort(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __merge(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: { -23376: if (__comp(__first2, __first1)) -23376: { -23376: *__result = *__first2; -23376: ++__first2; -23376: } -23376: else -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: } -23376: ++__result; -23376: } -23376: return std::copy(__first2, __last2, -23376: std::copy(__first1, __last1, __result)); -23376: } -23376: # 4913 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: merge(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__merge(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 4963 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: merge(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__merge(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: inline void -23376: __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: typedef typename iterator_traits<_RandomAccessIterator>::value_type -23376: _ValueType; -23376: typedef typename iterator_traits<_RandomAccessIterator>::difference_type -23376: _DistanceType; -23376: -23376: typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf; -23376: _TmpBuf __buf(__first, __last); -23376: -23376: if (__buf.begin() == 0) -23376: std::__inplace_stable_sort(__first, __last, __comp); -23376: else -23376: std::__stable_sort_adaptive(__first, __last, __buf.begin(), -23376: _DistanceType(__buf.size()), __comp); -23376: } -23376: # 5027 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: std::__stable_sort(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5061 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline void -23376: stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: std::__stable_sort(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __set_union(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: { -23376: if (__comp(__first1, __first2)) -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: } -23376: else if (__comp(__first2, __first1)) -23376: { -23376: *__result = *__first2; -23376: ++__first2; -23376: } -23376: else -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: ++__first2; -23376: } -23376: ++__result; -23376: } -23376: return std::copy(__first2, __last2, -23376: std::copy(__first1, __last1, __result)); -23376: } -23376: # 5130 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_union(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_union(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5180 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_union(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_union(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: if (__comp(__first1, __first2)) -23376: ++__first1; -23376: else if (__comp(__first2, __first1)) -23376: ++__first2; -23376: else -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: ++__first2; -23376: ++__result; -23376: } -23376: return __result; -23376: } -23376: # 5251 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_intersection(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5300 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_intersection(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __set_difference(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: if (__comp(__first1, __first2)) -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: ++__result; -23376: } -23376: else if (__comp(__first2, __first1)) -23376: ++__first2; -23376: else -23376: { -23376: ++__first1; -23376: ++__first2; -23376: } -23376: return std::copy(__first1, __last1, __result); -23376: } -23376: # 5373 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_difference(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5424 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_difference(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_difference(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: _OutputIterator -23376: __set_symmetric_difference(_InputIterator1 __first1, -23376: _InputIterator1 __last1, -23376: _InputIterator2 __first2, -23376: _InputIterator2 __last2, -23376: _OutputIterator __result, -23376: _Compare __comp) -23376: { -23376: while (__first1 != __last1 && __first2 != __last2) -23376: if (__comp(__first1, __first2)) -23376: { -23376: *__result = *__first1; -23376: ++__first1; -23376: ++__result; -23376: } -23376: else if (__comp(__first2, __first1)) -23376: { -23376: *__result = *__first2; -23376: ++__first2; -23376: ++__result; -23376: } -23376: else -23376: { -23376: ++__first1; -23376: ++__first2; -23376: } -23376: return std::copy(__first2, __last2, -23376: std::copy(__first1, __last1, __result)); -23376: } -23376: # 5503 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_symmetric_difference(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5554 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: inline _OutputIterator -23376: set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1, -23376: _InputIterator2 __first2, _InputIterator2 __last2, -23376: _OutputIterator __result, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: ; -23376: ; -23376: -23376: return std::__set_symmetric_difference(__first1, __last1, -23376: __first2, __last2, __result, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: constexpr -23376: _ForwardIterator -23376: __min_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: if (__first == __last) -23376: return __first; -23376: _ForwardIterator __result = __first; -23376: while (++__first != __last) -23376: if (__comp(__first, __result)) -23376: __result = __first; -23376: return __result; -23376: } -23376: # 5607 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: _ForwardIterator -23376: inline min_element(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__min_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5632 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline _ForwardIterator -23376: min_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__min_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: template -23376: constexpr -23376: _ForwardIterator -23376: __max_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: if (__first == __last) return __first; -23376: _ForwardIterator __result = __first; -23376: while (++__first != __last) -23376: if (__comp(__result, __first)) -23376: __result = __first; -23376: return __result; -23376: } -23376: # 5671 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline _ForwardIterator -23376: max_element(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__max_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_less_iter()); -23376: } -23376: # 5696 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: template -23376: constexpr -23376: inline _ForwardIterator -23376: max_element(_ForwardIterator __first, _ForwardIterator __last, -23376: _Compare __comp) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: ; -23376: ; -23376: -23376: return std::__max_element(__first, __last, -23376: __gnu_cxx::__ops::__iter_comp_iter(__comp)); -23376: } -23376: -23376: -23376: -23376: template -23376: _RandomAccessIterator -23376: __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag, -23376: _RandomAccessIterator __out, random_access_iterator_tag, -23376: _Size __n, _UniformRandomBitGenerator&& __g) -23376: { -23376: using __distrib_type = uniform_int_distribution<_Size>; -23376: using __param_type = typename __distrib_type::param_type; -23376: __distrib_type __d{}; -23376: _Size __sample_sz = 0; -23376: while (__first != __last && __sample_sz != __n) -23376: { -23376: __out[__sample_sz++] = *__first; -23376: ++__first; -23376: } -23376: for (auto __pop_sz = __sample_sz; __first != __last; -23376: ++__first, (void) ++__pop_sz) -23376: { -23376: const auto __k = __d(__g, __param_type{0, __pop_sz}); -23376: if (__k < __n) -23376: __out[__k] = *__first; -23376: } -23376: return __out + __sample_sz; -23376: } -23376: -23376: -23376: template -23376: _OutputIterator -23376: __sample(_ForwardIterator __first, _ForwardIterator __last, -23376: forward_iterator_tag, -23376: _OutputIterator __out, _Cat, -23376: _Size __n, _UniformRandomBitGenerator&& __g) -23376: { -23376: using __distrib_type = uniform_int_distribution<_Size>; -23376: using __param_type = typename __distrib_type::param_type; -23376: using _USize = make_unsigned_t<_Size>; -23376: using _Gen = remove_reference_t<_UniformRandomBitGenerator>; -23376: using __uc_type = common_type_t; -23376: -23376: __distrib_type __d{}; -23376: _Size __unsampled_sz = std::distance(__first, __last); -23376: __n = std::min(__n, __unsampled_sz); -23376: -23376: -23376: -23376: -23376: const __uc_type __urngrange = __g.max() - __g.min(); -23376: if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz)) -23376: -23376: -23376: { -23376: while (__n != 0 && __unsampled_sz >= 2) -23376: { -23376: const pair<_Size, _Size> __p = -23376: __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g); -23376: -23376: --__unsampled_sz; -23376: if (__p.first < __n) -23376: { -23376: *__out++ = *__first; -23376: --__n; -23376: } -23376: -23376: ++__first; -23376: -23376: if (__n == 0) break; -23376: -23376: --__unsampled_sz; -23376: if (__p.second < __n) -23376: { -23376: *__out++ = *__first; -23376: --__n; -23376: } -23376: -23376: ++__first; -23376: } -23376: } -23376: -23376: -23376: -23376: for (; __n != 0; ++__first) -23376: if (__d(__g, __param_type{0, --__unsampled_sz}) < __n) -23376: { -23376: *__out++ = *__first; -23376: --__n; -23376: } -23376: return __out; -23376: } -23376: # 5839 "/usr/include/c++/8/bits/stl_algo.h" 3 -23376: -23376: -23376: } -23376: # 63 "/usr/include/c++/8/algorithm" 2 3 -23376: # 40 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/string" 1 3 4 -23376: # 36 "/usr/include/c++/8/string" 3 4 -23376: -23376: # 37 "/usr/include/c++/8/string" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/char_traits.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/char_traits.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/char_traits.h" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/cwchar" 1 3 -23376: # 39 "/usr/include/c++/8/cwchar" 3 -23376: -23376: # 40 "/usr/include/c++/8/cwchar" 3 -23376: # 42 "/usr/include/c++/8/bits/char_traits.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 61 "/usr/include/c++/8/bits/char_traits.h" 3 -23376: template -23376: struct _Char_types -23376: { -23376: typedef unsigned long int_type; -23376: typedef std::streampos pos_type; -23376: typedef std::streamoff off_type; -23376: typedef std::mbstate_t state_type; -23376: }; -23376: # 86 "/usr/include/c++/8/bits/char_traits.h" 3 -23376: template -23376: struct char_traits -23376: { -23376: typedef _CharT char_type; -23376: typedef typename _Char_types<_CharT>::int_type int_type; -23376: typedef typename _Char_types<_CharT>::pos_type pos_type; -23376: typedef typename _Char_types<_CharT>::off_type off_type; -23376: typedef typename _Char_types<_CharT>::state_type state_type; -23376: -23376: static constexpr void -23376: assign(char_type& __c1, const char_type& __c2) -23376: { __c1 = __c2; } -23376: -23376: static constexpr bool -23376: eq(const char_type& __c1, const char_type& __c2) -23376: { return __c1 == __c2; } -23376: -23376: static constexpr bool -23376: lt(const char_type& __c1, const char_type& __c2) -23376: { return __c1 < __c2; } -23376: -23376: static constexpr int -23376: compare(const char_type* __s1, const char_type* __s2, std::size_t __n); -23376: -23376: static constexpr std::size_t -23376: length(const char_type* __s); -23376: -23376: static constexpr const char_type* -23376: find(const char_type* __s, std::size_t __n, const char_type& __a); -23376: -23376: static char_type* -23376: move(char_type* __s1, const char_type* __s2, std::size_t __n); -23376: -23376: static char_type* -23376: copy(char_type* __s1, const char_type* __s2, std::size_t __n); -23376: -23376: static char_type* -23376: assign(char_type* __s, std::size_t __n, char_type __a); -23376: -23376: static constexpr char_type -23376: to_char_type(const int_type& __c) -23376: { return static_cast(__c); } -23376: -23376: static constexpr int_type -23376: to_int_type(const char_type& __c) -23376: { return static_cast(__c); } -23376: -23376: static constexpr bool -23376: eq_int_type(const int_type& __c1, const int_type& __c2) -23376: { return __c1 == __c2; } -23376: -23376: static constexpr int_type -23376: eof() -23376: { return static_cast(-1); } -23376: -23376: static constexpr int_type -23376: not_eof(const int_type& __c) -23376: { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } -23376: }; -23376: -23376: template -23376: constexpr int -23376: char_traits<_CharT>:: -23376: compare(const char_type* __s1, const char_type* __s2, std::size_t __n) -23376: { -23376: for (std::size_t __i = 0; __i < __n; ++__i) -23376: if (lt(__s1[__i], __s2[__i])) -23376: return -1; -23376: else if (lt(__s2[__i], __s1[__i])) -23376: return 1; -23376: return 0; -23376: } -23376: -23376: template -23376: constexpr std::size_t -23376: char_traits<_CharT>:: -23376: length(const char_type* __p) -23376: { -23376: std::size_t __i = 0; -23376: while (!eq(__p[__i], char_type())) -23376: ++__i; -23376: return __i; -23376: } -23376: -23376: template -23376: constexpr const typename char_traits<_CharT>::char_type* -23376: char_traits<_CharT>:: -23376: find(const char_type* __s, std::size_t __n, const char_type& __a) -23376: { -23376: for (std::size_t __i = 0; __i < __n; ++__i) -23376: if (eq(__s[__i], __a)) -23376: return __s + __i; -23376: return 0; -23376: } -23376: -23376: template -23376: typename char_traits<_CharT>::char_type* -23376: char_traits<_CharT>:: -23376: move(char_type* __s1, const char_type* __s2, std::size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return static_cast<_CharT*>(__builtin_memmove(__s1, __s2, -23376: __n * sizeof(char_type))); -23376: } -23376: -23376: template -23376: typename char_traits<_CharT>::char_type* -23376: char_traits<_CharT>:: -23376: copy(char_type* __s1, const char_type* __s2, std::size_t __n) -23376: { -23376: -23376: std::copy(__s2, __s2 + __n, __s1); -23376: return __s1; -23376: } -23376: -23376: template -23376: typename char_traits<_CharT>::char_type* -23376: char_traits<_CharT>:: -23376: assign(char_type* __s, std::size_t __n, char_type __a) -23376: { -23376: -23376: std::fill_n(__s, __n, __a); -23376: return __s; -23376: } -23376: -23376: -23376: } -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 270 "/usr/include/c++/8/bits/char_traits.h" 3 -23376: template -23376: struct char_traits : public __gnu_cxx::char_traits<_CharT> -23376: { }; -23376: -23376: -23376: -23376: template<> -23376: struct char_traits -23376: { -23376: typedef char char_type; -23376: typedef int int_type; -23376: typedef streampos pos_type; -23376: typedef streamoff off_type; -23376: typedef mbstate_t state_type; -23376: -23376: static void -23376: assign(char_type& __c1, const char_type& __c2) noexcept -23376: { __c1 = __c2; } -23376: -23376: static constexpr bool -23376: eq(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr bool -23376: lt(const char_type& __c1, const char_type& __c2) noexcept -23376: { -23376: -23376: return (static_cast(__c1) -23376: < static_cast(__c2)); -23376: } -23376: -23376: static int -23376: compare(const char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__n == 0) -23376: return 0; -23376: return __builtin_memcmp(__s1, __s2, __n); -23376: } -23376: -23376: static size_t -23376: length(const char_type* __s) -23376: { -23376: -23376: -23376: -23376: -23376: return __builtin_strlen(__s); -23376: } -23376: -23376: static const char_type* -23376: find(const char_type* __s, size_t __n, const char_type& __a) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__n == 0) -23376: return 0; -23376: return static_cast(__builtin_memchr(__s, __a, __n)); -23376: } -23376: -23376: static char_type* -23376: move(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return static_cast(__builtin_memmove(__s1, __s2, __n)); -23376: } -23376: -23376: static char_type* -23376: copy(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return static_cast(__builtin_memcpy(__s1, __s2, __n)); -23376: } -23376: -23376: static char_type* -23376: assign(char_type* __s, size_t __n, char_type __a) -23376: { -23376: if (__n == 0) -23376: return __s; -23376: return static_cast(__builtin_memset(__s, __a, __n)); -23376: } -23376: -23376: static constexpr char_type -23376: to_char_type(const int_type& __c) noexcept -23376: { return static_cast(__c); } -23376: -23376: -23376: -23376: static constexpr int_type -23376: to_int_type(const char_type& __c) noexcept -23376: { return static_cast(static_cast(__c)); } -23376: -23376: static constexpr bool -23376: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr int_type -23376: eof() noexcept -23376: { return static_cast(-1); } -23376: -23376: static constexpr int_type -23376: not_eof(const int_type& __c) noexcept -23376: { return (__c == eof()) ? 0 : __c; } -23376: }; -23376: -23376: -23376: -23376: -23376: template<> -23376: struct char_traits -23376: { -23376: typedef wchar_t char_type; -23376: typedef wint_t int_type; -23376: typedef streamoff off_type; -23376: typedef wstreampos pos_type; -23376: typedef mbstate_t state_type; -23376: -23376: static void -23376: assign(char_type& __c1, const char_type& __c2) noexcept -23376: { __c1 = __c2; } -23376: -23376: static constexpr bool -23376: eq(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr bool -23376: lt(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 < __c2; } -23376: -23376: static int -23376: compare(const char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__n == 0) -23376: return 0; -23376: else -23376: return wmemcmp(__s1, __s2, __n); -23376: } -23376: -23376: static size_t -23376: length(const char_type* __s) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: return wcslen(__s); -23376: } -23376: -23376: static const char_type* -23376: find(const char_type* __s, size_t __n, const char_type& __a) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (__n == 0) -23376: return 0; -23376: else -23376: return wmemchr(__s, __a, __n); -23376: } -23376: -23376: static char_type* -23376: move(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return wmemmove(__s1, __s2, __n); -23376: } -23376: -23376: static char_type* -23376: copy(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return wmemcpy(__s1, __s2, __n); -23376: } -23376: -23376: static char_type* -23376: assign(char_type* __s, size_t __n, char_type __a) -23376: { -23376: if (__n == 0) -23376: return __s; -23376: return wmemset(__s, __a, __n); -23376: } -23376: -23376: static constexpr char_type -23376: to_char_type(const int_type& __c) noexcept -23376: { return char_type(__c); } -23376: -23376: static constexpr int_type -23376: to_int_type(const char_type& __c) noexcept -23376: { return int_type(__c); } -23376: -23376: static constexpr bool -23376: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr int_type -23376: eof() noexcept -23376: { return static_cast((0xffffffffu)); } -23376: -23376: static constexpr int_type -23376: not_eof(const int_type& __c) noexcept -23376: { return eq_int_type(__c, eof()) ? 0 : __c; } -23376: }; -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/cstdint" 1 3 -23376: # 32 "/usr/include/c++/8/cstdint" 3 -23376: -23376: # 33 "/usr/include/c++/8/cstdint" 3 -23376: # 46 "/usr/include/c++/8/cstdint" 3 -23376: namespace std -23376: { -23376: using ::int8_t; -23376: using ::int16_t; -23376: using ::int32_t; -23376: using ::int64_t; -23376: -23376: using ::int_fast8_t; -23376: using ::int_fast16_t; -23376: using ::int_fast32_t; -23376: using ::int_fast64_t; -23376: -23376: using ::int_least8_t; -23376: using ::int_least16_t; -23376: using ::int_least32_t; -23376: using ::int_least64_t; -23376: -23376: using ::intmax_t; -23376: using ::intptr_t; -23376: -23376: using ::uint8_t; -23376: using ::uint16_t; -23376: using ::uint32_t; -23376: using ::uint64_t; -23376: -23376: using ::uint_fast8_t; -23376: using ::uint_fast16_t; -23376: using ::uint_fast32_t; -23376: using ::uint_fast64_t; -23376: -23376: using ::uint_least8_t; -23376: using ::uint_least16_t; -23376: using ::uint_least32_t; -23376: using ::uint_least64_t; -23376: -23376: using ::uintmax_t; -23376: using ::uintptr_t; -23376: } -23376: # 504 "/usr/include/c++/8/bits/char_traits.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template<> -23376: struct char_traits -23376: { -23376: typedef char16_t char_type; -23376: typedef uint_least16_t int_type; -23376: typedef streamoff off_type; -23376: typedef u16streampos pos_type; -23376: typedef mbstate_t state_type; -23376: -23376: static void -23376: assign(char_type& __c1, const char_type& __c2) noexcept -23376: { __c1 = __c2; } -23376: -23376: static constexpr bool -23376: eq(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr bool -23376: lt(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 < __c2; } -23376: -23376: static int -23376: compare(const char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: if (lt(__s1[__i], __s2[__i])) -23376: return -1; -23376: else if (lt(__s2[__i], __s1[__i])) -23376: return 1; -23376: return 0; -23376: } -23376: -23376: static size_t -23376: length(const char_type* __s) -23376: { -23376: size_t __i = 0; -23376: while (!eq(__s[__i], char_type())) -23376: ++__i; -23376: return __i; -23376: } -23376: -23376: static const char_type* -23376: find(const char_type* __s, size_t __n, const char_type& __a) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: if (eq(__s[__i], __a)) -23376: return __s + __i; -23376: return 0; -23376: } -23376: -23376: static char_type* -23376: move(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return (static_cast -23376: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); -23376: } -23376: -23376: static char_type* -23376: copy(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return (static_cast -23376: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); -23376: } -23376: -23376: static char_type* -23376: assign(char_type* __s, size_t __n, char_type __a) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: assign(__s[__i], __a); -23376: return __s; -23376: } -23376: -23376: static constexpr char_type -23376: to_char_type(const int_type& __c) noexcept -23376: { return char_type(__c); } -23376: -23376: static constexpr int_type -23376: to_int_type(const char_type& __c) noexcept -23376: { return __c == eof() ? int_type(0xfffd) : int_type(__c); } -23376: -23376: static constexpr bool -23376: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr int_type -23376: eof() noexcept -23376: { return static_cast(-1); } -23376: -23376: static constexpr int_type -23376: not_eof(const int_type& __c) noexcept -23376: { return eq_int_type(__c, eof()) ? 0 : __c; } -23376: }; -23376: -23376: template<> -23376: struct char_traits -23376: { -23376: typedef char32_t char_type; -23376: typedef uint_least32_t int_type; -23376: typedef streamoff off_type; -23376: typedef u32streampos pos_type; -23376: typedef mbstate_t state_type; -23376: -23376: static void -23376: assign(char_type& __c1, const char_type& __c2) noexcept -23376: { __c1 = __c2; } -23376: -23376: static constexpr bool -23376: eq(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr bool -23376: lt(const char_type& __c1, const char_type& __c2) noexcept -23376: { return __c1 < __c2; } -23376: -23376: static int -23376: compare(const char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: if (lt(__s1[__i], __s2[__i])) -23376: return -1; -23376: else if (lt(__s2[__i], __s1[__i])) -23376: return 1; -23376: return 0; -23376: } -23376: -23376: static size_t -23376: length(const char_type* __s) -23376: { -23376: size_t __i = 0; -23376: while (!eq(__s[__i], char_type())) -23376: ++__i; -23376: return __i; -23376: } -23376: -23376: static const char_type* -23376: find(const char_type* __s, size_t __n, const char_type& __a) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: if (eq(__s[__i], __a)) -23376: return __s + __i; -23376: return 0; -23376: } -23376: -23376: static char_type* -23376: move(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return (static_cast -23376: (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); -23376: } -23376: -23376: static char_type* -23376: copy(char_type* __s1, const char_type* __s2, size_t __n) -23376: { -23376: if (__n == 0) -23376: return __s1; -23376: return (static_cast -23376: (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); -23376: } -23376: -23376: static char_type* -23376: assign(char_type* __s, size_t __n, char_type __a) -23376: { -23376: for (size_t __i = 0; __i < __n; ++__i) -23376: assign(__s[__i], __a); -23376: return __s; -23376: } -23376: -23376: static constexpr char_type -23376: to_char_type(const int_type& __c) noexcept -23376: { return char_type(__c); } -23376: -23376: static constexpr int_type -23376: to_int_type(const char_type& __c) noexcept -23376: { return int_type(__c); } -23376: -23376: static constexpr bool -23376: eq_int_type(const int_type& __c1, const int_type& __c2) noexcept -23376: { return __c1 == __c2; } -23376: -23376: static constexpr int_type -23376: eof() noexcept -23376: { return static_cast(-1); } -23376: -23376: static constexpr int_type -23376: not_eof(const int_type& __c) noexcept -23376: { return eq_int_type(__c, eof()) ? 0 : __c; } -23376: }; -23376: -23376: -23376: } -23376: # 41 "/usr/include/c++/8/string" 2 3 -23376: # 1 "/usr/include/c++/8/bits/allocator.h" 1 3 -23376: # 46 "/usr/include/c++/8/bits/allocator.h" 3 -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++allocator.h" 1 3 -23376: # 33 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++allocator.h" 3 -23376: # 1 "/usr/include/c++/8/ext/new_allocator.h" 1 3 -23376: # 40 "/usr/include/c++/8/ext/new_allocator.h" 3 -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using std::size_t; -23376: using std::ptrdiff_t; -23376: # 57 "/usr/include/c++/8/ext/new_allocator.h" 3 -23376: template -23376: class new_allocator -23376: { -23376: public: -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Tp* pointer; -23376: typedef const _Tp* const_pointer; -23376: typedef _Tp& reference; -23376: typedef const _Tp& const_reference; -23376: typedef _Tp value_type; -23376: -23376: template -23376: struct rebind -23376: { typedef new_allocator<_Tp1> other; }; -23376: -23376: -23376: -23376: -23376: typedef std::true_type propagate_on_container_move_assignment; -23376: -23376: -23376: new_allocator() noexcept { } -23376: -23376: new_allocator(const new_allocator&) noexcept { } -23376: -23376: template -23376: new_allocator(const new_allocator<_Tp1>&) noexcept { } -23376: -23376: ~new_allocator() noexcept { } -23376: -23376: pointer -23376: address(reference __x) const noexcept -23376: { return std::__addressof(__x); } -23376: -23376: const_pointer -23376: address(const_reference __x) const noexcept -23376: { return std::__addressof(__x); } -23376: -23376: -23376: -23376: pointer -23376: allocate(size_type __n, const void* = static_cast(0)) -23376: { -23376: if (__n > this->max_size()) -23376: std::__throw_bad_alloc(); -23376: # 111 "/usr/include/c++/8/ext/new_allocator.h" 3 -23376: return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); -23376: } -23376: -23376: -23376: void -23376: deallocate(pointer __p, size_type) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ::operator delete(__p); -23376: } -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return size_t(-1) / sizeof(_Tp); } -23376: -23376: -23376: template -23376: void -23376: construct(_Up* __p, _Args&&... __args) -23376: { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: void -23376: destroy(_Up* __p) { __p->~_Up(); } -23376: # 151 "/usr/include/c++/8/ext/new_allocator.h" 3 -23376: }; -23376: -23376: template -23376: inline bool -23376: operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&) -23376: { return true; } -23376: -23376: template -23376: inline bool -23376: operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&) -23376: { return false; } -23376: -23376: -23376: } -23376: # 34 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++allocator.h" 2 3 -23376: -23376: -23376: namespace std -23376: { -23376: # 47 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++allocator.h" 3 -23376: template -23376: using __allocator_base = __gnu_cxx::new_allocator<_Tp>; -23376: } -23376: # 47 "/usr/include/c++/8/bits/allocator.h" 2 3 -23376: # 57 "/usr/include/c++/8/bits/allocator.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: class allocator -23376: { -23376: public: -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef void* pointer; -23376: typedef const void* const_pointer; -23376: typedef void value_type; -23376: -23376: template -23376: struct rebind -23376: { typedef allocator<_Tp1> other; }; -23376: -23376: -23376: -23376: -23376: typedef true_type propagate_on_container_move_assignment; -23376: -23376: typedef true_type is_always_equal; -23376: -23376: template -23376: void -23376: construct(_Up* __p, _Args&&... __args) -23376: { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: void -23376: destroy(_Up* __p) { __p->~_Up(); } -23376: -23376: }; -23376: # 107 "/usr/include/c++/8/bits/allocator.h" 3 -23376: template -23376: class allocator : public __allocator_base<_Tp> -23376: { -23376: public: -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Tp* pointer; -23376: typedef const _Tp* const_pointer; -23376: typedef _Tp& reference; -23376: typedef const _Tp& const_reference; -23376: typedef _Tp value_type; -23376: -23376: template -23376: struct rebind -23376: { typedef allocator<_Tp1> other; }; -23376: -23376: -23376: -23376: -23376: typedef true_type propagate_on_container_move_assignment; -23376: -23376: typedef true_type is_always_equal; -23376: -23376: -23376: allocator() throw() { } -23376: -23376: allocator(const allocator& __a) throw() -23376: : __allocator_base<_Tp>(__a) { } -23376: -23376: template -23376: allocator(const allocator<_Tp1>&) throw() { } -23376: -23376: ~allocator() throw() { } -23376: -23376: -23376: }; -23376: -23376: template -23376: inline bool -23376: operator==(const allocator<_T1>&, const allocator<_T2>&) -23376: noexcept -23376: { return true; } -23376: -23376: template -23376: inline bool -23376: operator==(const allocator<_Tp>&, const allocator<_Tp>&) -23376: noexcept -23376: { return true; } -23376: -23376: template -23376: inline bool -23376: operator!=(const allocator<_T1>&, const allocator<_T2>&) -23376: noexcept -23376: { return false; } -23376: -23376: template -23376: inline bool -23376: operator!=(const allocator<_Tp>&, const allocator<_Tp>&) -23376: noexcept -23376: { return false; } -23376: -23376: -23376: -23376: template -23376: class allocator -23376: { -23376: public: -23376: typedef _Tp value_type; -23376: template allocator(const allocator<_Up>&) { } -23376: }; -23376: -23376: template -23376: class allocator -23376: { -23376: public: -23376: typedef _Tp value_type; -23376: template allocator(const allocator<_Up>&) { } -23376: }; -23376: -23376: template -23376: class allocator -23376: { -23376: public: -23376: typedef _Tp value_type; -23376: template allocator(const allocator<_Up>&) { } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern template class allocator; -23376: extern template class allocator; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __alloc_swap -23376: { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } }; -23376: -23376: template -23376: struct __alloc_swap<_Alloc, false> -23376: { -23376: static void -23376: _S_do_it(_Alloc& __one, _Alloc& __two) noexcept -23376: { -23376: -23376: if (__one != __two) -23376: swap(__one, __two); -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct __alloc_neq -23376: { -23376: static bool -23376: _S_do_it(const _Alloc&, const _Alloc&) -23376: { return false; } -23376: }; -23376: -23376: template -23376: struct __alloc_neq<_Alloc, false> -23376: { -23376: static bool -23376: _S_do_it(const _Alloc& __one, const _Alloc& __two) -23376: { return __one != __two; } -23376: }; -23376: -23376: -23376: template, -23376: is_nothrow_move_constructible>::value> -23376: struct __shrink_to_fit_aux -23376: { static bool _S_do_it(_Tp&) noexcept { return false; } }; -23376: -23376: template -23376: struct __shrink_to_fit_aux<_Tp, true> -23376: { -23376: static bool -23376: _S_do_it(_Tp& __c) noexcept -23376: { -23376: -23376: try -23376: { -23376: _Tp(__make_move_if_noexcept_iterator(__c.begin()), -23376: __make_move_if_noexcept_iterator(__c.end()), -23376: __c.get_allocator()).swap(__c); -23376: return true; -23376: } -23376: catch(...) -23376: { return false; } -23376: -23376: -23376: -23376: } -23376: }; -23376: -23376: -23376: -23376: } -23376: # 42 "/usr/include/c++/8/string" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/localefwd.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/localefwd.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/localefwd.h" 3 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++locale.h" 1 3 -23376: # 39 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++locale.h" 3 -23376: -23376: # 40 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++locale.h" 3 -23376: -23376: # 1 "/usr/include/c++/8/clocale" 1 3 -23376: # 39 "/usr/include/c++/8/clocale" 3 -23376: -23376: # 40 "/usr/include/c++/8/clocale" 3 -23376: -23376: -23376: # 1 "/usr/include/locale.h" 1 3 4 -23376: # 28 "/usr/include/locale.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 29 "/usr/include/locale.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/locale.h" 1 3 4 -23376: # 30 "/usr/include/locale.h" 2 3 4 -23376: -23376: extern "C" { -23376: # 51 "/usr/include/locale.h" 3 4 -23376: struct lconv -23376: { -23376: -23376: -23376: char *decimal_point; -23376: char *thousands_sep; -23376: -23376: -23376: -23376: -23376: -23376: char *grouping; -23376: -23376: -23376: -23376: -23376: -23376: char *int_curr_symbol; -23376: char *currency_symbol; -23376: char *mon_decimal_point; -23376: char *mon_thousands_sep; -23376: char *mon_grouping; -23376: char *positive_sign; -23376: char *negative_sign; -23376: char int_frac_digits; -23376: char frac_digits; -23376: -23376: char p_cs_precedes; -23376: -23376: char p_sep_by_space; -23376: -23376: char n_cs_precedes; -23376: -23376: char n_sep_by_space; -23376: -23376: -23376: -23376: -23376: -23376: -23376: char p_sign_posn; -23376: char n_sign_posn; -23376: -23376: -23376: char int_p_cs_precedes; -23376: -23376: char int_p_sep_by_space; -23376: -23376: char int_n_cs_precedes; -23376: -23376: char int_n_sep_by_space; -23376: -23376: -23376: -23376: -23376: -23376: -23376: char int_p_sign_posn; -23376: char int_n_sign_posn; -23376: # 118 "/usr/include/locale.h" 3 4 -23376: }; -23376: -23376: -23376: -23376: extern char *setlocale (int __category, const char *__locale) throw (); -23376: -23376: -23376: extern struct lconv *localeconv (void) throw (); -23376: # 141 "/usr/include/locale.h" 3 4 -23376: extern locale_t newlocale (int __category_mask, const char *__locale, -23376: locale_t __base) throw (); -23376: # 176 "/usr/include/locale.h" 3 4 -23376: extern locale_t duplocale (locale_t __dataset) throw (); -23376: -23376: -23376: -23376: extern void freelocale (locale_t __dataset) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern locale_t uselocale (locale_t __dataset) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 43 "/usr/include/c++/8/clocale" 2 3 -23376: # 51 "/usr/include/c++/8/clocale" 3 -23376: namespace std -23376: { -23376: using ::lconv; -23376: using ::setlocale; -23376: using ::localeconv; -23376: } -23376: # 42 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++locale.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: extern "C" __typeof(uselocale) __uselocale; -23376: -23376: -23376: } -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: typedef __locale_t __c_locale; -23376: -23376: -23376: -23376: -23376: -23376: inline int -23376: __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), -23376: char* __out, -23376: const int __size __attribute__ ((__unused__)), -23376: const char* __fmt, ...) -23376: { -23376: -23376: __c_locale __old = __gnu_cxx::__uselocale(__cloc); -23376: # 88 "/usr/include/arm-linux-gnueabihf/c++/8/bits/c++locale.h" 3 -23376: __builtin_va_list __args; -23376: __builtin_va_start(__args, __fmt); -23376: -23376: -23376: const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); -23376: -23376: -23376: -23376: -23376: __builtin_va_end(__args); -23376: -23376: -23376: __gnu_cxx::__uselocale(__old); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: return __ret; -23376: } -23376: -23376: -23376: } -23376: # 41 "/usr/include/c++/8/bits/localefwd.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/cctype" 1 3 -23376: # 39 "/usr/include/c++/8/cctype" 3 -23376: -23376: # 40 "/usr/include/c++/8/cctype" 3 -23376: -23376: -23376: # 1 "/usr/include/ctype.h" 1 3 4 -23376: # 28 "/usr/include/ctype.h" 3 4 -23376: extern "C" { -23376: # 46 "/usr/include/ctype.h" 3 4 -23376: enum -23376: { -23376: _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), -23376: _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), -23376: _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), -23376: _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), -23376: _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), -23376: _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), -23376: _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), -23376: _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), -23376: _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), -23376: _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), -23376: _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), -23376: _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) -23376: }; -23376: # 79 "/usr/include/ctype.h" 3 4 -23376: extern const unsigned short int **__ctype_b_loc (void) -23376: throw () __attribute__ ((__const__)); -23376: extern const __int32_t **__ctype_tolower_loc (void) -23376: throw () __attribute__ ((__const__)); -23376: extern const __int32_t **__ctype_toupper_loc (void) -23376: throw () __attribute__ ((__const__)); -23376: # 108 "/usr/include/ctype.h" 3 4 -23376: extern int isalnum (int) throw (); -23376: extern int isalpha (int) throw (); -23376: extern int iscntrl (int) throw (); -23376: extern int isdigit (int) throw (); -23376: extern int islower (int) throw (); -23376: extern int isgraph (int) throw (); -23376: extern int isprint (int) throw (); -23376: extern int ispunct (int) throw (); -23376: extern int isspace (int) throw (); -23376: extern int isupper (int) throw (); -23376: extern int isxdigit (int) throw (); -23376: -23376: -23376: -23376: extern int tolower (int __c) throw (); -23376: -23376: -23376: extern int toupper (int __c) throw (); -23376: -23376: -23376: -23376: -23376: extern int isblank (int) throw (); -23376: -23376: -23376: -23376: -23376: extern int isctype (int __c, int __mask) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int isascii (int __c) throw (); -23376: -23376: -23376: -23376: extern int toascii (int __c) throw (); -23376: -23376: -23376: -23376: extern int _toupper (int) throw (); -23376: extern int _tolower (int) throw (); -23376: # 251 "/usr/include/ctype.h" 3 4 -23376: extern int isalnum_l (int, locale_t) throw (); -23376: extern int isalpha_l (int, locale_t) throw (); -23376: extern int iscntrl_l (int, locale_t) throw (); -23376: extern int isdigit_l (int, locale_t) throw (); -23376: extern int islower_l (int, locale_t) throw (); -23376: extern int isgraph_l (int, locale_t) throw (); -23376: extern int isprint_l (int, locale_t) throw (); -23376: extern int ispunct_l (int, locale_t) throw (); -23376: extern int isspace_l (int, locale_t) throw (); -23376: extern int isupper_l (int, locale_t) throw (); -23376: extern int isxdigit_l (int, locale_t) throw (); -23376: -23376: extern int isblank_l (int, locale_t) throw (); -23376: -23376: -23376: -23376: extern int __tolower_l (int __c, locale_t __l) throw (); -23376: extern int tolower_l (int __c, locale_t __l) throw (); -23376: -23376: -23376: extern int __toupper_l (int __c, locale_t __l) throw (); -23376: extern int toupper_l (int __c, locale_t __l) throw (); -23376: # 327 "/usr/include/ctype.h" 3 4 -23376: } -23376: # 43 "/usr/include/c++/8/cctype" 2 3 -23376: # 62 "/usr/include/c++/8/cctype" 3 -23376: namespace std -23376: { -23376: using ::isalnum; -23376: using ::isalpha; -23376: using ::iscntrl; -23376: using ::isdigit; -23376: using ::isgraph; -23376: using ::islower; -23376: using ::isprint; -23376: using ::ispunct; -23376: using ::isspace; -23376: using ::isupper; -23376: using ::isxdigit; -23376: using ::tolower; -23376: using ::toupper; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace std -23376: { -23376: using ::isblank; -23376: } -23376: # 43 "/usr/include/c++/8/bits/localefwd.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 55 "/usr/include/c++/8/bits/localefwd.h" 3 -23376: class locale; -23376: -23376: template -23376: bool -23376: has_facet(const locale&) throw(); -23376: -23376: template -23376: const _Facet& -23376: use_facet(const locale&); -23376: -23376: -23376: template -23376: bool -23376: isspace(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isprint(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: iscntrl(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isupper(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: islower(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isalpha(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isdigit(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: ispunct(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isxdigit(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isalnum(_CharT, const locale&); -23376: -23376: template -23376: bool -23376: isgraph(_CharT, const locale&); -23376: -23376: -23376: template -23376: bool -23376: isblank(_CharT, const locale&); -23376: -23376: -23376: template -23376: _CharT -23376: toupper(_CharT, const locale&); -23376: -23376: template -23376: _CharT -23376: tolower(_CharT, const locale&); -23376: -23376: -23376: class ctype_base; -23376: template -23376: class ctype; -23376: template<> class ctype; -23376: -23376: template<> class ctype; -23376: -23376: template -23376: class ctype_byname; -23376: -23376: -23376: class codecvt_base; -23376: template -23376: class codecvt; -23376: template<> class codecvt; -23376: -23376: template<> class codecvt; -23376: -23376: template -23376: class codecvt_byname; -23376: -23376: -23376: -23376: template > -23376: class num_get; -23376: template > -23376: class num_put; -23376: -23376: namespace __cxx11 { -23376: template class numpunct; -23376: template class numpunct_byname; -23376: } -23376: -23376: namespace __cxx11 { -23376: -23376: template -23376: class collate; -23376: template -23376: class collate_byname; -23376: } -23376: -23376: -23376: class time_base; -23376: namespace __cxx11 { -23376: template > -23376: class time_get; -23376: template > -23376: class time_get_byname; -23376: } -23376: template > -23376: class time_put; -23376: template > -23376: class time_put_byname; -23376: -23376: -23376: class money_base; -23376: namespace __cxx11 { -23376: template > -23376: class money_get; -23376: template > -23376: class money_put; -23376: } -23376: namespace __cxx11 { -23376: template -23376: class moneypunct; -23376: template -23376: class moneypunct_byname; -23376: } -23376: -23376: -23376: class messages_base; -23376: namespace __cxx11 { -23376: template -23376: class messages; -23376: template -23376: class messages_byname; -23376: } -23376: -23376: -23376: } -23376: # 44 "/usr/include/c++/8/string" 2 3 -23376: # 1 "/usr/include/c++/8/bits/ostream_insert.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/ostream_insert.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/ostream_insert.h" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/cxxabi_forced.h" 1 3 -23376: # 34 "/usr/include/c++/8/bits/cxxabi_forced.h" 3 -23376: -23376: # 35 "/usr/include/c++/8/bits/cxxabi_forced.h" 3 -23376: -23376: #pragma GCC visibility push(default) -23376: -23376: -23376: namespace __cxxabiv1 -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class __forced_unwind -23376: { -23376: virtual ~__forced_unwind() throw(); -23376: -23376: -23376: virtual void __pure_dummy() = 0; -23376: }; -23376: } -23376: -23376: -23376: #pragma GCC visibility pop -23376: # 37 "/usr/include/c++/8/bits/ostream_insert.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: inline void -23376: __ostream_write(basic_ostream<_CharT, _Traits>& __out, -23376: const _CharT* __s, streamsize __n) -23376: { -23376: typedef basic_ostream<_CharT, _Traits> __ostream_type; -23376: typedef typename __ostream_type::ios_base __ios_base; -23376: -23376: const streamsize __put = __out.rdbuf()->sputn(__s, __n); -23376: if (__put != __n) -23376: __out.setstate(__ios_base::badbit); -23376: } -23376: -23376: template -23376: inline void -23376: __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) -23376: { -23376: typedef basic_ostream<_CharT, _Traits> __ostream_type; -23376: typedef typename __ostream_type::ios_base __ios_base; -23376: -23376: const _CharT __c = __out.fill(); -23376: for (; __n > 0; --__n) -23376: { -23376: const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); -23376: if (_Traits::eq_int_type(__put, _Traits::eof())) -23376: { -23376: __out.setstate(__ios_base::badbit); -23376: break; -23376: } -23376: } -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: __ostream_insert(basic_ostream<_CharT, _Traits>& __out, -23376: const _CharT* __s, streamsize __n) -23376: { -23376: typedef basic_ostream<_CharT, _Traits> __ostream_type; -23376: typedef typename __ostream_type::ios_base __ios_base; -23376: -23376: typename __ostream_type::sentry __cerb(__out); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: const streamsize __w = __out.width(); -23376: if (__w > __n) -23376: { -23376: const bool __left = ((__out.flags() -23376: & __ios_base::adjustfield) -23376: == __ios_base::left); -23376: if (!__left) -23376: __ostream_fill(__out, __w - __n); -23376: if (__out.good()) -23376: __ostream_write(__out, __s, __n); -23376: if (__left && __out.good()) -23376: __ostream_fill(__out, __w - __n); -23376: } -23376: else -23376: __ostream_write(__out, __s, __n); -23376: __out.width(0); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __out._M_setstate(__ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __out._M_setstate(__ios_base::badbit); } -23376: } -23376: return __out; -23376: } -23376: -23376: -23376: -23376: -23376: extern template ostream& __ostream_insert(ostream&, const char*, streamsize); -23376: -23376: -23376: extern template wostream& __ostream_insert(wostream&, const wchar_t*, -23376: streamsize); -23376: -23376: -23376: -23376: -23376: } -23376: # 45 "/usr/include/c++/8/string" 2 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_function.h" 1 3 -23376: # 63 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 104 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: struct unary_function -23376: { -23376: -23376: typedef _Arg argument_type; -23376: -23376: -23376: typedef _Result result_type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct binary_function -23376: { -23376: -23376: typedef _Arg1 first_argument_type; -23376: -23376: -23376: typedef _Arg2 second_argument_type; -23376: -23376: -23376: typedef _Result result_type; -23376: }; -23376: # 144 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: struct __is_transparent; -23376: -23376: template -23376: struct plus; -23376: -23376: template -23376: struct minus; -23376: -23376: template -23376: struct multiplies; -23376: -23376: template -23376: struct divides; -23376: -23376: template -23376: struct modulus; -23376: -23376: template -23376: struct negate; -23376: -23376: -23376: -23376: template -23376: struct plus : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x + __y; } -23376: }; -23376: -23376: -23376: template -23376: struct minus : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x - __y; } -23376: }; -23376: -23376: -23376: template -23376: struct multiplies : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x * __y; } -23376: }; -23376: -23376: -23376: template -23376: struct divides : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x / __y; } -23376: }; -23376: -23376: -23376: template -23376: struct modulus : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x % __y; } -23376: }; -23376: -23376: -23376: template -23376: struct negate : public unary_function<_Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x) const -23376: { return -__x; } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct plus -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct minus -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct multiplies -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct divides -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct modulus -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct negate -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t) const -23376: noexcept(noexcept(-std::forward<_Tp>(__t))) -23376: -> decltype(-std::forward<_Tp>(__t)) -23376: { return -std::forward<_Tp>(__t); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: # 330 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: struct equal_to; -23376: -23376: template -23376: struct not_equal_to; -23376: -23376: template -23376: struct greater; -23376: -23376: template -23376: struct less; -23376: -23376: template -23376: struct greater_equal; -23376: -23376: template -23376: struct less_equal; -23376: -23376: -23376: -23376: template -23376: struct equal_to : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x == __y; } -23376: }; -23376: -23376: -23376: template -23376: struct not_equal_to : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x != __y; } -23376: }; -23376: -23376: -23376: template -23376: struct greater : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x > __y; } -23376: }; -23376: -23376: -23376: template -23376: struct less : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x < __y; } -23376: }; -23376: -23376: -23376: template -23376: struct greater_equal : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x >= __y; } -23376: }; -23376: -23376: -23376: template -23376: struct less_equal : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x <= __y; } -23376: }; -23376: -23376: -23376: template -23376: struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> -23376: { -23376: constexpr bool -23376: operator()(_Tp* __x, _Tp* __y) const noexcept -23376: { -23376: if (__builtin_constant_p (__x > __y)) -23376: return __x > __y; -23376: return (unsigned int)__x > (unsigned int)__y; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> -23376: { -23376: constexpr bool -23376: operator()(_Tp* __x, _Tp* __y) const noexcept -23376: { -23376: if (__builtin_constant_p (__x < __y)) -23376: return __x < __y; -23376: return (unsigned int)__x < (unsigned int)__y; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> -23376: { -23376: constexpr bool -23376: operator()(_Tp* __x, _Tp* __y) const noexcept -23376: { -23376: if (__builtin_constant_p (__x >= __y)) -23376: return __x >= __y; -23376: return (unsigned int)__x >= (unsigned int)__y; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> -23376: { -23376: constexpr bool -23376: operator()(_Tp* __x, _Tp* __y) const noexcept -23376: { -23376: if (__builtin_constant_p (__x <= __y)) -23376: return __x <= __y; -23376: return (unsigned int)__x <= (unsigned int)__y; -23376: } -23376: }; -23376: -23376: -23376: -23376: template<> -23376: struct equal_to -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct not_equal_to -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct greater -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) -23376: { -23376: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), -23376: __ptr_cmp<_Tp, _Up>{}); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator()(_Tp* __t, _Up* __u) const noexcept -23376: { return greater>{}(__t, __u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: -23376: private: -23376: template -23376: static constexpr decltype(auto) -23376: _S_cmp(_Tp&& __t, _Up&& __u, false_type) -23376: { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } -23376: -23376: template -23376: static constexpr bool -23376: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept -23376: { -23376: return greater{}( -23376: static_cast(std::forward<_Tp>(__t)), -23376: static_cast(std::forward<_Up>(__u))); -23376: } -23376: -23376: -23376: template -23376: struct __not_overloaded2 : true_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded2<_Tp, _Up, __void_t< -23376: decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; -23376: -23376: -23376: template -23376: struct __not_overloaded<_Tp, _Up, __void_t< -23376: decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: template -23376: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, -23376: is_convertible<_Tp, const volatile void*>, -23376: is_convertible<_Up, const volatile void*>>; -23376: }; -23376: -23376: -23376: template<> -23376: struct less -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) -23376: { -23376: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), -23376: __ptr_cmp<_Tp, _Up>{}); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator()(_Tp* __t, _Up* __u) const noexcept -23376: { return less>{}(__t, __u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: -23376: private: -23376: template -23376: static constexpr decltype(auto) -23376: _S_cmp(_Tp&& __t, _Up&& __u, false_type) -23376: { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } -23376: -23376: template -23376: static constexpr bool -23376: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept -23376: { -23376: return less{}( -23376: static_cast(std::forward<_Tp>(__t)), -23376: static_cast(std::forward<_Up>(__u))); -23376: } -23376: -23376: -23376: template -23376: struct __not_overloaded2 : true_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded2<_Tp, _Up, __void_t< -23376: decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; -23376: -23376: -23376: template -23376: struct __not_overloaded<_Tp, _Up, __void_t< -23376: decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: template -23376: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, -23376: is_convertible<_Tp, const volatile void*>, -23376: is_convertible<_Up, const volatile void*>>; -23376: }; -23376: -23376: -23376: template<> -23376: struct greater_equal -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) -23376: { -23376: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), -23376: __ptr_cmp<_Tp, _Up>{}); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator()(_Tp* __t, _Up* __u) const noexcept -23376: { return greater_equal>{}(__t, __u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: -23376: private: -23376: template -23376: static constexpr decltype(auto) -23376: _S_cmp(_Tp&& __t, _Up&& __u, false_type) -23376: { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } -23376: -23376: template -23376: static constexpr bool -23376: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept -23376: { -23376: return greater_equal{}( -23376: static_cast(std::forward<_Tp>(__t)), -23376: static_cast(std::forward<_Up>(__u))); -23376: } -23376: -23376: -23376: template -23376: struct __not_overloaded2 : true_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded2<_Tp, _Up, __void_t< -23376: decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; -23376: -23376: -23376: template -23376: struct __not_overloaded<_Tp, _Up, __void_t< -23376: decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: template -23376: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, -23376: is_convertible<_Tp, const volatile void*>, -23376: is_convertible<_Up, const volatile void*>>; -23376: }; -23376: -23376: -23376: template<> -23376: struct less_equal -23376: { -23376: template -23376: constexpr auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) -23376: { -23376: return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), -23376: __ptr_cmp<_Tp, _Up>{}); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator()(_Tp* __t, _Up* __u) const noexcept -23376: { return less_equal>{}(__t, __u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: -23376: private: -23376: template -23376: static constexpr decltype(auto) -23376: _S_cmp(_Tp&& __t, _Up&& __u, false_type) -23376: { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } -23376: -23376: template -23376: static constexpr bool -23376: _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept -23376: { -23376: return less_equal{}( -23376: static_cast(std::forward<_Tp>(__t)), -23376: static_cast(std::forward<_Up>(__u))); -23376: } -23376: -23376: -23376: template -23376: struct __not_overloaded2 : true_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded2<_Tp, _Up, __void_t< -23376: decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: -23376: template -23376: struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; -23376: -23376: -23376: template -23376: struct __not_overloaded<_Tp, _Up, __void_t< -23376: decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> -23376: : false_type { }; -23376: -23376: template -23376: using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, -23376: is_convertible<_Tp, const volatile void*>, -23376: is_convertible<_Up, const volatile void*>>; -23376: }; -23376: # 750 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: struct logical_and; -23376: -23376: template -23376: struct logical_or; -23376: -23376: template -23376: struct logical_not; -23376: -23376: -23376: -23376: template -23376: struct logical_and : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x && __y; } -23376: }; -23376: -23376: -23376: template -23376: struct logical_or : public binary_function<_Tp, _Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x || __y; } -23376: }; -23376: -23376: -23376: template -23376: struct logical_not : public unary_function<_Tp, bool> -23376: { -23376: constexpr -23376: bool -23376: operator()(const _Tp& __x) const -23376: { return !__x; } -23376: }; -23376: -23376: -23376: -23376: template<> -23376: struct logical_and -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct logical_or -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: template<> -23376: struct logical_not -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t) const -23376: noexcept(noexcept(!std::forward<_Tp>(__t))) -23376: -> decltype(!std::forward<_Tp>(__t)) -23376: { return !std::forward<_Tp>(__t); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct bit_and; -23376: -23376: template -23376: struct bit_or; -23376: -23376: template -23376: struct bit_xor; -23376: -23376: template -23376: struct bit_not; -23376: -23376: -23376: -23376: -23376: template -23376: struct bit_and : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x & __y; } -23376: }; -23376: -23376: template -23376: struct bit_or : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x | __y; } -23376: }; -23376: -23376: template -23376: struct bit_xor : public binary_function<_Tp, _Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x, const _Tp& __y) const -23376: { return __x ^ __y; } -23376: }; -23376: -23376: template -23376: struct bit_not : public unary_function<_Tp, _Tp> -23376: { -23376: constexpr -23376: _Tp -23376: operator()(const _Tp& __x) const -23376: { return ~__x; } -23376: }; -23376: -23376: -23376: template <> -23376: struct bit_and -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: template <> -23376: struct bit_or -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: template <> -23376: struct bit_xor -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t, _Up&& __u) const -23376: noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) -23376: -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) -23376: { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: -23376: template <> -23376: struct bit_not -23376: { -23376: template -23376: constexpr -23376: auto -23376: operator()(_Tp&& __t) const -23376: noexcept(noexcept(~std::forward<_Tp>(__t))) -23376: -> decltype(~std::forward<_Tp>(__t)) -23376: { return ~std::forward<_Tp>(__t); } -23376: -23376: typedef __is_transparent is_transparent; -23376: }; -23376: # 978 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: class unary_negate -23376: : public unary_function -23376: { -23376: protected: -23376: _Predicate _M_pred; -23376: -23376: public: -23376: constexpr -23376: explicit -23376: unary_negate(const _Predicate& __x) : _M_pred(__x) { } -23376: -23376: constexpr -23376: bool -23376: operator()(const typename _Predicate::argument_type& __x) const -23376: { return !_M_pred(__x); } -23376: }; -23376: -23376: -23376: template -23376: constexpr -23376: inline unary_negate<_Predicate> -23376: not1(const _Predicate& __pred) -23376: { return unary_negate<_Predicate>(__pred); } -23376: -23376: -23376: template -23376: class binary_negate -23376: : public binary_function -23376: { -23376: protected: -23376: _Predicate _M_pred; -23376: -23376: public: -23376: constexpr -23376: explicit -23376: binary_negate(const _Predicate& __x) : _M_pred(__x) { } -23376: -23376: constexpr -23376: bool -23376: operator()(const typename _Predicate::first_argument_type& __x, -23376: const typename _Predicate::second_argument_type& __y) const -23376: { return !_M_pred(__x, __y); } -23376: }; -23376: -23376: -23376: template -23376: constexpr -23376: inline binary_negate<_Predicate> -23376: not2(const _Predicate& __pred) -23376: { return binary_negate<_Predicate>(__pred); } -23376: # 1055 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: class pointer_to_unary_function : public unary_function<_Arg, _Result> -23376: { -23376: protected: -23376: _Result (*_M_ptr)(_Arg); -23376: -23376: public: -23376: pointer_to_unary_function() { } -23376: -23376: explicit -23376: pointer_to_unary_function(_Result (*__x)(_Arg)) -23376: : _M_ptr(__x) { } -23376: -23376: _Result -23376: operator()(_Arg __x) const -23376: { return _M_ptr(__x); } -23376: }; -23376: -23376: -23376: template -23376: inline pointer_to_unary_function<_Arg, _Result> -23376: ptr_fun(_Result (*__x)(_Arg)) -23376: { return pointer_to_unary_function<_Arg, _Result>(__x); } -23376: -23376: -23376: template -23376: class pointer_to_binary_function -23376: : public binary_function<_Arg1, _Arg2, _Result> -23376: { -23376: protected: -23376: _Result (*_M_ptr)(_Arg1, _Arg2); -23376: -23376: public: -23376: pointer_to_binary_function() { } -23376: -23376: explicit -23376: pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) -23376: : _M_ptr(__x) { } -23376: -23376: _Result -23376: operator()(_Arg1 __x, _Arg2 __y) const -23376: { return _M_ptr(__x, __y); } -23376: }; -23376: -23376: -23376: template -23376: inline pointer_to_binary_function<_Arg1, _Arg2, _Result> -23376: ptr_fun(_Result (*__x)(_Arg1, _Arg2)) -23376: { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } -23376: -23376: -23376: template -23376: struct _Identity -23376: : public unary_function<_Tp, _Tp> -23376: { -23376: _Tp& -23376: operator()(_Tp& __x) const -23376: { return __x; } -23376: -23376: const _Tp& -23376: operator()(const _Tp& __x) const -23376: { return __x; } -23376: }; -23376: -23376: -23376: template struct _Identity : _Identity<_Tp> { }; -23376: -23376: template -23376: struct _Select1st -23376: : public unary_function<_Pair, typename _Pair::first_type> -23376: { -23376: typename _Pair::first_type& -23376: operator()(_Pair& __x) const -23376: { return __x.first; } -23376: -23376: const typename _Pair::first_type& -23376: operator()(const _Pair& __x) const -23376: { return __x.first; } -23376: -23376: -23376: template -23376: typename _Pair2::first_type& -23376: operator()(_Pair2& __x) const -23376: { return __x.first; } -23376: -23376: template -23376: const typename _Pair2::first_type& -23376: operator()(const _Pair2& __x) const -23376: { return __x.first; } -23376: -23376: }; -23376: -23376: template -23376: struct _Select2nd -23376: : public unary_function<_Pair, typename _Pair::second_type> -23376: { -23376: typename _Pair::second_type& -23376: operator()(_Pair& __x) const -23376: { return __x.second; } -23376: -23376: const typename _Pair::second_type& -23376: operator()(const _Pair& __x) const -23376: { return __x.second; } -23376: }; -23376: # 1178 "/usr/include/c++/8/bits/stl_function.h" 3 -23376: template -23376: class mem_fun_t : public unary_function<_Tp*, _Ret> -23376: { -23376: public: -23376: explicit -23376: mem_fun_t(_Ret (_Tp::*__pf)()) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(_Tp* __p) const -23376: { return (__p->*_M_f)(); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(); -23376: }; -23376: -23376: -23376: -23376: template -23376: class const_mem_fun_t : public unary_function -23376: { -23376: public: -23376: explicit -23376: const_mem_fun_t(_Ret (_Tp::*__pf)() const) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(const _Tp* __p) const -23376: { return (__p->*_M_f)(); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)() const; -23376: }; -23376: -23376: -23376: -23376: template -23376: class mem_fun_ref_t : public unary_function<_Tp, _Ret> -23376: { -23376: public: -23376: explicit -23376: mem_fun_ref_t(_Ret (_Tp::*__pf)()) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(_Tp& __r) const -23376: { return (__r.*_M_f)(); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(); -23376: }; -23376: -23376: -23376: -23376: template -23376: class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> -23376: { -23376: public: -23376: explicit -23376: const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(const _Tp& __r) const -23376: { return (__r.*_M_f)(); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)() const; -23376: }; -23376: -23376: -23376: -23376: template -23376: class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> -23376: { -23376: public: -23376: explicit -23376: mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(_Tp* __p, _Arg __x) const -23376: { return (__p->*_M_f)(__x); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(_Arg); -23376: }; -23376: -23376: -23376: -23376: template -23376: class const_mem_fun1_t : public binary_function -23376: { -23376: public: -23376: explicit -23376: const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(const _Tp* __p, _Arg __x) const -23376: { return (__p->*_M_f)(__x); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(_Arg) const; -23376: }; -23376: -23376: -23376: -23376: template -23376: class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> -23376: { -23376: public: -23376: explicit -23376: mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(_Tp& __r, _Arg __x) const -23376: { return (__r.*_M_f)(__x); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(_Arg); -23376: }; -23376: -23376: -23376: -23376: template -23376: class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> -23376: { -23376: public: -23376: explicit -23376: const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) -23376: : _M_f(__pf) { } -23376: -23376: _Ret -23376: operator()(const _Tp& __r, _Arg __x) const -23376: { return (__r.*_M_f)(__x); } -23376: -23376: private: -23376: _Ret (_Tp::*_M_f)(_Arg) const; -23376: }; -23376: -23376: -23376: -23376: template -23376: inline mem_fun_t<_Ret, _Tp> -23376: mem_fun(_Ret (_Tp::*__f)()) -23376: { return mem_fun_t<_Ret, _Tp>(__f); } -23376: -23376: template -23376: inline const_mem_fun_t<_Ret, _Tp> -23376: mem_fun(_Ret (_Tp::*__f)() const) -23376: { return const_mem_fun_t<_Ret, _Tp>(__f); } -23376: -23376: template -23376: inline mem_fun_ref_t<_Ret, _Tp> -23376: mem_fun_ref(_Ret (_Tp::*__f)()) -23376: { return mem_fun_ref_t<_Ret, _Tp>(__f); } -23376: -23376: template -23376: inline const_mem_fun_ref_t<_Ret, _Tp> -23376: mem_fun_ref(_Ret (_Tp::*__f)() const) -23376: { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } -23376: -23376: template -23376: inline mem_fun1_t<_Ret, _Tp, _Arg> -23376: mem_fun(_Ret (_Tp::*__f)(_Arg)) -23376: { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } -23376: -23376: template -23376: inline const_mem_fun1_t<_Ret, _Tp, _Arg> -23376: mem_fun(_Ret (_Tp::*__f)(_Arg) const) -23376: { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } -23376: -23376: template -23376: inline mem_fun1_ref_t<_Ret, _Tp, _Arg> -23376: mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) -23376: { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } -23376: -23376: template -23376: inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> -23376: mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) -23376: { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } -23376: -23376: -23376: -23376: -23376: } -23376: -23376: -23376: # 1 "/usr/include/c++/8/backward/binders.h" 1 3 -23376: # 60 "/usr/include/c++/8/backward/binders.h" 3 -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 107 "/usr/include/c++/8/backward/binders.h" 3 -23376: template -23376: class binder1st -23376: : public unary_function -23376: { -23376: protected: -23376: _Operation op; -23376: typename _Operation::first_argument_type value; -23376: -23376: public: -23376: binder1st(const _Operation& __x, -23376: const typename _Operation::first_argument_type& __y) -23376: : op(__x), value(__y) { } -23376: -23376: typename _Operation::result_type -23376: operator()(const typename _Operation::second_argument_type& __x) const -23376: { return op(value, __x); } -23376: -23376: -23376: -23376: typename _Operation::result_type -23376: operator()(typename _Operation::second_argument_type& __x) const -23376: { return op(value, __x); } -23376: } __attribute__ ((__deprecated__)); -23376: -23376: -23376: template -23376: inline binder1st<_Operation> -23376: bind1st(const _Operation& __fn, const _Tp& __x) -23376: { -23376: typedef typename _Operation::first_argument_type _Arg1_type; -23376: return binder1st<_Operation>(__fn, _Arg1_type(__x)); -23376: } -23376: -23376: -23376: template -23376: class binder2nd -23376: : public unary_function -23376: { -23376: protected: -23376: _Operation op; -23376: typename _Operation::second_argument_type value; -23376: -23376: public: -23376: binder2nd(const _Operation& __x, -23376: const typename _Operation::second_argument_type& __y) -23376: : op(__x), value(__y) { } -23376: -23376: typename _Operation::result_type -23376: operator()(const typename _Operation::first_argument_type& __x) const -23376: { return op(__x, value); } -23376: -23376: -23376: -23376: typename _Operation::result_type -23376: operator()(typename _Operation::first_argument_type& __x) const -23376: { return op(__x, value); } -23376: } __attribute__ ((__deprecated__)); -23376: -23376: -23376: template -23376: inline binder2nd<_Operation> -23376: bind2nd(const _Operation& __fn, const _Tp& __x) -23376: { -23376: typedef typename _Operation::second_argument_type _Arg2_type; -23376: return binder2nd<_Operation>(__fn, _Arg2_type(__x)); -23376: } -23376: -23376: -23376: -23376: } -23376: -23376: #pragma GCC diagnostic pop -23376: # 1369 "/usr/include/c++/8/bits/stl_function.h" 2 3 -23376: # 49 "/usr/include/c++/8/string" 2 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/range_access.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/range_access.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/range_access.h" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: begin(_Container& __cont) -> decltype(__cont.begin()) -23376: { return __cont.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: begin(const _Container& __cont) -> decltype(__cont.begin()) -23376: { return __cont.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: end(_Container& __cont) -> decltype(__cont.end()) -23376: { return __cont.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: end(const _Container& __cont) -> decltype(__cont.end()) -23376: { return __cont.end(); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr _Tp* -23376: begin(_Tp (&__arr)[_Nm]) -23376: { return __arr; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr _Tp* -23376: end(_Tp (&__arr)[_Nm]) -23376: { return __arr + _Nm; } -23376: -23376: -23376: -23376: template class valarray; -23376: -23376: template _Tp* begin(valarray<_Tp>&); -23376: template const _Tp* begin(const valarray<_Tp>&); -23376: template _Tp* end(valarray<_Tp>&); -23376: template const _Tp* end(const valarray<_Tp>&); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr auto -23376: cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) -23376: -> decltype(std::begin(__cont)) -23376: { return std::begin(__cont); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline constexpr auto -23376: cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) -23376: -> decltype(std::end(__cont)) -23376: { return std::end(__cont); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: rbegin(_Container& __cont) -> decltype(__cont.rbegin()) -23376: { return __cont.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) -23376: { return __cont.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: rend(_Container& __cont) -> decltype(__cont.rend()) -23376: { return __cont.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: rend(const _Container& __cont) -> decltype(__cont.rend()) -23376: { return __cont.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator<_Tp*> -23376: rbegin(_Tp (&__arr)[_Nm]) -23376: { return reverse_iterator<_Tp*>(__arr + _Nm); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator<_Tp*> -23376: rend(_Tp (&__arr)[_Nm]) -23376: { return reverse_iterator<_Tp*>(__arr); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator -23376: rbegin(initializer_list<_Tp> __il) -23376: { return reverse_iterator(__il.end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline reverse_iterator -23376: rend(initializer_list<_Tp> __il) -23376: { return reverse_iterator(__il.begin()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) -23376: { return std::rbegin(__cont); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline auto -23376: crend(const _Container& __cont) -> decltype(std::rend(__cont)) -23376: { return std::rend(__cont); } -23376: # 323 "/usr/include/c++/8/bits/range_access.h" 3 -23376: -23376: } -23376: # 52 "/usr/include/c++/8/string" 2 3 -23376: # 1 "/usr/include/c++/8/bits/basic_string.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: -23376: # 1 "/usr/include/c++/8/ext/atomicity.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/atomicity.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/atomicity.h" 3 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr.h" 1 3 -23376: # 30 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr.h" 3 -23376: #pragma GCC visibility push(default) -23376: # 148 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr.h" 3 -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 1 3 -23376: # 35 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: # 1 "/usr/include/pthread.h" 1 3 4 -23376: # 23 "/usr/include/pthread.h" 3 4 -23376: # 1 "/usr/include/sched.h" 1 3 4 -23376: # 29 "/usr/include/sched.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 30 "/usr/include/sched.h" 2 3 4 -23376: # 43 "/usr/include/sched.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 1 3 4 -23376: # 74 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 1 3 4 -23376: # 23 "/usr/include/arm-linux-gnueabihf/bits/types/struct_sched_param.h" 3 4 -23376: struct sched_param -23376: { -23376: int sched_priority; -23376: }; -23376: # 75 "/usr/include/arm-linux-gnueabihf/bits/sched.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: extern int clone (int (*__fn) (void *__arg), void *__child_stack, -23376: int __flags, void *__arg, ...) throw (); -23376: -23376: -23376: extern int unshare (int __flags) throw (); -23376: -23376: -23376: extern int sched_getcpu (void) throw (); -23376: -23376: -23376: extern int setns (int __fd, int __nstype) throw (); -23376: -23376: -23376: } -23376: # 44 "/usr/include/sched.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 1 3 4 -23376: # 32 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 -23376: typedef unsigned long int __cpu_mask; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef struct -23376: { -23376: __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; -23376: } cpu_set_t; -23376: # 115 "/usr/include/arm-linux-gnueabihf/bits/cpu-set.h" 3 4 -23376: extern "C" { -23376: -23376: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) -23376: throw (); -23376: extern cpu_set_t *__sched_cpualloc (size_t __count) throw () __attribute__ ((__warn_unused_result__)); -23376: extern void __sched_cpufree (cpu_set_t *__set) throw (); -23376: -23376: } -23376: # 45 "/usr/include/sched.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) -23376: throw (); -23376: -23376: -23376: extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw (); -23376: -23376: -23376: extern int sched_setscheduler (__pid_t __pid, int __policy, -23376: const struct sched_param *__param) throw (); -23376: -23376: -23376: extern int sched_getscheduler (__pid_t __pid) throw (); -23376: -23376: -23376: extern int sched_yield (void) throw (); -23376: -23376: -23376: extern int sched_get_priority_max (int __algorithm) throw (); -23376: -23376: -23376: extern int sched_get_priority_min (int __algorithm) throw (); -23376: -23376: -23376: extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw (); -23376: # 121 "/usr/include/sched.h" 3 4 -23376: extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, -23376: const cpu_set_t *__cpuset) throw (); -23376: -23376: -23376: extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, -23376: cpu_set_t *__cpuset) throw (); -23376: -23376: -23376: } -23376: # 24 "/usr/include/pthread.h" 2 3 4 -23376: # 1 "/usr/include/time.h" 1 3 4 -23376: # 29 "/usr/include/time.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 30 "/usr/include/time.h" 2 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/time.h" 1 3 4 -23376: # 73 "/usr/include/arm-linux-gnueabihf/bits/time.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 1 3 4 -23376: # 26 "/usr/include/arm-linux-gnueabihf/bits/timex.h" 3 4 -23376: struct timex -23376: { -23376: unsigned int modes; -23376: __syscall_slong_t offset; -23376: __syscall_slong_t freq; -23376: __syscall_slong_t maxerror; -23376: __syscall_slong_t esterror; -23376: int status; -23376: __syscall_slong_t constant; -23376: __syscall_slong_t precision; -23376: __syscall_slong_t tolerance; -23376: struct timeval time; -23376: __syscall_slong_t tick; -23376: __syscall_slong_t ppsfreq; -23376: __syscall_slong_t jitter; -23376: int shift; -23376: __syscall_slong_t stabil; -23376: __syscall_slong_t jitcnt; -23376: __syscall_slong_t calcnt; -23376: __syscall_slong_t errcnt; -23376: __syscall_slong_t stbcnt; -23376: -23376: int tai; -23376: -23376: -23376: int :32; int :32; int :32; int :32; -23376: int :32; int :32; int :32; int :32; -23376: int :32; int :32; int :32; -23376: }; -23376: # 74 "/usr/include/arm-linux-gnueabihf/bits/time.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw (); -23376: -23376: } -23376: # 34 "/usr/include/time.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_tm.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct tm -23376: { -23376: int tm_sec; -23376: int tm_min; -23376: int tm_hour; -23376: int tm_mday; -23376: int tm_mon; -23376: int tm_year; -23376: int tm_wday; -23376: int tm_yday; -23376: int tm_isdst; -23376: -23376: -23376: long int tm_gmtoff; -23376: const char *tm_zone; -23376: -23376: -23376: -23376: -23376: }; -23376: # 40 "/usr/include/time.h" 2 3 4 -23376: # 48 "/usr/include/time.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_itimerspec.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct itimerspec -23376: { -23376: struct timespec it_interval; -23376: struct timespec it_value; -23376: }; -23376: # 49 "/usr/include/time.h" 2 3 4 -23376: struct sigevent; -23376: # 68 "/usr/include/time.h" 3 4 -23376: extern "C" { -23376: -23376: -23376: -23376: extern clock_t clock (void) throw (); -23376: -23376: -23376: extern time_t time (time_t *__timer) throw (); -23376: -23376: -23376: extern double difftime (time_t __time1, time_t __time0) -23376: throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern time_t mktime (struct tm *__tp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern size_t strftime (char *__restrict __s, size_t __maxsize, -23376: const char *__restrict __format, -23376: const struct tm *__restrict __tp) throw (); -23376: -23376: -23376: -23376: -23376: extern char *strptime (const char *__restrict __s, -23376: const char *__restrict __fmt, struct tm *__tp) -23376: throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern size_t strftime_l (char *__restrict __s, size_t __maxsize, -23376: const char *__restrict __format, -23376: const struct tm *__restrict __tp, -23376: locale_t __loc) throw (); -23376: -23376: -23376: -23376: extern char *strptime_l (const char *__restrict __s, -23376: const char *__restrict __fmt, struct tm *__tp, -23376: locale_t __loc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern struct tm *gmtime (const time_t *__timer) throw (); -23376: -23376: -23376: -23376: extern struct tm *localtime (const time_t *__timer) throw (); -23376: -23376: -23376: -23376: -23376: extern struct tm *gmtime_r (const time_t *__restrict __timer, -23376: struct tm *__restrict __tp) throw (); -23376: -23376: -23376: -23376: extern struct tm *localtime_r (const time_t *__restrict __timer, -23376: struct tm *__restrict __tp) throw (); -23376: -23376: -23376: -23376: -23376: extern char *asctime (const struct tm *__tp) throw (); -23376: -23376: -23376: extern char *ctime (const time_t *__timer) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern char *asctime_r (const struct tm *__restrict __tp, -23376: char *__restrict __buf) throw (); -23376: -23376: -23376: extern char *ctime_r (const time_t *__restrict __timer, -23376: char *__restrict __buf) throw (); -23376: -23376: -23376: -23376: -23376: extern char *__tzname[2]; -23376: extern int __daylight; -23376: extern long int __timezone; -23376: -23376: -23376: -23376: -23376: extern char *tzname[2]; -23376: -23376: -23376: -23376: extern void tzset (void) throw (); -23376: -23376: -23376: -23376: extern int daylight; -23376: extern long int timezone; -23376: -23376: -23376: -23376: -23376: -23376: extern int stime (const time_t *__when) throw (); -23376: # 196 "/usr/include/time.h" 3 4 -23376: extern time_t timegm (struct tm *__tp) throw (); -23376: -23376: -23376: extern time_t timelocal (struct tm *__tp) throw (); -23376: -23376: -23376: extern int dysize (int __year) throw () __attribute__ ((__const__)); -23376: # 211 "/usr/include/time.h" 3 4 -23376: extern int nanosleep (const struct timespec *__requested_time, -23376: struct timespec *__remaining); -23376: -23376: -23376: -23376: extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw (); -23376: -23376: -23376: extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw (); -23376: -23376: -23376: extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) -23376: throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int clock_nanosleep (clockid_t __clock_id, int __flags, -23376: const struct timespec *__req, -23376: struct timespec *__rem); -23376: -23376: -23376: extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw (); -23376: -23376: -23376: -23376: -23376: extern int timer_create (clockid_t __clock_id, -23376: struct sigevent *__restrict __evp, -23376: timer_t *__restrict __timerid) throw (); -23376: -23376: -23376: extern int timer_delete (timer_t __timerid) throw (); -23376: -23376: -23376: extern int timer_settime (timer_t __timerid, int __flags, -23376: const struct itimerspec *__restrict __value, -23376: struct itimerspec *__restrict __ovalue) throw (); -23376: -23376: -23376: extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) -23376: throw (); -23376: -23376: -23376: extern int timer_getoverrun (timer_t __timerid) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int timespec_get (struct timespec *__ts, int __base) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 280 "/usr/include/time.h" 3 4 -23376: extern int getdate_err; -23376: # 289 "/usr/include/time.h" 3 4 -23376: extern struct tm *getdate (const char *__string); -23376: # 303 "/usr/include/time.h" 3 4 -23376: extern int getdate_r (const char *__restrict __string, -23376: struct tm *__restrict __resbufp); -23376: -23376: -23376: } -23376: # 25 "/usr/include/pthread.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 1 3 4 -23376: # 33 "/usr/include/arm-linux-gnueabihf/bits/setjmp.h" 3 4 -23376: typedef int __jmp_buf[64] __attribute__((__aligned__ (8))); -23376: # 28 "/usr/include/pthread.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 -23376: # 29 "/usr/include/pthread.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_CREATE_JOINABLE, -23376: -23376: PTHREAD_CREATE_DETACHED -23376: -23376: }; -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_MUTEX_TIMED_NP, -23376: PTHREAD_MUTEX_RECURSIVE_NP, -23376: PTHREAD_MUTEX_ERRORCHECK_NP, -23376: PTHREAD_MUTEX_ADAPTIVE_NP -23376: -23376: , -23376: PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, -23376: PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, -23376: PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, -23376: PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL -23376: -23376: -23376: -23376: , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_MUTEX_STALLED, -23376: PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, -23376: PTHREAD_MUTEX_ROBUST, -23376: PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_PRIO_NONE, -23376: PTHREAD_PRIO_INHERIT, -23376: PTHREAD_PRIO_PROTECT -23376: }; -23376: # 115 "/usr/include/pthread.h" 3 4 -23376: enum -23376: { -23376: PTHREAD_RWLOCK_PREFER_READER_NP, -23376: PTHREAD_RWLOCK_PREFER_WRITER_NP, -23376: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, -23376: PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP -23376: }; -23376: # 156 "/usr/include/pthread.h" 3 4 -23376: enum -23376: { -23376: PTHREAD_INHERIT_SCHED, -23376: -23376: PTHREAD_EXPLICIT_SCHED -23376: -23376: }; -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_SCOPE_SYSTEM, -23376: -23376: PTHREAD_SCOPE_PROCESS -23376: -23376: }; -23376: -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_PROCESS_PRIVATE, -23376: -23376: PTHREAD_PROCESS_SHARED -23376: -23376: }; -23376: # 191 "/usr/include/pthread.h" 3 4 -23376: struct _pthread_cleanup_buffer -23376: { -23376: void (*__routine) (void *); -23376: void *__arg; -23376: int __canceltype; -23376: struct _pthread_cleanup_buffer *__prev; -23376: }; -23376: -23376: -23376: enum -23376: { -23376: PTHREAD_CANCEL_ENABLE, -23376: -23376: PTHREAD_CANCEL_DISABLE -23376: -23376: }; -23376: enum -23376: { -23376: PTHREAD_CANCEL_DEFERRED, -23376: -23376: PTHREAD_CANCEL_ASYNCHRONOUS -23376: -23376: }; -23376: # 229 "/usr/include/pthread.h" 3 4 -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: extern int pthread_create (pthread_t *__restrict __newthread, -23376: const pthread_attr_t *__restrict __attr, -23376: void *(*__start_routine) (void *), -23376: void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: -23376: -23376: -23376: extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_join (pthread_t __th, void **__thread_return); -23376: -23376: -23376: -23376: -23376: extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, -23376: const struct timespec *__abstime); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_detach (pthread_t __th) throw (); -23376: -23376: -23376: -23376: extern pthread_t pthread_self (void) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) -23376: throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_attr_destroy (pthread_attr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, -23376: int *__detachstate) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, -23376: int __detachstate) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, -23376: size_t *__guardsize) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setguardsize (pthread_attr_t *__attr, -23376: size_t __guardsize) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, -23376: struct sched_param *__restrict __param) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, -23376: const struct sched_param *__restrict -23376: __param) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict -23376: __attr, int *__restrict __policy) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict -23376: __attr, int *__restrict __inherit) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, -23376: int __inherit) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, -23376: int *__restrict __scope) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict -23376: __attr, void **__restrict __stackaddr) -23376: throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, -23376: void *__stackaddr) -23376: throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); -23376: -23376: -23376: extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict -23376: __attr, size_t *__restrict __stacksize) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern int pthread_attr_setstacksize (pthread_attr_t *__attr, -23376: size_t __stacksize) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, -23376: void **__restrict __stackaddr, -23376: size_t *__restrict __stacksize) -23376: throw () __attribute__ ((__nonnull__ (1, 2, 3))); -23376: -23376: -23376: -23376: -23376: extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, -23376: size_t __stacksize) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, -23376: size_t __cpusetsize, -23376: const cpu_set_t *__cpuset) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: -23376: extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, -23376: size_t __cpusetsize, -23376: cpu_set_t *__cpuset) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: extern int pthread_getattr_default_np (pthread_attr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_setattr_default_np (const pthread_attr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_setschedparam (pthread_t __target_thread, int __policy, -23376: const struct sched_param *__param) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: -23376: -23376: extern int pthread_getschedparam (pthread_t __target_thread, -23376: int *__restrict __policy, -23376: struct sched_param *__restrict __param) -23376: throw () __attribute__ ((__nonnull__ (2, 3))); -23376: -23376: -23376: extern int pthread_setschedprio (pthread_t __target_thread, int __prio) -23376: throw (); -23376: -23376: -23376: -23376: -23376: extern int pthread_getname_np (pthread_t __target_thread, char *__buf, -23376: size_t __buflen) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: extern int pthread_setname_np (pthread_t __target_thread, const char *__name) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_getconcurrency (void) throw (); -23376: -23376: -23376: extern int pthread_setconcurrency (int __level) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_yield (void) throw (); -23376: -23376: -23376: -23376: -23376: extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, -23376: const cpu_set_t *__cpuset) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: -23376: -23376: extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, -23376: cpu_set_t *__cpuset) -23376: throw () __attribute__ ((__nonnull__ (3))); -23376: # 495 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_once (pthread_once_t *__once_control, -23376: void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); -23376: # 507 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_setcancelstate (int __state, int *__oldstate); -23376: -23376: -23376: -23376: extern int pthread_setcanceltype (int __type, int *__oldtype); -23376: -23376: -23376: extern int pthread_cancel (pthread_t __th); -23376: -23376: -23376: -23376: -23376: extern void pthread_testcancel (void); -23376: -23376: -23376: -23376: -23376: typedef struct -23376: { -23376: struct -23376: { -23376: __jmp_buf __cancel_jmp_buf; -23376: int __mask_was_saved; -23376: } __cancel_jmp_buf[1]; -23376: void *__pad[4]; -23376: } __pthread_unwind_buf_t __attribute__ ((__aligned__)); -23376: # 541 "/usr/include/pthread.h" 3 4 -23376: struct __pthread_cleanup_frame -23376: { -23376: void (*__cancel_routine) (void *); -23376: void *__cancel_arg; -23376: int __do_it; -23376: int __cancel_type; -23376: }; -23376: -23376: -23376: -23376: -23376: class __pthread_cleanup_class -23376: { -23376: void (*__cancel_routine) (void *); -23376: void *__cancel_arg; -23376: int __do_it; -23376: int __cancel_type; -23376: -23376: public: -23376: __pthread_cleanup_class (void (*__fct) (void *), void *__arg) -23376: : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } -23376: ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } -23376: void __setdoit (int __newval) { __do_it = __newval; } -23376: void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, -23376: &__cancel_type); } -23376: void __restore () const { pthread_setcanceltype (__cancel_type, 0); } -23376: }; -23376: # 743 "/usr/include/pthread.h" 3 4 -23376: struct __jmp_buf_tag; -23376: extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_mutex_init (pthread_mutex_t *__mutex, -23376: const pthread_mutexattr_t *__mutexattr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutex_lock (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, -23376: const struct timespec *__restrict -23376: __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_mutex_getprioceiling (const pthread_mutex_t * -23376: __restrict __mutex, -23376: int *__restrict __prioceiling) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, -23376: int __prioceiling, -23376: int *__restrict __old_ceiling) -23376: throw () __attribute__ ((__nonnull__ (1, 3))); -23376: -23376: -23376: -23376: -23376: extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 807 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * -23376: __restrict __attr, -23376: int *__restrict __pshared) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, -23376: int __pshared) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict -23376: __attr, int *__restrict __kind) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: -23376: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * -23376: __restrict __attr, -23376: int *__restrict __protocol) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, -23376: int __protocol) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * -23376: __restrict __attr, -23376: int *__restrict __prioceiling) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, -23376: int __prioceiling) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, -23376: int *__robustness) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, -23376: int *__robustness) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, -23376: int __robustness) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, -23376: int __robustness) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 889 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, -23376: const pthread_rwlockattr_t *__restrict -23376: __attr) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, -23376: const struct timespec *__restrict -23376: __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, -23376: const struct timespec *__restrict -23376: __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: -23376: extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * -23376: __restrict __attr, -23376: int *__restrict __pshared) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, -23376: int __pshared) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * -23376: __restrict __attr, -23376: int *__restrict __pref) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, -23376: int __pref) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_cond_init (pthread_cond_t *__restrict __cond, -23376: const pthread_condattr_t *__restrict __cond_attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_cond_destroy (pthread_cond_t *__cond) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_cond_signal (pthread_cond_t *__cond) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_cond_broadcast (pthread_cond_t *__cond) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, -23376: pthread_mutex_t *__restrict __mutex) -23376: __attribute__ ((__nonnull__ (1, 2))); -23376: # 1001 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, -23376: pthread_mutex_t *__restrict __mutex, -23376: const struct timespec *__restrict __abstime) -23376: __attribute__ ((__nonnull__ (1, 2, 3))); -23376: -23376: -23376: -23376: -23376: extern int pthread_condattr_init (pthread_condattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_condattr_destroy (pthread_condattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_condattr_getpshared (const pthread_condattr_t * -23376: __restrict __attr, -23376: int *__restrict __pshared) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, -23376: int __pshared) throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_condattr_getclock (const pthread_condattr_t * -23376: __restrict __attr, -23376: __clockid_t *__restrict __clock_id) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_condattr_setclock (pthread_condattr_t *__attr, -23376: __clockid_t __clock_id) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 1045 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_spin_destroy (pthread_spinlock_t *__lock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_spin_lock (pthread_spinlock_t *__lock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_spin_trylock (pthread_spinlock_t *__lock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_spin_unlock (pthread_spinlock_t *__lock) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, -23376: const pthread_barrierattr_t *__restrict -23376: __attr, unsigned int __count) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_barrier_wait (pthread_barrier_t *__barrier) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: -23376: extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * -23376: __restrict __attr, -23376: int *__restrict __pshared) -23376: throw () __attribute__ ((__nonnull__ (1, 2))); -23376: -23376: -23376: extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, -23376: int __pshared) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: # 1112 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_key_create (pthread_key_t *__key, -23376: void (*__destr_function) (void *)) -23376: throw () __attribute__ ((__nonnull__ (1))); -23376: -23376: -23376: extern int pthread_key_delete (pthread_key_t __key) throw (); -23376: -23376: -23376: extern void *pthread_getspecific (pthread_key_t __key) throw (); -23376: -23376: -23376: extern int pthread_setspecific (pthread_key_t __key, -23376: const void *__pointer) throw () ; -23376: -23376: -23376: -23376: -23376: extern int pthread_getcpuclockid (pthread_t __thread_id, -23376: __clockid_t *__clock_id) -23376: throw () __attribute__ ((__nonnull__ (2))); -23376: # 1146 "/usr/include/pthread.h" 3 4 -23376: extern int pthread_atfork (void (*__prepare) (void), -23376: void (*__parent) (void), -23376: void (*__child) (void)) throw (); -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: __attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) throw () -23376: { -23376: return __thread1 == __thread2; -23376: } -23376: -23376: -23376: } -23376: # 36 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 2 3 -23376: # 47 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: typedef pthread_t __gthread_t; -23376: typedef pthread_key_t __gthread_key_t; -23376: typedef pthread_once_t __gthread_once_t; -23376: typedef pthread_mutex_t __gthread_mutex_t; -23376: typedef pthread_mutex_t __gthread_recursive_mutex_t; -23376: typedef pthread_cond_t __gthread_cond_t; -23376: typedef struct timespec __gthread_time_t; -23376: # 101 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once"))); -23376: static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific"))); -23376: static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific"))); -23376: -23376: static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create"))); -23376: static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join"))); -23376: static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal"))); -23376: static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self"))); -23376: static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach"))); -23376: -23376: static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel"))); -23376: -23376: static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield"))); -23376: -23376: static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock"))); -23376: static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock"))); -23376: -23376: static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock"))); -23376: -23376: static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock"))); -23376: static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init"))); -23376: static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy"))); -23376: -23376: static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init"))); -23376: static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast"))); -23376: static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal"))); -23376: static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait"))); -23376: static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait"))); -23376: static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy"))); -23376: -23376: static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create"))); -23376: static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete"))); -23376: static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init"))); -23376: static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype"))); -23376: static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy"))); -23376: # 236 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create"))); -23376: # 246 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static inline int -23376: __gthread_active_p (void) -23376: { -23376: static void *const __gthread_active_ptr -23376: = __extension__ (void *) &__gthrw___pthread_key_create; -23376: return __gthread_active_ptr != 0; -23376: } -23376: # 658 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static inline int -23376: __gthread_create (__gthread_t *__threadid, void *(*__func) (void*), -23376: void *__args) -23376: { -23376: return __gthrw_pthread_create (__threadid, __null, __func, __args); -23376: } -23376: -23376: static inline int -23376: __gthread_join (__gthread_t __threadid, void **__value_ptr) -23376: { -23376: return __gthrw_pthread_join (__threadid, __value_ptr); -23376: } -23376: -23376: static inline int -23376: __gthread_detach (__gthread_t __threadid) -23376: { -23376: return __gthrw_pthread_detach (__threadid); -23376: } -23376: -23376: static inline int -23376: __gthread_equal (__gthread_t __t1, __gthread_t __t2) -23376: { -23376: return __gthrw_pthread_equal (__t1, __t2); -23376: } -23376: -23376: static inline __gthread_t -23376: __gthread_self (void) -23376: { -23376: return __gthrw_pthread_self (); -23376: } -23376: -23376: static inline int -23376: __gthread_yield (void) -23376: { -23376: return __gthrw_sched_yield (); -23376: } -23376: -23376: static inline int -23376: __gthread_once (__gthread_once_t *__once, void (*__func) (void)) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_once (__once, __func); -23376: else -23376: return -1; -23376: } -23376: -23376: static inline int -23376: __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) -23376: { -23376: return __gthrw_pthread_key_create (__key, __dtor); -23376: } -23376: -23376: static inline int -23376: __gthread_key_delete (__gthread_key_t __key) -23376: { -23376: return __gthrw_pthread_key_delete (__key); -23376: } -23376: -23376: static inline void * -23376: __gthread_getspecific (__gthread_key_t __key) -23376: { -23376: return __gthrw_pthread_getspecific (__key); -23376: } -23376: -23376: static inline int -23376: __gthread_setspecific (__gthread_key_t __key, const void *__ptr) -23376: { -23376: return __gthrw_pthread_setspecific (__key, __ptr); -23376: } -23376: -23376: static inline void -23376: __gthread_mutex_init_function (__gthread_mutex_t *__mutex) -23376: { -23376: if (__gthread_active_p ()) -23376: __gthrw_pthread_mutex_init (__mutex, __null); -23376: } -23376: -23376: static inline int -23376: __gthread_mutex_destroy (__gthread_mutex_t *__mutex) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_mutex_destroy (__mutex); -23376: else -23376: return 0; -23376: } -23376: -23376: static inline int -23376: __gthread_mutex_lock (__gthread_mutex_t *__mutex) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_mutex_lock (__mutex); -23376: else -23376: return 0; -23376: } -23376: -23376: static inline int -23376: __gthread_mutex_trylock (__gthread_mutex_t *__mutex) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_mutex_trylock (__mutex); -23376: else -23376: return 0; -23376: } -23376: -23376: -23376: static inline int -23376: __gthread_mutex_timedlock (__gthread_mutex_t *__mutex, -23376: const __gthread_time_t *__abs_timeout) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout); -23376: else -23376: return 0; -23376: } -23376: -23376: -23376: static inline int -23376: __gthread_mutex_unlock (__gthread_mutex_t *__mutex) -23376: { -23376: if (__gthread_active_p ()) -23376: return __gthrw_pthread_mutex_unlock (__mutex); -23376: else -23376: return 0; -23376: } -23376: # 807 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static inline int -23376: __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) -23376: { -23376: return __gthread_mutex_lock (__mutex); -23376: } -23376: -23376: static inline int -23376: __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) -23376: { -23376: return __gthread_mutex_trylock (__mutex); -23376: } -23376: -23376: -23376: static inline int -23376: __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, -23376: const __gthread_time_t *__abs_timeout) -23376: { -23376: return __gthread_mutex_timedlock (__mutex, __abs_timeout); -23376: } -23376: -23376: -23376: static inline int -23376: __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) -23376: { -23376: return __gthread_mutex_unlock (__mutex); -23376: } -23376: -23376: static inline int -23376: __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) -23376: { -23376: return __gthread_mutex_destroy (__mutex); -23376: } -23376: # 849 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr-default.h" 3 -23376: static inline int -23376: __gthread_cond_broadcast (__gthread_cond_t *__cond) -23376: { -23376: return __gthrw_pthread_cond_broadcast (__cond); -23376: } -23376: -23376: static inline int -23376: __gthread_cond_signal (__gthread_cond_t *__cond) -23376: { -23376: return __gthrw_pthread_cond_signal (__cond); -23376: } -23376: -23376: static inline int -23376: __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) -23376: { -23376: return __gthrw_pthread_cond_wait (__cond, __mutex); -23376: } -23376: -23376: static inline int -23376: __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, -23376: const __gthread_time_t *__abs_timeout) -23376: { -23376: return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout); -23376: } -23376: -23376: static inline int -23376: __gthread_cond_wait_recursive (__gthread_cond_t *__cond, -23376: __gthread_recursive_mutex_t *__mutex) -23376: { -23376: return __gthread_cond_wait (__cond, __mutex); -23376: } -23376: -23376: static inline int -23376: __gthread_cond_destroy (__gthread_cond_t* __cond) -23376: { -23376: return __gthrw_pthread_cond_destroy (__cond); -23376: } -23376: # 149 "/usr/include/arm-linux-gnueabihf/c++/8/bits/gthr.h" 2 3 -23376: -23376: -23376: #pragma GCC visibility pop -23376: # 36 "/usr/include/c++/8/ext/atomicity.h" 2 3 -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/atomic_word.h" 1 3 -23376: # 32 "/usr/include/arm-linux-gnueabihf/c++/8/bits/atomic_word.h" 3 -23376: typedef int _Atomic_word; -23376: # 37 "/usr/include/c++/8/ext/atomicity.h" 2 3 -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static inline _Atomic_word -23376: __exchange_and_add(volatile _Atomic_word* __mem, int __val) -23376: { return __atomic_fetch_add(__mem, __val, 4); } -23376: -23376: static inline void -23376: __atomic_add(volatile _Atomic_word* __mem, int __val) -23376: { __atomic_fetch_add(__mem, __val, 4); } -23376: # 64 "/usr/include/c++/8/ext/atomicity.h" 3 -23376: static inline _Atomic_word -23376: __exchange_and_add_single(_Atomic_word* __mem, int __val) -23376: { -23376: _Atomic_word __result = *__mem; -23376: *__mem += __val; -23376: return __result; -23376: } -23376: -23376: static inline void -23376: __atomic_add_single(_Atomic_word* __mem, int __val) -23376: { *__mem += __val; } -23376: -23376: static inline _Atomic_word -23376: __attribute__ ((__unused__)) -23376: __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) -23376: { -23376: -23376: if (__gthread_active_p()) -23376: return __exchange_and_add(__mem, __val); -23376: else -23376: return __exchange_and_add_single(__mem, __val); -23376: -23376: -23376: -23376: } -23376: -23376: static inline void -23376: __attribute__ ((__unused__)) -23376: __atomic_add_dispatch(_Atomic_word* __mem, int __val) -23376: { -23376: -23376: if (__gthread_active_p()) -23376: __atomic_add(__mem, __val); -23376: else -23376: __atomic_add_single(__mem, __val); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: } -23376: # 40 "/usr/include/c++/8/bits/basic_string.h" 2 3 -23376: # 52 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: namespace __cxx11 { -23376: # 76 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: class basic_string -23376: { -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_CharT>::other _Char_alloc_type; -23376: typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; -23376: -23376: -23376: public: -23376: typedef _Traits traits_type; -23376: typedef typename _Traits::char_type value_type; -23376: typedef _Char_alloc_type allocator_type; -23376: typedef typename _Alloc_traits::size_type size_type; -23376: typedef typename _Alloc_traits::difference_type difference_type; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef __gnu_cxx::__normal_iterator iterator; -23376: typedef __gnu_cxx::__normal_iterator -23376: const_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: typedef std::reverse_iterator reverse_iterator; -23376: -23376: -23376: static const size_type npos = static_cast(-1); -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: typedef const_iterator __const_iterator; -23376: # 139 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: struct _Alloc_hider : allocator_type -23376: { -23376: -23376: -23376: -23376: -23376: _Alloc_hider(pointer __dat, const _Alloc& __a) -23376: : allocator_type(__a), _M_p(__dat) { } -23376: -23376: _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc()) -23376: : allocator_type(std::move(__a)), _M_p(__dat) { } -23376: -23376: -23376: pointer _M_p; -23376: }; -23376: -23376: _Alloc_hider _M_dataplus; -23376: size_type _M_string_length; -23376: -23376: enum { _S_local_capacity = 15 / sizeof(_CharT) }; -23376: -23376: union -23376: { -23376: _CharT _M_local_buf[_S_local_capacity + 1]; -23376: size_type _M_allocated_capacity; -23376: }; -23376: -23376: void -23376: _M_data(pointer __p) -23376: { _M_dataplus._M_p = __p; } -23376: -23376: void -23376: _M_length(size_type __length) -23376: { _M_string_length = __length; } -23376: -23376: pointer -23376: _M_data() const -23376: { return _M_dataplus._M_p; } -23376: -23376: pointer -23376: _M_local_data() -23376: { -23376: -23376: return std::pointer_traits::pointer_to(*_M_local_buf); -23376: -23376: -23376: -23376: } -23376: -23376: const_pointer -23376: _M_local_data() const -23376: { -23376: -23376: return std::pointer_traits::pointer_to(*_M_local_buf); -23376: -23376: -23376: -23376: } -23376: -23376: void -23376: _M_capacity(size_type __capacity) -23376: { _M_allocated_capacity = __capacity; } -23376: -23376: void -23376: _M_set_length(size_type __n) -23376: { -23376: _M_length(__n); -23376: traits_type::assign(_M_data()[__n], _CharT()); -23376: } -23376: -23376: bool -23376: _M_is_local() const -23376: { return _M_data() == _M_local_data(); } -23376: -23376: -23376: pointer -23376: _M_create(size_type&, size_type); -23376: -23376: void -23376: _M_dispose() -23376: { -23376: if (!_M_is_local()) -23376: _M_destroy(_M_allocated_capacity); -23376: } -23376: -23376: void -23376: _M_destroy(size_type __size) throw() -23376: { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } -23376: -23376: -23376: -23376: template -23376: void -23376: _M_construct_aux(_InIterator __beg, _InIterator __end, -23376: std::__false_type) -23376: { -23376: typedef typename iterator_traits<_InIterator>::iterator_category _Tag; -23376: _M_construct(__beg, __end, _Tag()); -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type) -23376: { _M_construct_aux_2(static_cast(__beg), __end); } -23376: -23376: void -23376: _M_construct_aux_2(size_type __req, _CharT __c) -23376: { _M_construct(__req, __c); } -23376: -23376: template -23376: void -23376: _M_construct(_InIterator __beg, _InIterator __end) -23376: { -23376: typedef typename std::__is_integer<_InIterator>::__type _Integral; -23376: _M_construct_aux(__beg, __end, _Integral()); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_construct(_InIterator __beg, _InIterator __end, -23376: std::input_iterator_tag); -23376: -23376: -23376: -23376: template -23376: void -23376: _M_construct(_FwdIterator __beg, _FwdIterator __end, -23376: std::forward_iterator_tag); -23376: -23376: void -23376: _M_construct(size_type __req, _CharT __c); -23376: -23376: allocator_type& -23376: _M_get_allocator() -23376: { return _M_dataplus; } -23376: -23376: const allocator_type& -23376: _M_get_allocator() const -23376: { return _M_dataplus; } -23376: -23376: private: -23376: # 298 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: _M_check(size_type __pos, const char* __s) const -23376: { -23376: if (__pos > this->size()) -23376: __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)") -23376: , -23376: __s, __pos, this->size()); -23376: return __pos; -23376: } -23376: -23376: void -23376: _M_check_length(size_type __n1, size_type __n2, const char* __s) const -23376: { -23376: if (this->max_size() - (this->size() - __n1) < __n2) -23376: __throw_length_error((__s)); -23376: } -23376: -23376: -23376: -23376: size_type -23376: _M_limit(size_type __pos, size_type __off) const noexcept -23376: { -23376: const bool __testoff = __off < this->size() - __pos; -23376: return __testoff ? __off : this->size() - __pos; -23376: } -23376: -23376: -23376: bool -23376: _M_disjunct(const _CharT* __s) const noexcept -23376: { -23376: return (less()(__s, _M_data()) -23376: || less()(_M_data() + this->size(), __s)); -23376: } -23376: -23376: -23376: -23376: static void -23376: _S_copy(_CharT* __d, const _CharT* __s, size_type __n) -23376: { -23376: if (__n == 1) -23376: traits_type::assign(*__d, *__s); -23376: else -23376: traits_type::copy(__d, __s, __n); -23376: } -23376: -23376: static void -23376: _S_move(_CharT* __d, const _CharT* __s, size_type __n) -23376: { -23376: if (__n == 1) -23376: traits_type::assign(*__d, *__s); -23376: else -23376: traits_type::move(__d, __s, __n); -23376: } -23376: -23376: static void -23376: _S_assign(_CharT* __d, size_type __n, _CharT __c) -23376: { -23376: if (__n == 1) -23376: traits_type::assign(*__d, __c); -23376: else -23376: traits_type::assign(__d, __n, __c); -23376: } -23376: -23376: -23376: -23376: template -23376: static void -23376: _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) -23376: { -23376: for (; __k1 != __k2; ++__k1, (void)++__p) -23376: traits_type::assign(*__p, *__k1); -23376: } -23376: -23376: static void -23376: _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept -23376: { _S_copy_chars(__p, __k1.base(), __k2.base()); } -23376: -23376: static void -23376: _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) -23376: noexcept -23376: { _S_copy_chars(__p, __k1.base(), __k2.base()); } -23376: -23376: static void -23376: _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept -23376: { _S_copy(__p, __k1, __k2 - __k1); } -23376: -23376: static void -23376: _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) -23376: noexcept -23376: { _S_copy(__p, __k1, __k2 - __k1); } -23376: -23376: static int -23376: _S_compare(size_type __n1, size_type __n2) noexcept -23376: { -23376: const difference_type __d = difference_type(__n1 - __n2); -23376: -23376: if (__d > __gnu_cxx::__numeric_traits::__max) -23376: return __gnu_cxx::__numeric_traits::__max; -23376: else if (__d < __gnu_cxx::__numeric_traits::__min) -23376: return __gnu_cxx::__numeric_traits::__min; -23376: else -23376: return int(__d); -23376: } -23376: -23376: void -23376: _M_assign(const basic_string&); -23376: -23376: void -23376: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, -23376: size_type __len2); -23376: -23376: void -23376: _M_erase(size_type __pos, size_type __n); -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string() -23376: noexcept(is_nothrow_default_constructible<_Alloc>::value) -23376: : _M_dataplus(_M_local_data()) -23376: { _M_set_length(0); } -23376: -23376: -23376: -23376: -23376: explicit -23376: basic_string(const _Alloc& __a) noexcept -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_set_length(0); } -23376: -23376: -23376: -23376: -23376: -23376: basic_string(const basic_string& __str) -23376: : _M_dataplus(_M_local_data(), -23376: _Alloc_traits::_S_select_on_copy(__str._M_get_allocator())) -23376: { _M_construct(__str._M_data(), __str._M_data() + __str.length()); } -23376: # 450 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(const basic_string& __str, size_type __pos, -23376: const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { -23376: const _CharT* __start = __str._M_data() -23376: + __str._M_check(__pos, "basic_string::basic_string"); -23376: _M_construct(__start, __start + __str._M_limit(__pos, npos)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string(const basic_string& __str, size_type __pos, -23376: size_type __n) -23376: : _M_dataplus(_M_local_data()) -23376: { -23376: const _CharT* __start = __str._M_data() -23376: + __str._M_check(__pos, "basic_string::basic_string"); -23376: _M_construct(__start, __start + __str._M_limit(__pos, __n)); -23376: } -23376: # 481 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(const basic_string& __str, size_type __pos, -23376: size_type __n, const _Alloc& __a) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { -23376: const _CharT* __start -23376: = __str._M_data() + __str._M_check(__pos, "string::string"); -23376: _M_construct(__start, __start + __str._M_limit(__pos, __n)); -23376: } -23376: # 499 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(const _CharT* __s, size_type __n, -23376: const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__s, __s + __n); } -23376: # 514 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); } -23376: # 529 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__n, __c); } -23376: # 541 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string(basic_string&& __str) noexcept -23376: : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) -23376: { -23376: if (__str._M_is_local()) -23376: { -23376: traits_type::copy(_M_local_buf, __str._M_local_buf, -23376: _S_local_capacity + 1); -23376: } -23376: else -23376: { -23376: _M_data(__str._M_data()); -23376: _M_capacity(__str._M_allocated_capacity); -23376: } -23376: -23376: -23376: -23376: -23376: _M_length(__str.length()); -23376: __str._M_data(__str._M_local_data()); -23376: __str._M_set_length(0); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__l.begin(), __l.end()); } -23376: -23376: basic_string(const basic_string& __str, const _Alloc& __a) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__str.begin(), __str.end()); } -23376: -23376: basic_string(basic_string&& __str, const _Alloc& __a) -23376: noexcept(_Alloc_traits::_S_always_equal()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { -23376: if (__str._M_is_local()) -23376: { -23376: traits_type::copy(_M_local_buf, __str._M_local_buf, -23376: _S_local_capacity + 1); -23376: _M_length(__str.length()); -23376: __str._M_set_length(0); -23376: } -23376: else if (_Alloc_traits::_S_always_equal() -23376: || __str.get_allocator() == __a) -23376: { -23376: _M_data(__str._M_data()); -23376: _M_length(__str.length()); -23376: _M_capacity(__str._M_allocated_capacity); -23376: __str._M_data(__str._M_local_buf); -23376: __str._M_set_length(0); -23376: } -23376: else -23376: _M_construct(__str.begin(), __str.end()); -23376: } -23376: # 609 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template> -23376: -23376: -23376: -23376: basic_string(_InputIterator __beg, _InputIterator __end, -23376: const _Alloc& __a = _Alloc()) -23376: : _M_dataplus(_M_local_data(), __a) -23376: { _M_construct(__beg, __end); } -23376: # 656 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: ~basic_string() -23376: { _M_dispose(); } -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator=(const basic_string& __str) -23376: { -23376: -23376: if (_Alloc_traits::_S_propagate_on_copy_assign()) -23376: { -23376: if (!_Alloc_traits::_S_always_equal() && !_M_is_local() -23376: && _M_get_allocator() != __str._M_get_allocator()) -23376: { -23376: -23376: -23376: if (__str.size() <= _S_local_capacity) -23376: { -23376: _M_destroy(_M_allocated_capacity); -23376: _M_data(_M_local_data()); -23376: _M_set_length(0); -23376: } -23376: else -23376: { -23376: const auto __len = __str.size(); -23376: auto __alloc = __str._M_get_allocator(); -23376: -23376: auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1); -23376: _M_destroy(_M_allocated_capacity); -23376: _M_data(__ptr); -23376: _M_capacity(__len); -23376: _M_set_length(__len); -23376: } -23376: } -23376: std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); -23376: } -23376: -23376: return this->assign(__str); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator=(const _CharT* __s) -23376: { return this->assign(__s); } -23376: # 713 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: operator=(_CharT __c) -23376: { -23376: this->assign(1, __c); -23376: return *this; -23376: } -23376: # 731 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: operator=(basic_string&& __str) -23376: noexcept(_Alloc_traits::_S_nothrow_move()) -23376: { -23376: if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() -23376: && !_Alloc_traits::_S_always_equal() -23376: && _M_get_allocator() != __str._M_get_allocator()) -23376: { -23376: -23376: _M_destroy(_M_allocated_capacity); -23376: _M_data(_M_local_data()); -23376: _M_set_length(0); -23376: } -23376: -23376: std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator()); -23376: -23376: if (__str._M_is_local()) -23376: { -23376: -23376: if (__str.size()) -23376: this->_S_copy(_M_data(), __str._M_data(), __str.size()); -23376: _M_set_length(__str.size()); -23376: } -23376: else if (_Alloc_traits::_S_propagate_on_move_assign() -23376: || _Alloc_traits::_S_always_equal() -23376: || _M_get_allocator() == __str._M_get_allocator()) -23376: { -23376: -23376: pointer __data = nullptr; -23376: size_type __capacity; -23376: if (!_M_is_local()) -23376: { -23376: if (_Alloc_traits::_S_always_equal()) -23376: { -23376: -23376: __data = _M_data(); -23376: __capacity = _M_allocated_capacity; -23376: } -23376: else -23376: _M_destroy(_M_allocated_capacity); -23376: } -23376: -23376: _M_data(__str._M_data()); -23376: _M_length(__str.length()); -23376: _M_capacity(__str._M_allocated_capacity); -23376: if (__data) -23376: { -23376: __str._M_data(__data); -23376: __str._M_capacity(__capacity); -23376: } -23376: else -23376: __str._M_data(__str._M_local_buf); -23376: } -23376: else -23376: assign(__str); -23376: __str.clear(); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator=(initializer_list<_CharT> __l) -23376: { -23376: this->assign(__l.begin(), __l.size()); -23376: return *this; -23376: } -23376: # 825 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: iterator -23376: begin() noexcept -23376: { return iterator(_M_data()); } -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return const_iterator(_M_data()); } -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() noexcept -23376: { return iterator(_M_data() + this->size()); } -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return const_iterator(_M_data() + this->size()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(this->end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(this->end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(this->begin()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(this->begin()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return const_iterator(this->_M_data()); } -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return const_iterator(this->_M_data() + this->size()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return const_reverse_iterator(this->end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return const_reverse_iterator(this->begin()); } -23376: -23376: -23376: public: -23376: -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_string_length; } -23376: -23376: -23376: -23376: size_type -23376: length() const noexcept -23376: { return _M_string_length; } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; } -23376: # 954 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: resize(size_type __n, _CharT __c); -23376: # 967 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: resize(size_type __n) -23376: { this->resize(__n, _CharT()); } -23376: -23376: -23376: -23376: void -23376: shrink_to_fit() noexcept -23376: { -23376: -23376: if (capacity() > size()) -23376: { -23376: try -23376: { reserve(0); } -23376: catch(...) -23376: { } -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: size_type -23376: capacity() const noexcept -23376: { -23376: return _M_is_local() ? size_type(_S_local_capacity) -23376: : _M_allocated_capacity; -23376: } -23376: # 1016 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: reserve(size_type __res_arg = 0); -23376: -23376: -23376: -23376: -23376: void -23376: clear() noexcept -23376: { _M_set_length(0); } -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return this->size() == 0; } -23376: # 1045 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: const_reference -23376: operator[] (size_type __pos) const noexcept -23376: { -23376: ; -23376: return _M_data()[__pos]; -23376: } -23376: # 1062 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: reference -23376: operator[](size_type __pos) -23376: { -23376: -23376: -23376: ; -23376: -23376: ; -23376: return _M_data()[__pos]; -23376: } -23376: # 1083 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: const_reference -23376: at(size_type __n) const -23376: { -23376: if (__n >= this->size()) -23376: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") -23376: -23376: , -23376: __n, this->size()); -23376: return _M_data()[__n]; -23376: } -23376: # 1104 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: reference -23376: at(size_type __n) -23376: { -23376: if (__n >= size()) -23376: __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") -23376: -23376: , -23376: __n, this->size()); -23376: return _M_data()[__n]; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: front() noexcept -23376: { -23376: ; -23376: return operator[](0); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: front() const noexcept -23376: { -23376: ; -23376: return operator[](0); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: back() noexcept -23376: { -23376: ; -23376: return operator[](this->size() - 1); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: back() const noexcept -23376: { -23376: ; -23376: return operator[](this->size() - 1); -23376: } -23376: # 1167 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: operator+=(const basic_string& __str) -23376: { return this->append(__str); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator+=(const _CharT* __s) -23376: { return this->append(__s); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator+=(_CharT __c) -23376: { -23376: this->push_back(__c); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: operator+=(initializer_list<_CharT> __l) -23376: { return this->append(__l.begin(), __l.size()); } -23376: # 1220 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: append(const basic_string& __str) -23376: { return _M_append(__str._M_data(), __str.size()); } -23376: # 1237 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: append(const basic_string& __str, size_type __pos, size_type __n = npos) -23376: { return _M_append(__str._M_data() -23376: + __str._M_check(__pos, "basic_string::append"), -23376: __str._M_limit(__pos, __n)); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: append(const _CharT* __s, size_type __n) -23376: { -23376: ; -23376: _M_check_length(size_type(0), __n, "basic_string::append"); -23376: return _M_append(__s, __n); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: append(const _CharT* __s) -23376: { -23376: ; -23376: const size_type __n = traits_type::length(__s); -23376: _M_check_length(size_type(0), __n, "basic_string::append"); -23376: return _M_append(__s, __n); -23376: } -23376: # 1279 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: append(size_type __n, _CharT __c) -23376: { return _M_replace_aux(this->size(), size_type(0), __n, __c); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: append(initializer_list<_CharT> __l) -23376: { return this->append(__l.begin(), __l.size()); } -23376: # 1303 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template> -23376: -23376: -23376: -23376: basic_string& -23376: append(_InputIterator __first, _InputIterator __last) -23376: { return this->replace(end(), end(), __first, __last); } -23376: # 1348 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: push_back(_CharT __c) -23376: { -23376: const size_type __size = this->size(); -23376: if (__size + 1 > this->capacity()) -23376: this->_M_mutate(__size, size_type(0), 0, size_type(1)); -23376: traits_type::assign(this->_M_data()[__size], __c); -23376: this->_M_set_length(__size + 1); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: assign(const basic_string& __str) -23376: { -23376: this->_M_assign(__str); -23376: return *this; -23376: } -23376: # 1379 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: assign(basic_string&& __str) -23376: noexcept(_Alloc_traits::_S_nothrow_move()) -23376: { -23376: -23376: -23376: return *this = std::move(__str); -23376: } -23376: # 1402 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: assign(const basic_string& __str, size_type __pos, size_type __n = npos) -23376: { return _M_replace(size_type(0), this->size(), __str._M_data() -23376: + __str._M_check(__pos, "basic_string::assign"), -23376: __str._M_limit(__pos, __n)); } -23376: # 1418 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: assign(const _CharT* __s, size_type __n) -23376: { -23376: ; -23376: return _M_replace(size_type(0), this->size(), __s, __n); -23376: } -23376: # 1434 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: assign(const _CharT* __s) -23376: { -23376: ; -23376: return _M_replace(size_type(0), this->size(), __s, -23376: traits_type::length(__s)); -23376: } -23376: # 1451 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: assign(size_type __n, _CharT __c) -23376: { return _M_replace_aux(size_type(0), this->size(), __n, __c); } -23376: # 1464 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template> -23376: -23376: -23376: -23376: basic_string& -23376: assign(_InputIterator __first, _InputIterator __last) -23376: { return this->replace(begin(), end(), __first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_string& -23376: assign(initializer_list<_CharT> __l) -23376: { return this->assign(__l.begin(), __l.size()); } -23376: # 1532 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: iterator -23376: insert(const_iterator __p, size_type __n, _CharT __c) -23376: { -23376: ; -23376: const size_type __pos = __p - begin(); -23376: this->replace(__p, __p, __n, __c); -23376: return iterator(this->_M_data() + __pos); -23376: } -23376: # 1574 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template> -23376: iterator -23376: insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) -23376: { -23376: ; -23376: const size_type __pos = __p - begin(); -23376: this->replace(__p, __p, __beg, __end); -23376: return iterator(this->_M_data() + __pos); -23376: } -23376: # 1610 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: insert(iterator __p, initializer_list<_CharT> __l) -23376: { -23376: ; -23376: this->insert(__p - begin(), __l.begin(), __l.size()); -23376: } -23376: # 1630 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: insert(size_type __pos1, const basic_string& __str) -23376: { return this->replace(__pos1, size_type(0), -23376: __str._M_data(), __str.size()); } -23376: # 1653 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: insert(size_type __pos1, const basic_string& __str, -23376: size_type __pos2, size_type __n = npos) -23376: { return this->replace(__pos1, size_type(0), __str._M_data() -23376: + __str._M_check(__pos2, "basic_string::insert"), -23376: __str._M_limit(__pos2, __n)); } -23376: # 1676 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: insert(size_type __pos, const _CharT* __s, size_type __n) -23376: { return this->replace(__pos, size_type(0), __s, __n); } -23376: # 1695 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: insert(size_type __pos, const _CharT* __s) -23376: { -23376: ; -23376: return this->replace(__pos, size_type(0), __s, -23376: traits_type::length(__s)); -23376: } -23376: # 1719 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: insert(size_type __pos, size_type __n, _CharT __c) -23376: { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), -23376: size_type(0), __n, __c); } -23376: # 1737 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: iterator -23376: insert(__const_iterator __p, _CharT __c) -23376: { -23376: ; -23376: const size_type __pos = __p - begin(); -23376: _M_replace_aux(__pos, size_type(0), size_type(1), __c); -23376: return iterator(_M_data() + __pos); -23376: } -23376: # 1797 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: erase(size_type __pos = 0, size_type __n = npos) -23376: { -23376: _M_check(__pos, "basic_string::erase"); -23376: if (__n == npos) -23376: this->_M_set_length(__pos); -23376: else if (__n != 0) -23376: this->_M_erase(__pos, _M_limit(__pos, __n)); -23376: return *this; -23376: } -23376: # 1816 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: iterator -23376: erase(__const_iterator __position) -23376: { -23376: -23376: ; -23376: const size_type __pos = __position - begin(); -23376: this->_M_erase(__pos, size_type(1)); -23376: return iterator(_M_data() + __pos); -23376: } -23376: # 1835 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: iterator -23376: erase(__const_iterator __first, __const_iterator __last) -23376: { -23376: -23376: ; -23376: const size_type __pos = __first - begin(); -23376: if (__last == end()) -23376: this->_M_set_length(__pos); -23376: else -23376: this->_M_erase(__pos, __last - __first); -23376: return iterator(this->_M_data() + __pos); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: pop_back() noexcept -23376: { -23376: ; -23376: _M_erase(size() - 1, 1); -23376: } -23376: # 1879 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(size_type __pos, size_type __n, const basic_string& __str) -23376: { return this->replace(__pos, __n, __str._M_data(), __str.size()); } -23376: # 1901 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(size_type __pos1, size_type __n1, const basic_string& __str, -23376: size_type __pos2, size_type __n2 = npos) -23376: { return this->replace(__pos1, __n1, __str._M_data() -23376: + __str._M_check(__pos2, "basic_string::replace"), -23376: __str._M_limit(__pos2, __n2)); } -23376: # 1926 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(size_type __pos, size_type __n1, const _CharT* __s, -23376: size_type __n2) -23376: { -23376: ; -23376: return _M_replace(_M_check(__pos, "basic_string::replace"), -23376: _M_limit(__pos, __n1), __s, __n2); -23376: } -23376: # 1951 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(size_type __pos, size_type __n1, const _CharT* __s) -23376: { -23376: ; -23376: return this->replace(__pos, __n1, __s, traits_type::length(__s)); -23376: } -23376: # 1975 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) -23376: { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), -23376: _M_limit(__pos, __n1), __n2, __c); } -23376: # 1993 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: const basic_string& __str) -23376: { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } -23376: # 2013 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: const _CharT* __s, size_type __n) -23376: { -23376: -23376: ; -23376: return this->replace(__i1 - begin(), __i2 - __i1, __s, __n); -23376: } -23376: # 2035 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s) -23376: { -23376: ; -23376: return this->replace(__i1, __i2, __s, traits_type::length(__s)); -23376: } -23376: # 2056 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, size_type __n, -23376: _CharT __c) -23376: { -23376: -23376: ; -23376: return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c); -23376: } -23376: # 2081 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template> -23376: basic_string& -23376: replace(const_iterator __i1, const_iterator __i2, -23376: _InputIterator __k1, _InputIterator __k2) -23376: { -23376: -23376: ; -23376: ; -23376: return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, -23376: std::__false_type()); -23376: } -23376: # 2113 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: _CharT* __k1, _CharT* __k2) -23376: { -23376: -23376: ; -23376: ; -23376: return this->replace(__i1 - begin(), __i2 - __i1, -23376: __k1, __k2 - __k1); -23376: } -23376: -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: const _CharT* __k1, const _CharT* __k2) -23376: { -23376: -23376: ; -23376: ; -23376: return this->replace(__i1 - begin(), __i2 - __i1, -23376: __k1, __k2 - __k1); -23376: } -23376: -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: iterator __k1, iterator __k2) -23376: { -23376: -23376: ; -23376: ; -23376: return this->replace(__i1 - begin(), __i2 - __i1, -23376: __k1.base(), __k2 - __k1); -23376: } -23376: -23376: basic_string& -23376: replace(__const_iterator __i1, __const_iterator __i2, -23376: const_iterator __k1, const_iterator __k2) -23376: { -23376: -23376: ; -23376: ; -23376: return this->replace(__i1 - begin(), __i2 - __i1, -23376: __k1.base(), __k2 - __k1); -23376: } -23376: # 2172 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string& replace(const_iterator __i1, const_iterator __i2, -23376: initializer_list<_CharT> __l) -23376: { return this->replace(__i1, __i2, __l.begin(), __l.size()); } -23376: # 2231 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: private: -23376: template -23376: basic_string& -23376: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, -23376: _Integer __n, _Integer __val, __true_type) -23376: { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); } -23376: -23376: template -23376: basic_string& -23376: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, -23376: _InputIterator __k1, _InputIterator __k2, -23376: __false_type); -23376: -23376: basic_string& -23376: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, -23376: _CharT __c); -23376: -23376: basic_string& -23376: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, -23376: const size_type __len2); -23376: -23376: basic_string& -23376: _M_append(const _CharT* __s, size_type __n); -23376: -23376: public: -23376: # 2269 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: copy(_CharT* __s, size_type __n, size_type __pos = 0) const; -23376: # 2279 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: void -23376: swap(basic_string& __s) noexcept; -23376: # 2289 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: const _CharT* -23376: c_str() const noexcept -23376: { return _M_data(); } -23376: # 2301 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: const _CharT* -23376: data() const noexcept -23376: { return _M_data(); } -23376: # 2320 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return _M_get_allocator(); } -23376: # 2336 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept; -23376: # 2350 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find(const basic_string& __str, size_type __pos = 0) const -23376: noexcept -23376: { return this->find(__str.data(), __pos, __str.size()); } -23376: # 2382 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find(const _CharT* __s, size_type __pos = 0) const noexcept -23376: { -23376: ; -23376: return this->find(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2399 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find(_CharT __c, size_type __pos = 0) const noexcept; -23376: # 2412 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: rfind(const basic_string& __str, size_type __pos = npos) const -23376: noexcept -23376: { return this->rfind(__str.data(), __pos, __str.size()); } -23376: # 2446 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: rfind(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept; -23376: # 2460 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: rfind(const _CharT* __s, size_type __pos = npos) const -23376: { -23376: ; -23376: return this->rfind(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2477 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: rfind(_CharT __c, size_type __pos = npos) const noexcept; -23376: # 2491 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_of(const basic_string& __str, size_type __pos = 0) const -23376: noexcept -23376: { return this->find_first_of(__str.data(), __pos, __str.size()); } -23376: # 2526 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept; -23376: # 2540 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_of(const _CharT* __s, size_type __pos = 0) const -23376: noexcept -23376: { -23376: ; -23376: return this->find_first_of(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2560 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_of(_CharT __c, size_type __pos = 0) const noexcept -23376: { return this->find(__c, __pos); } -23376: # 2575 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_of(const basic_string& __str, size_type __pos = npos) const -23376: noexcept -23376: { return this->find_last_of(__str.data(), __pos, __str.size()); } -23376: # 2610 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept; -23376: # 2624 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_of(const _CharT* __s, size_type __pos = npos) const -23376: noexcept -23376: { -23376: ; -23376: return this->find_last_of(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2644 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_of(_CharT __c, size_type __pos = npos) const noexcept -23376: { return this->rfind(__c, __pos); } -23376: # 2658 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_not_of(const basic_string& __str, size_type __pos = 0) const -23376: noexcept -23376: { return this->find_first_not_of(__str.data(), __pos, __str.size()); } -23376: # 2693 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_not_of(const _CharT* __s, size_type __pos, -23376: size_type __n) const noexcept; -23376: # 2707 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_not_of(const _CharT* __s, size_type __pos = 0) const -23376: noexcept -23376: { -23376: ; -23376: return this->find_first_not_of(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2725 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_first_not_of(_CharT __c, size_type __pos = 0) const -23376: noexcept; -23376: # 2740 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_not_of(const basic_string& __str, size_type __pos = npos) const -23376: noexcept -23376: { return this->find_last_not_of(__str.data(), __pos, __str.size()); } -23376: # 2775 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_not_of(const _CharT* __s, size_type __pos, -23376: size_type __n) const noexcept; -23376: # 2789 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_not_of(const _CharT* __s, size_type __pos = npos) const -23376: noexcept -23376: { -23376: ; -23376: return this->find_last_not_of(__s, __pos, traits_type::length(__s)); -23376: } -23376: # 2807 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: size_type -23376: find_last_not_of(_CharT __c, size_type __pos = npos) const -23376: noexcept; -23376: # 2823 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: basic_string -23376: substr(size_type __pos = 0, size_type __n = npos) const -23376: { return basic_string(*this, -23376: _M_check(__pos, "basic_string::substr"), __n); } -23376: # 2842 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(const basic_string& __str) const -23376: { -23376: const size_type __size = this->size(); -23376: const size_type __osize = __str.size(); -23376: const size_type __len = std::min(__size, __osize); -23376: -23376: int __r = traits_type::compare(_M_data(), __str.data(), __len); -23376: if (!__r) -23376: __r = _S_compare(__size, __osize); -23376: return __r; -23376: } -23376: # 2935 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(size_type __pos, size_type __n, const basic_string& __str) const; -23376: # 2961 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(size_type __pos1, size_type __n1, const basic_string& __str, -23376: size_type __pos2, size_type __n2 = npos) const; -23376: # 2979 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(const _CharT* __s) const noexcept; -23376: # 3003 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(size_type __pos, size_type __n1, const _CharT* __s) const; -23376: # 3030 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: int -23376: compare(size_type __pos, size_type __n1, const _CharT* __s, -23376: size_type __n2) const; -23376: -23376: -23376: template friend class basic_stringbuf; -23376: }; -23376: } -23376: # 5925 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { -23376: basic_string<_CharT, _Traits, _Alloc> __str(__lhs); -23376: __str.append(__rhs); -23376: return __str; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: basic_string<_CharT,_Traits,_Alloc> -23376: operator+(const _CharT* __lhs, -23376: const basic_string<_CharT,_Traits,_Alloc>& __rhs); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: basic_string<_CharT,_Traits,_Alloc> -23376: operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { -23376: basic_string<_CharT, _Traits, _Alloc> __str(__lhs); -23376: __str.append(__rhs); -23376: return __str; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) -23376: { -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef typename __string_type::size_type __size_type; -23376: __string_type __str(__lhs); -23376: __str.append(__size_type(1), __rhs); -23376: return __str; -23376: } -23376: -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return std::move(__lhs.append(__rhs)); } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: basic_string<_CharT, _Traits, _Alloc>&& __rhs) -23376: { return std::move(__rhs.insert(0, __lhs)); } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, -23376: basic_string<_CharT, _Traits, _Alloc>&& __rhs) -23376: { -23376: const auto __size = __lhs.size() + __rhs.size(); -23376: const bool __cond = (__size > __lhs.capacity() -23376: && __size <= __rhs.capacity()); -23376: return __cond ? std::move(__rhs.insert(0, __lhs)) -23376: : std::move(__lhs.append(__rhs)); -23376: } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const _CharT* __lhs, -23376: basic_string<_CharT, _Traits, _Alloc>&& __rhs) -23376: { return std::move(__rhs.insert(0, __lhs)); } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(_CharT __lhs, -23376: basic_string<_CharT, _Traits, _Alloc>&& __rhs) -23376: { return std::move(__rhs.insert(0, 1, __lhs)); } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, -23376: const _CharT* __rhs) -23376: { return std::move(__lhs.append(__rhs)); } -23376: -23376: template -23376: inline basic_string<_CharT, _Traits, _Alloc> -23376: operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, -23376: _CharT __rhs) -23376: { return std::move(__lhs.append(1, __rhs)); } -23376: # 6046 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return __lhs.compare(__rhs) == 0; } -23376: -23376: template -23376: inline -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type -23376: operator==(const basic_string<_CharT>& __lhs, -23376: const basic_string<_CharT>& __rhs) noexcept -23376: { return (__lhs.size() == __rhs.size() -23376: && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(), -23376: __lhs.size())); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return __rhs.compare(__lhs) == 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return __lhs.compare(__rhs) == 0; } -23376: # 6093 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return !(__lhs == __rhs); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return !(__lhs == __rhs); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return !(__lhs == __rhs); } -23376: # 6131 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return __lhs.compare(__rhs) < 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return __lhs.compare(__rhs) < 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator<(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return __rhs.compare(__lhs) > 0; } -23376: # 6169 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return __lhs.compare(__rhs) > 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return __lhs.compare(__rhs) > 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return __rhs.compare(__lhs) < 0; } -23376: # 6207 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return __lhs.compare(__rhs) <= 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return __lhs.compare(__rhs) <= 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return __rhs.compare(__lhs) >= 0; } -23376: # 6245 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline bool -23376: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept -23376: { return __lhs.compare(__rhs) >= 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: const _CharT* __rhs) -23376: { return __lhs.compare(__rhs) >= 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { return __rhs.compare(__lhs) <= 0; } -23376: # 6283 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline void -23376: swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, -23376: basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: noexcept(noexcept(__lhs.swap(__rhs))) -23376: { __lhs.swap(__rhs); } -23376: # 6303 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, -23376: basic_string<_CharT, _Traits, _Alloc>& __str); -23376: -23376: template<> -23376: basic_istream& -23376: operator>>(basic_istream& __is, basic_string& __str); -23376: # 6321 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, -23376: const basic_string<_CharT, _Traits, _Alloc>& __str) -23376: { -23376: -23376: -23376: return __ostream_insert(__os, __str.data(), __str.size()); -23376: } -23376: # 6344 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: getline(basic_istream<_CharT, _Traits>& __is, -23376: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); -23376: # 6361 "/usr/include/c++/8/bits/basic_string.h" 3 -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: getline(basic_istream<_CharT, _Traits>& __is, -23376: basic_string<_CharT, _Traits, _Alloc>& __str) -23376: { return std::getline(__is, __str, __is.widen('\n')); } -23376: -23376: -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: getline(basic_istream<_CharT, _Traits>&& __is, -23376: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) -23376: { return std::getline(__is, __str, __delim); } -23376: -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: getline(basic_istream<_CharT, _Traits>&& __is, -23376: basic_string<_CharT, _Traits, _Alloc>& __str) -23376: { return std::getline(__is, __str); } -23376: -23376: -23376: template<> -23376: basic_istream& -23376: getline(basic_istream& __in, basic_string& __str, -23376: char __delim); -23376: -23376: -23376: template<> -23376: basic_istream& -23376: getline(basic_istream& __in, basic_string& __str, -23376: wchar_t __delim); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/ext/string_conversions.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/string_conversions.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/string_conversions.h" 3 -23376: # 41 "/usr/include/c++/8/ext/string_conversions.h" 3 -23376: # 1 "/usr/include/c++/8/cstdlib" 1 3 -23376: # 39 "/usr/include/c++/8/cstdlib" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdlib" 3 -23376: # 42 "/usr/include/c++/8/ext/string_conversions.h" 2 3 -23376: # 1 "/usr/include/c++/8/cwchar" 1 3 -23376: # 39 "/usr/include/c++/8/cwchar" 3 -23376: -23376: # 40 "/usr/include/c++/8/cwchar" 3 -23376: # 43 "/usr/include/c++/8/ext/string_conversions.h" 2 3 -23376: # 1 "/usr/include/c++/8/cstdio" 1 3 -23376: # 39 "/usr/include/c++/8/cstdio" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdio" 3 -23376: -23376: -23376: # 1 "/usr/include/stdio.h" 1 3 4 -23376: # 27 "/usr/include/stdio.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 28 "/usr/include/stdio.h" 2 3 4 -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 34 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stdarg.h" 1 3 4 -23376: # 37 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 1 3 4 -23376: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos_t.h" 3 4 -23376: typedef struct _G_fpos_t -23376: { -23376: __off_t __pos; -23376: __mbstate_t __state; -23376: } __fpos_t; -23376: # 40 "/usr/include/stdio.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 1 3 4 -23376: # 10 "/usr/include/arm-linux-gnueabihf/bits/types/__fpos64_t.h" 3 4 -23376: typedef struct _G_fpos64_t -23376: { -23376: __off64_t __pos; -23376: __mbstate_t __state; -23376: } __fpos64_t; -23376: # 41 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 1 3 4 -23376: # 35 "/usr/include/arm-linux-gnueabihf/bits/types/struct_FILE.h" 3 4 -23376: struct _IO_FILE; -23376: struct _IO_marker; -23376: struct _IO_codecvt; -23376: struct _IO_wide_data; -23376: -23376: -23376: -23376: -23376: typedef void _IO_lock_t; -23376: -23376: -23376: -23376: -23376: -23376: struct _IO_FILE -23376: { -23376: int _flags; -23376: -23376: -23376: char *_IO_read_ptr; -23376: char *_IO_read_end; -23376: char *_IO_read_base; -23376: char *_IO_write_base; -23376: char *_IO_write_ptr; -23376: char *_IO_write_end; -23376: char *_IO_buf_base; -23376: char *_IO_buf_end; -23376: -23376: -23376: char *_IO_save_base; -23376: char *_IO_backup_base; -23376: char *_IO_save_end; -23376: -23376: struct _IO_marker *_markers; -23376: -23376: struct _IO_FILE *_chain; -23376: -23376: int _fileno; -23376: int _flags2; -23376: __off_t _old_offset; -23376: -23376: -23376: unsigned short _cur_column; -23376: signed char _vtable_offset; -23376: char _shortbuf[1]; -23376: -23376: _IO_lock_t *_lock; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: __off64_t _offset; -23376: -23376: struct _IO_codecvt *_codecvt; -23376: struct _IO_wide_data *_wide_data; -23376: struct _IO_FILE *_freeres_list; -23376: void *_freeres_buf; -23376: size_t __pad5; -23376: int _mode; -23376: -23376: char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; -23376: }; -23376: # 44 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/types/cookie_io_functions_t.h" 3 4 -23376: typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf, -23376: size_t __nbytes); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf, -23376: size_t __nbytes); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w); -23376: -23376: -23376: typedef int cookie_close_function_t (void *__cookie); -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef struct _IO_cookie_io_functions_t -23376: { -23376: cookie_read_function_t *read; -23376: cookie_write_function_t *write; -23376: cookie_seek_function_t *seek; -23376: cookie_close_function_t *close; -23376: } cookie_io_functions_t; -23376: # 47 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: typedef __gnuc_va_list va_list; -23376: # 84 "/usr/include/stdio.h" 3 4 -23376: typedef __fpos_t fpos_t; -23376: -23376: -23376: -23376: -23376: typedef __fpos64_t fpos64_t; -23376: # 133 "/usr/include/stdio.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio_lim.h" 1 3 4 -23376: # 134 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: -23376: extern FILE *stdin; -23376: extern FILE *stdout; -23376: extern FILE *stderr; -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int remove (const char *__filename) throw (); -23376: -23376: extern int rename (const char *__old, const char *__new) throw (); -23376: -23376: -23376: -23376: extern int renameat (int __oldfd, const char *__old, int __newfd, -23376: const char *__new) throw (); -23376: # 164 "/usr/include/stdio.h" 3 4 -23376: extern int renameat2 (int __oldfd, const char *__old, int __newfd, -23376: const char *__new, unsigned int __flags) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__)); -23376: # 183 "/usr/include/stdio.h" 3 4 -23376: extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern char *tmpnam (char *__s) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern char *tmpnam_r (char *__s) throw () __attribute__ ((__warn_unused_result__)); -23376: # 204 "/usr/include/stdio.h" 3 4 -23376: extern char *tempnam (const char *__dir, const char *__pfx) -23376: throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fclose (FILE *__stream); -23376: -23376: -23376: -23376: -23376: extern int fflush (FILE *__stream); -23376: # 227 "/usr/include/stdio.h" 3 4 -23376: extern int fflush_unlocked (FILE *__stream); -23376: # 237 "/usr/include/stdio.h" 3 4 -23376: extern int fcloseall (void); -23376: # 246 "/usr/include/stdio.h" 3 4 -23376: extern FILE *fopen (const char *__restrict __filename, -23376: const char *__restrict __modes) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern FILE *freopen (const char *__restrict __filename, -23376: const char *__restrict __modes, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: # 270 "/usr/include/stdio.h" 3 4 -23376: extern FILE *fopen64 (const char *__restrict __filename, -23376: const char *__restrict __modes) __attribute__ ((__warn_unused_result__)); -23376: extern FILE *freopen64 (const char *__restrict __filename, -23376: const char *__restrict __modes, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern FILE *fdopen (int __fd, const char *__modes) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern FILE *fopencookie (void *__restrict __magic_cookie, -23376: const char *__restrict __modes, -23376: cookie_io_functions_t __io_funcs) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) -23376: throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw (); -23376: -23376: -23376: -23376: extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, -23376: int __modes, size_t __n) throw (); -23376: -23376: -23376: -23376: -23376: extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, -23376: size_t __size) throw (); -23376: -23376: -23376: extern void setlinebuf (FILE *__stream) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fprintf (FILE *__restrict __stream, -23376: const char *__restrict __format, ...); -23376: -23376: -23376: -23376: -23376: extern int printf (const char *__restrict __format, ...); -23376: -23376: extern int sprintf (char *__restrict __s, -23376: const char *__restrict __format, ...) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, -23376: __gnuc_va_list __arg); -23376: -23376: -23376: -23376: -23376: extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); -23376: -23376: extern int vsprintf (char *__restrict __s, const char *__restrict __format, -23376: __gnuc_va_list __arg) throw (); -23376: -23376: -23376: -23376: extern int snprintf (char *__restrict __s, size_t __maxlen, -23376: const char *__restrict __format, ...) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 4))); -23376: -23376: extern int vsnprintf (char *__restrict __s, size_t __maxlen, -23376: const char *__restrict __format, __gnuc_va_list __arg) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 0))); -23376: -23376: -23376: -23376: -23376: -23376: extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, -23376: __gnuc_va_list __arg) -23376: throw () __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__)); -23376: extern int __asprintf (char **__restrict __ptr, -23376: const char *__restrict __fmt, ...) -23376: throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); -23376: extern int asprintf (char **__restrict __ptr, -23376: const char *__restrict __fmt, ...) -23376: throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern int vdprintf (int __fd, const char *__restrict __fmt, -23376: __gnuc_va_list __arg) -23376: __attribute__ ((__format__ (__printf__, 2, 0))); -23376: extern int dprintf (int __fd, const char *__restrict __fmt, ...) -23376: __attribute__ ((__format__ (__printf__, 2, 3))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fscanf (FILE *__restrict __stream, -23376: const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__)); -23376: -23376: extern int sscanf (const char *__restrict __s, -23376: const char *__restrict __format, ...) throw (); -23376: # 434 "/usr/include/stdio.h" 3 4 -23376: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, -23376: __gnuc_va_list __arg) -23376: __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) -23376: __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: extern int vsscanf (const char *__restrict __s, -23376: const char *__restrict __format, __gnuc_va_list __arg) -23376: throw () __attribute__ ((__format__ (__scanf__, 2, 0))); -23376: # 491 "/usr/include/stdio.h" 3 4 -23376: extern int fgetc (FILE *__stream); -23376: extern int getc (FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: extern int getchar (void); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int getc_unlocked (FILE *__stream); -23376: extern int getchar_unlocked (void); -23376: # 516 "/usr/include/stdio.h" 3 4 -23376: extern int fgetc_unlocked (FILE *__stream); -23376: # 527 "/usr/include/stdio.h" 3 4 -23376: extern int fputc (int __c, FILE *__stream); -23376: extern int putc (int __c, FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: extern int putchar (int __c); -23376: # 543 "/usr/include/stdio.h" 3 4 -23376: extern int fputc_unlocked (int __c, FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int putc_unlocked (int __c, FILE *__stream); -23376: extern int putchar_unlocked (int __c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int getw (FILE *__stream); -23376: -23376: -23376: extern int putw (int __w, FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) -23376: __attribute__ ((__warn_unused_result__)); -23376: # 593 "/usr/include/stdio.h" 3 4 -23376: extern char *fgets_unlocked (char *__restrict __s, int __n, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: # 609 "/usr/include/stdio.h" 3 4 -23376: extern __ssize_t __getdelim (char **__restrict __lineptr, -23376: size_t *__restrict __n, int __delimiter, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern __ssize_t getdelim (char **__restrict __lineptr, -23376: size_t *__restrict __n, int __delimiter, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __ssize_t getline (char **__restrict __lineptr, -23376: size_t *__restrict __n, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fputs (const char *__restrict __s, FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: extern int puts (const char *__s); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int ungetc (int __c, FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern size_t fread (void *__restrict __ptr, size_t __size, -23376: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern size_t fwrite (const void *__restrict __ptr, size_t __size, -23376: size_t __n, FILE *__restrict __s); -23376: # 668 "/usr/include/stdio.h" 3 4 -23376: extern int fputs_unlocked (const char *__restrict __s, -23376: FILE *__restrict __stream); -23376: # 679 "/usr/include/stdio.h" 3 4 -23376: extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, -23376: size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, -23376: size_t __n, FILE *__restrict __stream); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int fseek (FILE *__stream, long int __off, int __whence); -23376: -23376: -23376: -23376: -23376: extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern void rewind (FILE *__stream); -23376: # 713 "/usr/include/stdio.h" 3 4 -23376: extern int fseeko (FILE *__stream, __off_t __off, int __whence); -23376: -23376: -23376: -23376: -23376: extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__)); -23376: # 737 "/usr/include/stdio.h" 3 4 -23376: extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); -23376: -23376: -23376: -23376: -23376: extern int fsetpos (FILE *__stream, const fpos_t *__pos); -23376: # 756 "/usr/include/stdio.h" 3 4 -23376: extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); -23376: extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__)); -23376: extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); -23376: extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); -23376: -23376: -23376: -23376: extern void clearerr (FILE *__stream) throw (); -23376: -23376: extern int feof (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: extern int ferror (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: extern void clearerr_unlocked (FILE *__stream) throw (); -23376: extern int feof_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: extern int ferror_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern void perror (const char *__s); -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/sys_errlist.h" 1 3 4 -23376: # 26 "/usr/include/arm-linux-gnueabihf/bits/sys_errlist.h" 3 4 -23376: extern int sys_nerr; -23376: extern const char *const sys_errlist[]; -23376: -23376: -23376: extern int _sys_nerr; -23376: extern const char *const _sys_errlist[]; -23376: # 788 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: extern int fileno (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: extern int fileno_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: # 806 "/usr/include/stdio.h" 3 4 -23376: extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: -23376: -23376: -23376: extern int pclose (FILE *__stream); -23376: -23376: -23376: -23376: -23376: -23376: extern char *ctermid (char *__s) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern char *cuserid (char *__s); -23376: -23376: -23376: -23376: -23376: struct obstack; -23376: -23376: -23376: extern int obstack_printf (struct obstack *__restrict __obstack, -23376: const char *__restrict __format, ...) -23376: throw () __attribute__ ((__format__ (__printf__, 2, 3))); -23376: extern int obstack_vprintf (struct obstack *__restrict __obstack, -23376: const char *__restrict __format, -23376: __gnuc_va_list __args) -23376: throw () __attribute__ ((__format__ (__printf__, 2, 0))); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern void flockfile (FILE *__stream) throw (); -23376: -23376: -23376: -23376: extern int ftrylockfile (FILE *__stream) throw () __attribute__ ((__warn_unused_result__)); -23376: -23376: -23376: extern void funlockfile (FILE *__stream) throw (); -23376: # 864 "/usr/include/stdio.h" 3 4 -23376: extern int __uflow (FILE *); -23376: extern int __overflow (FILE *, int); -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 1 3 4 -23376: # 46 "/usr/include/arm-linux-gnueabihf/bits/stdio.h" 3 4 -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: getchar (void) -23376: { -23376: return getc (stdin); -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: fgetc_unlocked (FILE *__fp) -23376: { -23376: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: getc_unlocked (FILE *__fp) -23376: { -23376: return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: getchar_unlocked (void) -23376: { -23376: return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++); -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: putchar (int __c) -23376: { -23376: return putc (__c, stdout); -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: fputc_unlocked (int __c, FILE *__stream) -23376: { -23376: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: putc_unlocked (int __c, FILE *__stream) -23376: { -23376: return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c))); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: putchar_unlocked (int __c) -23376: { -23376: return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c))); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) __ssize_t -23376: getline (char **__lineptr, size_t *__n, FILE *__stream) -23376: { -23376: return __getdelim (__lineptr, __n, '\n', __stream); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: __attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw () -23376: { -23376: return (((__stream)->_flags & 0x0010) != 0); -23376: } -23376: -23376: -23376: extern __inline __attribute__ ((__gnu_inline__)) int -23376: __attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw () -23376: { -23376: return (((__stream)->_flags & 0x0020) != 0); -23376: } -23376: # 871 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 1 3 4 -23376: # 26 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 -23376: extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen, -23376: const char *__restrict __format, ...) throw (); -23376: extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen, -23376: const char *__restrict __format, -23376: __gnuc_va_list __ap) throw (); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) throw () -23376: { -23376: return __builtin___sprintf_chk (__s, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) throw () -23376: -23376: { -23376: return __builtin___vsprintf_chk (__s, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1), __fmt, __ap); -23376: } -23376: -23376: -23376: -23376: extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag, -23376: size_t __slen, const char *__restrict __format, -23376: ...) throw (); -23376: extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag, -23376: size_t __slen, const char *__restrict __format, -23376: __gnuc_va_list __ap) throw (); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) throw () -23376: -23376: { -23376: return __builtin___snprintf_chk (__s, __n, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) throw () -23376: -23376: { -23376: return __builtin___vsnprintf_chk (__s, __n, 2 - 1, -23376: __builtin_object_size (__s, 2 > 1), __fmt, __ap); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern int __fprintf_chk (FILE *__restrict __stream, int __flag, -23376: const char *__restrict __format, ...); -23376: extern int __printf_chk (int __flag, const char *__restrict __format, ...); -23376: extern int __vfprintf_chk (FILE *__restrict __stream, int __flag, -23376: const char *__restrict __format, __gnuc_va_list __ap); -23376: extern int __vprintf_chk (int __flag, const char *__restrict __format, -23376: __gnuc_va_list __ap); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...) -23376: { -23376: return __fprintf_chk (__stream, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: printf (const char *__restrict __fmt, ...) -23376: { -23376: return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: vprintf (const char *__restrict __fmt, __gnuc_va_list __ap) -23376: { -23376: -23376: return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap); -23376: -23376: -23376: -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: vfprintf (FILE *__restrict __stream, -23376: const char *__restrict __fmt, __gnuc_va_list __ap) -23376: { -23376: return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap); -23376: } -23376: -23376: -23376: extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt, -23376: ...) __attribute__ ((__format__ (__printf__, 3, 4))); -23376: extern int __vdprintf_chk (int __fd, int __flag, -23376: const char *__restrict __fmt, __gnuc_va_list __arg) -23376: __attribute__ ((__format__ (__printf__, 3, 0))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: dprintf (int __fd, const char *__restrict __fmt, ...) -23376: { -23376: return __dprintf_chk (__fd, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap) -23376: { -23376: return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap); -23376: } -23376: -23376: -23376: -23376: -23376: extern int __asprintf_chk (char **__restrict __ptr, int __flag, -23376: const char *__restrict __fmt, ...) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__)); -23376: extern int __vasprintf_chk (char **__restrict __ptr, int __flag, -23376: const char *__restrict __fmt, __gnuc_va_list __arg) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__)); -23376: extern int __obstack_printf_chk (struct obstack *__restrict __obstack, -23376: int __flag, const char *__restrict __format, -23376: ...) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 4))); -23376: extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack, -23376: int __flag, -23376: const char *__restrict __format, -23376: __gnuc_va_list __args) -23376: throw () __attribute__ ((__format__ (__printf__, 3, 0))); -23376: -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw () -23376: { -23376: return __asprintf_chk (__ptr, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw () -23376: -23376: { -23376: return __asprintf_chk (__ptr, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) throw () -23376: -23376: { -23376: return __obstack_printf_chk (__obstack, 2 - 1, __fmt, -23376: __builtin_va_arg_pack ()); -23376: } -23376: # 209 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) throw () -23376: -23376: { -23376: return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap); -23376: } -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int -23376: __attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) throw () -23376: -23376: { -23376: return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt, -23376: __ap); -23376: } -23376: # 243 "/usr/include/arm-linux-gnueabihf/bits/stdio2.h" 3 4 -23376: extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets") -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * -23376: fgets (char *__restrict __s, int __n, FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n) || __n <= 0) -23376: return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream); -23376: -23376: if ((size_t) __n > __builtin_object_size (__s, 2 > 1)) -23376: return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream); -23376: } -23376: return __fgets_alias (__s, __n, __stream); -23376: } -23376: -23376: extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen, -23376: size_t __size, size_t __n, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk") -23376: -23376: -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t -23376: fread (void *__restrict __ptr, size_t __size, size_t __n, -23376: FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__ptr, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__size) -23376: || !__builtin_constant_p (__n) -23376: || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2))) -23376: return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream); -23376: -23376: if (__size * __n > __builtin_object_size (__ptr, 0)) -23376: return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream); -23376: } -23376: return __fread_alias (__ptr, __size, __n, __stream); -23376: } -23376: -23376: -23376: extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size, -23376: int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked") -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char * -23376: fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__s, 2 > 1) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__n) || __n <= 0) -23376: return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream); -23376: -23376: if ((size_t) __n > __builtin_object_size (__s, 2 > 1)) -23376: return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream); -23376: } -23376: return __fgets_unlocked_alias (__s, __n, __stream); -23376: } -23376: -23376: -23376: -23376: -23376: extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen, -23376: size_t __size, size_t __n, -23376: FILE *__restrict __stream) __attribute__ ((__warn_unused_result__)); -23376: extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked") -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)); -23376: 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") -23376: -23376: -23376: -23376: -23376: __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer"))) -23376: ; -23376: -23376: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t -23376: fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, -23376: FILE *__restrict __stream) -23376: { -23376: if (__builtin_object_size (__ptr, 0) != (size_t) -1) -23376: { -23376: if (!__builtin_constant_p (__size) -23376: || !__builtin_constant_p (__n) -23376: || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2))) -23376: return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, -23376: __stream); -23376: -23376: if (__size * __n > __builtin_object_size (__ptr, 0)) -23376: return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, -23376: __stream); -23376: } -23376: -23376: -23376: if (__builtin_constant_p (__size) -23376: && __builtin_constant_p (__n) -23376: && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2)) -23376: && __size * __n <= 8) -23376: { -23376: size_t __cnt = __size * __n; -23376: char *__cptr = (char *) __ptr; -23376: if (__cnt == 0) -23376: return 0; -23376: -23376: for (; __cnt > 0; --__cnt) -23376: { -23376: int __c = getc_unlocked (__stream); -23376: if (__c == (-1)) -23376: break; -23376: *__cptr++ = __c; -23376: } -23376: return (__cptr - (char *) __ptr) / __size; -23376: } -23376: -23376: return __fread_unlocked_alias (__ptr, __size, __n, __stream); -23376: } -23376: # 874 "/usr/include/stdio.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 43 "/usr/include/c++/8/cstdio" 2 3 -23376: # 96 "/usr/include/c++/8/cstdio" 3 -23376: namespace std -23376: { -23376: using ::FILE; -23376: using ::fpos_t; -23376: -23376: using ::clearerr; -23376: using ::fclose; -23376: using ::feof; -23376: using ::ferror; -23376: using ::fflush; -23376: using ::fgetc; -23376: using ::fgetpos; -23376: using ::fgets; -23376: using ::fopen; -23376: using ::fprintf; -23376: using ::fputc; -23376: using ::fputs; -23376: using ::fread; -23376: using ::freopen; -23376: using ::fscanf; -23376: using ::fseek; -23376: using ::fsetpos; -23376: using ::ftell; -23376: using ::fwrite; -23376: using ::getc; -23376: using ::getchar; -23376: -23376: -23376: -23376: -23376: using ::perror; -23376: using ::printf; -23376: using ::putc; -23376: using ::putchar; -23376: using ::puts; -23376: using ::remove; -23376: using ::rename; -23376: using ::rewind; -23376: using ::scanf; -23376: using ::setbuf; -23376: using ::setvbuf; -23376: using ::sprintf; -23376: using ::sscanf; -23376: using ::tmpfile; -23376: -23376: using ::tmpnam; -23376: -23376: using ::ungetc; -23376: using ::vfprintf; -23376: using ::vprintf; -23376: using ::vsprintf; -23376: } -23376: # 157 "/usr/include/c++/8/cstdio" 3 -23376: namespace __gnu_cxx -23376: { -23376: # 175 "/usr/include/c++/8/cstdio" 3 -23376: using ::snprintf; -23376: using ::vfscanf; -23376: using ::vscanf; -23376: using ::vsnprintf; -23376: using ::vsscanf; -23376: -23376: } -23376: -23376: namespace std -23376: { -23376: using ::__gnu_cxx::snprintf; -23376: using ::__gnu_cxx::vfscanf; -23376: using ::__gnu_cxx::vscanf; -23376: using ::__gnu_cxx::vsnprintf; -23376: using ::__gnu_cxx::vsscanf; -23376: } -23376: # 44 "/usr/include/c++/8/ext/string_conversions.h" 2 3 -23376: # 1 "/usr/include/c++/8/cerrno" 1 3 -23376: # 39 "/usr/include/c++/8/cerrno" 3 -23376: -23376: # 40 "/usr/include/c++/8/cerrno" 3 -23376: -23376: -23376: # 1 "/usr/include/errno.h" 1 3 4 -23376: # 28 "/usr/include/errno.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 1 3 4 -23376: # 26 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 3 4 -23376: # 1 "/usr/include/linux/errno.h" 1 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/asm/errno.h" 1 3 4 -23376: # 1 "/usr/include/asm-generic/errno.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 -23376: # 6 "/usr/include/asm-generic/errno.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/asm/errno.h" 2 3 4 -23376: # 1 "/usr/include/linux/errno.h" 2 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/errno.h" 2 3 4 -23376: # 29 "/usr/include/errno.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: extern int *__errno_location (void) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern char *program_invocation_name; -23376: extern char *program_invocation_short_name; -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 1 3 4 -23376: # 22 "/usr/include/arm-linux-gnueabihf/bits/types/error_t.h" 3 4 -23376: typedef int error_t; -23376: # 49 "/usr/include/errno.h" 2 3 4 -23376: -23376: -23376: -23376: } -23376: # 43 "/usr/include/c++/8/cerrno" 2 3 -23376: # 45 "/usr/include/c++/8/ext/string_conversions.h" 2 3 -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: _Ret -23376: __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...), -23376: const char* __name, const _CharT* __str, std::size_t* __idx, -23376: _Base... __base) -23376: { -23376: _Ret __ret; -23376: -23376: _CharT* __endptr; -23376: -23376: struct _Save_errno { -23376: _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; } -23376: ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; } -23376: int _M_errno; -23376: } const __save_errno; -23376: -23376: struct _Range_chk { -23376: static bool -23376: _S_chk(_TRet, std::false_type) { return false; } -23376: -23376: static bool -23376: _S_chk(_TRet __val, std::true_type) -23376: { -23376: return __val < _TRet(__numeric_traits::__min) -23376: || __val > _TRet(__numeric_traits::__max); -23376: } -23376: }; -23376: -23376: const _TRet __tmp = __convf(__str, &__endptr, __base...); -23376: -23376: if (__endptr == __str) -23376: std::__throw_invalid_argument(__name); -23376: else if ((*__errno_location ()) == 34 -23376: || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) -23376: std::__throw_out_of_range(__name); -23376: else -23376: __ret = __tmp; -23376: -23376: if (__idx) -23376: *__idx = __endptr - __str; -23376: -23376: return __ret; -23376: } -23376: -23376: -23376: template -23376: _String -23376: __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*, -23376: __builtin_va_list), std::size_t __n, -23376: const _CharT* __fmt, ...) -23376: { -23376: -23376: -23376: _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __n)); -23376: -23376: __builtin_va_list __args; -23376: __builtin_va_start(__args, __fmt); -23376: -23376: const int __len = __convf(__s, __n, __fmt, __args); -23376: -23376: __builtin_va_end(__args); -23376: -23376: return _String(__s, __s + __len); -23376: } -23376: -23376: -23376: } -23376: # 6401 "/usr/include/c++/8/bits/basic_string.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: namespace __cxx11 { -23376: -23376: -23376: -23376: inline int -23376: stoi(const string& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::strtol, "stoi", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline long -23376: stol(const string& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline unsigned long -23376: stoul(const string& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline long long -23376: stoll(const string& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline unsigned long long -23376: stoull(const string& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(), -23376: __idx, __base); } -23376: -23376: -23376: inline float -23376: stof(const string& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); } -23376: -23376: inline double -23376: stod(const string& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } -23376: -23376: inline long double -23376: stold(const string& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: inline string -23376: to_string(int __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, 4 * sizeof(int), -23376: "%d", __val); } -23376: -23376: inline string -23376: to_string(unsigned __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, -23376: 4 * sizeof(unsigned), -23376: "%u", __val); } -23376: -23376: inline string -23376: to_string(long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, 4 * sizeof(long), -23376: "%ld", __val); } -23376: -23376: inline string -23376: to_string(unsigned long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, -23376: 4 * sizeof(unsigned long), -23376: "%lu", __val); } -23376: -23376: inline string -23376: to_string(long long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, -23376: 4 * sizeof(long long), -23376: "%lld", __val); } -23376: -23376: inline string -23376: to_string(unsigned long long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vsnprintf, -23376: 4 * sizeof(unsigned long long), -23376: "%llu", __val); } -23376: -23376: inline string -23376: to_string(float __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, -23376: "%f", __val); -23376: } -23376: -23376: inline string -23376: to_string(double __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, -23376: "%f", __val); -23376: } -23376: -23376: inline string -23376: to_string(long double __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, -23376: "%Lf", __val); -23376: } -23376: -23376: -23376: -23376: inline int -23376: stoi(const wstring& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::wcstol, "stoi", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline long -23376: stol(const wstring& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline unsigned long -23376: stoul(const wstring& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline long long -23376: stoll(const wstring& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(), -23376: __idx, __base); } -23376: -23376: inline unsigned long long -23376: stoull(const wstring& __str, size_t* __idx = 0, int __base = 10) -23376: { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(), -23376: __idx, __base); } -23376: -23376: -23376: inline float -23376: stof(const wstring& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); } -23376: -23376: inline double -23376: stod(const wstring& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); } -23376: -23376: inline long double -23376: stold(const wstring& __str, size_t* __idx = 0) -23376: { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); } -23376: -23376: -23376: -23376: inline wstring -23376: to_wstring(int __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), -23376: L"%d", __val); } -23376: -23376: inline wstring -23376: to_wstring(unsigned __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, -23376: 4 * sizeof(unsigned), -23376: L"%u", __val); } -23376: -23376: inline wstring -23376: to_wstring(long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(long), -23376: L"%ld", __val); } -23376: -23376: inline wstring -23376: to_wstring(unsigned long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, -23376: 4 * sizeof(unsigned long), -23376: L"%lu", __val); } -23376: -23376: inline wstring -23376: to_wstring(long long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, -23376: 4 * sizeof(long long), -23376: L"%lld", __val); } -23376: -23376: inline wstring -23376: to_wstring(unsigned long long __val) -23376: { return __gnu_cxx::__to_xstring(&std::vswprintf, -23376: 4 * sizeof(unsigned long long), -23376: L"%llu", __val); } -23376: -23376: inline wstring -23376: to_wstring(float __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, -23376: L"%f", __val); -23376: } -23376: -23376: inline wstring -23376: to_wstring(double __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, -23376: L"%f", __val); -23376: } -23376: -23376: inline wstring -23376: to_wstring(long double __val) -23376: { -23376: const int __n = -23376: __gnu_cxx::__numeric_traits::__max_exponent10 + 20; -23376: return __gnu_cxx::__to_xstring(&std::vswprintf, __n, -23376: L"%Lf", __val); -23376: } -23376: -23376: -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/functional_hash.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/functional_hash.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/functional_hash.h" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 49 "/usr/include/c++/8/bits/functional_hash.h" 3 -23376: template -23376: struct __hash_base -23376: { -23376: typedef _Result result_type ; -23376: typedef _Arg argument_type ; -23376: }; -23376: -23376: -23376: template -23376: struct hash; -23376: -23376: template -23376: struct __poison_hash -23376: { -23376: static constexpr bool __enable_hash_call = false; -23376: private: -23376: -23376: __poison_hash(__poison_hash&&); -23376: ~__poison_hash(); -23376: }; -23376: -23376: template -23376: struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> -23376: { -23376: static constexpr bool __enable_hash_call = true; -23376: }; -23376: -23376: -23376: template::value> -23376: struct __hash_enum -23376: { -23376: private: -23376: -23376: __hash_enum(__hash_enum&&); -23376: ~__hash_enum(); -23376: }; -23376: -23376: -23376: template -23376: struct __hash_enum<_Tp, true> : public __hash_base -23376: { -23376: size_t -23376: operator()(_Tp __val) const noexcept -23376: { -23376: using __type = typename underlying_type<_Tp>::type; -23376: return hash<__type>{}(static_cast<__type>(__val)); -23376: } -23376: }; -23376: -23376: -23376: -23376: template -23376: struct hash : __hash_enum<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct hash<_Tp*> : public __hash_base -23376: { -23376: size_t -23376: operator()(_Tp* __p) const noexcept -23376: { return reinterpret_cast(__p); } -23376: }; -23376: # 124 "/usr/include/c++/8/bits/functional_hash.h" 3 -23376: template<> struct hash : public __hash_base { size_t operator()(bool __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(char __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(signed char __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(unsigned char __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(wchar_t __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(char16_t __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(char32_t __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(short __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(int __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(long __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(long long __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(unsigned short __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(unsigned int __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(unsigned long __val) const noexcept { return static_cast(__val); } }; -23376: -23376: -23376: template<> struct hash : public __hash_base { size_t operator()(unsigned long long __val) const noexcept { return static_cast(__val); } }; -23376: # 187 "/usr/include/c++/8/bits/functional_hash.h" 3 -23376: struct _Hash_impl -23376: { -23376: static size_t -23376: hash(const void* __ptr, size_t __clength, -23376: size_t __seed = static_cast(0xc70f6907UL)) -23376: { return _Hash_bytes(__ptr, __clength, __seed); } -23376: -23376: template -23376: static size_t -23376: hash(const _Tp& __val) -23376: { return hash(&__val, sizeof(__val)); } -23376: -23376: template -23376: static size_t -23376: __hash_combine(const _Tp& __val, size_t __hash) -23376: { return hash(&__val, sizeof(__val), __hash); } -23376: }; -23376: -23376: -23376: struct _Fnv_hash_impl -23376: { -23376: static size_t -23376: hash(const void* __ptr, size_t __clength, -23376: size_t __seed = static_cast(2166136261UL)) -23376: { return _Fnv_hash_bytes(__ptr, __clength, __seed); } -23376: -23376: template -23376: static size_t -23376: hash(const _Tp& __val) -23376: { return hash(&__val, sizeof(__val)); } -23376: -23376: template -23376: static size_t -23376: __hash_combine(const _Tp& __val, size_t __hash) -23376: { return hash(&__val, sizeof(__val), __hash); } -23376: }; -23376: -23376: -23376: template<> -23376: struct hash : public __hash_base -23376: { -23376: size_t -23376: operator()(float __val) const noexcept -23376: { -23376: -23376: return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct hash : public __hash_base -23376: { -23376: size_t -23376: operator()(double __val) const noexcept -23376: { -23376: -23376: return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; -23376: } -23376: }; -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: __attribute__ ((__pure__)) size_t -23376: operator()(long double __val) const noexcept; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __is_fast_hash : public std::true_type -23376: { }; -23376: -23376: template<> -23376: struct __is_fast_hash> : public std::false_type -23376: { }; -23376: -23376: -23376: } -23376: # 6627 "/usr/include/c++/8/bits/basic_string.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: size_t -23376: operator()(const string& __s) const noexcept -23376: { return std::_Hash_impl::hash(__s.data(), __s.length()); } -23376: }; -23376: -23376: template<> -23376: struct __is_fast_hash> : std::false_type -23376: { }; -23376: -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: size_t -23376: operator()(const wstring& __s) const noexcept -23376: { return std::_Hash_impl::hash(__s.data(), -23376: __s.length() * sizeof(wchar_t)); } -23376: }; -23376: -23376: template<> -23376: struct __is_fast_hash> : std::false_type -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: size_t -23376: operator()(const u16string& __s) const noexcept -23376: { return std::_Hash_impl::hash(__s.data(), -23376: __s.length() * sizeof(char16_t)); } -23376: }; -23376: -23376: template<> -23376: struct __is_fast_hash> : std::false_type -23376: { }; -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: size_t -23376: operator()(const u32string& __s) const noexcept -23376: { return std::_Hash_impl::hash(__s.data(), -23376: __s.length() * sizeof(char32_t)); } -23376: }; -23376: -23376: template<> -23376: struct __is_fast_hash> : std::false_type -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: inline namespace literals -23376: { -23376: inline namespace string_literals -23376: { -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wliteral-suffix" -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: inline basic_string -23376: operator""s(const char* __str, size_t __len) -23376: { return basic_string{__str, __len}; } -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: inline basic_string -23376: operator""s(const wchar_t* __str, size_t __len) -23376: { return basic_string{__str, __len}; } -23376: -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: inline basic_string -23376: operator""s(const char16_t* __str, size_t __len) -23376: { return basic_string{__str, __len}; } -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: inline basic_string -23376: operator""s(const char32_t* __str, size_t __len) -23376: { return basic_string{__str, __len}; } -23376: -23376: -23376: #pragma GCC diagnostic pop -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 53 "/usr/include/c++/8/string" 2 3 -23376: # 1 "/usr/include/c++/8/bits/basic_string.tcc" 1 3 -23376: # 42 "/usr/include/c++/8/bits/basic_string.tcc" 3 -23376: -23376: # 43 "/usr/include/c++/8/bits/basic_string.tcc" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: const typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>::npos; -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: swap(basic_string& __s) noexcept -23376: { -23376: if (this == &__s) -23376: return; -23376: -23376: _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator()); -23376: -23376: if (_M_is_local()) -23376: if (__s._M_is_local()) -23376: { -23376: if (length() && __s.length()) -23376: { -23376: _CharT __tmp_data[_S_local_capacity + 1]; -23376: traits_type::copy(__tmp_data, __s._M_local_buf, -23376: _S_local_capacity + 1); -23376: traits_type::copy(__s._M_local_buf, _M_local_buf, -23376: _S_local_capacity + 1); -23376: traits_type::copy(_M_local_buf, __tmp_data, -23376: _S_local_capacity + 1); -23376: } -23376: else if (__s.length()) -23376: { -23376: traits_type::copy(_M_local_buf, __s._M_local_buf, -23376: _S_local_capacity + 1); -23376: _M_length(__s.length()); -23376: __s._M_set_length(0); -23376: return; -23376: } -23376: else if (length()) -23376: { -23376: traits_type::copy(__s._M_local_buf, _M_local_buf, -23376: _S_local_capacity + 1); -23376: __s._M_length(length()); -23376: _M_set_length(0); -23376: return; -23376: } -23376: } -23376: else -23376: { -23376: const size_type __tmp_capacity = __s._M_allocated_capacity; -23376: traits_type::copy(__s._M_local_buf, _M_local_buf, -23376: _S_local_capacity + 1); -23376: _M_data(__s._M_data()); -23376: __s._M_data(__s._M_local_buf); -23376: _M_capacity(__tmp_capacity); -23376: } -23376: else -23376: { -23376: const size_type __tmp_capacity = _M_allocated_capacity; -23376: if (__s._M_is_local()) -23376: { -23376: traits_type::copy(_M_local_buf, __s._M_local_buf, -23376: _S_local_capacity + 1); -23376: __s._M_data(_M_data()); -23376: _M_data(_M_local_buf); -23376: } -23376: else -23376: { -23376: pointer __tmp_ptr = _M_data(); -23376: _M_data(__s._M_data()); -23376: __s._M_data(__tmp_ptr); -23376: _M_capacity(__s._M_allocated_capacity); -23376: } -23376: __s._M_capacity(__tmp_capacity); -23376: } -23376: -23376: const size_type __tmp_length = length(); -23376: _M_length(__s.length()); -23376: __s._M_length(__tmp_length); -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::pointer -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_create(size_type& __capacity, size_type __old_capacity) -23376: { -23376: -23376: -23376: if (__capacity > max_size()) -23376: std::__throw_length_error(("basic_string::_M_create")); -23376: -23376: -23376: -23376: -23376: if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) -23376: { -23376: __capacity = 2 * __old_capacity; -23376: -23376: if (__capacity > max_size()) -23376: __capacity = max_size(); -23376: } -23376: -23376: -23376: -23376: return _Alloc_traits::allocate(_M_get_allocator(), __capacity + 1); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_construct(_InIterator __beg, _InIterator __end, -23376: std::input_iterator_tag) -23376: { -23376: size_type __len = 0; -23376: size_type __capacity = size_type(_S_local_capacity); -23376: -23376: while (__beg != __end && __len < __capacity) -23376: { -23376: _M_data()[__len++] = *__beg; -23376: ++__beg; -23376: } -23376: -23376: try -23376: { -23376: while (__beg != __end) -23376: { -23376: if (__len == __capacity) -23376: { -23376: -23376: __capacity = __len + 1; -23376: pointer __another = _M_create(__capacity, __len); -23376: this->_S_copy(__another, _M_data(), __len); -23376: _M_dispose(); -23376: _M_data(__another); -23376: _M_capacity(__capacity); -23376: } -23376: _M_data()[__len++] = *__beg; -23376: ++__beg; -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_dispose(); -23376: throw; -23376: } -23376: -23376: _M_set_length(__len); -23376: } -23376: -23376: template -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_construct(_InIterator __beg, _InIterator __end, -23376: std::forward_iterator_tag) -23376: { -23376: -23376: if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) -23376: std::__throw_logic_error(("basic_string::" "_M_construct null not valid") -23376: ); -23376: -23376: size_type __dnew = static_cast(std::distance(__beg, __end)); -23376: -23376: if (__dnew > size_type(_S_local_capacity)) -23376: { -23376: _M_data(_M_create(__dnew, size_type(0))); -23376: _M_capacity(__dnew); -23376: } -23376: -23376: -23376: try -23376: { this->_S_copy_chars(_M_data(), __beg, __end); } -23376: catch(...) -23376: { -23376: _M_dispose(); -23376: throw; -23376: } -23376: -23376: _M_set_length(__dnew); -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_construct(size_type __n, _CharT __c) -23376: { -23376: if (__n > size_type(_S_local_capacity)) -23376: { -23376: _M_data(_M_create(__n, size_type(0))); -23376: _M_capacity(__n); -23376: } -23376: -23376: if (__n) -23376: this->_S_assign(_M_data(), __n, __c); -23376: -23376: _M_set_length(__n); -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_assign(const basic_string& __str) -23376: { -23376: if (this != &__str) -23376: { -23376: const size_type __rsize = __str.length(); -23376: const size_type __capacity = capacity(); -23376: -23376: if (__rsize > __capacity) -23376: { -23376: size_type __new_capacity = __rsize; -23376: pointer __tmp = _M_create(__new_capacity, __capacity); -23376: _M_dispose(); -23376: _M_data(__tmp); -23376: _M_capacity(__new_capacity); -23376: } -23376: -23376: if (__rsize) -23376: this->_S_copy(_M_data(), __str._M_data(), __rsize); -23376: -23376: _M_set_length(__rsize); -23376: } -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: reserve(size_type __res) -23376: { -23376: -23376: if (__res < length()) -23376: __res = length(); -23376: -23376: const size_type __capacity = capacity(); -23376: if (__res != __capacity) -23376: { -23376: if (__res > __capacity -23376: || __res > size_type(_S_local_capacity)) -23376: { -23376: pointer __tmp = _M_create(__res, __capacity); -23376: this->_S_copy(__tmp, _M_data(), length() + 1); -23376: _M_dispose(); -23376: _M_data(__tmp); -23376: _M_capacity(__res); -23376: } -23376: else if (!_M_is_local()) -23376: { -23376: this->_S_copy(_M_local_data(), _M_data(), length() + 1); -23376: _M_destroy(__capacity); -23376: _M_data(_M_local_data()); -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, -23376: size_type __len2) -23376: { -23376: const size_type __how_much = length() - __pos - __len1; -23376: -23376: size_type __new_capacity = length() + __len2 - __len1; -23376: pointer __r = _M_create(__new_capacity, capacity()); -23376: -23376: if (__pos) -23376: this->_S_copy(__r, _M_data(), __pos); -23376: if (__s && __len2) -23376: this->_S_copy(__r + __pos, __s, __len2); -23376: if (__how_much) -23376: this->_S_copy(__r + __pos + __len2, -23376: _M_data() + __pos + __len1, __how_much); -23376: -23376: _M_dispose(); -23376: _M_data(__r); -23376: _M_capacity(__new_capacity); -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_erase(size_type __pos, size_type __n) -23376: { -23376: const size_type __how_much = length() - __pos - __n; -23376: -23376: if (__how_much && __n) -23376: this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much); -23376: -23376: _M_set_length(length() - __n); -23376: } -23376: -23376: template -23376: void -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: resize(size_type __n, _CharT __c) -23376: { -23376: const size_type __size = this->size(); -23376: if (__size < __n) -23376: this->append(__n - __size, __c); -23376: else if (__n < __size) -23376: this->_M_set_length(__n); -23376: } -23376: -23376: template -23376: basic_string<_CharT, _Traits, _Alloc>& -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_append(const _CharT* __s, size_type __n) -23376: { -23376: const size_type __len = __n + this->size(); -23376: -23376: if (__len <= this->capacity()) -23376: { -23376: if (__n) -23376: this->_S_copy(this->_M_data() + this->size(), __s, __n); -23376: } -23376: else -23376: this->_M_mutate(this->size(), size_type(0), __s, __n); -23376: -23376: this->_M_set_length(__len); -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: basic_string<_CharT, _Traits, _Alloc>& -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_replace_dispatch(const_iterator __i1, const_iterator __i2, -23376: _InputIterator __k1, _InputIterator __k2, -23376: std::__false_type) -23376: { -23376: const basic_string __s(__k1, __k2); -23376: const size_type __n1 = __i2 - __i1; -23376: return _M_replace(__i1 - begin(), __n1, __s._M_data(), -23376: __s.size()); -23376: } -23376: -23376: template -23376: basic_string<_CharT, _Traits, _Alloc>& -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, -23376: _CharT __c) -23376: { -23376: _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); -23376: -23376: const size_type __old_size = this->size(); -23376: const size_type __new_size = __old_size + __n2 - __n1; -23376: -23376: if (__new_size <= this->capacity()) -23376: { -23376: pointer __p = this->_M_data() + __pos1; -23376: -23376: const size_type __how_much = __old_size - __pos1 - __n1; -23376: if (__how_much && __n1 != __n2) -23376: this->_S_move(__p + __n2, __p + __n1, __how_much); -23376: } -23376: else -23376: this->_M_mutate(__pos1, __n1, 0, __n2); -23376: -23376: if (__n2) -23376: this->_S_assign(this->_M_data() + __pos1, __n2, __c); -23376: -23376: this->_M_set_length(__new_size); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_string<_CharT, _Traits, _Alloc>& -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: _M_replace(size_type __pos, size_type __len1, const _CharT* __s, -23376: const size_type __len2) -23376: { -23376: _M_check_length(__len1, __len2, "basic_string::_M_replace"); -23376: -23376: const size_type __old_size = this->size(); -23376: const size_type __new_size = __old_size + __len2 - __len1; -23376: -23376: if (__new_size <= this->capacity()) -23376: { -23376: pointer __p = this->_M_data() + __pos; -23376: -23376: const size_type __how_much = __old_size - __pos - __len1; -23376: if (_M_disjunct(__s)) -23376: { -23376: if (__how_much && __len1 != __len2) -23376: this->_S_move(__p + __len2, __p + __len1, __how_much); -23376: if (__len2) -23376: this->_S_copy(__p, __s, __len2); -23376: } -23376: else -23376: { -23376: -23376: if (__len2 && __len2 <= __len1) -23376: this->_S_move(__p, __s, __len2); -23376: if (__how_much && __len1 != __len2) -23376: this->_S_move(__p + __len2, __p + __len1, __how_much); -23376: if (__len2 > __len1) -23376: { -23376: if (__s + __len2 <= __p + __len1) -23376: this->_S_move(__p, __s, __len2); -23376: else if (__s >= __p + __len1) -23376: this->_S_copy(__p, __s + __len2 - __len1, __len2); -23376: else -23376: { -23376: const size_type __nleft = (__p + __len1) - __s; -23376: this->_S_move(__p, __s, __nleft); -23376: this->_S_copy(__p + __nleft, __p + __len2, -23376: __len2 - __nleft); -23376: } -23376: } -23376: } -23376: } -23376: else -23376: this->_M_mutate(__pos, __len1, __s, __len2); -23376: -23376: this->_M_set_length(__new_size); -23376: return *this; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: copy(_CharT* __s, size_type __n, size_type __pos) const -23376: { -23376: _M_check(__pos, "basic_string::copy"); -23376: __n = _M_limit(__pos, __n); -23376: ; -23376: if (__n) -23376: _S_copy(__s, _M_data() + __pos, __n); -23376: -23376: return __n; -23376: } -23376: # 1155 "/usr/include/c++/8/bits/basic_string.tcc" 3 -23376: template -23376: basic_string<_CharT, _Traits, _Alloc> -23376: operator+(const _CharT* __lhs, -23376: const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { -23376: ; -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef typename __string_type::size_type __size_type; -23376: const __size_type __len = _Traits::length(__lhs); -23376: __string_type __str; -23376: __str.reserve(__len + __rhs.size()); -23376: __str.append(__lhs, __len); -23376: __str.append(__rhs); -23376: return __str; -23376: } -23376: -23376: template -23376: basic_string<_CharT, _Traits, _Alloc> -23376: operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) -23376: { -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef typename __string_type::size_type __size_type; -23376: __string_type __str; -23376: const __size_type __len = __rhs.size(); -23376: __str.reserve(__len + 1); -23376: __str.append(__size_type(1), __lhs); -23376: __str.append(__rhs); -23376: return __str; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: const size_type __size = this->size(); -23376: -23376: if (__n == 0) -23376: return __pos <= __size ? __pos : npos; -23376: if (__pos >= __size) -23376: return npos; -23376: -23376: const _CharT __elem0 = __s[0]; -23376: const _CharT* const __data = data(); -23376: const _CharT* __first = __data + __pos; -23376: const _CharT* const __last = __data + __size; -23376: size_type __len = __size - __pos; -23376: -23376: while (__len >= __n) -23376: { -23376: -23376: __first = traits_type::find(__first, __len - __n + 1, __elem0); -23376: if (!__first) -23376: return npos; -23376: -23376: -23376: -23376: if (traits_type::compare(__first, __s, __n) == 0) -23376: return __first - __data; -23376: __len = __last - ++__first; -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find(_CharT __c, size_type __pos) const noexcept -23376: { -23376: size_type __ret = npos; -23376: const size_type __size = this->size(); -23376: if (__pos < __size) -23376: { -23376: const _CharT* __data = _M_data(); -23376: const size_type __n = __size - __pos; -23376: const _CharT* __p = traits_type::find(__data + __pos, __n, __c); -23376: if (__p) -23376: __ret = __p - __data; -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: rfind(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: const size_type __size = this->size(); -23376: if (__n <= __size) -23376: { -23376: __pos = std::min(size_type(__size - __n), __pos); -23376: const _CharT* __data = _M_data(); -23376: do -23376: { -23376: if (traits_type::compare(__data + __pos, __s, __n) == 0) -23376: return __pos; -23376: } -23376: while (__pos-- > 0); -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: rfind(_CharT __c, size_type __pos) const noexcept -23376: { -23376: size_type __size = this->size(); -23376: if (__size) -23376: { -23376: if (--__size > __pos) -23376: __size = __pos; -23376: for (++__size; __size-- > 0; ) -23376: if (traits_type::eq(_M_data()[__size], __c)) -23376: return __size; -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_first_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: for (; __n && __pos < this->size(); ++__pos) -23376: { -23376: const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); -23376: if (__p) -23376: return __pos; -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_last_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: size_type __size = this->size(); -23376: if (__size && __n) -23376: { -23376: if (--__size > __pos) -23376: __size = __pos; -23376: do -23376: { -23376: if (traits_type::find(__s, __n, _M_data()[__size])) -23376: return __size; -23376: } -23376: while (__size-- != 0); -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: for (; __pos < this->size(); ++__pos) -23376: if (!traits_type::find(__s, __n, _M_data()[__pos])) -23376: return __pos; -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_first_not_of(_CharT __c, size_type __pos) const noexcept -23376: { -23376: for (; __pos < this->size(); ++__pos) -23376: if (!traits_type::eq(_M_data()[__pos], __c)) -23376: return __pos; -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const -23376: noexcept -23376: { -23376: ; -23376: size_type __size = this->size(); -23376: if (__size) -23376: { -23376: if (--__size > __pos) -23376: __size = __pos; -23376: do -23376: { -23376: if (!traits_type::find(__s, __n, _M_data()[__size])) -23376: return __size; -23376: } -23376: while (__size--); -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: typename basic_string<_CharT, _Traits, _Alloc>::size_type -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: find_last_not_of(_CharT __c, size_type __pos) const noexcept -23376: { -23376: size_type __size = this->size(); -23376: if (__size) -23376: { -23376: if (--__size > __pos) -23376: __size = __pos; -23376: do -23376: { -23376: if (!traits_type::eq(_M_data()[__size], __c)) -23376: return __size; -23376: } -23376: while (__size--); -23376: } -23376: return npos; -23376: } -23376: -23376: template -23376: int -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: compare(size_type __pos, size_type __n, const basic_string& __str) const -23376: { -23376: _M_check(__pos, "basic_string::compare"); -23376: __n = _M_limit(__pos, __n); -23376: const size_type __osize = __str.size(); -23376: const size_type __len = std::min(__n, __osize); -23376: int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); -23376: if (!__r) -23376: __r = _S_compare(__n, __osize); -23376: return __r; -23376: } -23376: -23376: template -23376: int -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: compare(size_type __pos1, size_type __n1, const basic_string& __str, -23376: size_type __pos2, size_type __n2) const -23376: { -23376: _M_check(__pos1, "basic_string::compare"); -23376: __str._M_check(__pos2, "basic_string::compare"); -23376: __n1 = _M_limit(__pos1, __n1); -23376: __n2 = __str._M_limit(__pos2, __n2); -23376: const size_type __len = std::min(__n1, __n2); -23376: int __r = traits_type::compare(_M_data() + __pos1, -23376: __str.data() + __pos2, __len); -23376: if (!__r) -23376: __r = _S_compare(__n1, __n2); -23376: return __r; -23376: } -23376: -23376: template -23376: int -23376: basic_string<_CharT, _Traits, _Alloc>:: -23376: compare(const _CharT* __s) const noexcept -23376: { -23376: ; -23376: const size_type __size = this->size(); -23376: const size_type __osize = traits_type::length(__s); -23376: const size_type __len = std::min(__size, __osize); -23376: int __r = traits_type::compare(_M_data(), __s, __len); -23376: if (!__r) -23376: __r = _S_compare(__size, __osize); -23376: return __r; -23376: } -23376: -23376: template -23376: int -23376: basic_string <_CharT, _Traits, _Alloc>:: -23376: compare(size_type __pos, size_type __n1, const _CharT* __s) const -23376: { -23376: ; -23376: _M_check(__pos, "basic_string::compare"); -23376: __n1 = _M_limit(__pos, __n1); -23376: const size_type __osize = traits_type::length(__s); -23376: const size_type __len = std::min(__n1, __osize); -23376: int __r = traits_type::compare(_M_data() + __pos, __s, __len); -23376: if (!__r) -23376: __r = _S_compare(__n1, __osize); -23376: return __r; -23376: } -23376: -23376: template -23376: int -23376: basic_string <_CharT, _Traits, _Alloc>:: -23376: compare(size_type __pos, size_type __n1, const _CharT* __s, -23376: size_type __n2) const -23376: { -23376: ; -23376: _M_check(__pos, "basic_string::compare"); -23376: __n1 = _M_limit(__pos, __n1); -23376: const size_type __len = std::min(__n1, __n2); -23376: int __r = traits_type::compare(_M_data() + __pos, __s, __len); -23376: if (!__r) -23376: __r = _S_compare(__n1, __n2); -23376: return __r; -23376: } -23376: -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __in, -23376: basic_string<_CharT, _Traits, _Alloc>& __str) -23376: { -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef typename __istream_type::ios_base __ios_base; -23376: typedef typename __istream_type::int_type __int_type; -23376: typedef typename __string_type::size_type __size_type; -23376: typedef ctype<_CharT> __ctype_type; -23376: typedef typename __ctype_type::ctype_base __ctype_base; -23376: -23376: __size_type __extracted = 0; -23376: typename __ios_base::iostate __err = __ios_base::goodbit; -23376: typename __istream_type::sentry __cerb(__in, false); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: -23376: __str.erase(); -23376: _CharT __buf[128]; -23376: __size_type __len = 0; -23376: const streamsize __w = __in.width(); -23376: const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) -23376: : __str.max_size(); -23376: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); -23376: const __int_type __eof = _Traits::eof(); -23376: __int_type __c = __in.rdbuf()->sgetc(); -23376: -23376: while (__extracted < __n -23376: && !_Traits::eq_int_type(__c, __eof) -23376: && !__ct.is(__ctype_base::space, -23376: _Traits::to_char_type(__c))) -23376: { -23376: if (__len == sizeof(__buf) / sizeof(_CharT)) -23376: { -23376: __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); -23376: __len = 0; -23376: } -23376: __buf[__len++] = _Traits::to_char_type(__c); -23376: ++__extracted; -23376: __c = __in.rdbuf()->snextc(); -23376: } -23376: __str.append(__buf, __len); -23376: -23376: if (_Traits::eq_int_type(__c, __eof)) -23376: __err |= __ios_base::eofbit; -23376: __in.width(0); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __in._M_setstate(__ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { -23376: -23376: -23376: -23376: __in._M_setstate(__ios_base::badbit); -23376: } -23376: } -23376: -23376: if (!__extracted) -23376: __err |= __ios_base::failbit; -23376: if (__err) -23376: __in.setstate(__err); -23376: return __in; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: getline(basic_istream<_CharT, _Traits>& __in, -23376: basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) -23376: { -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef typename __istream_type::ios_base __ios_base; -23376: typedef typename __istream_type::int_type __int_type; -23376: typedef typename __string_type::size_type __size_type; -23376: -23376: __size_type __extracted = 0; -23376: const __size_type __n = __str.max_size(); -23376: typename __ios_base::iostate __err = __ios_base::goodbit; -23376: typename __istream_type::sentry __cerb(__in, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: __str.erase(); -23376: const __int_type __idelim = _Traits::to_int_type(__delim); -23376: const __int_type __eof = _Traits::eof(); -23376: __int_type __c = __in.rdbuf()->sgetc(); -23376: -23376: while (__extracted < __n -23376: && !_Traits::eq_int_type(__c, __eof) -23376: && !_Traits::eq_int_type(__c, __idelim)) -23376: { -23376: __str += _Traits::to_char_type(__c); -23376: ++__extracted; -23376: __c = __in.rdbuf()->snextc(); -23376: } -23376: -23376: if (_Traits::eq_int_type(__c, __eof)) -23376: __err |= __ios_base::eofbit; -23376: else if (_Traits::eq_int_type(__c, __idelim)) -23376: { -23376: ++__extracted; -23376: __in.rdbuf()->sbumpc(); -23376: } -23376: else -23376: __err |= __ios_base::failbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __in._M_setstate(__ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { -23376: -23376: -23376: -23376: __in._M_setstate(__ios_base::badbit); -23376: } -23376: } -23376: if (!__extracted) -23376: __err |= __ios_base::failbit; -23376: if (__err) -23376: __in.setstate(__err); -23376: return __in; -23376: } -23376: # 1607 "/usr/include/c++/8/bits/basic_string.tcc" 3 -23376: extern template class basic_string; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern template -23376: basic_istream& -23376: operator>>(basic_istream&, string&); -23376: extern template -23376: basic_ostream& -23376: operator<<(basic_ostream&, const string&); -23376: extern template -23376: basic_istream& -23376: getline(basic_istream&, string&, char); -23376: extern template -23376: basic_istream& -23376: getline(basic_istream&, string&); -23376: -23376: -23376: -23376: extern template class basic_string; -23376: -23376: -23376: -23376: -23376: -23376: extern template -23376: basic_istream& -23376: operator>>(basic_istream&, wstring&); -23376: extern template -23376: basic_ostream& -23376: operator<<(basic_ostream&, const wstring&); -23376: extern template -23376: basic_istream& -23376: getline(basic_istream&, wstring&, wchar_t); -23376: extern template -23376: basic_istream& -23376: getline(basic_istream&, wstring&); -23376: -23376: -23376: -23376: -23376: } -23376: # 54 "/usr/include/c++/8/string" 2 3 -23376: # 41 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/stdexcept" 1 3 4 -23376: # 36 "/usr/include/c++/8/stdexcept" 3 4 -23376: -23376: # 37 "/usr/include/c++/8/stdexcept" 3 -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: struct __cow_string -23376: { -23376: union { -23376: const char* _M_p; -23376: char _M_bytes[sizeof(const char*)]; -23376: }; -23376: -23376: __cow_string(); -23376: __cow_string(const std::string&); -23376: __cow_string(const char*, size_t); -23376: __cow_string(const __cow_string&) noexcept; -23376: __cow_string& operator=(const __cow_string&) noexcept; -23376: ~__cow_string(); -23376: -23376: __cow_string(__cow_string&&) noexcept; -23376: __cow_string& operator=(__cow_string&&) noexcept; -23376: -23376: }; -23376: -23376: typedef basic_string __sso_string; -23376: # 113 "/usr/include/c++/8/stdexcept" 3 -23376: class logic_error : public exception -23376: { -23376: __cow_string _M_msg; -23376: -23376: public: -23376: -23376: explicit -23376: logic_error(const string& __arg) ; -23376: -23376: -23376: explicit -23376: logic_error(const char*) ; -23376: -23376: -23376: -23376: logic_error(const logic_error&) noexcept; -23376: logic_error& operator=(const logic_error&) noexcept; -23376: -23376: -23376: virtual ~logic_error() noexcept; -23376: -23376: -23376: -23376: virtual const char* -23376: what() const noexcept; -23376: -23376: -23376: -23376: -23376: -23376: }; -23376: -23376: -23376: -23376: class domain_error : public logic_error -23376: { -23376: public: -23376: explicit domain_error(const string& __arg) ; -23376: -23376: explicit domain_error(const char*) ; -23376: -23376: virtual ~domain_error() noexcept; -23376: }; -23376: -23376: -23376: class invalid_argument : public logic_error -23376: { -23376: public: -23376: explicit invalid_argument(const string& __arg) ; -23376: -23376: explicit invalid_argument(const char*) ; -23376: -23376: virtual ~invalid_argument() noexcept; -23376: }; -23376: -23376: -23376: -23376: class length_error : public logic_error -23376: { -23376: public: -23376: explicit length_error(const string& __arg) ; -23376: -23376: explicit length_error(const char*) ; -23376: -23376: virtual ~length_error() noexcept; -23376: }; -23376: -23376: -23376: -23376: class out_of_range : public logic_error -23376: { -23376: public: -23376: explicit out_of_range(const string& __arg) ; -23376: -23376: explicit out_of_range(const char*) ; -23376: -23376: virtual ~out_of_range() noexcept; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: class runtime_error : public exception -23376: { -23376: __cow_string _M_msg; -23376: -23376: public: -23376: -23376: explicit -23376: runtime_error(const string& __arg) ; -23376: -23376: -23376: explicit -23376: runtime_error(const char*) ; -23376: -23376: -23376: -23376: runtime_error(const runtime_error&) noexcept; -23376: runtime_error& operator=(const runtime_error&) noexcept; -23376: -23376: -23376: virtual ~runtime_error() noexcept; -23376: -23376: -23376: -23376: virtual const char* -23376: what() const noexcept; -23376: -23376: -23376: -23376: -23376: -23376: }; -23376: -23376: -23376: class range_error : public runtime_error -23376: { -23376: public: -23376: explicit range_error(const string& __arg) ; -23376: -23376: explicit range_error(const char*) ; -23376: -23376: virtual ~range_error() noexcept; -23376: }; -23376: -23376: -23376: class overflow_error : public runtime_error -23376: { -23376: public: -23376: explicit overflow_error(const string& __arg) ; -23376: -23376: explicit overflow_error(const char*) ; -23376: -23376: virtual ~overflow_error() noexcept; -23376: }; -23376: -23376: -23376: class underflow_error : public runtime_error -23376: { -23376: public: -23376: explicit underflow_error(const string& __arg) ; -23376: -23376: explicit underflow_error(const char*) ; -23376: -23376: virtual ~underflow_error() noexcept; -23376: }; -23376: -23376: -23376: -23376: -23376: } -23376: # 42 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/c++/8/cfloat" 1 3 4 -23376: # 39 "/usr/include/c++/8/cfloat" 3 4 -23376: -23376: # 40 "/usr/include/c++/8/cfloat" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/float.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/cfloat" 2 3 -23376: # 43 "/usr/include/gmpxx.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/gmp.h" 1 3 4 -23376: # 35 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: # 1 "/usr/include/c++/8/cstdio" 1 3 4 -23376: # 39 "/usr/include/c++/8/cstdio" 3 4 -23376: -23376: # 40 "/usr/include/c++/8/cstdio" 3 -23376: # 36 "/usr/include/arm-linux-gnueabihf/gmp.h" 2 3 4 -23376: # 55 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 56 "/usr/include/arm-linux-gnueabihf/gmp.h" 2 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 34 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 3 4 -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/syslimits.h" 1 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 194 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 3 4 -23376: # 1 "/usr/include/limits.h" 1 3 4 -23376: # 26 "/usr/include/limits.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 27 "/usr/include/limits.h" 2 3 4 -23376: # 183 "/usr/include/limits.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wordsize.h" 1 3 4 -23376: # 28 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 -23376: # 161 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 1 3 4 -23376: # 38 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 3 4 -23376: # 1 "/usr/include/linux/limits.h" 1 3 4 -23376: # 39 "/usr/include/arm-linux-gnueabihf/bits/local_lim.h" 2 3 4 -23376: # 162 "/usr/include/arm-linux-gnueabihf/bits/posix1_lim.h" 2 3 4 -23376: # 184 "/usr/include/limits.h" 2 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/posix2_lim.h" 1 3 4 -23376: # 188 "/usr/include/limits.h" 2 3 4 -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 1 3 4 -23376: # 64 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/uio_lim.h" 1 3 4 -23376: # 65 "/usr/include/arm-linux-gnueabihf/bits/xopen_lim.h" 2 3 4 -23376: # 192 "/usr/include/limits.h" 2 3 4 -23376: # 195 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 2 3 4 -23376: # 8 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/syslimits.h" 2 3 4 -23376: # 35 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 2 3 4 -23376: # 57 "/usr/include/arm-linux-gnueabihf/gmp.h" 2 3 4 -23376: # 141 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: typedef unsigned long int mp_limb_t; -23376: typedef long int mp_limb_signed_t; -23376: -23376: -23376: typedef unsigned long int mp_bitcnt_t; -23376: -23376: -23376: -23376: -23376: typedef struct -23376: { -23376: int _mp_alloc; -23376: -23376: int _mp_size; -23376: -23376: -23376: mp_limb_t *_mp_d; -23376: } __mpz_struct; -23376: -23376: -23376: -23376: -23376: typedef __mpz_struct MP_INT; -23376: typedef __mpz_struct mpz_t[1]; -23376: -23376: typedef mp_limb_t * mp_ptr; -23376: typedef const mp_limb_t * mp_srcptr; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef long int mp_size_t; -23376: typedef long int mp_exp_t; -23376: -23376: -23376: typedef struct -23376: { -23376: __mpz_struct _mp_num; -23376: __mpz_struct _mp_den; -23376: } __mpq_struct; -23376: -23376: typedef __mpq_struct MP_RAT; -23376: typedef __mpq_struct mpq_t[1]; -23376: -23376: typedef struct -23376: { -23376: int _mp_prec; -23376: -23376: -23376: -23376: int _mp_size; -23376: -23376: -23376: mp_exp_t _mp_exp; -23376: mp_limb_t *_mp_d; -23376: } __mpf_struct; -23376: -23376: -23376: typedef __mpf_struct mpf_t[1]; -23376: -23376: -23376: typedef enum -23376: { -23376: GMP_RAND_ALG_DEFAULT = 0, -23376: GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT -23376: } gmp_randalg_t; -23376: -23376: -23376: typedef struct -23376: { -23376: mpz_t _mp_seed; -23376: gmp_randalg_t _mp_alg; -23376: union { -23376: void *_mp_lc; -23376: } _mp_algdata; -23376: } __gmp_randstate_struct; -23376: typedef __gmp_randstate_struct gmp_randstate_t[1]; -23376: -23376: -23376: -23376: typedef const __mpz_struct *mpz_srcptr; -23376: typedef __mpz_struct *mpz_ptr; -23376: typedef const __mpf_struct *mpf_srcptr; -23376: typedef __mpf_struct *mpf_ptr; -23376: typedef const __mpq_struct *mpq_srcptr; -23376: typedef __mpq_struct *mpq_ptr; -23376: # 468 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: extern "C" { -23376: using std::FILE; -23376: -23376: -23376: -23376: void __gmp_set_memory_functions (void *(*) (size_t), -23376: void *(*) (void *, size_t, size_t), -23376: void (*) (void *, size_t)) throw (); -23376: -23376: -23376: void __gmp_get_memory_functions (void *(**) (size_t), -23376: void *(**) (void *, size_t, size_t), -23376: void (**) (void *, size_t)) throw (); -23376: -23376: -23376: extern const int __gmp_bits_per_limb; -23376: -23376: -23376: extern int __gmp_errno; -23376: -23376: -23376: extern const char * const __gmp_version; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void __gmp_randinit (gmp_randstate_t, gmp_randalg_t, ...); -23376: -23376: -23376: void __gmp_randinit_default (gmp_randstate_t); -23376: -23376: -23376: void __gmp_randinit_lc_2exp (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t); -23376: -23376: -23376: int __gmp_randinit_lc_2exp_size (gmp_randstate_t, mp_bitcnt_t); -23376: -23376: -23376: void __gmp_randinit_mt (gmp_randstate_t); -23376: -23376: -23376: void __gmp_randinit_set (gmp_randstate_t, const __gmp_randstate_struct *); -23376: -23376: -23376: void __gmp_randseed (gmp_randstate_t, mpz_srcptr); -23376: -23376: -23376: void __gmp_randseed_ui (gmp_randstate_t, unsigned long int); -23376: -23376: -23376: void __gmp_randclear (gmp_randstate_t); -23376: -23376: -23376: unsigned long __gmp_urandomb_ui (gmp_randstate_t, unsigned long); -23376: -23376: -23376: unsigned long __gmp_urandomm_ui (gmp_randstate_t, unsigned long); -23376: -23376: -23376: -23376: -23376: -23376: int __gmp_asprintf (char **, const char *, ...); -23376: -23376: -23376: -23376: int __gmp_fprintf (FILE *, const char *, ...); -23376: # 550 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: int __gmp_printf (const char *, ...); -23376: -23376: -23376: int __gmp_snprintf (char *, size_t, const char *, ...); -23376: -23376: -23376: int __gmp_sprintf (char *, const char *, ...); -23376: # 588 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: int __gmp_fscanf (FILE *, const char *, ...); -23376: -23376: -23376: -23376: int __gmp_scanf (const char *, ...); -23376: -23376: -23376: int __gmp_sscanf (const char *, const char *, ...); -23376: # 617 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: void *__gmpz_realloc (mpz_ptr, mp_size_t); -23376: -23376: -23376: -23376: void __gmpz_abs (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: -23376: void __gmpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_array_init (mpz_ptr, mp_size_t, mp_size_t); -23376: -23376: -23376: void __gmpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int); -23376: -23376: -23376: void __gmpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: unsigned long int __gmpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: unsigned long int __gmpz_cdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_clear (mpz_ptr); -23376: -23376: -23376: void __gmpz_clears (mpz_ptr, ...); -23376: -23376: -23376: void __gmpz_clrbit (mpz_ptr, mp_bitcnt_t); -23376: -23376: -23376: int __gmpz_cmp (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmp_d (mpz_srcptr, double) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmp_si (mpz_srcptr, signed long int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmp_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmpabs (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmpabs_d (mpz_srcptr, double) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_cmpabs_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_com (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_combit (mpz_ptr, mp_bitcnt_t); -23376: -23376: -23376: int __gmpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long); -23376: -23376: -23376: int __gmpz_divisible_p (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_divisible_ui_p (mpz_srcptr, unsigned long) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_dump (mpz_srcptr); -23376: -23376: -23376: void *__gmpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr); -23376: -23376: -23376: void __gmpz_fac_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_2fac_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int); -23376: -23376: -23376: void __gmpz_primorial_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: unsigned long int __gmpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: unsigned long int __gmpz_fdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_fib_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int); -23376: -23376: -23376: int __gmpz_fits_sint_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_fits_slong_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_fits_sshort_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: int __gmpz_fits_uint_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: int __gmpz_fits_ulong_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: int __gmpz_fits_ushort_p (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: void __gmpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: unsigned long int __gmpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: double __gmpz_get_d (mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: double __gmpz_get_d_2exp (signed long int *, mpz_srcptr); -23376: -23376: -23376: long int __gmpz_get_si (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: char *__gmpz_get_str (char *, int, mpz_srcptr); -23376: -23376: -23376: -23376: unsigned long int __gmpz_get_ui (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: mp_limb_t __gmpz_getlimbn (mpz_srcptr, mp_size_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: mp_bitcnt_t __gmpz_hamdist (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *); -23376: -23376: -23376: void __gmpz_init (mpz_ptr); -23376: -23376: -23376: void __gmpz_init2 (mpz_ptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpz_inits (mpz_ptr, ...); -23376: -23376: -23376: void __gmpz_init_set (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_init_set_d (mpz_ptr, double); -23376: -23376: -23376: void __gmpz_init_set_si (mpz_ptr, signed long int); -23376: -23376: -23376: int __gmpz_init_set_str (mpz_ptr, const char *, int); -23376: -23376: -23376: void __gmpz_init_set_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: -23376: size_t __gmpz_inp_raw (mpz_ptr, FILE *); -23376: -23376: -23376: -23376: -23376: size_t __gmpz_inp_str (mpz_ptr, FILE *, int); -23376: -23376: -23376: -23376: int __gmpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: int __gmpz_jacobi (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: int __gmpz_kronecker_si (mpz_srcptr, long) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_kronecker_ui (mpz_srcptr, unsigned long) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_si_kronecker (long, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpz_ui_kronecker (unsigned long, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long); -23376: -23376: -23376: -23376: -23376: void __gmpz_lucnum_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int); -23376: -23376: -23376: int __gmpz_millerrabin (mpz_srcptr, int) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: -23376: -23376: void __gmpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpz_mul_si (mpz_ptr, mpz_srcptr, long int); -23376: -23376: -23376: void __gmpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: -23376: void __gmpz_neg (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: -23376: void __gmpz_nextprime (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: -23376: size_t __gmpz_out_raw (FILE *, mpz_srcptr); -23376: -23376: -23376: -23376: -23376: size_t __gmpz_out_str (FILE *, int, mpz_srcptr); -23376: -23376: -23376: -23376: int __gmpz_perfect_power_p (mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: int __gmpz_perfect_square_p (mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: mp_bitcnt_t __gmpz_popcount (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: void __gmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr); -23376: -23376: -23376: int __gmpz_probab_prime_p (mpz_srcptr, int) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_random (mpz_ptr, mp_size_t); -23376: -23376: -23376: void __gmpz_random2 (mpz_ptr, mp_size_t); -23376: -23376: -23376: void __gmpz_realloc2 (mpz_ptr, mp_bitcnt_t); -23376: -23376: -23376: mp_bitcnt_t __gmpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: int __gmpz_root (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_rrandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t); -23376: -23376: -23376: mp_bitcnt_t __gmpz_scan0 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: mp_bitcnt_t __gmpz_scan1 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_set (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_set_d (mpz_ptr, double); -23376: -23376: -23376: void __gmpz_set_f (mpz_ptr, mpf_srcptr); -23376: -23376: -23376: -23376: void __gmpz_set_q (mpz_ptr, mpq_srcptr); -23376: -23376: -23376: -23376: void __gmpz_set_si (mpz_ptr, signed long int); -23376: -23376: -23376: int __gmpz_set_str (mpz_ptr, const char *, int); -23376: -23376: -23376: void __gmpz_set_ui (mpz_ptr, unsigned long int); -23376: -23376: -23376: void __gmpz_setbit (mpz_ptr, mp_bitcnt_t); -23376: -23376: -23376: -23376: size_t __gmpz_size (mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: size_t __gmpz_sizeinbase (mpz_srcptr, int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_sqrt (mpz_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr); -23376: -23376: -23376: void __gmpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_swap (mpz_ptr, mpz_ptr) throw (); -23376: -23376: -23376: unsigned long int __gmpz_tdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: unsigned long int __gmpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: void __gmpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t); -23376: -23376: -23376: unsigned long int __gmpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int); -23376: -23376: -23376: int __gmpz_tstbit (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int); -23376: -23376: -23376: void __gmpz_urandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t); -23376: -23376: -23376: void __gmpz_urandomm (mpz_ptr, gmp_randstate_t, mpz_srcptr); -23376: -23376: -23376: -23376: void __gmpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr); -23376: -23376: -23376: mp_srcptr __gmpz_limbs_read (mpz_srcptr); -23376: -23376: -23376: mp_ptr __gmpz_limbs_write (mpz_ptr, mp_size_t); -23376: -23376: -23376: mp_ptr __gmpz_limbs_modify (mpz_ptr, mp_size_t); -23376: -23376: -23376: void __gmpz_limbs_finish (mpz_ptr, mp_size_t); -23376: -23376: -23376: mpz_srcptr __gmpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void __gmpq_abs (mpq_ptr, mpq_srcptr); -23376: -23376: -23376: -23376: void __gmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_canonicalize (mpq_ptr); -23376: -23376: -23376: void __gmpq_clear (mpq_ptr); -23376: -23376: -23376: void __gmpq_clears (mpq_ptr, ...); -23376: -23376: -23376: int __gmpq_cmp (mpq_srcptr, mpq_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpq_cmp_si (mpq_srcptr, long, unsigned long) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpq_cmp_z (mpq_srcptr, mpz_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); -23376: -23376: -23376: int __gmpq_equal (mpq_srcptr, mpq_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpq_get_num (mpz_ptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_get_den (mpz_ptr, mpq_srcptr); -23376: -23376: -23376: double __gmpq_get_d (mpq_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: char *__gmpq_get_str (char *, int, mpq_srcptr); -23376: -23376: -23376: void __gmpq_init (mpq_ptr); -23376: -23376: -23376: void __gmpq_inits (mpq_ptr, ...); -23376: -23376: -23376: -23376: size_t __gmpq_inp_str (mpq_ptr, FILE *, int); -23376: -23376: -23376: -23376: void __gmpq_inv (mpq_ptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t); -23376: -23376: -23376: -23376: void __gmpq_neg (mpq_ptr, mpq_srcptr); -23376: -23376: -23376: -23376: -23376: size_t __gmpq_out_str (FILE *, int, mpq_srcptr); -23376: -23376: -23376: -23376: void __gmpq_set (mpq_ptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_set_d (mpq_ptr, double); -23376: -23376: -23376: void __gmpq_set_den (mpq_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpq_set_f (mpq_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpq_set_num (mpq_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpq_set_si (mpq_ptr, signed long int, unsigned long int); -23376: -23376: -23376: int __gmpq_set_str (mpq_ptr, const char *, int); -23376: -23376: -23376: void __gmpq_set_ui (mpq_ptr, unsigned long int, unsigned long int); -23376: -23376: -23376: void __gmpq_set_z (mpq_ptr, mpz_srcptr); -23376: -23376: -23376: void __gmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr); -23376: -23376: -23376: void __gmpq_swap (mpq_ptr, mpq_ptr) throw (); -23376: -23376: -23376: -23376: -23376: -23376: void __gmpf_abs (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int); -23376: -23376: void __gmpf_ceil (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_clear (mpf_ptr); -23376: -23376: -23376: void __gmpf_clears (mpf_ptr, ...); -23376: -23376: -23376: int __gmpf_cmp (mpf_srcptr, mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_cmp_z (mpf_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_cmp_d (mpf_srcptr, double) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_cmp_si (mpf_srcptr, signed long int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_cmp_ui (mpf_srcptr, unsigned long int) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpf_dump (mpf_srcptr); -23376: -23376: -23376: int __gmpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_sint_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_slong_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_sshort_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_uint_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_ulong_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpf_fits_ushort_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpf_floor (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: double __gmpf_get_d (mpf_srcptr) __attribute__ ((__pure__)); -23376: -23376: -23376: double __gmpf_get_d_2exp (signed long int *, mpf_srcptr); -23376: -23376: -23376: mp_bitcnt_t __gmpf_get_default_prec (void) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: mp_bitcnt_t __gmpf_get_prec (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: long __gmpf_get_si (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: char *__gmpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr); -23376: -23376: -23376: unsigned long __gmpf_get_ui (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpf_init (mpf_ptr); -23376: -23376: -23376: void __gmpf_init2 (mpf_ptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpf_inits (mpf_ptr, ...); -23376: -23376: -23376: void __gmpf_init_set (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_init_set_d (mpf_ptr, double); -23376: -23376: -23376: void __gmpf_init_set_si (mpf_ptr, signed long int); -23376: -23376: -23376: int __gmpf_init_set_str (mpf_ptr, const char *, int); -23376: -23376: -23376: void __gmpf_init_set_ui (mpf_ptr, unsigned long int); -23376: -23376: -23376: -23376: size_t __gmpf_inp_str (mpf_ptr, FILE *, int); -23376: -23376: -23376: -23376: int __gmpf_integer_p (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpf_neg (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: -23376: size_t __gmpf_out_str (FILE *, int, size_t, mpf_srcptr); -23376: -23376: -23376: -23376: void __gmpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpf_random2 (mpf_ptr, mp_size_t, mp_exp_t); -23376: -23376: -23376: void __gmpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_set (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_set_d (mpf_ptr, double); -23376: -23376: -23376: void __gmpf_set_default_prec (mp_bitcnt_t) throw (); -23376: -23376: -23376: void __gmpf_set_prec (mpf_ptr, mp_bitcnt_t); -23376: -23376: -23376: void __gmpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) throw (); -23376: -23376: -23376: void __gmpf_set_q (mpf_ptr, mpq_srcptr); -23376: -23376: -23376: void __gmpf_set_si (mpf_ptr, signed long int); -23376: -23376: -23376: int __gmpf_set_str (mpf_ptr, const char *, int); -23376: -23376: -23376: void __gmpf_set_ui (mpf_ptr, unsigned long int); -23376: -23376: -23376: void __gmpf_set_z (mpf_ptr, mpz_srcptr); -23376: -23376: -23376: size_t __gmpf_size (mpf_srcptr) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpf_sqrt (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_sqrt_ui (mpf_ptr, unsigned long int); -23376: -23376: -23376: void __gmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int); -23376: -23376: -23376: void __gmpf_swap (mpf_ptr, mpf_ptr) throw (); -23376: -23376: -23376: void __gmpf_trunc (mpf_ptr, mpf_srcptr); -23376: -23376: -23376: void __gmpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr); -23376: -23376: -23376: void __gmpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr); -23376: -23376: -23376: void __gmpf_urandomb (mpf_t, gmp_randstate_t, mp_bitcnt_t); -23376: # 1461 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: mp_limb_t __gmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: -23376: mp_limb_t __gmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw (); -23376: -23376: -23376: -23376: mp_limb_t __gmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: -23376: int __gmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: -23376: int __gmpn_zero_p (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: -23376: void __gmpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: -23376: -23376: -23376: mp_limb_t __gmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: -23376: -23376: -23376: mp_limb_t __gmpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: mp_limb_t __gmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr); -23376: -23376: -23376: mp_limb_t __gmpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: mp_limb_t __gmpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); -23376: -23376: -23376: mp_size_t __gmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_limb_t __gmpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t); -23376: -23376: -23376: mp_size_t __gmpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t); -23376: -23376: -23376: size_t __gmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); -23376: -23376: -23376: mp_bitcnt_t __gmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: mp_limb_t __gmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); -23376: -23376: -23376: mp_limb_t __gmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_limb_t __gmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: void __gmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: void __gmpn_sqr (mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: mp_limb_t __gmpn_neg (mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: void __gmpn_com (mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: int __gmpn_perfect_square_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpn_perfect_power_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_bitcnt_t __gmpn_popcount (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__)); -23376: -23376: -23376: mp_size_t __gmpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -23376: -23376: -23376: -23376: mp_limb_t __gmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpn_random (mp_ptr, mp_size_t); -23376: -23376: -23376: void __gmpn_random2 (mp_ptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int); -23376: -23376: -23376: mp_bitcnt_t __gmpn_scan0 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_bitcnt_t __gmpn_scan1 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_size_t __gmpn_set_str (mp_ptr, const unsigned char *, size_t, int); -23376: -23376: -23376: size_t __gmpn_sizeinbase (mp_srcptr, mp_size_t, int); -23376: -23376: -23376: mp_size_t __gmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: mp_limb_t __gmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -23376: -23376: -23376: -23376: -23376: mp_limb_t __gmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw (); -23376: -23376: -23376: -23376: mp_limb_t __gmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); -23376: -23376: -23376: void __gmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); -23376: -23376: -23376: void __gmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: void __gmpn_copyi (mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_copyd (mp_ptr, mp_srcptr, mp_size_t); -23376: -23376: void __gmpn_zero (mp_ptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: mp_limb_t __gmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_add_1_itch (mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: mp_limb_t __gmpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_sub_1_itch (mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t); -23376: -23376: -23376: void __gmpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_mul_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_sqr_itch (mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: void __gmpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t); -23376: -23376: -23376: mp_limb_t __gmpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_div_qr_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: void __gmpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_div_r_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__)); -23376: -23376: -23376: int __gmpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr); -23376: -23376: mp_size_t __gmpn_sec_invert_itch (mp_size_t) __attribute__ ((__pure__)); -23376: # 1707 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: extern __inline__ __attribute__ ((__gnu_inline__)) void -23376: __gmpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -23376: { -23376: if (__gmp_w != __gmp_u) -23376: __gmpz_set (__gmp_w, __gmp_u); -23376: __gmp_w->_mp_size = ((__gmp_w->_mp_size) >= 0 ? (__gmp_w->_mp_size) : -(__gmp_w->_mp_size)); -23376: } -23376: # 1731 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpz_fits_uint_p (mpz_srcptr __gmp_z) throw () -23376: { -23376: mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffff * 2U + 1U)));; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpz_fits_ulong_p (mpz_srcptr __gmp_z) throw () -23376: { -23376: mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffffL * 2UL + 1UL)));; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpz_fits_ushort_p (mpz_srcptr __gmp_z) throw () -23376: { -23376: mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fff * 2 + 1)));; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: unsigned long -23376: __gmpz_get_ui (mpz_srcptr __gmp_z) throw () -23376: { -23376: mp_ptr __gmp_p = __gmp_z->_mp_d; -23376: mp_size_t __gmp_n = __gmp_z->_mp_size; -23376: mp_limb_t __gmp_l = __gmp_p[0]; -23376: -23376: -23376: -23376: -23376: -23376: -23376: return (__gmp_n != 0 ? __gmp_l : 0); -23376: # 1787 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) throw () -23376: { -23376: mp_limb_t __gmp_result = 0; -23376: if (__builtin_expect ((__gmp_n >= 0 && __gmp_n < ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size))) != 0, 1)) -23376: __gmp_result = __gmp_z->_mp_d[__gmp_n]; -23376: return __gmp_result; -23376: } -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) void -23376: __gmpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -23376: { -23376: if (__gmp_w != __gmp_u) -23376: __gmpz_set (__gmp_w, __gmp_u); -23376: __gmp_w->_mp_size = - __gmp_w->_mp_size; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpz_perfect_square_p (mpz_srcptr __gmp_a) -23376: { -23376: mp_size_t __gmp_asize; -23376: int __gmp_result; -23376: -23376: __gmp_asize = __gmp_a->_mp_size; -23376: __gmp_result = (__gmp_asize >= 0); -23376: if (__builtin_expect ((__gmp_asize > 0) != 0, 1)) -23376: __gmp_result = __gmpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); -23376: return __gmp_result; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_bitcnt_t -23376: __gmpz_popcount (mpz_srcptr __gmp_u) throw () -23376: { -23376: mp_size_t __gmp_usize; -23376: mp_bitcnt_t __gmp_result; -23376: -23376: __gmp_usize = __gmp_u->_mp_size; -23376: __gmp_result = (__gmp_usize < 0 ? (0x7fffffffL * 2UL + 1UL) : 0); -23376: if (__builtin_expect ((__gmp_usize > 0) != 0, 1)) -23376: __gmp_result = __gmpn_popcount (__gmp_u->_mp_d, __gmp_usize); -23376: return __gmp_result; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: void -23376: __gmpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) -23376: { -23376: __gmpz_tdiv_q (__gmp_w, (&((__gmp_u)->_mp_num)), (&((__gmp_u)->_mp_den))); -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: size_t -23376: __gmpz_size (mpz_srcptr __gmp_z) throw () -23376: { -23376: return ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) void -23376: __gmpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -23376: { -23376: if (__gmp_w != __gmp_u) -23376: __gmpq_set (__gmp_w, __gmp_u); -23376: __gmp_w->_mp_num._mp_size = ((__gmp_w->_mp_num._mp_size) >= 0 ? (__gmp_w->_mp_num._mp_size) : -(__gmp_w->_mp_num._mp_size)); -23376: } -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) void -23376: __gmpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -23376: { -23376: if (__gmp_w != __gmp_u) -23376: __gmpq_set (__gmp_w, __gmp_u); -23376: __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; -23376: } -23376: # 2129 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -23376: { -23376: mp_limb_t __gmp_c; -23376: do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_add_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x + 1) & ((~ (static_cast (0))) >> 0)) == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0); -23376: return __gmp_c; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw () -23376: { -23376: mp_limb_t __gmp_c; -23376: do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x + (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_r) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x + 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_r) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0); -23376: return __gmp_c; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) throw () -23376: { -23376: int __gmp_result; -23376: do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_y; (__gmp_result) = 0; __gmp_i = (__gmp_size); while (--__gmp_i >= 0) { __gmp_x = (__gmp_xp)[__gmp_i]; __gmp_y = (__gmp_yp)[__gmp_i]; if (__gmp_x != __gmp_y) { (__gmp_result) = (__gmp_x > __gmp_y ? 1 : -1); break; } } } while (0); -23376: return __gmp_result; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: int -23376: __gmpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) throw () -23376: { -23376: -23376: do { -23376: if (__gmp_p[--__gmp_n] != 0) -23376: return 0; -23376: } while (__gmp_n != 0); -23376: return 1; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -23376: { -23376: mp_limb_t __gmp_c; -23376: do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_sub_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x - 1) & ((~ (static_cast (0))) >> 0)), __gmp_x == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0); -23376: return __gmp_c; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw () -23376: { -23376: mp_limb_t __gmp_c; -23376: do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x - (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_x) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x - 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_x) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0); -23376: return __gmp_c; -23376: } -23376: -23376: -23376: -23376: -23376: extern __inline__ __attribute__ ((__gnu_inline__)) -23376: -23376: mp_limb_t -23376: __gmpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) -23376: { -23376: while (*__gmp_up == 0) -23376: { -23376: *__gmp_rp = 0; -23376: if (!--__gmp_n) -23376: return 0; -23376: ++__gmp_up; ++__gmp_rp; -23376: } -23376: -23376: *__gmp_rp = (- *__gmp_up) & ((~ (static_cast (0))) >> 0); -23376: -23376: if (--__gmp_n) -23376: __gmpn_com (++__gmp_rp, ++__gmp_up, __gmp_n); -23376: -23376: return 1; -23376: } -23376: -23376: -23376: -23376: } -23376: # 2278 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: std::ostream& operator<< (std::ostream &, mpz_srcptr); -23376: std::ostream& operator<< (std::ostream &, mpq_srcptr); -23376: std::ostream& operator<< (std::ostream &, mpf_srcptr); -23376: std::istream& operator>> (std::istream &, mpz_ptr); -23376: std::istream& operator>> (std::istream &, mpq_ptr); -23376: std::istream& operator>> (std::istream &, mpf_ptr); -23376: # 2309 "/usr/include/arm-linux-gnueabihf/gmp.h" 3 4 -23376: enum -23376: { -23376: GMP_ERROR_NONE = 0, -23376: GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, -23376: GMP_ERROR_DIVISION_BY_ZERO = 2, -23376: GMP_ERROR_SQRT_OF_NEGATIVE = 4, -23376: GMP_ERROR_INVALID_ARGUMENT = 8 -23376: }; -23376: # 44 "/usr/include/gmpxx.h" 2 3 4 -23376: # 85 "/usr/include/gmpxx.h" 3 4 -23376: inline void __mpz_set_ui_safe(mpz_ptr p, unsigned long l) -23376: { -23376: p->_mp_size = (l != 0); -23376: p->_mp_d[0] = l & ((~ (static_cast (0))) >> 0); -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: inline void __mpz_set_si_safe(mpz_ptr p, long l) -23376: { -23376: if(l < 0) -23376: { -23376: __mpz_set_ui_safe(p, -static_cast(l)); -23376: __gmpz_neg(p, p); -23376: } -23376: else -23376: __mpz_set_ui_safe(p, l); -23376: -23376: } -23376: # 151 "/usr/include/gmpxx.h" 3 4 -23376: inline unsigned long __gmpxx_abs_ui (signed long l) -23376: { -23376: return l >= 0 ? static_cast(l) -23376: : -static_cast(l); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct __gmp_unary_plus -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_set(z, w); } -23376: static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_set(q, r); } -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_set(f, g); } -23376: }; -23376: -23376: struct __gmp_unary_minus -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_neg(z, w); } -23376: static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_neg(q, r); } -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_neg(f, g); } -23376: }; -23376: -23376: struct __gmp_unary_com -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_com(z, w); } -23376: }; -23376: -23376: struct __gmp_binary_plus -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_add(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { -23376: -23376: -23376: if (__builtin_constant_p(l) && l == 0) -23376: { -23376: if (z != w) __gmpz_set(z, w); -23376: } -23376: else -23376: __gmpz_add_ui(z, w, l); -23376: } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { -23376: if (l >= 0) -23376: eval(z, w, static_cast(l)); -23376: else -23376: __gmpz_sub_ui(z, w, -static_cast(l)); -23376: } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_add (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) -23376: { __gmpq_add(q, r, s); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) -23376: { -23376: if (__builtin_constant_p(l) && l == 0) -23376: { -23376: if (q != r) __gmpq_set(q, r); -23376: } -23376: else -23376: { -23376: if (q == r) -23376: __gmpz_addmul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l); -23376: else -23376: { -23376: __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l); -23376: __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num))); -23376: __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den))); -23376: } -23376: } -23376: } -23376: static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) -23376: { eval(q, r, l); } -23376: static inline void eval(mpq_ptr q, mpq_srcptr r, signed long int l); -23376: -23376: static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) -23376: { eval(q, r, l); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_add (q, r, temp); } -23376: static void eval(mpq_ptr q, double d, mpq_srcptr r) -23376: { eval(q, r, d); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) -23376: { -23376: if (q == r) -23376: __gmpz_addmul((&((q)->_mp_num)), (&((q)->_mp_den)), z); -23376: else -23376: { -23376: __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z); -23376: __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num))); -23376: __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den))); -23376: } -23376: } -23376: static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) -23376: { eval(q, r, z); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) -23376: { __gmpf_add(f, g, h); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) -23376: { __gmpf_add_ui(f, g, l); } -23376: static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) -23376: { __gmpf_add_ui(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) -23376: { -23376: if (l >= 0) -23376: __gmpf_add_ui(f, g, l); -23376: else -23376: __gmpf_sub_ui(f, g, -static_cast(l)); -23376: } -23376: static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) -23376: { eval(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, double d) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_add(f, g, temp); -23376: __gmpf_clear(temp); -23376: } -23376: static void eval(mpf_ptr f, double d, mpf_srcptr g) -23376: { eval(f, g, d); } -23376: }; -23376: -23376: struct __gmp_binary_minus -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_sub(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { -23376: if (__builtin_constant_p(l) && l == 0) -23376: { -23376: if (z != w) __gmpz_set(z, w); -23376: } -23376: else -23376: __gmpz_sub_ui(z, w, l); -23376: } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { -23376: if (__builtin_constant_p(l) && l == 0) -23376: { -23376: __gmpz_neg(z, w); -23376: } -23376: else -23376: __gmpz_ui_sub(z, l, w); -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { -23376: if (l >= 0) -23376: eval(z, w, static_cast(l)); -23376: else -23376: __gmpz_add_ui(z, w, -static_cast(l)); -23376: } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { -23376: if (l >= 0) -23376: eval(z, static_cast(l), w); -23376: else -23376: { -23376: __gmpz_add_ui(z, w, -static_cast(l)); -23376: __gmpz_neg(z, z); -23376: } -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, temp, w); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) -23376: { __gmpq_sub(q, r, s); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) -23376: { -23376: if (__builtin_constant_p(l) && l == 0) -23376: { -23376: if (q != r) __gmpq_set(q, r); -23376: } -23376: else -23376: { -23376: if (q == r) -23376: __gmpz_submul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l); -23376: else -23376: { -23376: __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l); -23376: __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num))); -23376: __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den))); -23376: } -23376: } -23376: } -23376: static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) -23376: { eval(q, r, l); __gmpq_neg(q, q); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) -23376: { -23376: if (l >= 0) -23376: eval(q, r, static_cast(l)); -23376: else -23376: __gmp_binary_plus::eval(q, r, -static_cast(l)); -23376: } -23376: static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) -23376: { eval(q, r, l); __gmpq_neg(q, q); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, r, temp); } -23376: static void eval(mpq_ptr q, double d, mpq_srcptr r) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, temp, r); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z) -23376: { -23376: if (q == r) -23376: __gmpz_submul((&((q)->_mp_num)), (&((q)->_mp_den)), z); -23376: else -23376: { -23376: __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z); -23376: __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num))); -23376: __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den))); -23376: } -23376: } -23376: static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r) -23376: { eval(q, r, z); __gmpq_neg(q, q); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) -23376: { __gmpf_sub(f, g, h); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) -23376: { __gmpf_sub_ui(f, g, l); } -23376: static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) -23376: { __gmpf_ui_sub(f, l, g); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) -23376: { -23376: if (l >= 0) -23376: __gmpf_sub_ui(f, g, l); -23376: else -23376: __gmpf_add_ui(f, g, -static_cast(l)); -23376: } -23376: static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) -23376: { -23376: if (l >= 0) -23376: __gmpf_sub_ui(f, g, l); -23376: else -23376: __gmpf_add_ui(f, g, -static_cast(l)); -23376: __gmpf_neg(f, f); -23376: } -23376: static void eval(mpf_ptr f, mpf_srcptr g, double d) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_sub(f, g, temp); -23376: __gmpf_clear(temp); -23376: } -23376: static void eval(mpf_ptr f, double d, mpf_srcptr g) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_sub(f, temp, g); -23376: __gmpf_clear(temp); -23376: } -23376: }; -23376: -23376: -23376: inline void -23376: __gmp_binary_plus::eval(mpq_ptr q, mpq_srcptr r, signed long int l) -23376: { -23376: if (l >= 0) -23376: eval(q, r, static_cast(l)); -23376: else -23376: __gmp_binary_minus::eval(q, r, -static_cast(l)); -23376: } -23376: -23376: struct __gmp_binary_lshift -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) -23376: { -23376: if (__builtin_constant_p(l) && (l == 0)) -23376: { -23376: if (z != w) __gmpz_set(z, w); -23376: } -23376: else -23376: __gmpz_mul_2exp(z, w, l); -23376: } -23376: static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) -23376: { -23376: if (__builtin_constant_p(l) && (l == 0)) -23376: { -23376: if (q != r) __gmpq_set(q, r); -23376: } -23376: else -23376: __gmpq_mul_2exp(q, r, l); -23376: } -23376: static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) -23376: { __gmpf_mul_2exp(f, g, l); } -23376: }; -23376: -23376: struct __gmp_binary_rshift -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l) -23376: { -23376: if (__builtin_constant_p(l) && (l == 0)) -23376: { -23376: if (z != w) __gmpz_set(z, w); -23376: } -23376: else -23376: __gmpz_fdiv_q_2exp(z, w, l); -23376: } -23376: static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l) -23376: { -23376: if (__builtin_constant_p(l) && (l == 0)) -23376: { -23376: if (q != r) __gmpq_set(q, r); -23376: } -23376: else -23376: __gmpq_div_2exp(q, r, l); -23376: } -23376: static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l) -23376: { __gmpf_div_2exp(f, g, l); } -23376: }; -23376: -23376: struct __gmp_binary_multiplies -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_mul(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { -23376: -23376: -23376: if (__builtin_constant_p(l) && (l & (l-1)) == 0) -23376: { -23376: if (l == 0) -23376: { -23376: z->_mp_size = 0; -23376: } -23376: else -23376: { -23376: __gmp_binary_lshift::eval(z, w, __builtin_ctzl(l)); -23376: } -23376: } -23376: else -23376: -23376: __gmpz_mul_ui(z, w, l); -23376: } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: eval(z, w, static_cast(l)); -23376: else if ((__builtin_constant_p(l <= 0) && (l <= 0))) -23376: { -23376: eval(z, w, -static_cast(l)); -23376: __gmpz_neg(z, z); -23376: } -23376: else -23376: __gmpz_mul_si (z, w, l); -23376: } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_mul (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) -23376: { __gmpq_mul(q, r, s); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) -23376: { -23376: -23376: if (__builtin_constant_p(l) && (l & (l-1)) == 0) -23376: { -23376: if (l == 0) -23376: { -23376: __gmpq_set_ui(q, 0, 1); -23376: } -23376: else -23376: { -23376: __gmp_binary_lshift::eval(q, r, __builtin_ctzl(l)); -23376: } -23376: } -23376: else -23376: -23376: { -23376: mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; -23376: __gmpq_mul (q, r, temp); -23376: } -23376: } -23376: static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) -23376: { eval(q, r, l); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: eval(q, r, static_cast(l)); -23376: else if ((__builtin_constant_p(l <= 0) && (l <= 0))) -23376: { -23376: eval(q, r, -static_cast(l)); -23376: __gmpq_neg(q, q); -23376: } -23376: else -23376: { -23376: mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; -23376: __gmpq_mul (q, r, temp); -23376: } -23376: } -23376: static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) -23376: { eval(q, r, l); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_mul (q, r, temp); } -23376: static void eval(mpq_ptr q, double d, mpq_srcptr r) -23376: { eval(q, r, d); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) -23376: { __gmpf_mul(f, g, h); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) -23376: { __gmpf_mul_ui(f, g, l); } -23376: static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) -23376: { __gmpf_mul_ui(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) -23376: { -23376: if (l >= 0) -23376: __gmpf_mul_ui(f, g, l); -23376: else -23376: { -23376: __gmpf_mul_ui(f, g, -static_cast(l)); -23376: __gmpf_neg(f, f); -23376: } -23376: } -23376: static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) -23376: { eval(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, double d) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_mul(f, g, temp); -23376: __gmpf_clear(temp); -23376: } -23376: static void eval(mpf_ptr f, double d, mpf_srcptr g) -23376: { eval(f, g, d); } -23376: }; -23376: -23376: struct __gmp_binary_divides -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_tdiv_q(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { -23376: -23376: -23376: if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0) -23376: { -23376: if (l == 1) -23376: { -23376: if (z != w) __gmpz_set(z, w); -23376: } -23376: else -23376: __gmpz_tdiv_q_2exp(z, w, __builtin_ctzl(l)); -23376: -23376: } -23376: else -23376: -23376: __gmpz_tdiv_q_ui(z, w, l); -23376: } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { -23376: if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0) -23376: { -23376: if (__gmpz_fits_ulong_p(w)) -23376: __gmpz_set_ui(z, l / __gmpz_get_ui(w)); -23376: else -23376: __gmpz_set_ui(z, 0); -23376: } -23376: else -23376: { -23376: __gmpz_neg(z, w); -23376: if (__gmpz_fits_ulong_p(z)) -23376: { -23376: __gmpz_set_ui(z, l / __gmpz_get_ui(z)); -23376: __gmpz_neg(z, z); -23376: } -23376: else -23376: __gmpz_set_ui(z, 0); -23376: } -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { -23376: if (l >= 0) -23376: eval(z, w, static_cast(l)); -23376: else -23376: { -23376: eval(z, w, -static_cast(l)); -23376: __gmpz_neg(z, z); -23376: } -23376: } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { -23376: if (__gmpz_fits_slong_p(w)) -23376: __gmpz_set_si(z, l / __gmpz_get_si(w)); -23376: else -23376: { -23376: -23376: -23376: __gmpz_set_si (z, (__gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? -1 : 0)); -23376: } -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, temp, w); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s) -23376: { __gmpq_div(q, r, s); } -23376: -23376: static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l) -23376: { -23376: -23376: if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0) -23376: __gmp_binary_rshift::eval(q, r, __builtin_ctzl(l)); -23376: else -23376: -23376: { -23376: mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; -23376: __gmpq_div (q, r, temp); -23376: } -23376: } -23376: static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r) -23376: { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, signed long int l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: eval(q, r, static_cast(l)); -23376: else if ((__builtin_constant_p(l <= 0) && (l <= 0))) -23376: { -23376: eval(q, r, -static_cast(l)); -23376: __gmpq_neg(q, q); -23376: } -23376: else -23376: { -23376: mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; -23376: __gmpq_div (q, r, temp); -23376: } -23376: } -23376: static void eval(mpq_ptr q, signed long int l, mpq_srcptr r) -23376: { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); } -23376: static void eval(mpq_ptr q, mpq_srcptr r, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, r, temp); } -23376: static void eval(mpq_ptr q, double d, mpq_srcptr r) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, temp, r); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) -23376: { __gmpf_div(f, g, h); } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) -23376: { __gmpf_div_ui(f, g, l); } -23376: static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) -23376: { __gmpf_ui_div(f, l, g); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) -23376: { -23376: if (l >= 0) -23376: __gmpf_div_ui(f, g, l); -23376: else -23376: { -23376: __gmpf_div_ui(f, g, -static_cast(l)); -23376: __gmpf_neg(f, f); -23376: } -23376: } -23376: static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) -23376: { -23376: if (l >= 0) -23376: __gmpf_ui_div(f, l, g); -23376: else -23376: { -23376: __gmpf_ui_div(f, -static_cast(l), g); -23376: __gmpf_neg(f, f); -23376: } -23376: } -23376: static void eval(mpf_ptr f, mpf_srcptr g, double d) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_div(f, g, temp); -23376: __gmpf_clear(temp); -23376: } -23376: static void eval(mpf_ptr f, double d, mpf_srcptr g) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, 8*sizeof(double)); -23376: __gmpf_set_d(temp, d); -23376: __gmpf_div(f, temp, g); -23376: __gmpf_clear(temp); -23376: } -23376: }; -23376: -23376: struct __gmp_binary_modulus -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_tdiv_r(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { __gmpz_tdiv_r_ui(z, w, l); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { -23376: if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0) -23376: { -23376: if (__gmpz_fits_ulong_p(w)) -23376: __gmpz_set_ui(z, l % __gmpz_get_ui(w)); -23376: else -23376: __gmpz_set_ui(z, l); -23376: } -23376: else -23376: { -23376: __gmpz_neg(z, w); -23376: if (__gmpz_fits_ulong_p(z)) -23376: __gmpz_set_ui(z, l % __gmpz_get_ui(z)); -23376: else -23376: __gmpz_set_ui(z, l); -23376: } -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { -23376: __gmpz_tdiv_r_ui (z, w, __gmpxx_abs_ui(l)); -23376: } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { -23376: if (__gmpz_fits_slong_p(w)) -23376: __gmpz_set_si(z, l % __gmpz_get_si(w)); -23376: else -23376: { -23376: -23376: -23376: __gmpz_set_si (z, __gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? 0 : l); -23376: } -23376: } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, temp, w); } -23376: }; -23376: -23376: struct __gmp_binary_and -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_and(z, w, v); } -23376: -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_and (z, w, temp); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_and (z, w, temp); } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_and (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: }; -23376: -23376: struct __gmp_binary_ior -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_ior(z, w, v); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_ior (z, w, temp); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_ior (z, w, temp); } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_ior (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: }; -23376: -23376: struct __gmp_binary_xor -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_xor(z, w, v); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_xor (z, w, temp); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_xor (z, w, temp); } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_xor (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: }; -23376: -23376: struct __gmp_cmp_function -23376: { -23376: static int eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w); } -23376: -23376: static int eval(mpz_srcptr z, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); } -23376: static int eval(unsigned long int l, mpz_srcptr z) -23376: { return -(__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); } -23376: static int eval(mpz_srcptr z, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast (l)))) : __gmpz_cmp_si (z,l)); } -23376: static int eval(signed long int l, mpz_srcptr z) -23376: { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast (l)))) : __gmpz_cmp_si (z,l)); } -23376: static int eval(mpz_srcptr z, double d) -23376: { return __gmpz_cmp_d(z, d); } -23376: static int eval(double d, mpz_srcptr z) -23376: { return -__gmpz_cmp_d(z, d); } -23376: -23376: static int eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r); } -23376: -23376: static int eval(mpq_srcptr q, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); } -23376: static int eval(unsigned long int l, mpq_srcptr q) -23376: { return -(__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); } -23376: static int eval(mpq_srcptr q, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast (l))) == (1)) && ((static_cast (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast (l)),1)) : __gmpq_cmp_si (q, l, 1)); } -23376: static int eval(signed long int l, mpq_srcptr q) -23376: { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast (l))) == (1)) && ((static_cast (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast (l)),1)) : __gmpq_cmp_si (q, l, 1)); } -23376: static int eval(mpq_srcptr q, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp); } -23376: static int eval(double d, mpq_srcptr q) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q); } -23376: static int eval(mpq_srcptr q, mpz_srcptr z) -23376: { return __gmpq_cmp_z(q, z); } -23376: static int eval(mpz_srcptr z, mpq_srcptr q) -23376: { return -__gmpq_cmp_z(q, z); } -23376: -23376: static int eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g); } -23376: -23376: static int eval(mpf_srcptr f, unsigned long int l) -23376: { return __gmpf_cmp_ui(f, l); } -23376: static int eval(unsigned long int l, mpf_srcptr f) -23376: { return -__gmpf_cmp_ui(f, l); } -23376: static int eval(mpf_srcptr f, signed long int l) -23376: { return __gmpf_cmp_si(f, l); } -23376: static int eval(signed long int l, mpf_srcptr f) -23376: { return -__gmpf_cmp_si(f, l); } -23376: static int eval(mpf_srcptr f, double d) -23376: { return __gmpf_cmp_d(f, d); } -23376: static int eval(double d, mpf_srcptr f) -23376: { return -__gmpf_cmp_d(f, d); } -23376: static int eval(mpf_srcptr f, mpz_srcptr z) -23376: { return __gmpf_cmp_z(f, z); } -23376: static int eval(mpz_srcptr z, mpf_srcptr f) -23376: { return -__gmpf_cmp_z(f, z); } -23376: static int eval(mpf_srcptr f, mpq_srcptr q) -23376: { -23376: mpf_t qf; -23376: __gmpf_init(qf); -23376: __gmpf_set_q(qf, q); -23376: int ret = eval(f, qf); -23376: __gmpf_clear(qf); -23376: return ret; -23376: } -23376: static int eval(mpq_srcptr q, mpf_srcptr f) -23376: { return -eval(f, q); } -23376: }; -23376: -23376: struct __gmp_binary_equal -23376: { -23376: static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) == 0; } -23376: -23376: static bool eval(mpz_srcptr z, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) == 0; } -23376: static bool eval(unsigned long int l, mpz_srcptr z) -23376: { return eval(z, l); } -23376: static bool eval(mpz_srcptr z, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast (l)))) : __gmpz_cmp_si (z,l)) == 0; } -23376: static bool eval(signed long int l, mpz_srcptr z) -23376: { return eval(z, l); } -23376: static bool eval(mpz_srcptr z, double d) -23376: { return __gmpz_cmp_d(z, d) == 0; } -23376: static bool eval(double d, mpz_srcptr z) -23376: { return eval(z, d); } -23376: -23376: static bool eval(mpq_srcptr q, mpq_srcptr r) -23376: { return __gmpq_equal(q, r) != 0; } -23376: -23376: static bool eval(mpq_srcptr q, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) == 0; } -23376: static bool eval(unsigned long int l, mpq_srcptr q) -23376: { return eval(q, l); } -23376: static bool eval(mpq_srcptr q, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast (l))) == (1)) && ((static_cast (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast (l)),1)) : __gmpq_cmp_si (q, l, 1)) == 0; } -23376: static bool eval(signed long int l, mpq_srcptr q) -23376: { return eval(q, l); } -23376: static bool eval(mpq_srcptr q, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_equal (q, temp) != 0; } -23376: static bool eval(double d, mpq_srcptr q) -23376: { return eval(q, d); } -23376: static bool eval(mpq_srcptr q, mpz_srcptr z) -23376: { return __gmpq_cmp_z(q, z) == 0; } -23376: static bool eval(mpz_srcptr z, mpq_srcptr q) -23376: { return eval(q, z); } -23376: -23376: static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) == 0; } -23376: -23376: static bool eval(mpf_srcptr f, unsigned long int l) -23376: { return __gmpf_cmp_ui(f, l) == 0; } -23376: static bool eval(unsigned long int l, mpf_srcptr f) -23376: { return eval(f, l); } -23376: static bool eval(mpf_srcptr f, signed long int l) -23376: { return __gmpf_cmp_si(f, l) == 0; } -23376: static bool eval(signed long int l, mpf_srcptr f) -23376: { return eval(f, l); } -23376: static bool eval(mpf_srcptr f, double d) -23376: { return __gmpf_cmp_d(f, d) == 0; } -23376: static bool eval(double d, mpf_srcptr f) -23376: { return eval(f, d); } -23376: static bool eval(mpf_srcptr f, mpz_srcptr z) -23376: { return __gmpf_cmp_z(f, z) == 0; } -23376: static bool eval(mpz_srcptr z, mpf_srcptr f) -23376: { return eval(f, z); } -23376: static bool eval(mpf_srcptr f, mpq_srcptr q) -23376: { return __gmp_cmp_function::eval(f, q) == 0; } -23376: static bool eval(mpq_srcptr q, mpf_srcptr f) -23376: { return eval(f, q); } -23376: }; -23376: -23376: struct __gmp_binary_less -23376: { -23376: static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) < 0; } -23376: -23376: static bool eval(mpz_srcptr z, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) < 0; } -23376: static bool eval(unsigned long int l, mpz_srcptr z) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) > 0; } -23376: static bool eval(mpz_srcptr z, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast (l)))) : __gmpz_cmp_si (z,l)) < 0; } -23376: static bool eval(signed long int l, mpz_srcptr z) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast (l)))) : __gmpz_cmp_si (z,l)) > 0; } -23376: static bool eval(mpz_srcptr z, double d) -23376: { return __gmpz_cmp_d(z, d) < 0; } -23376: static bool eval(double d, mpz_srcptr z) -23376: { return __gmpz_cmp_d(z, d) > 0; } -23376: -23376: static bool eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r) < 0; } -23376: -23376: static bool eval(mpq_srcptr q, unsigned long int l) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) < 0; } -23376: static bool eval(unsigned long int l, mpq_srcptr q) -23376: { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) > 0; } -23376: static bool eval(mpq_srcptr q, signed long int l) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast (l))) == (1)) && ((static_cast (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast (l)),1)) : __gmpq_cmp_si (q, l, 1)) < 0; } -23376: static bool eval(signed long int l, mpq_srcptr q) -23376: { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast (l))) && ((static_cast (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast (l))) == (1)) && ((static_cast (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast (l)),1)) : __gmpq_cmp_si (q, l, 1)) > 0; } -23376: static bool eval(mpq_srcptr q, double d) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp) < 0; } -23376: static bool eval(double d, mpq_srcptr q) -23376: { mpq_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1 + (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q) < 0; } -23376: static bool eval(mpq_srcptr q, mpz_srcptr z) -23376: { return __gmpq_cmp_z(q, z) < 0; } -23376: static bool eval(mpz_srcptr z, mpq_srcptr q) -23376: { return __gmpq_cmp_z(q, z) > 0; } -23376: -23376: static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) < 0; } -23376: -23376: static bool eval(mpf_srcptr f, unsigned long int l) -23376: { return __gmpf_cmp_ui(f, l) < 0; } -23376: static bool eval(unsigned long int l, mpf_srcptr f) -23376: { return __gmpf_cmp_ui(f, l) > 0; } -23376: static bool eval(mpf_srcptr f, signed long int l) -23376: { return __gmpf_cmp_si(f, l) < 0; } -23376: static bool eval(signed long int l, mpf_srcptr f) -23376: { return __gmpf_cmp_si(f, l) > 0; } -23376: static bool eval(mpf_srcptr f, double d) -23376: { return __gmpf_cmp_d(f, d) < 0; } -23376: static bool eval(double d, mpf_srcptr f) -23376: { return __gmpf_cmp_d(f, d) > 0; } -23376: static bool eval(mpf_srcptr f, mpz_srcptr z) -23376: { return __gmpf_cmp_z(f, z) < 0; } -23376: static bool eval(mpz_srcptr z, mpf_srcptr f) -23376: { return __gmpf_cmp_z(f, z) > 0; } -23376: static bool eval(mpf_srcptr f, mpq_srcptr q) -23376: { return __gmp_cmp_function::eval(f, q) < 0; } -23376: static bool eval(mpq_srcptr q, mpf_srcptr f) -23376: { return __gmp_cmp_function::eval(q, f) < 0; } -23376: }; -23376: -23376: struct __gmp_binary_greater -23376: { -23376: template -23376: static inline bool eval(T t, U u) { return __gmp_binary_less::eval(u, t); } -23376: }; -23376: -23376: struct __gmp_unary_increment -23376: { -23376: static void eval(mpz_ptr z) { __gmpz_add_ui(z, z, 1); } -23376: static void eval(mpq_ptr q) -23376: { __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); } -23376: static void eval(mpf_ptr f) { __gmpf_add_ui(f, f, 1); } -23376: }; -23376: -23376: struct __gmp_unary_decrement -23376: { -23376: static void eval(mpz_ptr z) { __gmpz_sub_ui(z, z, 1); } -23376: static void eval(mpq_ptr q) -23376: { __gmpz_sub((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); } -23376: static void eval(mpf_ptr f) { __gmpf_sub_ui(f, f, 1); } -23376: }; -23376: -23376: struct __gmp_abs_function -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_abs(z, w); } -23376: static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_abs(q, r); } -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_abs(f, g); } -23376: }; -23376: -23376: struct __gmp_trunc_function -23376: { -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_trunc(f, g); } -23376: }; -23376: -23376: struct __gmp_floor_function -23376: { -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_floor(f, g); } -23376: }; -23376: -23376: struct __gmp_ceil_function -23376: { -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_ceil(f, g); } -23376: }; -23376: -23376: struct __gmp_sqrt_function -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_sqrt(z, w); } -23376: static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_sqrt(f, g); } -23376: }; -23376: -23376: struct __gmp_hypot_function -23376: { -23376: static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, __gmpf_get_prec(f)); -23376: __gmpf_mul(temp, g, g); -23376: __gmpf_mul(f, h, h); -23376: __gmpf_add(f, f, temp); -23376: __gmpf_sqrt(f, f); -23376: __gmpf_clear(temp); -23376: } -23376: -23376: static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, __gmpf_get_prec(f)); -23376: __gmpf_mul(temp, g, g); -23376: __gmpf_set_ui(f, l); -23376: __gmpf_mul_ui(f, f, l); -23376: __gmpf_add(f, f, temp); -23376: __gmpf_clear(temp); -23376: __gmpf_sqrt(f, f); -23376: } -23376: static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g) -23376: { eval(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, signed long int l) -23376: { eval(f, g, __gmpxx_abs_ui(l)); } -23376: static void eval(mpf_ptr f, signed long int l, mpf_srcptr g) -23376: { eval(f, g, l); } -23376: static void eval(mpf_ptr f, mpf_srcptr g, double d) -23376: { -23376: mpf_t temp; -23376: __gmpf_init2(temp, __gmpf_get_prec(f)); -23376: __gmpf_mul(temp, g, g); -23376: __gmpf_set_d(f, d); -23376: __gmpf_mul(f, f, f); -23376: __gmpf_add(f, f, temp); -23376: __gmpf_sqrt(f, f); -23376: __gmpf_clear(temp); -23376: } -23376: static void eval(mpf_ptr f, double d, mpf_srcptr g) -23376: { eval(f, g, d); } -23376: }; -23376: -23376: struct __gmp_sgn_function -23376: { -23376: static int eval(mpz_srcptr z) { return ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0); } -23376: static int eval(mpq_srcptr q) { return ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0); } -23376: static int eval(mpf_srcptr f) { return ((f)->_mp_size < 0 ? -1 : (f)->_mp_size > 0); } -23376: }; -23376: -23376: struct __gmp_gcd_function -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_gcd(z, w, v); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { __gmpz_gcd_ui(z, w, l); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { eval(z, w, __gmpxx_abs_ui(l)); } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_gcd (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: }; -23376: -23376: struct __gmp_lcm_function -23376: { -23376: static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v) -23376: { __gmpz_lcm(z, w, v); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l) -23376: { __gmpz_lcm_ui(z, w, l); } -23376: static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, signed long int l) -23376: { eval(z, w, __gmpxx_abs_ui(l)); } -23376: static void eval(mpz_ptr z, signed long int l, mpz_srcptr w) -23376: { eval(z, w, l); } -23376: static void eval(mpz_ptr z, mpz_srcptr w, double d) -23376: { mpz_t temp; mp_limb_t limbs[(((1024) + ((32 - 0) - 1)) / (32 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((32 - 0) - 1)) / (32 - 0))+1; __gmpz_set_d (temp, d); __gmpz_lcm (z, w, temp); } -23376: static void eval(mpz_ptr z, double d, mpz_srcptr w) -23376: { eval(z, w, d); } -23376: }; -23376: -23376: struct __gmp_rand_function -23376: { -23376: static void eval(mpz_ptr z, gmp_randstate_t s, mp_bitcnt_t l) -23376: { __gmpz_urandomb(z, s, l); } -23376: static void eval(mpz_ptr z, gmp_randstate_t s, mpz_srcptr w) -23376: { __gmpz_urandomm(z, s, w); } -23376: static void eval(mpf_ptr f, gmp_randstate_t s, mp_bitcnt_t prec) -23376: { __gmpf_urandomb(f, s, prec); } -23376: }; -23376: # 1204 "/usr/include/gmpxx.h" 3 4 -23376: extern "C" { -23376: typedef void (*__gmp_freefunc_t) (void *, size_t); -23376: } -23376: struct __gmp_alloc_cstring -23376: { -23376: char *str; -23376: __gmp_alloc_cstring(char *s) { str = s; } -23376: ~__gmp_alloc_cstring() -23376: { -23376: __gmp_freefunc_t freefunc; -23376: __gmp_get_memory_functions (__null, __null, &freefunc); -23376: (*freefunc) (str, std::strlen(str)+1); -23376: } -23376: }; -23376: -23376: -23376: -23376: template -23376: class __gmp_expr; -23376: -23376: -23376: -23376: template -23376: struct __gmp_resolve_ref -23376: { -23376: typedef T ref_type; -23376: }; -23376: -23376: template -23376: struct __gmp_resolve_ref<__gmp_expr > -23376: { -23376: typedef const __gmp_expr & ref_type; -23376: }; -23376: -23376: -23376: template -23376: struct __gmp_resolve_expr; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpz_t value_type; -23376: typedef mpz_ptr ptr_type; -23376: typedef mpz_srcptr srcptr_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpq_t value_type; -23376: typedef mpq_ptr ptr_type; -23376: typedef mpq_srcptr srcptr_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpf_t value_type; -23376: typedef mpf_ptr ptr_type; -23376: typedef mpf_srcptr srcptr_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpq_t value_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpq_t value_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpf_t value_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpf_t value_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpf_t value_type; -23376: }; -23376: -23376: template <> -23376: struct __gmp_resolve_expr -23376: { -23376: typedef mpf_t value_type; -23376: }; -23376: -23376: -23376: namespace std { -23376: template -23376: struct common_type <__gmp_expr, __gmp_expr > -23376: { -23376: private: -23376: typedef typename __gmp_resolve_expr::value_type X; -23376: public: -23376: typedef __gmp_expr type; -23376: }; -23376: -23376: template -23376: struct common_type <__gmp_expr > -23376: { -23376: typedef __gmp_expr type; -23376: }; -23376: # 1332 "/usr/include/gmpxx.h" 3 4 -23376: template struct common_type <__gmp_expr, signed char > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, unsigned char > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, signed int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, unsigned int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, signed short int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, unsigned short int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, signed long int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, unsigned long int > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, float > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: template struct common_type <__gmp_expr, double > { typedef __gmp_expr type; }; template struct common_type > { typedef __gmp_expr type; }; -23376: -23376: } -23376: -23376: -23376: -23376: template -23376: struct __gmp_unary_expr -23376: { -23376: typename __gmp_resolve_ref::ref_type val; -23376: -23376: __gmp_unary_expr(const T &v) : val(v) { } -23376: private: -23376: __gmp_unary_expr(); -23376: }; -23376: -23376: template -23376: struct __gmp_binary_expr -23376: { -23376: typename __gmp_resolve_ref::ref_type val1; -23376: typename __gmp_resolve_ref::ref_type val2; -23376: -23376: __gmp_binary_expr(const T &v1, const U &v2) : val1(v1), val2(v2) { } -23376: private: -23376: __gmp_binary_expr(); -23376: }; -23376: # 1428 "/usr/include/gmpxx.h" 3 4 -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: typedef mpz_t value_type; -23376: value_type mp; -23376: -23376: -23376: void assign_ui(unsigned long l) -23376: { -23376: if ((__builtin_constant_p(l == 0) && (l == 0))) -23376: mp->_mp_size = 0; -23376: else -23376: __gmpz_set_ui(mp, l); -23376: } -23376: void assign_si(signed long l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: assign_ui(l); -23376: else if ((__builtin_constant_p(l <= 0) && (l <= 0))) -23376: { -23376: assign_ui(-static_cast(l)); -23376: __gmpz_neg(mp, mp); -23376: } -23376: else -23376: __gmpz_set_si(mp, l); -23376: } -23376: void assign_d (double d) -23376: { -23376: __gmpz_set_d (mp, d); -23376: } -23376: -23376: void init_ui(unsigned long l) -23376: { -23376: if ((__builtin_constant_p(l == 0) && (l == 0))) -23376: __gmpz_init(mp); -23376: else -23376: __gmpz_init_set_ui(mp, l); -23376: } -23376: void init_si(signed long l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: init_ui(l); -23376: else if ((__builtin_constant_p(l <= 0) && (l <= 0))) -23376: { -23376: init_ui(-static_cast(l)); -23376: __gmpz_neg(mp, mp); -23376: } -23376: else -23376: __gmpz_init_set_si(mp, l); -23376: } -23376: void init_d (double d) -23376: { -23376: __gmpz_init_set_d (mp, d); -23376: } -23376: -23376: public: -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } -23376: -23376: -23376: __gmp_expr() { __gmpz_init(mp); } -23376: -23376: __gmp_expr(const __gmp_expr &z) { __gmpz_init_set(mp, z.mp); } -23376: -23376: __gmp_expr(__gmp_expr &&z) -23376: { *mp = *z.mp; __gmpz_init(z.mp); } -23376: -23376: template -23376: __gmp_expr(const __gmp_expr &expr) -23376: { __gmpz_init(mp); __gmp_set_expr(mp, expr); } -23376: template -23376: explicit __gmp_expr(const __gmp_expr &expr) -23376: { __gmpz_init(mp); __gmp_set_expr(mp, expr); } -23376: -23376: __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); } -23376: -23376: explicit __gmp_expr(const char *s, int base = 0) -23376: { -23376: if (__gmpz_init_set_str (mp, s, base) != 0) -23376: { -23376: __gmpz_clear (mp); -23376: throw std::invalid_argument ("mpz_set_str"); -23376: } -23376: } -23376: explicit __gmp_expr(const std::string &s, int base = 0) -23376: { -23376: if (__gmpz_init_set_str(mp, s.c_str(), base) != 0) -23376: { -23376: __gmpz_clear (mp); -23376: throw std::invalid_argument ("mpz_set_str"); -23376: } -23376: } -23376: -23376: explicit __gmp_expr(mpz_srcptr z) { __gmpz_init_set(mp, z); } -23376: -23376: ~__gmp_expr() { __gmpz_clear(mp); } -23376: -23376: void swap(__gmp_expr& z) noexcept { std::swap(*mp, *z.mp); } -23376: -23376: -23376: __gmp_expr & operator=(const __gmp_expr &z) -23376: { __gmpz_set(mp, z.mp); return *this; } -23376: -23376: __gmp_expr & operator=(__gmp_expr &&z) noexcept -23376: { swap(z); return *this; } -23376: -23376: template -23376: __gmp_expr & operator=(const __gmp_expr &expr) -23376: { __gmp_set_expr(mp, expr); return *this; } -23376: -23376: __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; } -23376: -23376: __gmp_expr & operator=(const char *s) -23376: { -23376: if (__gmpz_set_str (mp, s, 0) != 0) -23376: throw std::invalid_argument ("mpz_set_str"); -23376: return *this; -23376: } -23376: __gmp_expr & operator=(const std::string &s) -23376: { -23376: if (__gmpz_set_str(mp, s.c_str(), 0) != 0) -23376: throw std::invalid_argument ("mpz_set_str"); -23376: return *this; -23376: } -23376: -23376: -23376: int set_str(const char *s, int base) -23376: { return __gmpz_set_str(mp, s, base); } -23376: int set_str(const std::string &s, int base) -23376: { return __gmpz_set_str(mp, s.c_str(), base); } -23376: std::string get_str(int base = 10) const -23376: { -23376: __gmp_alloc_cstring temp(__gmpz_get_str(0, base, mp)); -23376: return std::string(temp.str); -23376: } -23376: -23376: -23376: mpz_srcptr __get_mp() const { return mp; } -23376: mpz_ptr __get_mp() { return mp; } -23376: mpz_srcptr get_mpz_t() const { return mp; } -23376: mpz_ptr get_mpz_t() { return mp; } -23376: -23376: signed long int get_si() const { return __gmpz_get_si(mp); } -23376: unsigned long int get_ui() const { return __gmpz_get_ui(mp); } -23376: double get_d() const { return __gmpz_get_d(mp); } -23376: -23376: -23376: -23376: bool fits_sint_p() const { return __gmpz_fits_sint_p(mp); } -23376: bool fits_uint_p() const { return __gmpz_fits_uint_p(mp); } -23376: bool fits_sshort_p() const { return __gmpz_fits_sshort_p(mp); } -23376: bool fits_ushort_p() const { return __gmpz_fits_ushort_p(mp); } -23376: bool fits_slong_p() const { return __gmpz_fits_slong_p(mp); } -23376: bool fits_ulong_p() const { return __gmpz_fits_ulong_p(mp); } -23376: -23376: -23376: -23376: -23376: -23376: explicit operator bool() const { return mp->_mp_size != 0; } -23376: -23376: -23376: -23376: template __gmp_expr & operator+=(const __gmp_expr &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double); -23376: template __gmp_expr & operator-=(const __gmp_expr &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double); -23376: template __gmp_expr & operator*=(const __gmp_expr &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double); -23376: template __gmp_expr & operator/=(const __gmp_expr &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double); -23376: template __gmp_expr & operator%=(const __gmp_expr &); __gmp_expr & operator%=(signed char); __gmp_expr & operator%=(unsigned char); __gmp_expr & operator%=(signed int); __gmp_expr & operator%=(unsigned int); __gmp_expr & operator%=(signed short int); __gmp_expr & operator%=(unsigned short int); __gmp_expr & operator%=(signed long int); __gmp_expr & operator%=(unsigned long int); __gmp_expr & operator%=(float); __gmp_expr & operator%=(double); -23376: -23376: template __gmp_expr & operator&=(const __gmp_expr &); __gmp_expr & operator&=(signed char); __gmp_expr & operator&=(unsigned char); __gmp_expr & operator&=(signed int); __gmp_expr & operator&=(unsigned int); __gmp_expr & operator&=(signed short int); __gmp_expr & operator&=(unsigned short int); __gmp_expr & operator&=(signed long int); __gmp_expr & operator&=(unsigned long int); __gmp_expr & operator&=(float); __gmp_expr & operator&=(double); -23376: template __gmp_expr & operator|=(const __gmp_expr &); __gmp_expr & operator|=(signed char); __gmp_expr & operator|=(unsigned char); __gmp_expr & operator|=(signed int); __gmp_expr & operator|=(unsigned int); __gmp_expr & operator|=(signed short int); __gmp_expr & operator|=(unsigned short int); __gmp_expr & operator|=(signed long int); __gmp_expr & operator|=(unsigned long int); __gmp_expr & operator|=(float); __gmp_expr & operator|=(double); -23376: template __gmp_expr & operator^=(const __gmp_expr &); __gmp_expr & operator^=(signed char); __gmp_expr & operator^=(unsigned char); __gmp_expr & operator^=(signed int); __gmp_expr & operator^=(unsigned int); __gmp_expr & operator^=(signed short int); __gmp_expr & operator^=(unsigned short int); __gmp_expr & operator^=(signed long int); __gmp_expr & operator^=(unsigned long int); __gmp_expr & operator^=(float); __gmp_expr & operator^=(double); -23376: -23376: __gmp_expr & operator<<=(mp_bitcnt_t); -23376: __gmp_expr & operator>>=(mp_bitcnt_t); -23376: -23376: inline __gmp_expr & operator++(); inline __gmp_expr operator++(int); -23376: inline __gmp_expr & operator--(); inline __gmp_expr operator--(int); -23376: }; -23376: -23376: typedef __gmp_expr mpz_class; -23376: -23376: -23376: -23376: -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: typedef mpq_t value_type; -23376: value_type mp; -23376: -23376: -23376: void assign_ui(unsigned long l) { __gmpq_set_ui(mp, l, 1); } -23376: void assign_si(signed long l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: assign_ui(l); -23376: else -23376: __gmpq_set_si(mp, l, 1); -23376: } -23376: void assign_d (double d) { __gmpq_set_d (mp, d); } -23376: -23376: void init_ui(unsigned long l) { __gmpq_init(mp); get_num() = l; } -23376: void init_si(signed long l) { __gmpq_init(mp); get_num() = l; } -23376: void init_d (double d) { __gmpq_init(mp); assign_d (d); } -23376: -23376: public: -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } -23376: void canonicalize() { __gmpq_canonicalize(mp); } -23376: -23376: -23376: __gmp_expr() { __gmpq_init(mp); } -23376: -23376: __gmp_expr(const __gmp_expr &q) -23376: { -23376: __gmpz_init_set((&((mp)->_mp_num)), (&((q.mp)->_mp_num))); -23376: __gmpz_init_set((&((mp)->_mp_den)), (&((q.mp)->_mp_den))); -23376: } -23376: -23376: __gmp_expr(__gmp_expr &&q) -23376: { *mp = *q.mp; __gmpq_init(q.mp); } -23376: -23376: template -23376: __gmp_expr(const __gmp_expr &expr) -23376: { __gmpq_init(mp); __gmp_set_expr(mp, expr); } -23376: template -23376: __gmp_expr(const __gmp_expr &expr) -23376: { __gmpq_init(mp); __gmp_set_expr(mp, expr); } -23376: template -23376: explicit __gmp_expr(const __gmp_expr &expr) -23376: { __gmpq_init(mp); __gmp_set_expr(mp, expr); } -23376: -23376: __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); } -23376: -23376: explicit __gmp_expr(const char *s, int base = 0) -23376: { -23376: __gmpq_init (mp); -23376: -23376: -23376: if (s == 0) -23376: { -23376: -23376: __gmpz_set_si((&((mp)->_mp_den)), base); -23376: } -23376: else if (__gmpq_set_str(mp, s, base) != 0) -23376: { -23376: __gmpq_clear (mp); -23376: throw std::invalid_argument ("mpq_set_str"); -23376: } -23376: } -23376: explicit __gmp_expr(const std::string &s, int base = 0) -23376: { -23376: __gmpq_init(mp); -23376: if (__gmpq_set_str (mp, s.c_str(), base) != 0) -23376: { -23376: __gmpq_clear (mp); -23376: throw std::invalid_argument ("mpq_set_str"); -23376: } -23376: } -23376: explicit __gmp_expr(mpq_srcptr q) -23376: { -23376: __gmpz_init_set((&((mp)->_mp_num)), (&((q)->_mp_num))); -23376: __gmpz_init_set((&((mp)->_mp_den)), (&((q)->_mp_den))); -23376: } -23376: -23376: __gmp_expr(const mpz_class &num, const mpz_class &den) -23376: { -23376: __gmpz_init_set((&((mp)->_mp_num)), num.get_mpz_t()); -23376: __gmpz_init_set((&((mp)->_mp_den)), den.get_mpz_t()); -23376: } -23376: -23376: ~__gmp_expr() { __gmpq_clear(mp); } -23376: -23376: void swap(__gmp_expr& q) noexcept { std::swap(*mp, *q.mp); } -23376: -23376: -23376: __gmp_expr & operator=(const __gmp_expr &q) -23376: { __gmpq_set(mp, q.mp); return *this; } -23376: -23376: __gmp_expr & operator=(__gmp_expr &&q) noexcept -23376: { swap(q); return *this; } -23376: __gmp_expr & operator=(mpz_class &&z) noexcept -23376: { get_num() = std::move(z); get_den() = 1u; return *this; } -23376: -23376: template -23376: __gmp_expr & operator=(const __gmp_expr &expr) -23376: { __gmp_set_expr(mp, expr); return *this; } -23376: -23376: __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; } -23376: -23376: __gmp_expr & operator=(const char *s) -23376: { -23376: if (__gmpq_set_str (mp, s, 0) != 0) -23376: throw std::invalid_argument ("mpq_set_str"); -23376: return *this; -23376: } -23376: __gmp_expr & operator=(const std::string &s) -23376: { -23376: if (__gmpq_set_str(mp, s.c_str(), 0) != 0) -23376: throw std::invalid_argument ("mpq_set_str"); -23376: return *this; -23376: } -23376: -23376: -23376: int set_str(const char *s, int base) -23376: { return __gmpq_set_str(mp, s, base); } -23376: int set_str(const std::string &s, int base) -23376: { return __gmpq_set_str(mp, s.c_str(), base); } -23376: std::string get_str(int base = 10) const -23376: { -23376: __gmp_alloc_cstring temp(__gmpq_get_str(0, base, mp)); -23376: return std::string(temp.str); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const mpz_class & get_num() const -23376: { return reinterpret_cast(*(&((mp)->_mp_num))); } -23376: mpz_class & get_num() -23376: { return reinterpret_cast(*(&((mp)->_mp_num))); } -23376: const mpz_class & get_den() const -23376: { return reinterpret_cast(*(&((mp)->_mp_den))); } -23376: mpz_class & get_den() -23376: { return reinterpret_cast(*(&((mp)->_mp_den))); } -23376: -23376: mpq_srcptr __get_mp() const { return mp; } -23376: mpq_ptr __get_mp() { return mp; } -23376: mpq_srcptr get_mpq_t() const { return mp; } -23376: mpq_ptr get_mpq_t() { return mp; } -23376: -23376: mpz_srcptr get_num_mpz_t() const { return (&((mp)->_mp_num)); } -23376: mpz_ptr get_num_mpz_t() { return (&((mp)->_mp_num)); } -23376: mpz_srcptr get_den_mpz_t() const { return (&((mp)->_mp_den)); } -23376: mpz_ptr get_den_mpz_t() { return (&((mp)->_mp_den)); } -23376: -23376: double get_d() const { return __gmpq_get_d(mp); } -23376: -23376: -23376: explicit operator bool() const { return (&((mp)->_mp_num))->_mp_size != 0; } -23376: -23376: -23376: -23376: template __gmp_expr & operator+=(const __gmp_expr &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double); -23376: template __gmp_expr & operator-=(const __gmp_expr &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double); -23376: template __gmp_expr & operator*=(const __gmp_expr &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double); -23376: template __gmp_expr & operator/=(const __gmp_expr &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double); -23376: -23376: __gmp_expr & operator<<=(mp_bitcnt_t); -23376: __gmp_expr & operator>>=(mp_bitcnt_t); -23376: -23376: inline __gmp_expr & operator++(); inline __gmp_expr operator++(int); -23376: inline __gmp_expr & operator--(); inline __gmp_expr operator--(int); -23376: }; -23376: -23376: typedef __gmp_expr mpq_class; -23376: -23376: -23376: -23376: -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: typedef mpf_t value_type; -23376: value_type mp; -23376: -23376: -23376: void assign_ui(unsigned long l) { __gmpf_set_ui(mp, l); } -23376: void assign_si(signed long l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: assign_ui(l); -23376: else -23376: __gmpf_set_si(mp, l); -23376: } -23376: void assign_d (double d) { __gmpf_set_d (mp, d); } -23376: -23376: void init_ui(unsigned long l) -23376: { -23376: if ((__builtin_constant_p(l == 0) && (l == 0))) -23376: __gmpf_init(mp); -23376: else -23376: __gmpf_init_set_ui(mp, l); -23376: } -23376: void init_si(signed long l) -23376: { -23376: if ((__builtin_constant_p(l >= 0) && (l >= 0))) -23376: init_ui(l); -23376: else -23376: __gmpf_init_set_si(mp, l); -23376: } -23376: void init_d (double d) { __gmpf_init_set_d (mp, d); } -23376: -23376: public: -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_prec(mp); } -23376: -23376: void set_prec(mp_bitcnt_t prec) { __gmpf_set_prec(mp, prec); } -23376: void set_prec_raw(mp_bitcnt_t prec) { __gmpf_set_prec_raw(mp, prec); } -23376: -23376: -23376: __gmp_expr() { __gmpf_init(mp); } -23376: -23376: __gmp_expr(const __gmp_expr &f) -23376: { __gmpf_init2(mp, f.get_prec()); __gmpf_set(mp, f.mp); } -23376: -23376: __gmp_expr(__gmp_expr &&f) -23376: { *mp = *f.mp; __gmpf_init2(f.mp, get_prec()); } -23376: -23376: __gmp_expr(const __gmp_expr &f, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set(mp, f.mp); } -23376: template -23376: __gmp_expr(const __gmp_expr &expr) -23376: { __gmpf_init2(mp, expr.get_prec()); __gmp_set_expr(mp, expr); } -23376: template -23376: __gmp_expr(const __gmp_expr &expr, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmp_set_expr(mp, expr); } -23376: -23376: __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); } -23376: -23376: __gmp_expr(signed char c, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_si(mp, c); } -23376: __gmp_expr(unsigned char c, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, c); } -23376: -23376: __gmp_expr(signed int i, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_si(mp, i); } -23376: __gmp_expr(unsigned int i, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, i); } -23376: -23376: __gmp_expr(signed short int s, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_si(mp, s); } -23376: __gmp_expr(unsigned short int s, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, s); } -23376: -23376: __gmp_expr(signed long int l, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_si(mp, l); } -23376: __gmp_expr(unsigned long int l, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, l); } -23376: -23376: __gmp_expr(float f, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_d(mp, f); } -23376: __gmp_expr(double d, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set_d(mp, d); } -23376: -23376: -23376: -23376: -23376: explicit __gmp_expr(const char *s) -23376: { -23376: if (__gmpf_init_set_str (mp, s, 0) != 0) -23376: { -23376: __gmpf_clear (mp); -23376: throw std::invalid_argument ("mpf_set_str"); -23376: } -23376: } -23376: __gmp_expr(const char *s, mp_bitcnt_t prec, int base = 0) -23376: { -23376: __gmpf_init2(mp, prec); -23376: if (__gmpf_set_str(mp, s, base) != 0) -23376: { -23376: __gmpf_clear (mp); -23376: throw std::invalid_argument ("mpf_set_str"); -23376: } -23376: } -23376: explicit __gmp_expr(const std::string &s) -23376: { -23376: if (__gmpf_init_set_str(mp, s.c_str(), 0) != 0) -23376: { -23376: __gmpf_clear (mp); -23376: throw std::invalid_argument ("mpf_set_str"); -23376: } -23376: } -23376: __gmp_expr(const std::string &s, mp_bitcnt_t prec, int base = 0) -23376: { -23376: __gmpf_init2(mp, prec); -23376: if (__gmpf_set_str(mp, s.c_str(), base) != 0) -23376: { -23376: __gmpf_clear (mp); -23376: throw std::invalid_argument ("mpf_set_str"); -23376: } -23376: } -23376: -23376: explicit __gmp_expr(mpf_srcptr f) -23376: { __gmpf_init2(mp, __gmpf_get_prec(f)); __gmpf_set(mp, f); } -23376: __gmp_expr(mpf_srcptr f, mp_bitcnt_t prec) -23376: { __gmpf_init2(mp, prec); __gmpf_set(mp, f); } -23376: -23376: ~__gmp_expr() { __gmpf_clear(mp); } -23376: -23376: void swap(__gmp_expr& f) noexcept { std::swap(*mp, *f.mp); } -23376: -23376: -23376: __gmp_expr & operator=(const __gmp_expr &f) -23376: { __gmpf_set(mp, f.mp); return *this; } -23376: -23376: __gmp_expr & operator=(__gmp_expr &&f) noexcept -23376: { swap(f); return *this; } -23376: -23376: template -23376: __gmp_expr & operator=(const __gmp_expr &expr) -23376: { __gmp_set_expr(mp, expr); return *this; } -23376: -23376: __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; } -23376: -23376: __gmp_expr & operator=(const char *s) -23376: { -23376: if (__gmpf_set_str (mp, s, 0) != 0) -23376: throw std::invalid_argument ("mpf_set_str"); -23376: return *this; -23376: } -23376: __gmp_expr & operator=(const std::string &s) -23376: { -23376: if (__gmpf_set_str(mp, s.c_str(), 0) != 0) -23376: throw std::invalid_argument ("mpf_set_str"); -23376: return *this; -23376: } -23376: -23376: -23376: int set_str(const char *s, int base) -23376: { return __gmpf_set_str(mp, s, base); } -23376: int set_str(const std::string &s, int base) -23376: { return __gmpf_set_str(mp, s.c_str(), base); } -23376: std::string get_str(mp_exp_t &expo, int base = 10, size_t size = 0) const -23376: { -23376: __gmp_alloc_cstring temp(__gmpf_get_str(0, &expo, base, size, mp)); -23376: return std::string(temp.str); -23376: } -23376: -23376: -23376: mpf_srcptr __get_mp() const { return mp; } -23376: mpf_ptr __get_mp() { return mp; } -23376: mpf_srcptr get_mpf_t() const { return mp; } -23376: mpf_ptr get_mpf_t() { return mp; } -23376: -23376: signed long int get_si() const { return __gmpf_get_si(mp); } -23376: unsigned long int get_ui() const { return __gmpf_get_ui(mp); } -23376: double get_d() const { return __gmpf_get_d(mp); } -23376: -23376: -23376: -23376: bool fits_sint_p() const { return __gmpf_fits_sint_p(mp); } -23376: bool fits_uint_p() const { return __gmpf_fits_uint_p(mp); } -23376: bool fits_sshort_p() const { return __gmpf_fits_sshort_p(mp); } -23376: bool fits_ushort_p() const { return __gmpf_fits_ushort_p(mp); } -23376: bool fits_slong_p() const { return __gmpf_fits_slong_p(mp); } -23376: bool fits_ulong_p() const { return __gmpf_fits_ulong_p(mp); } -23376: -23376: -23376: -23376: -23376: -23376: explicit operator bool() const { return mp->_mp_size != 0; } -23376: -23376: -23376: -23376: template __gmp_expr & operator+=(const __gmp_expr &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double); -23376: template __gmp_expr & operator-=(const __gmp_expr &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double); -23376: template __gmp_expr & operator*=(const __gmp_expr &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double); -23376: template __gmp_expr & operator/=(const __gmp_expr &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double); -23376: -23376: __gmp_expr & operator<<=(mp_bitcnt_t); -23376: __gmp_expr & operator>>=(mp_bitcnt_t); -23376: -23376: inline __gmp_expr & operator++(); inline __gmp_expr operator++(int); -23376: inline __gmp_expr & operator--(); inline __gmp_expr operator--(int); -23376: }; -23376: -23376: typedef __gmp_expr mpf_class; -23376: -23376: -23376: -23376: -23376: -23376: -23376: inline mpz_class operator"" _mpz(const char* s) -23376: { -23376: return mpz_class(s); -23376: } -23376: -23376: inline mpq_class operator"" _mpq(const char* s) -23376: { -23376: mpq_class q; -23376: q.get_num() = s; -23376: return q; -23376: } -23376: -23376: inline mpf_class operator"" _mpf(const char* s) -23376: { -23376: return mpf_class(s); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline std::ostream & operator<< -23376: (std::ostream &o, const __gmp_expr &expr) -23376: { -23376: __gmp_expr const& temp(expr); -23376: return o << temp.__get_mp(); -23376: } -23376: -23376: template -23376: inline std::istream & operator>>(std::istream &i, __gmp_expr &expr) -23376: { -23376: return i >> expr.__get_mp(); -23376: } -23376: # 2055 "/usr/include/gmpxx.h" 3 4 -23376: inline void __gmp_set_expr(mpz_ptr z, const mpz_class &w) -23376: { -23376: __gmpz_set(z, w.get_mpz_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) -23376: { -23376: expr.eval(z); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) -23376: { -23376: mpq_class const& temp(expr); -23376: __gmpz_set_q(z, temp.get_mpq_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr &expr) -23376: { -23376: mpf_class const& temp(expr); -23376: __gmpz_set_f(z, temp.get_mpf_t()); -23376: } -23376: -23376: inline void __gmp_set_expr(mpq_ptr q, const mpz_class &z) -23376: { -23376: __gmpq_set_z(q, z.get_mpz_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) -23376: { -23376: __gmp_set_expr((&((q)->_mp_num)), expr); -23376: __gmpz_set_ui((&((q)->_mp_den)), 1); -23376: } -23376: -23376: inline void __gmp_set_expr(mpq_ptr q, const mpq_class &r) -23376: { -23376: __gmpq_set(q, r.get_mpq_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) -23376: { -23376: expr.eval(q); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr &expr) -23376: { -23376: mpf_class const& temp(expr); -23376: __gmpq_set_f(q, temp.get_mpf_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) -23376: { -23376: mpz_class const& temp(expr); -23376: __gmpf_set_z(f, temp.get_mpz_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) -23376: { -23376: mpq_class const& temp(expr); -23376: __gmpf_set_q(f, temp.get_mpq_t()); -23376: } -23376: -23376: inline void __gmp_set_expr(mpf_ptr f, const mpf_class &g) -23376: { -23376: __gmpf_set(f, g.get_mpf_t()); -23376: } -23376: -23376: template -23376: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr &expr) -23376: { -23376: expr.eval(f); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_temp -23376: { -23376: __gmp_expr val; -23376: public: -23376: template -23376: __gmp_temp(U const& u, V) : val (u) {} -23376: typename __gmp_resolve_expr::srcptr_type -23376: __get_mp() const { return val.__get_mp(); } -23376: }; -23376: -23376: template <> -23376: class __gmp_temp -23376: { -23376: mpf_class val; -23376: public: -23376: template -23376: __gmp_temp(U const& u, mpf_ptr res) : val (u, __gmpf_get_prec(res)) {} -23376: mpf_srcptr __get_mp() const { return val.__get_mp(); } -23376: }; -23376: # 2178 "/usr/include/gmpxx.h" 3 4 -23376: template -23376: class __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val_type; -23376: -23376: __gmp_unary_expr expr; -23376: public: -23376: explicit __gmp_expr(const val_type &val) : expr(val) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { Op::eval(p, expr.val.__get_mp()); } -23376: const val_type & get_val() const { return expr.val; } -23376: mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr > -23376: { -23376: private: -23376: typedef U val_type; -23376: -23376: __gmp_unary_expr expr; -23376: public: -23376: explicit __gmp_expr(const val_type &val) : expr(val) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { Op::eval(p, expr.val); } -23376: const val_type & get_val() const { return expr.val; } -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val_type; -23376: -23376: __gmp_unary_expr expr; -23376: public: -23376: explicit __gmp_expr(const val_type &val) : expr(val) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { expr.val.eval(p); Op::eval(p, p); } -23376: const val_type & get_val() const { return expr.val; } -23376: mp_bitcnt_t get_prec() const { return expr.val.get_prec(); } -23376: }; -23376: # 2242 "/usr/include/gmpxx.h" 3 4 -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { Op::eval(p, expr.val1.__get_mp(), expr.val2.__get_mp()); } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr, U, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef U val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { Op::eval(p, expr.val1.__get_mp(), expr.val2); } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } -23376: }; -23376: -23376: template -23376: class __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef U val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { Op::eval(p, expr.val1, expr.val2.__get_mp()); } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: if(p != expr.val1.__get_mp()) -23376: { -23376: __gmp_set_expr(p, expr.val2); -23376: Op::eval(p, expr.val1.__get_mp(), p); -23376: } -23376: else -23376: { -23376: __gmp_temp temp(expr.val2, p); -23376: Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); -23376: } -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: if(p != expr.val2.__get_mp()) -23376: { -23376: __gmp_set_expr(p, expr.val1); -23376: Op::eval(p, p, expr.val2.__get_mp()); -23376: } -23376: else -23376: { -23376: __gmp_temp temp(expr.val1, p); -23376: Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); -23376: } -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: if(p != expr.val1.__get_mp()) -23376: { -23376: __gmp_set_expr(p, expr.val2); -23376: Op::eval(p, expr.val1.__get_mp(), p); -23376: } -23376: else -23376: { -23376: __gmp_temp temp(expr.val2, p); -23376: Op::eval(p, expr.val1.__get_mp(), temp.__get_mp()); -23376: } -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: if(p != expr.val2.__get_mp()) -23376: { -23376: __gmp_set_expr(p, expr.val1); -23376: Op::eval(p, p, expr.val2.__get_mp()); -23376: } -23376: else -23376: { -23376: __gmp_temp temp(expr.val1, p); -23376: Op::eval(p, temp.__get_mp(), expr.val2.__get_mp()); -23376: } -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr, V, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef V val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: expr.val1.eval(p); -23376: Op::eval(p, p, expr.val2); -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); } -23376: }; -23376: -23376: template -23376: class __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef U val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: expr.val2.eval(p); -23376: Op::eval(p, expr.val1, p); -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: __gmp_temp temp2(expr.val2, p); -23376: expr.val1.eval(p); -23376: Op::eval(p, p, temp2.__get_mp()); -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: __gmp_temp temp1(expr.val1, p); -23376: expr.val2.eval(p); -23376: Op::eval(p, temp1.__get_mp(), p); -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: -23376: template -23376: class __gmp_expr -23376: , __gmp_expr, Op> > -23376: { -23376: private: -23376: typedef __gmp_expr val1_type; -23376: typedef __gmp_expr val2_type; -23376: -23376: __gmp_binary_expr expr; -23376: public: -23376: __gmp_expr(const val1_type &val1, const val2_type &val2) -23376: : expr(val1, val2) { } -23376: void eval(typename __gmp_resolve_expr::ptr_type p) const -23376: { -23376: __gmp_temp temp2(expr.val2, p); -23376: expr.val1.eval(p); -23376: Op::eval(p, p, temp2.__get_mp()); -23376: } -23376: const val1_type & get_val1() const { return expr.val1; } -23376: const val2_type & get_val2() const { return expr.val2; } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: mp_bitcnt_t prec1 = expr.val1.get_prec(), -23376: prec2 = expr.val2.get_prec(); -23376: return (prec1 > prec2) ? prec1 : prec2; -23376: } -23376: }; -23376: # 2761 "/usr/include/gmpxx.h" 3 4 -23376: template <> class __gmp_expr > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , __gmp_binary_plus> > { private: typedef mpz_class val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , __gmp_binary_plus> > { private: typedef mpq_class val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , mpq_class, __gmp_binary_plus> > { private: typedef __gmp_expr val1_type; typedef mpq_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , mpz_class, __gmp_binary_plus> > { private: typedef __gmp_expr val1_type; typedef mpz_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr, __gmp_expr, __gmp_binary_plus> > { private: typedef __gmp_expr val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_plus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr, __gmp_expr, __gmp_binary_plus> > { private: typedef __gmp_expr val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_plus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; -23376: template <> class __gmp_expr > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , __gmp_binary_minus> > { private: typedef mpz_class val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , __gmp_binary_minus> > { private: typedef mpq_class val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , mpq_class, __gmp_binary_minus> > { private: typedef __gmp_expr val1_type; typedef mpq_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr , mpz_class, __gmp_binary_minus> > { private: typedef __gmp_expr val1_type; typedef mpz_class val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr, __gmp_expr, __gmp_binary_minus> > { private: typedef __gmp_expr val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_minus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template class __gmp_expr, __gmp_expr, __gmp_binary_minus> > { private: typedef __gmp_expr val1_type; typedef __gmp_expr val2_type; __gmp_binary_expr expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_minus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; -23376: # 3054 "/usr/include/gmpxx.h" 3 4 -23376: template inline __gmp_expr, __gmp_unary_plus> > operator+(const __gmp_expr &expr) { return __gmp_expr, __gmp_unary_plus> >(expr); } -23376: template inline __gmp_expr, __gmp_unary_minus> > operator-(const __gmp_expr &expr) { return __gmp_expr, __gmp_unary_minus> >(expr); } -23376: template inline __gmp_expr, __gmp_unary_com> > operator~(const __gmp_expr &expr) { return __gmp_expr, __gmp_unary_com> >(expr); } -23376: -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > operator+(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_plus> > operator+(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_plus> > operator+(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_plus> >(expr, t); } template inline __gmp_expr , __gmp_binary_plus> > operator+(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_plus> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_minus> > operator-(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_minus> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_minus> > operator-(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_minus> > operator-(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_minus> >(expr, t); } template inline __gmp_expr , __gmp_binary_minus> > operator-(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_minus> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_multiplies> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_multiplies> > operator*(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_multiplies> >(expr, t); } template inline __gmp_expr , __gmp_binary_multiplies> > operator*(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_multiplies> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_divides> > operator/(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_divides> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_divides> > operator/(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_divides> > operator/(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_divides> >(expr, t); } template inline __gmp_expr , __gmp_binary_divides> > operator/(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_divides> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_modulus> > operator%(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_modulus> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_modulus> > operator%(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_modulus> >(expr, t); } template inline __gmp_expr , __gmp_binary_modulus> > operator%(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_modulus> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_and> > operator&(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_and> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_and> > operator&(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_and> > operator&(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_and> >(expr, t); } template inline __gmp_expr , __gmp_binary_and> > operator&(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_and> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_ior> > operator|(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_ior> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_ior> > operator|(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_ior> > operator|(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_ior> >(expr, t); } template inline __gmp_expr , __gmp_binary_ior> > operator|(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_ior> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_xor> > operator^(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_xor> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_xor> > operator^(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } template inline __gmp_expr , double, __gmp_binary_xor> > operator^(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_binary_xor> >(expr, t); } template inline __gmp_expr , __gmp_binary_xor> > operator^(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_binary_xor> >(t, expr); } -23376: -23376: template inline __gmp_expr , mp_bitcnt_t, __gmp_binary_lshift> > operator<<(const __gmp_expr &expr, mp_bitcnt_t l) { return __gmp_expr, mp_bitcnt_t, __gmp_binary_lshift> >(expr, l); } -23376: template inline __gmp_expr , mp_bitcnt_t, __gmp_binary_rshift> > operator>>(const __gmp_expr &expr, mp_bitcnt_t l) { return __gmp_expr, mp_bitcnt_t, __gmp_binary_rshift> >(expr, l); } -23376: -23376: template inline bool operator==(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator==(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator==(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } -23376: template inline bool operator!=(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return ! __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } template inline bool operator!=(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator!=(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_equal::eval(static_cast(t), temp.__get_mp()); } -23376: template inline bool operator<(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } -23376: template inline bool operator<=(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return ! __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator<=(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator<=(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } -23376: template inline bool operator>(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_binary_greater::eval(static_cast(t), temp.__get_mp()); } -23376: template inline bool operator>=(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return ! __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } template inline bool operator>=(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast(t)); } template inline bool operator>=(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return ! __gmp_binary_less::eval(static_cast(t), temp.__get_mp()); } -23376: -23376: template inline __gmp_expr, __gmp_abs_function> > abs(const __gmp_expr &expr) { return __gmp_expr, __gmp_abs_function> >(expr); } -23376: template inline __gmp_expr, __gmp_trunc_function> > trunc(const __gmp_expr &expr) { return __gmp_expr, __gmp_trunc_function> >(expr); } -23376: template inline __gmp_expr, __gmp_floor_function> > floor(const __gmp_expr &expr) { return __gmp_expr, __gmp_floor_function> >(expr); } -23376: template inline __gmp_expr, __gmp_ceil_function> > ceil(const __gmp_expr &expr) { return __gmp_expr, __gmp_ceil_function> >(expr); } -23376: template inline __gmp_expr, __gmp_sqrt_function> > sqrt(const __gmp_expr &expr) { return __gmp_expr, __gmp_sqrt_function> >(expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_hypot_function> > hypot(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_hypot_function> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , double, __gmp_hypot_function> > hypot(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } template inline __gmp_expr , double, __gmp_hypot_function> > hypot(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_hypot_function> >(expr, t); } template inline __gmp_expr , __gmp_hypot_function> > hypot(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_hypot_function> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_gcd_function> > gcd(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_gcd_function> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , double, __gmp_gcd_function> > gcd(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } template inline __gmp_expr , double, __gmp_gcd_function> > gcd(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_gcd_function> >(expr, t); } template inline __gmp_expr , __gmp_gcd_function> > gcd(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_gcd_function> >(t, expr); } -23376: template inline __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_lcm_function> > lcm(const __gmp_expr &expr1, const __gmp_expr &expr2) { return __gmp_expr::value_type, __gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_lcm_function> > (expr1, expr2); } template inline __gmp_expr , signed long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, signed char t) { return __gmp_expr , signed long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(signed char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, unsigned char t) { return __gmp_expr , unsigned long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(unsigned char t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, signed int t) { return __gmp_expr , signed long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(signed int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, unsigned int t) { return __gmp_expr , unsigned long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(unsigned int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, signed short int t) { return __gmp_expr , signed long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(signed short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, unsigned short int t) { return __gmp_expr , unsigned long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(unsigned short int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , signed long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, signed long int t) { return __gmp_expr , signed long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(signed long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr &expr, unsigned long int t) { return __gmp_expr , unsigned long int, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(unsigned long int t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , double, __gmp_lcm_function> > lcm(const __gmp_expr &expr, float t) { return __gmp_expr , double, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(float t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } template inline __gmp_expr , double, __gmp_lcm_function> > lcm(const __gmp_expr &expr, double t) { return __gmp_expr , double, __gmp_lcm_function> >(expr, t); } template inline __gmp_expr , __gmp_lcm_function> > lcm(double t, const __gmp_expr &expr) { return __gmp_expr , __gmp_lcm_function> >(t, expr); } -23376: -23376: template inline int sgn(const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_sgn_function::eval(temp.__get_mp()); } -23376: template inline int cmp(const __gmp_expr &expr1, const __gmp_expr &expr2) { __gmp_expr const& temp1(expr1); __gmp_expr const& temp2(expr2); return __gmp_cmp_function::eval(temp1.__get_mp(), temp2.__get_mp()); } template inline int cmp(const __gmp_expr &expr, signed char t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(signed char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, unsigned char t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(unsigned char t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, signed int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(signed int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, unsigned int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(unsigned int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, signed short int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(signed short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, unsigned short int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(unsigned short int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, signed long int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(signed long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, unsigned long int t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(unsigned long int t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, float t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(float t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } template inline int cmp(const __gmp_expr &expr, double t) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast(t)); } template inline int cmp(double t, const __gmp_expr &expr) { __gmp_expr const& temp(expr); return __gmp_cmp_function::eval(static_cast(t), temp.__get_mp()); } -23376: -23376: template -23376: void swap(__gmp_expr& x, __gmp_expr& y) noexcept -23376: { x.swap(y); } -23376: -23376: -23376: -23376: template inline mpz_class & mpz_class::operator+=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator-=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator*=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator/=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator%=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_modulus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator%=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: -23376: template inline mpz_class & mpz_class::operator&=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_and> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator&=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator|=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_ior> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator|=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpz_class & mpz_class::operator^=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_xor> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator^=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: -23376: inline mpz_class & mpz_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: inline mpz_class & mpz_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: -23376: inline mpz_class & mpz_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpz_class mpz_class::operator++(int) { mpz_class temp(*this); __gmp_unary_increment::eval(mp); return temp; } -23376: inline mpz_class & mpz_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpz_class mpz_class::operator--(int) { mpz_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; } -23376: -23376: -23376: -23376: template inline mpq_class & mpq_class::operator+=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpq_class & mpq_class::operator-=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpq_class & mpq_class::operator*=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpq_class & mpq_class::operator/=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: -23376: inline mpq_class & mpq_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: inline mpq_class & mpq_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: -23376: inline mpq_class & mpq_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpq_class mpq_class::operator++(int) { mpq_class temp(*this); __gmp_unary_increment::eval(mp); return temp; } -23376: inline mpq_class & mpq_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpq_class mpq_class::operator--(int) { mpq_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; } -23376: -23376: -23376: -23376: template inline mpf_class & mpf_class::operator+=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpf_class & mpf_class::operator-=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpf_class & mpf_class::operator*=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: template inline mpf_class & mpf_class::operator/=(const __gmp_expr &expr) { __gmp_set_expr(mp, __gmp_expr, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr >(*this, t)); return *this; } -23376: -23376: inline mpf_class & mpf_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: inline mpf_class & mpf_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr >(*this, l)); return *this; } -23376: -23376: inline mpf_class & mpf_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpf_class mpf_class::operator++(int) { mpf_class temp(*this); __gmp_unary_increment::eval(mp); return temp; } -23376: inline mpf_class & mpf_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpf_class mpf_class::operator--(int) { mpf_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; } -23376: -23376: -23376: -23376: -23376: -23376: class __gmp_urandomb_value { }; -23376: class __gmp_urandomm_value { }; -23376: -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: __gmp_randstate_struct *state; -23376: mp_bitcnt_t bits; -23376: public: -23376: __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } -23376: void eval(mpz_ptr z) const { __gmp_rand_function::eval(z, state, bits); } -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } -23376: }; -23376: -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: __gmp_randstate_struct *state; -23376: mpz_class range; -23376: public: -23376: __gmp_expr(gmp_randstate_t s, const mpz_class &z) : state(s), range(z) { } -23376: void eval(mpz_ptr z) const -23376: { __gmp_rand_function::eval(z, state, range.get_mpz_t()); } -23376: mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } -23376: }; -23376: -23376: template <> -23376: class __gmp_expr -23376: { -23376: private: -23376: __gmp_randstate_struct *state; -23376: mp_bitcnt_t bits; -23376: public: -23376: __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { } -23376: void eval(mpf_ptr f) const -23376: { -23376: __gmp_rand_function::eval(f, state, -23376: (bits>0) ? bits : __gmpf_get_prec(f)); -23376: } -23376: mp_bitcnt_t get_prec() const -23376: { -23376: if (bits == 0) -23376: return __gmpf_get_default_prec(); -23376: else -23376: return bits; -23376: } -23376: }; -23376: -23376: extern "C" { -23376: typedef void __gmp_randinit_default_t (gmp_randstate_t); -23376: typedef void __gmp_randinit_lc_2exp_t (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t); -23376: typedef int __gmp_randinit_lc_2exp_size_t (gmp_randstate_t, mp_bitcnt_t); -23376: } -23376: -23376: class gmp_randclass -23376: { -23376: private: -23376: gmp_randstate_t state; -23376: -23376: -23376: gmp_randclass(const gmp_randclass &); -23376: void operator=(const gmp_randclass &); -23376: public: -23376: -23376: gmp_randclass(gmp_randalg_t alg, unsigned long int size) -23376: { -23376: switch (alg) -23376: { -23376: case GMP_RAND_ALG_LC: -23376: default: -23376: __gmp_randinit(state, alg, size); -23376: break; -23376: } -23376: } -23376: -23376: -23376: gmp_randclass(__gmp_randinit_default_t* f) { f(state); } -23376: -23376: -23376: gmp_randclass(__gmp_randinit_lc_2exp_t* f, -23376: mpz_class z, unsigned long int l1, mp_bitcnt_t l2) -23376: { f(state, z.get_mpz_t(), l1, l2); } -23376: -23376: -23376: gmp_randclass(__gmp_randinit_lc_2exp_size_t* f, -23376: mp_bitcnt_t size) -23376: { -23376: if (f (state, size) == 0) -23376: throw std::length_error ("gmp_randinit_lc_2exp_size"); -23376: } -23376: -23376: ~gmp_randclass() { __gmp_randclear(state); } -23376: -23376: -23376: void seed(); -23376: void seed(unsigned long int s) { __gmp_randseed_ui(state, s); } -23376: void seed(const mpz_class &z) { __gmp_randseed(state, z.get_mpz_t()); } -23376: -23376: -23376: __gmp_expr get_z_bits(mp_bitcnt_t l) -23376: { return __gmp_expr(state, l); } -23376: __gmp_expr get_z_bits(const mpz_class &z) -23376: { return get_z_bits(z.get_ui()); } -23376: -23376: -23376: __gmp_expr get_z_range(const mpz_class &z) -23376: { return __gmp_expr(state, z); } -23376: -23376: __gmp_expr get_f(mp_bitcnt_t prec = 0) -23376: { return __gmp_expr(state, prec); } -23376: }; -23376: -23376: -23376: -23376: -23376: namespace std { -23376: template <> class numeric_limits -23376: { -23376: public: -23376: static const bool is_specialized = true; -23376: static mpz_class min() { return mpz_class(); } -23376: static mpz_class max() { return mpz_class(); } -23376: static mpz_class lowest() { return mpz_class(); } -23376: static const int digits = 0; -23376: static const int digits10 = 0; -23376: static const int max_digits10 = 0; -23376: static const bool is_signed = true; -23376: static const bool is_integer = true; -23376: static const bool is_exact = true; -23376: static const int radix = 2; -23376: static mpz_class epsilon() { return mpz_class(); } -23376: static mpz_class round_error() { return mpz_class(); } -23376: static const int min_exponent = 0; -23376: static const int min_exponent10 = 0; -23376: static const int max_exponent = 0; -23376: static const int max_exponent10 = 0; -23376: static const bool has_infinity = false; -23376: static const bool has_quiet_NaN = false; -23376: static const bool has_signaling_NaN = false; -23376: static const float_denorm_style has_denorm = denorm_absent; -23376: static const bool has_denorm_loss = false; -23376: static mpz_class infinity() { return mpz_class(); } -23376: static mpz_class quiet_NaN() { return mpz_class(); } -23376: static mpz_class signaling_NaN() { return mpz_class(); } -23376: static mpz_class denorm_min() { return mpz_class(); } -23376: static const bool is_iec559 = false; -23376: static const bool is_bounded = false; -23376: static const bool is_modulo = false; -23376: static const bool traps = false; -23376: static const bool tinyness_before = false; -23376: static const float_round_style round_style = round_toward_zero; -23376: }; -23376: -23376: template <> class numeric_limits -23376: { -23376: public: -23376: static const bool is_specialized = true; -23376: static mpq_class min() { return mpq_class(); } -23376: static mpq_class max() { return mpq_class(); } -23376: static mpq_class lowest() { return mpq_class(); } -23376: static const int digits = 0; -23376: static const int digits10 = 0; -23376: static const int max_digits10 = 0; -23376: static const bool is_signed = true; -23376: static const bool is_integer = false; -23376: static const bool is_exact = true; -23376: static const int radix = 2; -23376: static mpq_class epsilon() { return mpq_class(); } -23376: static mpq_class round_error() { return mpq_class(); } -23376: static const int min_exponent = 0; -23376: static const int min_exponent10 = 0; -23376: static const int max_exponent = 0; -23376: static const int max_exponent10 = 0; -23376: static const bool has_infinity = false; -23376: static const bool has_quiet_NaN = false; -23376: static const bool has_signaling_NaN = false; -23376: static const float_denorm_style has_denorm = denorm_absent; -23376: static const bool has_denorm_loss = false; -23376: static mpq_class infinity() { return mpq_class(); } -23376: static mpq_class quiet_NaN() { return mpq_class(); } -23376: static mpq_class signaling_NaN() { return mpq_class(); } -23376: static mpq_class denorm_min() { return mpq_class(); } -23376: static const bool is_iec559 = false; -23376: static const bool is_bounded = false; -23376: static const bool is_modulo = false; -23376: static const bool traps = false; -23376: static const bool tinyness_before = false; -23376: static const float_round_style round_style = round_toward_zero; -23376: }; -23376: -23376: template <> class numeric_limits -23376: { -23376: public: -23376: static const bool is_specialized = true; -23376: static mpf_class min() { return mpf_class(); } -23376: static mpf_class max() { return mpf_class(); } -23376: static mpf_class lowest() { return mpf_class(); } -23376: static const int digits = 0; -23376: static const int digits10 = 0; -23376: static const int max_digits10 = 0; -23376: static const bool is_signed = true; -23376: static const bool is_integer = false; -23376: static const bool is_exact = false; -23376: static const int radix = 2; -23376: static mpf_class epsilon() { return mpf_class(); } -23376: static mpf_class round_error() { return mpf_class(); } -23376: static const int min_exponent = 0; -23376: static const int min_exponent10 = 0; -23376: static const int max_exponent = 0; -23376: static const int max_exponent10 = 0; -23376: static const bool has_infinity = false; -23376: static const bool has_quiet_NaN = false; -23376: static const bool has_signaling_NaN = false; -23376: static const float_denorm_style has_denorm = denorm_absent; -23376: static const bool has_denorm_loss = false; -23376: static mpf_class infinity() { return mpf_class(); } -23376: static mpf_class quiet_NaN() { return mpf_class(); } -23376: static mpf_class signaling_NaN() { return mpf_class(); } -23376: static mpf_class denorm_min() { return mpf_class(); } -23376: static const bool is_iec559 = false; -23376: static const bool is_bounded = false; -23376: static const bool is_modulo = false; -23376: static const bool traps = false; -23376: static const bool tinyness_before = false; -23376: static const float_round_style round_style = round_indeterminate; -23376: }; -23376: } -23376: # 29 "../../src/mp_std_bits_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 34 "../../src/mp_std_bits_defs.hh" -23376: void swap(mpz_class& x, mpz_class& y); -23376: -23376: -23376: -23376: -23376: void swap(mpq_class& x, mpq_class& y); -23376: # 173 "../../src/mp_std_bits_defs.hh" -23376: # 1 "../../src/mp_std_bits_inlines.hh" 1 -23376: # 28 "../../src/mp_std_bits_inlines.hh" -23376: inline void -23376: swap(mpz_class& x, mpz_class& y) { -23376: -23376: # 30 "../../src/mp_std_bits_inlines.hh" 3 4 -23376: __gmpz_swap -23376: # 30 "../../src/mp_std_bits_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: swap(mpq_class& x, mpq_class& y) { -23376: -23376: # 35 "../../src/mp_std_bits_inlines.hh" 3 4 -23376: __gmpq_swap -23376: # 35 "../../src/mp_std_bits_inlines.hh" -23376: (x.get_mpq_t(), y.get_mpq_t()); -23376: } -23376: # 174 "../../src/mp_std_bits_defs.hh" 2 -23376: # 28 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/Temp_defs.hh" 1 -23376: # 27 "../../src/Temp_defs.hh" -23376: # 1 "../../src/meta_programming.hh" 1 -23376: # 29 "../../src/meta_programming.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 102 "../../src/meta_programming.hh" -23376: template -23376: struct Compile_Time_Check; -23376: # 114 "../../src/meta_programming.hh" -23376: template <> -23376: struct Compile_Time_Check { -23376: }; -23376: # 142 "../../src/meta_programming.hh" -23376: template -23376: struct Bool { -23376: enum const_bool_value { -23376: value = b -23376: }; -23376: }; -23376: # 156 "../../src/meta_programming.hh" -23376: struct True : public Bool { -23376: }; -23376: # 166 "../../src/meta_programming.hh" -23376: struct False : public Bool { -23376: }; -23376: # 178 "../../src/meta_programming.hh" -23376: template -23376: struct Is_Same : public False { -23376: }; -23376: # 191 "../../src/meta_programming.hh" -23376: template -23376: struct Is_Same : public True { -23376: }; -23376: # 222 "../../src/meta_programming.hh" -23376: template -23376: struct Is_Same_Or_Derived { -23376: -23376: -23376: -23376: -23376: struct Any { -23376: -23376: template -23376: Any(const T&); -23376: }; -23376: -23376: -23376: static char func(const Base&); -23376: -23376: -23376: static double func(Any); -23376: -23376: -23376: static const Derived& derived_object(); -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_245 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(sizeof(char) != sizeof(double))>) } -23376: -23376: ; -23376: -23376: enum const_bool_value { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: value = (sizeof(func(derived_object())) == sizeof(char)) -23376: }; -23376: }; -23376: # 269 "../../src/meta_programming.hh" -23376: template -23376: struct Enable_If { -23376: }; -23376: -23376: template -23376: struct Enable_If_Is { -23376: typedef T type; -23376: }; -23376: # 304 "../../src/meta_programming.hh" -23376: template -23376: struct Enable_If { -23376: typedef T type; -23376: }; -23376: -23376: template -23376: struct Is_Native : public False { -23376: }; -23376: -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: template <> struct Is_Native : public True { }; -23376: # 335 "../../src/meta_programming.hh" -23376: template <> struct Is_Native : public True { }; -23376: -23376: template <> struct Is_Native : public True { }; -23376: -23376: } -23376: # 28 "../../src/Temp_defs.hh" 2 -23376: # 1 "../../src/Slow_Copy.hh" 1 -23376: # 30 "../../src/Slow_Copy.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Slow_Copy : public False { -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template <> -23376: struct Slow_Copy : public True { -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template <> -23376: struct Slow_Copy : public True { -23376: }; -23376: -23376: } -23376: # 29 "../../src/Temp_defs.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: template -23376: class Temp_Item { -23376: public: -23376: -23376: static Temp_Item& obtain(); -23376: -23376: -23376: static void release(Temp_Item& p); -23376: -23376: -23376: T& item(); -23376: -23376: private: -23376: -23376: T item_; -23376: -23376: -23376: Temp_Item* next; -23376: -23376: class Free_List { -23376: public: -23376: Free_List(); -23376: ~Free_List(); -23376: Temp_Item* head_ptr; -23376: private: -23376: Free_List(const Free_List&); -23376: Free_List& operator=(const Free_List&); -23376: }; -23376: -23376: friend class Free_List; -23376: -23376: -23376: static Temp_Item*& free_list_ref(); -23376: -23376: -23376: Temp_Item(); -23376: -23376: -23376: Temp_Item(const Temp_Item&); -23376: -23376: -23376: Temp_Item& operator=(const Temp_Item&); -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Temp_Reference_Holder { -23376: public: -23376: -23376: Temp_Reference_Holder(); -23376: -23376: -23376: ~Temp_Reference_Holder(); -23376: -23376: -23376: T& item(); -23376: -23376: private: -23376: -23376: Temp_Reference_Holder(const Temp_Reference_Holder&); -23376: -23376: -23376: Temp_Reference_Holder& operator=(const Temp_Reference_Holder&); -23376: -23376: -23376: Temp_Item& held; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Temp_Value_Holder { -23376: public: -23376: -23376: Temp_Value_Holder(); -23376: -23376: -23376: T& item(); -23376: -23376: private: -23376: -23376: Temp_Value_Holder(const Temp_Value_Holder&); -23376: -23376: -23376: Temp_Value_Holder& operator=(const Temp_Value_Holder&); -23376: -23376: -23376: T item_; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Dirty_Temp; -23376: -23376: -23376: -23376: -23376: template -23376: class Dirty_Temp::value>::type> -23376: : public Temp_Reference_Holder { -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Dirty_Temp::value>::type> -23376: : public Temp_Value_Holder { -23376: }; -23376: -23376: } -23376: -23376: # 1 "../../src/Temp_inlines.hh" 1 -23376: # 29 "../../src/Temp_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Temp_Item::Temp_Item() -23376: : item_() { -23376: } -23376: -23376: template -23376: inline T& -23376: Temp_Item::item() { -23376: return item_; -23376: } -23376: -23376: template -23376: inline -23376: Temp_Item::Free_List::Free_List() -23376: : head_ptr(0) { -23376: } -23376: -23376: template -23376: inline Temp_Item*& -23376: Temp_Item::free_list_ref() { -23376: static Free_List free_list; -23376: return free_list.head_ptr; -23376: } -23376: -23376: template -23376: inline Temp_Item& -23376: Temp_Item::obtain() { -23376: Temp_Item* const p = free_list_ref(); -23376: if (p != 0) { -23376: free_list_ref() = p->next; -23376: return *p; -23376: } -23376: else { -23376: return *new Temp_Item(); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Temp_Item::release(Temp_Item& p) { -23376: p.next = free_list_ref(); -23376: free_list_ref() = &p; -23376: } -23376: -23376: template -23376: inline -23376: Temp_Reference_Holder::Temp_Reference_Holder() -23376: : held(Temp_Item::obtain()) { -23376: } -23376: -23376: template -23376: inline -23376: Temp_Reference_Holder::~Temp_Reference_Holder() { -23376: Temp_Item::release(held); -23376: } -23376: -23376: template -23376: inline T& -23376: Temp_Reference_Holder::item() { -23376: return held.item(); -23376: } -23376: -23376: template -23376: inline -23376: Temp_Value_Holder::Temp_Value_Holder() { -23376: } -23376: -23376: template -23376: inline T& -23376: Temp_Value_Holder::item() { -23376: return item_; -23376: } -23376: -23376: } -23376: # 153 "../../src/Temp_defs.hh" 2 -23376: # 1 "../../src/Temp_templates.hh" 1 -23376: # 27 "../../src/Temp_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Temp_Item::Free_List::~Free_List() { -23376: while (head_ptr != 0) { -23376: Temp_Item* const p = head_ptr; -23376: head_ptr = head_ptr->next; -23376: delete p; -23376: } -23376: } -23376: -23376: } -23376: # 154 "../../src/Temp_defs.hh" 2 -23376: # 29 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/Rounding_Dir_defs.hh" 1 -23376: # 27 "../../src/Rounding_Dir_defs.hh" -23376: # 1 "../../src/Result_defs.hh" 1 -23376: # 27 "../../src/Result_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: enum Result_Class { -23376: -23376: VC_NORMAL = 0U << 4, -23376: -23376: -23376: VC_MINUS_INFINITY = 1U << 4, -23376: -23376: -23376: VC_PLUS_INFINITY = 2U << 4, -23376: -23376: -23376: VC_NAN = 3U << 4, -23376: -23376: VC_MASK = VC_NAN -23376: }; -23376: -23376: -23376: enum Result_Relation { -23376: -23376: VR_EMPTY = 0U, -23376: -23376: -23376: VR_EQ = 1U, -23376: -23376: -23376: VR_LT = 2U, -23376: -23376: -23376: VR_GT = 4U, -23376: -23376: -23376: VR_NE = VR_LT | VR_GT, -23376: -23376: -23376: VR_LE = VR_EQ | VR_LT, -23376: -23376: -23376: VR_GE = VR_EQ | VR_GT, -23376: -23376: -23376: VR_LGE = VR_LT | VR_EQ | VR_GT, -23376: -23376: VR_MASK = VR_LGE -23376: }; -23376: -23376: -23376: -23376: enum Result { -23376: -23376: V_EMPTY = VR_EMPTY, -23376: -23376: -23376: V_EQ = static_cast(VR_EQ), -23376: -23376: -23376: V_LT = static_cast(VR_LT), -23376: -23376: -23376: V_GT = static_cast(VR_GT), -23376: -23376: -23376: V_NE = VR_NE, -23376: -23376: -23376: V_LE = VR_LE, -23376: -23376: -23376: V_GE = VR_GE, -23376: -23376: -23376: V_LGE = VR_LGE, -23376: -23376: -23376: V_OVERFLOW = 1U << 6, -23376: -23376: -23376: V_LT_INF = V_LT | V_OVERFLOW, -23376: -23376: -23376: V_GT_SUP = V_GT | V_OVERFLOW, -23376: -23376: -23376: V_LT_PLUS_INFINITY = V_LT | static_cast(VC_PLUS_INFINITY), -23376: -23376: -23376: V_GT_MINUS_INFINITY = V_GT | static_cast(VC_MINUS_INFINITY), -23376: -23376: -23376: V_EQ_MINUS_INFINITY = V_EQ | static_cast(VC_MINUS_INFINITY), -23376: -23376: -23376: V_EQ_PLUS_INFINITY = V_EQ | static_cast(VC_PLUS_INFINITY), -23376: -23376: -23376: V_NAN = static_cast(VC_NAN), -23376: -23376: -23376: V_CVT_STR_UNK = V_NAN | (1U << 8), -23376: -23376: -23376: V_DIV_ZERO = V_NAN | (2U << 8), -23376: -23376: -23376: V_INF_ADD_INF = V_NAN | (3U << 8), -23376: -23376: -23376: V_INF_DIV_INF = V_NAN | (4U << 8), -23376: -23376: -23376: V_INF_MOD = V_NAN | (5U << 8), -23376: -23376: -23376: V_INF_MUL_ZERO = V_NAN | (6U << 8), -23376: -23376: -23376: V_INF_SUB_INF = V_NAN | (7U << 8), -23376: -23376: -23376: V_MOD_ZERO = V_NAN | (8U << 8), -23376: -23376: -23376: V_SQRT_NEG = V_NAN | (9U << 8), -23376: -23376: -23376: V_UNKNOWN_NEG_OVERFLOW = V_NAN | (10U << 8), -23376: -23376: -23376: V_UNKNOWN_POS_OVERFLOW = V_NAN | (11U << 8), -23376: -23376: -23376: V_UNREPRESENTABLE = 1U << 7 -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: Result operator&(Result x, Result y); -23376: -23376: -23376: Result operator|(Result x, Result y); -23376: -23376: -23376: Result operator-(Result x, Result y); -23376: -23376: -23376: -23376: -23376: -23376: Result_Class result_class(Result r); -23376: -23376: -23376: -23376: -23376: Result_Relation result_relation(Result r); -23376: -23376: -23376: Result result_relation_class(Result r); -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "../../src/Result_inlines.hh" 1 -23376: # 27 "../../src/Result_inlines.hh" -23376: # 1 "../../src/assertions.hh" 1 -23376: # 99 "../../src/assertions.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 110 "../../src/assertions.hh" -23376: void ppl_unreachable() __attribute__((weak, noreturn)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void ppl_unreachable_msg(const char* msg, -23376: const char* file, unsigned int line, -23376: const char* function) __attribute__((weak, noreturn)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void ppl_assertion_failed(const char* assertion_text, -23376: const char* file, unsigned int line, -23376: const char* function) __attribute__((weak, noreturn)); -23376: # 143 "../../src/assertions.hh" -23376: template -23376: bool copy_contains(T x_copy, T y_copy) { -23376: return x_copy.contains(y_copy); -23376: } -23376: -23376: } -23376: # 28 "../../src/Result_inlines.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: inline Result -23376: operator&(Result x, Result y) { -23376: const unsigned res = static_cast(x) & static_cast(y); -23376: return static_cast(res); -23376: } -23376: -23376: -23376: inline Result -23376: operator|(Result x, Result y) { -23376: const unsigned res = static_cast(x) | static_cast(y); -23376: return static_cast(res); -23376: } -23376: -23376: -23376: inline Result -23376: operator-(Result x, Result y) { -23376: const Result y_neg = static_cast(~static_cast(y)); -23376: return x & y_neg; -23376: } -23376: -23376: -23376: inline Result_Class -23376: result_class(Result r) { -23376: const Result rc = r & static_cast(VC_MASK); -23376: return static_cast(rc); -23376: } -23376: -23376: -23376: inline Result_Relation -23376: result_relation(Result r) { -23376: const Result rc = r & static_cast(VR_MASK); -23376: return static_cast(rc); -23376: } -23376: -23376: -23376: inline Result -23376: result_relation_class(Result r) { -23376: return r & (static_cast(VR_MASK) | static_cast(VC_MASK)); -23376: } -23376: -23376: inline int -23376: result_overflow(Result r) { -23376: switch (result_class(r)) { -23376: case VC_NORMAL: -23376: switch (r) { -23376: case V_LT_INF: -23376: return -1; -23376: case V_GT_SUP: -23376: return 1; -23376: default: -23376: break; -23376: } -23376: break; -23376: case VC_MINUS_INFINITY: -23376: return -1; -23376: case VC_PLUS_INFINITY: -23376: return 1; -23376: default: -23376: break; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: result_representable(Result r) { -23376: return (r & V_UNREPRESENTABLE) != V_UNREPRESENTABLE; -23376: } -23376: -23376: } -23376: # 194 "../../src/Result_defs.hh" 2 -23376: # 28 "../../src/Rounding_Dir_defs.hh" 2 -23376: # 1 "../../src/fpu_defs.hh" 1 -23376: # 27 "../../src/fpu_defs.hh" -23376: # 1 "../../src/fpu_types.hh" 1 -23376: # 20 "../../src/fpu_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: enum fpu_rounding_direction_type {}; -23376: enum fpu_rounding_control_word_type {}; -23376: -23376: } -23376: # 28 "../../src/fpu_defs.hh" 2 -23376: # 1 "../../src/compiler.hh" 1 -23376: # 27 "../../src/compiler.hh" -23376: # 1 "/usr/include/c++/8/cstddef" 1 3 -23376: # 42 "/usr/include/c++/8/cstddef" 3 -23376: -23376: # 43 "/usr/include/c++/8/cstddef" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include/stddef.h" 1 3 4 -23376: # 51 "/usr/include/c++/8/cstddef" 2 3 -23376: -23376: -23376: -23376: # 53 "/usr/include/c++/8/cstddef" 3 -23376: namespace std -23376: { -23376: -23376: using ::max_align_t; -23376: } -23376: # 28 "../../src/compiler.hh" 2 -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 29 "../../src/compiler.hh" 2 -23376: # 1 "/usr/include/c++/8/cassert" 1 3 -23376: # 41 "/usr/include/c++/8/cassert" 3 -23376: -23376: # 42 "/usr/include/c++/8/cassert" 3 -23376: -23376: -23376: # 1 "/usr/include/assert.h" 1 3 4 -23376: # 44 "/usr/include/c++/8/cassert" 2 3 -23376: # 30 "../../src/compiler.hh" 2 -23376: -23376: -23376: # 31 "../../src/compiler.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 47 "../../src/compiler.hh" -23376: template -23376: inline void -23376: PPL_CC_FLUSH(const T& x) { -23376: -23376: __asm__ __volatile__ ("" : "+m" (const_cast(x))); -23376: -23376: -23376: -23376: -23376: } -23376: # 67 "../../src/compiler.hh" -23376: template -23376: struct Suppress_Uninitialized_Warnings_Type { -23376: typedef T synonym; -23376: }; -23376: # 142 "../../src/compiler.hh" -23376: inline unsigned int -23376: clz(unsigned int u) { -23376: -23376: # 144 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 144 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_clz(u)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: inline unsigned int -23376: clz(unsigned long ul) { -23376: -23376: # 158 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 158 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_clzl(ul)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: inline unsigned int -23376: clz(unsigned long long ull) { -23376: -23376: # 172 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 172 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_clzll(ull)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: -23376: inline unsigned int -23376: ctz(unsigned int u) { -23376: -23376: # 187 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 187 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_ctz(u)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: inline unsigned int -23376: ctz(unsigned long ul) { -23376: -23376: # 201 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 201 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_ctzl(ul)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: inline unsigned int -23376: ctz(unsigned long long ull) { -23376: -23376: # 215 "../../src/compiler.hh" 3 4 -23376: (static_cast (0)) -23376: # 215 "../../src/compiler.hh" -23376: ; -23376: -23376: return static_cast(__builtin_ctzll(ull)); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: } -23376: # 29 "../../src/fpu_defs.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: void -23376: fpu_initialize_control_functions(); -23376: -23376: -23376: fpu_rounding_direction_type -23376: fpu_get_rounding_direction(); -23376: -23376: -23376: void -23376: fpu_set_rounding_direction(fpu_rounding_direction_type dir); -23376: -23376: -23376: -23376: -23376: -23376: fpu_rounding_control_word_type -23376: fpu_save_rounding_direction(fpu_rounding_direction_type dir); -23376: -23376: -23376: -23376: -23376: -23376: -23376: fpu_rounding_control_word_type -23376: fpu_save_rounding_direction_reset_inexact(fpu_rounding_direction_type dir); -23376: -23376: -23376: void -23376: fpu_restore_rounding_direction(fpu_rounding_control_word_type w); -23376: -23376: -23376: void -23376: fpu_reset_inexact(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int -23376: fpu_check_inexact(); -23376: -23376: -23376: -23376: } -23376: # 100 "../../src/fpu_defs.hh" -23376: # 1 "../../src/fpu-none_inlines.hh" 1 -23376: # 29 "../../src/fpu-none_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: fpu_initialize_control_functions() { -23376: throw std::logic_error("PPL::fpu_initialize_control_functions():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline fpu_rounding_direction_type -23376: fpu_get_rounding_direction() { -23376: throw std::logic_error("PPL::fpu_get_rounding_direction():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline void -23376: fpu_set_rounding_direction(int) { -23376: throw std::logic_error("PPL::fpu_set_rounding_direction():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline int -23376: fpu_save_rounding_direction(int) { -23376: throw std::logic_error("PPL::fpu_save_rounding_direction():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline void -23376: fpu_reset_inexact() { -23376: throw std::logic_error("PPL::fpu_reset_inexact():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline void -23376: fpu_restore_rounding_direction(int) { -23376: throw std::logic_error("PPL::fpu_restore_rounding_direction():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: inline int -23376: fpu_check_inexact() { -23376: throw std::logic_error("PPL::fpu_check_inexact():" -23376: " cannot control the FPU"); -23376: } -23376: -23376: } -23376: # 101 "../../src/fpu_defs.hh" 2 -23376: # 29 "../../src/Rounding_Dir_defs.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: enum Rounding_Dir { -23376: -23376: -23376: -23376: ROUND_DOWN = 0U, -23376: -23376: -23376: -23376: -23376: ROUND_UP = 1U, -23376: -23376: -23376: -23376: -23376: ROUND_IGNORE = 6U, -23376: ROUND_NATIVE = ROUND_IGNORE, -23376: -23376: -23376: -23376: -23376: -23376: -23376: ROUND_NOT_NEEDED = 7U, -23376: -23376: ROUND_DIRECT = ROUND_UP, -23376: ROUND_INVERSE = ROUND_DOWN, -23376: -23376: ROUND_DIR_MASK = 7U, -23376: -23376: -23376: -23376: -23376: -23376: ROUND_STRICT_RELATION = 8U, -23376: -23376: ROUND_CHECK = ROUND_DIRECT | ROUND_STRICT_RELATION -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: Rounding_Dir operator&(Rounding_Dir x, Rounding_Dir y); -23376: -23376: -23376: Rounding_Dir operator|(Rounding_Dir x, Rounding_Dir y); -23376: -23376: -23376: -23376: -23376: -23376: Rounding_Dir inverse(Rounding_Dir dir); -23376: -23376: -23376: Rounding_Dir round_dir(Rounding_Dir dir); -23376: -23376: -23376: bool round_down(Rounding_Dir dir); -23376: -23376: -23376: bool round_up(Rounding_Dir dir); -23376: -23376: -23376: bool round_ignore(Rounding_Dir dir); -23376: -23376: -23376: bool round_not_needed(Rounding_Dir dir); -23376: -23376: -23376: bool round_not_requested(Rounding_Dir dir); -23376: -23376: -23376: bool round_direct(Rounding_Dir dir); -23376: -23376: -23376: bool round_inverse(Rounding_Dir dir); -23376: -23376: -23376: bool round_strict_relation(Rounding_Dir dir); -23376: -23376: -23376: fpu_rounding_direction_type round_fpu_dir(Rounding_Dir dir); -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "../../src/Rounding_Dir_inlines.hh" 1 -23376: # 29 "../../src/Rounding_Dir_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: inline Rounding_Dir -23376: operator&(Rounding_Dir x, Rounding_Dir y) { -23376: const unsigned res = static_cast(x) & static_cast(y); -23376: return static_cast(res); -23376: } -23376: -23376: -23376: inline Rounding_Dir -23376: operator|(Rounding_Dir x, Rounding_Dir y) { -23376: const unsigned res = static_cast(x) | static_cast(y); -23376: return static_cast(res); -23376: } -23376: -23376: -23376: inline Rounding_Dir -23376: round_dir(Rounding_Dir dir) { -23376: return dir & ROUND_DIR_MASK; -23376: } -23376: -23376: -23376: inline bool -23376: round_down(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_DOWN; -23376: } -23376: -23376: -23376: inline bool -23376: round_up(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_UP; -23376: } -23376: -23376: -23376: inline bool -23376: round_ignore(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_IGNORE; -23376: } -23376: -23376: -23376: inline bool -23376: round_not_needed(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_NOT_NEEDED; -23376: } -23376: -23376: -23376: inline bool -23376: round_not_requested(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_IGNORE || round_dir(dir) == ROUND_NOT_NEEDED; -23376: } -23376: -23376: -23376: inline bool -23376: round_direct(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_DIRECT; -23376: } -23376: -23376: -23376: inline bool -23376: round_inverse(Rounding_Dir dir) { -23376: return round_dir(dir) == ROUND_INVERSE; -23376: } -23376: -23376: -23376: inline bool -23376: round_strict_relation(Rounding_Dir dir) { -23376: return (dir & ROUND_STRICT_RELATION) == ROUND_STRICT_RELATION; -23376: } -23376: # 124 "../../src/Rounding_Dir_inlines.hh" -23376: inline Rounding_Dir -23376: inverse(Rounding_Dir dir) { -23376: switch (round_dir(dir)) { -23376: case ROUND_UP: -23376: return ROUND_DOWN | (dir & ROUND_STRICT_RELATION); -23376: case ROUND_DOWN: -23376: return ROUND_UP | (dir & ROUND_STRICT_RELATION); -23376: case ROUND_IGNORE: -23376: return dir; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return dir; -23376: } -23376: } -23376: -23376: } -23376: # 122 "../../src/Rounding_Dir_defs.hh" 2 -23376: # 30 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/Numeric_Format_defs.hh" 1 -23376: # 30 "../../src/Numeric_Format_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Numeric_Format { -23376: }; -23376: -23376: } -23376: # 31 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/Float_defs.hh" 1 -23376: # 27 "../../src/Float_defs.hh" -23376: # 1 "../../src/globals_types.hh" 1 -23376: # 18 "../../src/globals_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: typedef size_t dimension_type; -23376: -23376: -23376: -23376: typedef size_t memory_size_type; -23376: -23376: -23376: -23376: enum Degenerate_Element { -23376: -23376: UNIVERSE, -23376: -23376: EMPTY -23376: }; -23376: -23376: -23376: -23376: -23376: enum Relation_Symbol { -23376: -23376: EQUAL = 1U, -23376: -23376: LESS_THAN = 2U, -23376: -23376: LESS_OR_EQUAL = LESS_THAN | EQUAL, -23376: -23376: GREATER_THAN = 4U, -23376: -23376: GREATER_OR_EQUAL = GREATER_THAN | EQUAL, -23376: -23376: NOT_EQUAL = LESS_THAN | GREATER_THAN -23376: }; -23376: -23376: -23376: -23376: enum Complexity_Class { -23376: -23376: POLYNOMIAL_COMPLEXITY, -23376: -23376: SIMPLEX_COMPLEXITY, -23376: -23376: ANY_COMPLEXITY -23376: }; -23376: -23376: -23376: -23376: enum Optimization_Mode { -23376: -23376: MINIMIZATION, -23376: -23376: MAXIMIZATION -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum Bounded_Integer_Type_Width { -23376: -23376: BITS_8 = 8, -23376: -23376: -23376: BITS_16 = 16, -23376: -23376: -23376: BITS_32 = 32, -23376: -23376: -23376: BITS_64 = 64, -23376: -23376: -23376: BITS_128 = 128 -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum Bounded_Integer_Type_Representation { -23376: -23376: UNSIGNED, -23376: -23376: -23376: -23376: -23376: -23376: SIGNED_2_COMPLEMENT -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum Bounded_Integer_Type_Overflow { -23376: -23376: -23376: -23376: -23376: -23376: -23376: OVERFLOW_WRAPS, -23376: # 143 "../../src/globals_types.hh" -23376: OVERFLOW_UNDEFINED, -23376: # 153 "../../src/globals_types.hh" -23376: OVERFLOW_IMPOSSIBLE -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum Representation { -23376: -23376: -23376: -23376: -23376: -23376: -23376: DENSE, -23376: # 177 "../../src/globals_types.hh" -23376: SPARSE -23376: }; -23376: # 187 "../../src/globals_types.hh" -23376: enum Floating_Point_Format { -23376: -23376: IEEE754_HALF, -23376: -23376: -23376: IEEE754_SINGLE, -23376: -23376: -23376: IEEE754_DOUBLE, -23376: -23376: -23376: IEEE754_QUAD, -23376: -23376: -23376: INTEL_DOUBLE_EXTENDED, -23376: -23376: -23376: IBM_SINGLE, -23376: -23376: -23376: IBM_DOUBLE -23376: }; -23376: -23376: struct Weightwatch_Traits; -23376: -23376: } -23376: # 28 "../../src/Float_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/Concrete_Expression_types.hh" 1 -23376: # 16 "../../src/Concrete_Expression_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 27 "../../src/Concrete_Expression_types.hh" -23376: template -23376: class Concrete_Expression; -23376: -23376: -23376: -23376: -23376: template -23376: class Binary_Operator; -23376: -23376: -23376: -23376: -23376: template -23376: class Unary_Operator; -23376: -23376: -23376: -23376: -23376: template -23376: class Cast_Operator; -23376: -23376: -23376: -23376: -23376: template -23376: class Integer_Constant; -23376: -23376: -23376: -23376: -23376: template -23376: class Floating_Point_Constant; -23376: -23376: -23376: -23376: -23376: template -23376: class Approximable_Reference; -23376: -23376: class Concrete_Expression_Type; -23376: # 78 "../../src/Concrete_Expression_types.hh" -23376: typedef int Concrete_Expression_Kind; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef int Concrete_Expression_BOP; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef int Concrete_Expression_UOP; -23376: -23376: } -23376: # 31 "../../src/Float_defs.hh" 2 -23376: # 1 "../../src/Variable_types.hh" 1 -23376: # 16 "../../src/Variable_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Variable; -23376: -23376: } -23376: # 32 "../../src/Float_defs.hh" 2 -23376: # 1 "../../src/Linear_Form_types.hh" 1 -23376: # 16 "../../src/Linear_Form_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Linear_Form; -23376: -23376: } -23376: # 33 "../../src/Float_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/set" 1 3 -23376: # 58 "/usr/include/c++/8/set" 3 -23376: -23376: # 59 "/usr/include/c++/8/set" 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_tree.h" 1 3 -23376: # 61 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: -23376: # 62 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/ext/aligned_buffer.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/aligned_buffer.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/aligned_buffer.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 40 "/usr/include/c++/8/ext/aligned_buffer.h" 3 -23376: namespace __gnu_cxx -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: struct __aligned_membuf -23376: { -23376: -23376: -23376: -23376: -23376: -23376: struct _Tp2 { _Tp _M_t; }; -23376: -23376: alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)]; -23376: -23376: __aligned_membuf() = default; -23376: -23376: -23376: __aligned_membuf(std::nullptr_t) { } -23376: -23376: void* -23376: _M_addr() noexcept -23376: { return static_cast(&_M_storage); } -23376: -23376: const void* -23376: _M_addr() const noexcept -23376: { return static_cast(&_M_storage); } -23376: -23376: _Tp* -23376: _M_ptr() noexcept -23376: { return static_cast<_Tp*>(_M_addr()); } -23376: -23376: const _Tp* -23376: _M_ptr() const noexcept -23376: { return static_cast(_M_addr()); } -23376: }; -23376: # 89 "/usr/include/c++/8/ext/aligned_buffer.h" 3 -23376: template -23376: struct __aligned_buffer -23376: : std::aligned_storage -23376: { -23376: typename -23376: std::aligned_storage::type _M_storage; -23376: -23376: __aligned_buffer() = default; -23376: -23376: -23376: __aligned_buffer(std::nullptr_t) { } -23376: -23376: void* -23376: _M_addr() noexcept -23376: { -23376: return static_cast(&_M_storage); -23376: } -23376: -23376: const void* -23376: _M_addr() const noexcept -23376: { -23376: return static_cast(&_M_storage); -23376: } -23376: -23376: _Tp* -23376: _M_ptr() noexcept -23376: { return static_cast<_Tp*>(_M_addr()); } -23376: -23376: const _Tp* -23376: _M_ptr() const noexcept -23376: { return static_cast(_M_addr()); } -23376: }; -23376: -23376: -23376: } -23376: # 70 "/usr/include/c++/8/bits/stl_tree.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 99 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: enum _Rb_tree_color { _S_red = false, _S_black = true }; -23376: -23376: struct _Rb_tree_node_base -23376: { -23376: typedef _Rb_tree_node_base* _Base_ptr; -23376: typedef const _Rb_tree_node_base* _Const_Base_ptr; -23376: -23376: _Rb_tree_color _M_color; -23376: _Base_ptr _M_parent; -23376: _Base_ptr _M_left; -23376: _Base_ptr _M_right; -23376: -23376: static _Base_ptr -23376: _S_minimum(_Base_ptr __x) noexcept -23376: { -23376: while (__x->_M_left != 0) __x = __x->_M_left; -23376: return __x; -23376: } -23376: -23376: static _Const_Base_ptr -23376: _S_minimum(_Const_Base_ptr __x) noexcept -23376: { -23376: while (__x->_M_left != 0) __x = __x->_M_left; -23376: return __x; -23376: } -23376: -23376: static _Base_ptr -23376: _S_maximum(_Base_ptr __x) noexcept -23376: { -23376: while (__x->_M_right != 0) __x = __x->_M_right; -23376: return __x; -23376: } -23376: -23376: static _Const_Base_ptr -23376: _S_maximum(_Const_Base_ptr __x) noexcept -23376: { -23376: while (__x->_M_right != 0) __x = __x->_M_right; -23376: return __x; -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct _Rb_tree_key_compare -23376: { -23376: _Key_compare _M_key_compare; -23376: -23376: _Rb_tree_key_compare() -23376: noexcept(is_nothrow_default_constructible<_Key_compare>::value) -23376: -23376: : _M_key_compare() -23376: { } -23376: -23376: _Rb_tree_key_compare(const _Key_compare& __comp) -23376: : _M_key_compare(__comp) -23376: { } -23376: -23376: -23376: -23376: _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default; -23376: -23376: _Rb_tree_key_compare(_Rb_tree_key_compare&& __x) -23376: noexcept(is_nothrow_copy_constructible<_Key_compare>::value) -23376: : _M_key_compare(__x._M_key_compare) -23376: { } -23376: -23376: }; -23376: -23376: -23376: struct _Rb_tree_header -23376: { -23376: _Rb_tree_node_base _M_header; -23376: size_t _M_node_count; -23376: -23376: _Rb_tree_header() noexcept -23376: { -23376: _M_header._M_color = _S_red; -23376: _M_reset(); -23376: } -23376: -23376: -23376: _Rb_tree_header(_Rb_tree_header&& __x) noexcept -23376: { -23376: if (__x._M_header._M_parent != nullptr) -23376: _M_move_data(__x); -23376: else -23376: { -23376: _M_header._M_color = _S_red; -23376: _M_reset(); -23376: } -23376: } -23376: -23376: -23376: void -23376: _M_move_data(_Rb_tree_header& __from) -23376: { -23376: _M_header._M_color = __from._M_header._M_color; -23376: _M_header._M_parent = __from._M_header._M_parent; -23376: _M_header._M_left = __from._M_header._M_left; -23376: _M_header._M_right = __from._M_header._M_right; -23376: _M_header._M_parent->_M_parent = &_M_header; -23376: _M_node_count = __from._M_node_count; -23376: -23376: __from._M_reset(); -23376: } -23376: -23376: void -23376: _M_reset() -23376: { -23376: _M_header._M_parent = 0; -23376: _M_header._M_left = &_M_header; -23376: _M_header._M_right = &_M_header; -23376: _M_node_count = 0; -23376: } -23376: }; -23376: -23376: template -23376: struct _Rb_tree_node : public _Rb_tree_node_base -23376: { -23376: typedef _Rb_tree_node<_Val>* _Link_type; -23376: # 231 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: __gnu_cxx::__aligned_membuf<_Val> _M_storage; -23376: -23376: _Val* -23376: _M_valptr() -23376: { return _M_storage._M_ptr(); } -23376: -23376: const _Val* -23376: _M_valptr() const -23376: { return _M_storage._M_ptr(); } -23376: -23376: }; -23376: -23376: __attribute__ ((__pure__)) _Rb_tree_node_base* -23376: _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); -23376: -23376: __attribute__ ((__pure__)) const _Rb_tree_node_base* -23376: _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); -23376: -23376: __attribute__ ((__pure__)) _Rb_tree_node_base* -23376: _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); -23376: -23376: __attribute__ ((__pure__)) const _Rb_tree_node_base* -23376: _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); -23376: -23376: template -23376: struct _Rb_tree_iterator -23376: { -23376: typedef _Tp value_type; -23376: typedef _Tp& reference; -23376: typedef _Tp* pointer; -23376: -23376: typedef bidirectional_iterator_tag iterator_category; -23376: typedef ptrdiff_t difference_type; -23376: -23376: typedef _Rb_tree_iterator<_Tp> _Self; -23376: typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; -23376: typedef _Rb_tree_node<_Tp>* _Link_type; -23376: -23376: _Rb_tree_iterator() noexcept -23376: : _M_node() { } -23376: -23376: explicit -23376: _Rb_tree_iterator(_Base_ptr __x) noexcept -23376: : _M_node(__x) { } -23376: -23376: reference -23376: operator*() const noexcept -23376: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } -23376: -23376: pointer -23376: operator->() const noexcept -23376: { return static_cast<_Link_type> (_M_node)->_M_valptr(); } -23376: -23376: _Self& -23376: operator++() noexcept -23376: { -23376: _M_node = _Rb_tree_increment(_M_node); -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator++(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: _M_node = _Rb_tree_increment(_M_node); -23376: return __tmp; -23376: } -23376: -23376: _Self& -23376: operator--() noexcept -23376: { -23376: _M_node = _Rb_tree_decrement(_M_node); -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator--(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: _M_node = _Rb_tree_decrement(_M_node); -23376: return __tmp; -23376: } -23376: -23376: bool -23376: operator==(const _Self& __x) const noexcept -23376: { return _M_node == __x._M_node; } -23376: -23376: bool -23376: operator!=(const _Self& __x) const noexcept -23376: { return _M_node != __x._M_node; } -23376: -23376: _Base_ptr _M_node; -23376: }; -23376: -23376: template -23376: struct _Rb_tree_const_iterator -23376: { -23376: typedef _Tp value_type; -23376: typedef const _Tp& reference; -23376: typedef const _Tp* pointer; -23376: -23376: typedef _Rb_tree_iterator<_Tp> iterator; -23376: -23376: typedef bidirectional_iterator_tag iterator_category; -23376: typedef ptrdiff_t difference_type; -23376: -23376: typedef _Rb_tree_const_iterator<_Tp> _Self; -23376: typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; -23376: typedef const _Rb_tree_node<_Tp>* _Link_type; -23376: -23376: _Rb_tree_const_iterator() noexcept -23376: : _M_node() { } -23376: -23376: explicit -23376: _Rb_tree_const_iterator(_Base_ptr __x) noexcept -23376: : _M_node(__x) { } -23376: -23376: _Rb_tree_const_iterator(const iterator& __it) noexcept -23376: : _M_node(__it._M_node) { } -23376: -23376: iterator -23376: _M_const_cast() const noexcept -23376: { return iterator(const_cast(_M_node)); } -23376: -23376: reference -23376: operator*() const noexcept -23376: { return *static_cast<_Link_type>(_M_node)->_M_valptr(); } -23376: -23376: pointer -23376: operator->() const noexcept -23376: { return static_cast<_Link_type>(_M_node)->_M_valptr(); } -23376: -23376: _Self& -23376: operator++() noexcept -23376: { -23376: _M_node = _Rb_tree_increment(_M_node); -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator++(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: _M_node = _Rb_tree_increment(_M_node); -23376: return __tmp; -23376: } -23376: -23376: _Self& -23376: operator--() noexcept -23376: { -23376: _M_node = _Rb_tree_decrement(_M_node); -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator--(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: _M_node = _Rb_tree_decrement(_M_node); -23376: return __tmp; -23376: } -23376: -23376: bool -23376: operator==(const _Self& __x) const noexcept -23376: { return _M_node == __x._M_node; } -23376: -23376: bool -23376: operator!=(const _Self& __x) const noexcept -23376: { return _M_node != __x._M_node; } -23376: -23376: _Base_ptr _M_node; -23376: }; -23376: -23376: template -23376: inline bool -23376: operator==(const _Rb_tree_iterator<_Val>& __x, -23376: const _Rb_tree_const_iterator<_Val>& __y) noexcept -23376: { return __x._M_node == __y._M_node; } -23376: -23376: template -23376: inline bool -23376: operator!=(const _Rb_tree_iterator<_Val>& __x, -23376: const _Rb_tree_const_iterator<_Val>& __y) noexcept -23376: { return __x._M_node != __y._M_node; } -23376: -23376: void -23376: _Rb_tree_insert_and_rebalance(const bool __insert_left, -23376: _Rb_tree_node_base* __x, -23376: _Rb_tree_node_base* __p, -23376: _Rb_tree_node_base& __header) throw (); -23376: -23376: _Rb_tree_node_base* -23376: _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, -23376: _Rb_tree_node_base& __header) throw (); -23376: -23376: -23376: template> -23376: struct __has_is_transparent -23376: { }; -23376: -23376: template -23376: struct __has_is_transparent<_Cmp, _SfinaeType, -23376: __void_t> -23376: { typedef void type; }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template > -23376: class _Rb_tree -23376: { -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Rb_tree_node<_Val> >::other _Node_allocator; -23376: -23376: typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits; -23376: -23376: -23376: static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{}, -23376: "comparison object must be invocable with two arguments of key type"); -23376: # 462 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: protected: -23376: typedef _Rb_tree_node_base* _Base_ptr; -23376: typedef const _Rb_tree_node_base* _Const_Base_ptr; -23376: typedef _Rb_tree_node<_Val>* _Link_type; -23376: typedef const _Rb_tree_node<_Val>* _Const_Link_type; -23376: -23376: private: -23376: -23376: -23376: struct _Reuse_or_alloc_node -23376: { -23376: _Reuse_or_alloc_node(_Rb_tree& __t) -23376: : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t) -23376: { -23376: if (_M_root) -23376: { -23376: _M_root->_M_parent = 0; -23376: -23376: if (_M_nodes->_M_left) -23376: _M_nodes = _M_nodes->_M_left; -23376: } -23376: else -23376: _M_nodes = 0; -23376: } -23376: -23376: -23376: _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete; -23376: -23376: -23376: ~_Reuse_or_alloc_node() -23376: { _M_t._M_erase(static_cast<_Link_type>(_M_root)); } -23376: -23376: template -23376: _Link_type -23376: -23376: -23376: -23376: operator()(_Arg&& __arg) -23376: -23376: { -23376: _Link_type __node = static_cast<_Link_type>(_M_extract()); -23376: if (__node) -23376: { -23376: _M_t._M_destroy_node(__node); -23376: _M_t._M_construct_node(__node, std::forward<_Arg>(__arg)); -23376: return __node; -23376: } -23376: -23376: return _M_t._M_create_node(std::forward<_Arg>(__arg)); -23376: } -23376: -23376: private: -23376: _Base_ptr -23376: _M_extract() -23376: { -23376: if (!_M_nodes) -23376: return _M_nodes; -23376: -23376: _Base_ptr __node = _M_nodes; -23376: _M_nodes = _M_nodes->_M_parent; -23376: if (_M_nodes) -23376: { -23376: if (_M_nodes->_M_right == __node) -23376: { -23376: _M_nodes->_M_right = 0; -23376: -23376: if (_M_nodes->_M_left) -23376: { -23376: _M_nodes = _M_nodes->_M_left; -23376: -23376: while (_M_nodes->_M_right) -23376: _M_nodes = _M_nodes->_M_right; -23376: -23376: if (_M_nodes->_M_left) -23376: _M_nodes = _M_nodes->_M_left; -23376: } -23376: } -23376: else -23376: _M_nodes->_M_left = 0; -23376: } -23376: else -23376: _M_root = 0; -23376: -23376: return __node; -23376: } -23376: -23376: _Base_ptr _M_root; -23376: _Base_ptr _M_nodes; -23376: _Rb_tree& _M_t; -23376: }; -23376: -23376: -23376: -23376: struct _Alloc_node -23376: { -23376: _Alloc_node(_Rb_tree& __t) -23376: : _M_t(__t) { } -23376: -23376: template -23376: _Link_type -23376: -23376: -23376: -23376: operator()(_Arg&& __arg) const -23376: -23376: { return _M_t._M_create_node(std::forward<_Arg>(__arg)); } -23376: -23376: private: -23376: _Rb_tree& _M_t; -23376: }; -23376: -23376: public: -23376: typedef _Key key_type; -23376: typedef _Val value_type; -23376: typedef value_type* pointer; -23376: typedef const value_type* const_pointer; -23376: typedef value_type& reference; -23376: typedef const value_type& const_reference; -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Alloc allocator_type; -23376: -23376: _Node_allocator& -23376: _M_get_Node_allocator() noexcept -23376: { return this->_M_impl; } -23376: -23376: const _Node_allocator& -23376: _M_get_Node_allocator() const noexcept -23376: { return this->_M_impl; } -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_get_Node_allocator()); } -23376: -23376: protected: -23376: _Link_type -23376: _M_get_node() -23376: { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); } -23376: -23376: void -23376: _M_put_node(_Link_type __p) noexcept -23376: { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); } -23376: # 630 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: template -23376: void -23376: _M_construct_node(_Link_type __node, _Args&&... __args) -23376: { -23376: try -23376: { -23376: ::new(__node) _Rb_tree_node<_Val>; -23376: _Alloc_traits::construct(_M_get_Node_allocator(), -23376: __node->_M_valptr(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: catch(...) -23376: { -23376: __node->~_Rb_tree_node<_Val>(); -23376: _M_put_node(__node); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: _Link_type -23376: _M_create_node(_Args&&... __args) -23376: { -23376: _Link_type __tmp = _M_get_node(); -23376: _M_construct_node(__tmp, std::forward<_Args>(__args)...); -23376: return __tmp; -23376: } -23376: -23376: void -23376: _M_destroy_node(_Link_type __p) noexcept -23376: { -23376: _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr()); -23376: __p->~_Rb_tree_node<_Val>(); -23376: } -23376: -23376: -23376: void -23376: _M_drop_node(_Link_type __p) noexcept -23376: { -23376: _M_destroy_node(__p); -23376: _M_put_node(__p); -23376: } -23376: -23376: template -23376: _Link_type -23376: _M_clone_node(_Const_Link_type __x, _NodeGen& __node_gen) -23376: { -23376: _Link_type __tmp = __node_gen(*__x->_M_valptr()); -23376: __tmp->_M_color = __x->_M_color; -23376: __tmp->_M_left = 0; -23376: __tmp->_M_right = 0; -23376: return __tmp; -23376: } -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: template -23376: -23376: struct _Rb_tree_impl -23376: : public _Node_allocator -23376: , public _Rb_tree_key_compare<_Key_compare> -23376: , public _Rb_tree_header -23376: { -23376: typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare; -23376: -23376: _Rb_tree_impl() -23376: noexcept(is_nothrow_default_constructible<_Node_allocator>::value && is_nothrow_default_constructible<_Base_key_compare>::value) -23376: -23376: -23376: : _Node_allocator() -23376: { } -23376: -23376: _Rb_tree_impl(const _Rb_tree_impl& __x) -23376: : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x)) -23376: , _Base_key_compare(__x._M_key_compare) -23376: { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: _Rb_tree_impl(_Rb_tree_impl&&) = default; -23376: -23376: _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a) -23376: : _Node_allocator(std::move(__a)), _Base_key_compare(__comp) -23376: { } -23376: -23376: }; -23376: -23376: _Rb_tree_impl<_Compare> _M_impl; -23376: -23376: protected: -23376: _Base_ptr& -23376: _M_root() noexcept -23376: { return this->_M_impl._M_header._M_parent; } -23376: -23376: _Const_Base_ptr -23376: _M_root() const noexcept -23376: { return this->_M_impl._M_header._M_parent; } -23376: -23376: _Base_ptr& -23376: _M_leftmost() noexcept -23376: { return this->_M_impl._M_header._M_left; } -23376: -23376: _Const_Base_ptr -23376: _M_leftmost() const noexcept -23376: { return this->_M_impl._M_header._M_left; } -23376: -23376: _Base_ptr& -23376: _M_rightmost() noexcept -23376: { return this->_M_impl._M_header._M_right; } -23376: -23376: _Const_Base_ptr -23376: _M_rightmost() const noexcept -23376: { return this->_M_impl._M_header._M_right; } -23376: -23376: _Link_type -23376: _M_begin() noexcept -23376: { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } -23376: -23376: _Const_Link_type -23376: _M_begin() const noexcept -23376: { -23376: return static_cast<_Const_Link_type> -23376: (this->_M_impl._M_header._M_parent); -23376: } -23376: -23376: _Base_ptr -23376: _M_end() noexcept -23376: { return &this->_M_impl._M_header; } -23376: -23376: _Const_Base_ptr -23376: _M_end() const noexcept -23376: { return &this->_M_impl._M_header; } -23376: -23376: static const_reference -23376: _S_value(_Const_Link_type __x) -23376: { return *__x->_M_valptr(); } -23376: -23376: static const _Key& -23376: _S_key(_Const_Link_type __x) -23376: { return _KeyOfValue()(_S_value(__x)); } -23376: -23376: static _Link_type -23376: _S_left(_Base_ptr __x) noexcept -23376: { return static_cast<_Link_type>(__x->_M_left); } -23376: -23376: static _Const_Link_type -23376: _S_left(_Const_Base_ptr __x) noexcept -23376: { return static_cast<_Const_Link_type>(__x->_M_left); } -23376: -23376: static _Link_type -23376: _S_right(_Base_ptr __x) noexcept -23376: { return static_cast<_Link_type>(__x->_M_right); } -23376: -23376: static _Const_Link_type -23376: _S_right(_Const_Base_ptr __x) noexcept -23376: { return static_cast<_Const_Link_type>(__x->_M_right); } -23376: -23376: static const_reference -23376: _S_value(_Const_Base_ptr __x) -23376: { return *static_cast<_Const_Link_type>(__x)->_M_valptr(); } -23376: -23376: static const _Key& -23376: _S_key(_Const_Base_ptr __x) -23376: { return _KeyOfValue()(_S_value(__x)); } -23376: -23376: static _Base_ptr -23376: _S_minimum(_Base_ptr __x) noexcept -23376: { return _Rb_tree_node_base::_S_minimum(__x); } -23376: -23376: static _Const_Base_ptr -23376: _S_minimum(_Const_Base_ptr __x) noexcept -23376: { return _Rb_tree_node_base::_S_minimum(__x); } -23376: -23376: static _Base_ptr -23376: _S_maximum(_Base_ptr __x) noexcept -23376: { return _Rb_tree_node_base::_S_maximum(__x); } -23376: -23376: static _Const_Base_ptr -23376: _S_maximum(_Const_Base_ptr __x) noexcept -23376: { return _Rb_tree_node_base::_S_maximum(__x); } -23376: -23376: public: -23376: typedef _Rb_tree_iterator iterator; -23376: typedef _Rb_tree_const_iterator const_iterator; -23376: -23376: typedef std::reverse_iterator reverse_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: # 832 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: pair<_Base_ptr, _Base_ptr> -23376: _M_get_insert_unique_pos(const key_type& __k); -23376: -23376: pair<_Base_ptr, _Base_ptr> -23376: _M_get_insert_equal_pos(const key_type& __k); -23376: -23376: pair<_Base_ptr, _Base_ptr> -23376: _M_get_insert_hint_unique_pos(const_iterator __pos, -23376: const key_type& __k); -23376: -23376: pair<_Base_ptr, _Base_ptr> -23376: _M_get_insert_hint_equal_pos(const_iterator __pos, -23376: const key_type& __k); -23376: -23376: private: -23376: -23376: template -23376: iterator -23376: _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&); -23376: -23376: iterator -23376: _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z); -23376: -23376: template -23376: iterator -23376: _M_insert_lower(_Base_ptr __y, _Arg&& __v); -23376: -23376: template -23376: iterator -23376: _M_insert_equal_lower(_Arg&& __x); -23376: -23376: iterator -23376: _M_insert_lower_node(_Base_ptr __p, _Link_type __z); -23376: -23376: iterator -23376: _M_insert_equal_lower_node(_Link_type __z); -23376: # 883 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: template -23376: _Link_type -23376: _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen&); -23376: -23376: template -23376: _Link_type -23376: _M_copy(const _Rb_tree& __x, _NodeGen& __gen) -23376: { -23376: _Link_type __root = _M_copy(__x._M_begin(), _M_end(), __gen); -23376: _M_leftmost() = _S_minimum(__root); -23376: _M_rightmost() = _S_maximum(__root); -23376: _M_impl._M_node_count = __x._M_impl._M_node_count; -23376: return __root; -23376: } -23376: -23376: _Link_type -23376: _M_copy(const _Rb_tree& __x) -23376: { -23376: _Alloc_node __an(*this); -23376: return _M_copy(__x, __an); -23376: } -23376: -23376: void -23376: _M_erase(_Link_type __x); -23376: -23376: iterator -23376: _M_lower_bound(_Link_type __x, _Base_ptr __y, -23376: const _Key& __k); -23376: -23376: const_iterator -23376: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, -23376: const _Key& __k) const; -23376: -23376: iterator -23376: _M_upper_bound(_Link_type __x, _Base_ptr __y, -23376: const _Key& __k); -23376: -23376: const_iterator -23376: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, -23376: const _Key& __k) const; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: _Rb_tree() = default; -23376: -23376: -23376: _Rb_tree(const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_impl(__comp, _Node_allocator(__a)) { } -23376: -23376: _Rb_tree(const _Rb_tree& __x) -23376: : _M_impl(__x._M_impl) -23376: { -23376: if (__x._M_root() != 0) -23376: _M_root() = _M_copy(__x); -23376: } -23376: -23376: -23376: _Rb_tree(const allocator_type& __a) -23376: : _M_impl(_Compare(), _Node_allocator(__a)) -23376: { } -23376: -23376: _Rb_tree(const _Rb_tree& __x, const allocator_type& __a) -23376: : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a)) -23376: { -23376: if (__x._M_root() != nullptr) -23376: _M_root() = _M_copy(__x); -23376: } -23376: -23376: _Rb_tree(_Rb_tree&&) = default; -23376: -23376: _Rb_tree(_Rb_tree&& __x, const allocator_type& __a) -23376: : _Rb_tree(std::move(__x), _Node_allocator(__a)) -23376: { } -23376: -23376: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a); -23376: -23376: -23376: ~_Rb_tree() noexcept -23376: { _M_erase(_M_begin()); } -23376: -23376: _Rb_tree& -23376: operator=(const _Rb_tree& __x); -23376: -23376: -23376: _Compare -23376: key_comp() const -23376: { return _M_impl._M_key_compare; } -23376: -23376: iterator -23376: begin() noexcept -23376: { return iterator(this->_M_impl._M_header._M_left); } -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return const_iterator(this->_M_impl._M_header._M_left); } -23376: -23376: iterator -23376: end() noexcept -23376: { return iterator(&this->_M_impl._M_header); } -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return const_iterator(&this->_M_impl._M_header); } -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(end()); } -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(begin()); } -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: bool -23376: empty() const noexcept -23376: { return _M_impl._M_node_count == 0; } -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_impl._M_node_count; } -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _Alloc_traits::max_size(_M_get_Node_allocator()); } -23376: -23376: void -23376: swap(_Rb_tree& __t) -23376: noexcept(__is_nothrow_swappable<_Compare>::value); -23376: -23376: -23376: -23376: template -23376: pair -23376: _M_insert_unique(_Arg&& __x); -23376: -23376: template -23376: iterator -23376: _M_insert_equal(_Arg&& __x); -23376: -23376: template -23376: iterator -23376: _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&); -23376: -23376: template -23376: iterator -23376: _M_insert_unique_(const_iterator __pos, _Arg&& __x) -23376: { -23376: _Alloc_node __an(*this); -23376: return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); -23376: } -23376: -23376: template -23376: iterator -23376: _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&); -23376: -23376: template -23376: iterator -23376: _M_insert_equal_(const_iterator __pos, _Arg&& __x) -23376: { -23376: _Alloc_node __an(*this); -23376: return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an); -23376: } -23376: -23376: template -23376: pair -23376: _M_emplace_unique(_Args&&... __args); -23376: -23376: template -23376: iterator -23376: _M_emplace_equal(_Args&&... __args); -23376: -23376: template -23376: iterator -23376: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args); -23376: -23376: template -23376: iterator -23376: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args); -23376: # 1103 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: template -23376: void -23376: _M_insert_unique(_InputIterator __first, _InputIterator __last); -23376: -23376: template -23376: void -23376: _M_insert_equal(_InputIterator __first, _InputIterator __last); -23376: -23376: private: -23376: void -23376: _M_erase_aux(const_iterator __position); -23376: -23376: void -23376: _M_erase_aux(const_iterator __first, const_iterator __last); -23376: -23376: public: -23376: -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __position) -23376: { -23376: ; -23376: const_iterator __result = __position; -23376: ++__result; -23376: _M_erase_aux(__position); -23376: return __result._M_const_cast(); -23376: } -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(iterator __position) -23376: { -23376: ; -23376: iterator __result = __position; -23376: ++__result; -23376: _M_erase_aux(__position); -23376: return __result; -23376: } -23376: # 1159 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: size_type -23376: erase(const key_type& __x); -23376: -23376: -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __first, const_iterator __last) -23376: { -23376: _M_erase_aux(__first, __last); -23376: return __last._M_const_cast(); -23376: } -23376: # 1181 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: void -23376: erase(const key_type* __first, const key_type* __last); -23376: -23376: void -23376: clear() noexcept -23376: { -23376: _M_erase(_M_begin()); -23376: _M_impl._M_reset(); -23376: } -23376: -23376: -23376: iterator -23376: find(const key_type& __k); -23376: -23376: const_iterator -23376: find(const key_type& __k) const; -23376: -23376: size_type -23376: count(const key_type& __k) const; -23376: -23376: iterator -23376: lower_bound(const key_type& __k) -23376: { return _M_lower_bound(_M_begin(), _M_end(), __k); } -23376: -23376: const_iterator -23376: lower_bound(const key_type& __k) const -23376: { return _M_lower_bound(_M_begin(), _M_end(), __k); } -23376: -23376: iterator -23376: upper_bound(const key_type& __k) -23376: { return _M_upper_bound(_M_begin(), _M_end(), __k); } -23376: -23376: const_iterator -23376: upper_bound(const key_type& __k) const -23376: { return _M_upper_bound(_M_begin(), _M_end(), __k); } -23376: -23376: pair -23376: equal_range(const key_type& __k); -23376: -23376: pair -23376: equal_range(const key_type& __k) const; -23376: -23376: -23376: template::type> -23376: iterator -23376: _M_find_tr(const _Kt& __k) -23376: { -23376: const _Rb_tree* __const_this = this; -23376: return __const_this->_M_find_tr(__k)._M_const_cast(); -23376: } -23376: -23376: template::type> -23376: const_iterator -23376: _M_find_tr(const _Kt& __k) const -23376: { -23376: auto __j = _M_lower_bound_tr(__k); -23376: if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node))) -23376: __j = end(); -23376: return __j; -23376: } -23376: -23376: template::type> -23376: size_type -23376: _M_count_tr(const _Kt& __k) const -23376: { -23376: auto __p = _M_equal_range_tr(__k); -23376: return std::distance(__p.first, __p.second); -23376: } -23376: -23376: template::type> -23376: iterator -23376: _M_lower_bound_tr(const _Kt& __k) -23376: { -23376: const _Rb_tree* __const_this = this; -23376: return __const_this->_M_lower_bound_tr(__k)._M_const_cast(); -23376: } -23376: -23376: template::type> -23376: const_iterator -23376: _M_lower_bound_tr(const _Kt& __k) const -23376: { -23376: auto __x = _M_begin(); -23376: auto __y = _M_end(); -23376: while (__x != 0) -23376: if (!_M_impl._M_key_compare(_S_key(__x), __k)) -23376: { -23376: __y = __x; -23376: __x = _S_left(__x); -23376: } -23376: else -23376: __x = _S_right(__x); -23376: return const_iterator(__y); -23376: } -23376: -23376: template::type> -23376: iterator -23376: _M_upper_bound_tr(const _Kt& __k) -23376: { -23376: const _Rb_tree* __const_this = this; -23376: return __const_this->_M_upper_bound_tr(__k)._M_const_cast(); -23376: } -23376: -23376: template::type> -23376: const_iterator -23376: _M_upper_bound_tr(const _Kt& __k) const -23376: { -23376: auto __x = _M_begin(); -23376: auto __y = _M_end(); -23376: while (__x != 0) -23376: if (_M_impl._M_key_compare(__k, _S_key(__x))) -23376: { -23376: __y = __x; -23376: __x = _S_left(__x); -23376: } -23376: else -23376: __x = _S_right(__x); -23376: return const_iterator(__y); -23376: } -23376: -23376: template::type> -23376: pair -23376: _M_equal_range_tr(const _Kt& __k) -23376: { -23376: const _Rb_tree* __const_this = this; -23376: auto __ret = __const_this->_M_equal_range_tr(__k); -23376: return { __ret.first._M_const_cast(), __ret.second._M_const_cast() }; -23376: } -23376: -23376: template::type> -23376: pair -23376: _M_equal_range_tr(const _Kt& __k) const -23376: { -23376: auto __low = _M_lower_bound_tr(__k); -23376: auto __high = __low; -23376: auto& __cmp = _M_impl._M_key_compare; -23376: while (__high != end() && !__cmp(__k, _S_key(__high._M_node))) -23376: ++__high; -23376: return { __low, __high }; -23376: } -23376: -23376: -23376: -23376: bool -23376: __rb_verify() const; -23376: -23376: -23376: _Rb_tree& -23376: operator=(_Rb_tree&&) -23376: noexcept(_Alloc_traits::_S_nothrow_move() -23376: && is_nothrow_move_assignable<_Compare>::value); -23376: -23376: template -23376: void -23376: _M_assign_unique(_Iterator, _Iterator); -23376: -23376: template -23376: void -23376: _M_assign_equal(_Iterator, _Iterator); -23376: -23376: private: -23376: -23376: void -23376: _M_move_data(_Rb_tree& __x, std::true_type) -23376: { _M_impl._M_move_data(__x._M_impl); } -23376: -23376: -23376: -23376: void -23376: _M_move_data(_Rb_tree&, std::false_type); -23376: -23376: -23376: void -23376: _M_move_assign(_Rb_tree&, std::true_type); -23376: -23376: -23376: -23376: void -23376: _M_move_assign(_Rb_tree&, std::false_type); -23376: # 1544 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: }; -23376: -23376: template -23376: inline bool -23376: operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { -23376: return __x.size() == __y.size() -23376: && std::equal(__x.begin(), __x.end(), __y.begin()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { -23376: return std::lexicographical_compare(__x.begin(), __x.end(), -23376: __y.begin(), __y.end()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator!=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator>(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator<=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: template -23376: inline void -23376: swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x, -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a) -23376: : _M_impl(__x._M_impl._M_key_compare, std::move(__a)) -23376: { -23376: using __eq = typename _Alloc_traits::is_always_equal; -23376: if (__x._M_root() != nullptr) -23376: _M_move_data(__x, __eq()); -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_move_data(_Rb_tree& __x, std::false_type) -23376: { -23376: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) -23376: _M_move_data(__x, std::true_type()); -23376: else -23376: { -23376: _Alloc_node __an(*this); -23376: auto __lbd = -23376: [&__an](const value_type& __cval) -23376: { -23376: auto& __val = const_cast(__cval); -23376: return __an(std::move_if_noexcept(__val)); -23376: }; -23376: _M_root() = _M_copy(__x, __lbd); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_move_assign(_Rb_tree& __x, true_type) -23376: { -23376: clear(); -23376: if (__x._M_root() != nullptr) -23376: _M_move_data(__x, std::true_type()); -23376: std::__alloc_on_move(_M_get_Node_allocator(), -23376: __x._M_get_Node_allocator()); -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_move_assign(_Rb_tree& __x, false_type) -23376: { -23376: if (_M_get_Node_allocator() == __x._M_get_Node_allocator()) -23376: return _M_move_assign(__x, true_type{}); -23376: -23376: -23376: -23376: _Reuse_or_alloc_node __roan(*this); -23376: _M_impl._M_reset(); -23376: if (__x._M_root() != nullptr) -23376: { -23376: auto __lbd = -23376: [&__roan](const value_type& __cval) -23376: { -23376: auto& __val = const_cast(__cval); -23376: return __roan(std::move_if_noexcept(__val)); -23376: }; -23376: _M_root() = _M_copy(__x, __lbd); -23376: __x.clear(); -23376: } -23376: } -23376: -23376: template -23376: inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: operator=(_Rb_tree&& __x) -23376: noexcept(_Alloc_traits::_S_nothrow_move() -23376: && is_nothrow_move_assignable<_Compare>::value) -23376: { -23376: _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare); -23376: _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>()); -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_assign_unique(_Iterator __first, _Iterator __last) -23376: { -23376: _Reuse_or_alloc_node __roan(*this); -23376: _M_impl._M_reset(); -23376: for (; __first != __last; ++__first) -23376: _M_insert_unique_(end(), *__first, __roan); -23376: } -23376: -23376: template -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_assign_equal(_Iterator __first, _Iterator __last) -23376: { -23376: _Reuse_or_alloc_node __roan(*this); -23376: _M_impl._M_reset(); -23376: for (; __first != __last; ++__first) -23376: _M_insert_equal_(end(), *__first, __roan); -23376: } -23376: -23376: -23376: template -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: operator=(const _Rb_tree& __x) -23376: { -23376: if (this != &__x) -23376: { -23376: -23376: -23376: if (_Alloc_traits::_S_propagate_on_copy_assign()) -23376: { -23376: auto& __this_alloc = this->_M_get_Node_allocator(); -23376: auto& __that_alloc = __x._M_get_Node_allocator(); -23376: if (!_Alloc_traits::_S_always_equal() -23376: && __this_alloc != __that_alloc) -23376: { -23376: -23376: -23376: clear(); -23376: std::__alloc_on_copy(__this_alloc, __that_alloc); -23376: } -23376: } -23376: -23376: -23376: _Reuse_or_alloc_node __roan(*this); -23376: _M_impl._M_reset(); -23376: _M_impl._M_key_compare = __x._M_impl._M_key_compare; -23376: if (__x._M_root() != 0) -23376: _M_root() = _M_copy(__x, __roan); -23376: } -23376: -23376: return *this; -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_(_Base_ptr __x, _Base_ptr __p, -23376: -23376: _Arg&& __v, -23376: -23376: -23376: -23376: _NodeGen& __node_gen) -23376: { -23376: bool __insert_left = (__x != 0 || __p == _M_end() -23376: || _M_impl._M_key_compare(_KeyOfValue()(__v), -23376: _S_key(__p))); -23376: -23376: _Link_type __z = __node_gen(std::forward<_Arg>(__v)); -23376: -23376: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, -23376: this->_M_impl._M_header); -23376: ++_M_impl._M_node_count; -23376: return iterator(__z); -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: -23376: _M_insert_lower(_Base_ptr __p, _Arg&& __v) -23376: -23376: -23376: -23376: { -23376: bool __insert_left = (__p == _M_end() -23376: || !_M_impl._M_key_compare(_S_key(__p), -23376: _KeyOfValue()(__v))); -23376: -23376: _Link_type __z = _M_create_node(std::forward<_Arg>(__v)); -23376: -23376: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, -23376: this->_M_impl._M_header); -23376: ++_M_impl._M_node_count; -23376: return iterator(__z); -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: -23376: _M_insert_equal_lower(_Arg&& __v) -23376: -23376: -23376: -23376: { -23376: _Link_type __x = _M_begin(); -23376: _Base_ptr __y = _M_end(); -23376: while (__x != 0) -23376: { -23376: __y = __x; -23376: __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ? -23376: _S_left(__x) : _S_right(__x); -23376: } -23376: return _M_insert_lower(__y, std::forward<_Arg>(__v)); -23376: } -23376: -23376: template -23376: template -23376: typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type -23376: _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: -23376: _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen) -23376: { -23376: -23376: _Link_type __top = _M_clone_node(__x, __node_gen); -23376: __top->_M_parent = __p; -23376: -23376: try -23376: { -23376: if (__x->_M_right) -23376: __top->_M_right = _M_copy(_S_right(__x), __top, __node_gen); -23376: __p = __top; -23376: __x = _S_left(__x); -23376: -23376: while (__x != 0) -23376: { -23376: _Link_type __y = _M_clone_node(__x, __node_gen); -23376: __p->_M_left = __y; -23376: __y->_M_parent = __p; -23376: if (__x->_M_right) -23376: __y->_M_right = _M_copy(_S_right(__x), __y, __node_gen); -23376: __p = __y; -23376: __x = _S_left(__x); -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_erase(__top); -23376: throw; -23376: } -23376: return __top; -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_erase(_Link_type __x) -23376: { -23376: -23376: while (__x != 0) -23376: { -23376: _M_erase(_S_right(__x)); -23376: _Link_type __y = _S_left(__x); -23376: _M_drop_node(__x); -23376: __x = __y; -23376: } -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_lower_bound(_Link_type __x, _Base_ptr __y, -23376: const _Key& __k) -23376: { -23376: while (__x != 0) -23376: if (!_M_impl._M_key_compare(_S_key(__x), __k)) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: __x = _S_right(__x); -23376: return iterator(__y); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::const_iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y, -23376: const _Key& __k) const -23376: { -23376: while (__x != 0) -23376: if (!_M_impl._M_key_compare(_S_key(__x), __k)) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: __x = _S_right(__x); -23376: return const_iterator(__y); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_upper_bound(_Link_type __x, _Base_ptr __y, -23376: const _Key& __k) -23376: { -23376: while (__x != 0) -23376: if (_M_impl._M_key_compare(__k, _S_key(__x))) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: __x = _S_right(__x); -23376: return iterator(__y); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::const_iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y, -23376: const _Key& __k) const -23376: { -23376: while (__x != 0) -23376: if (_M_impl._M_key_compare(__k, _S_key(__x))) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: __x = _S_right(__x); -23376: return const_iterator(__y); -23376: } -23376: -23376: template -23376: pair::iterator, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::iterator> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: equal_range(const _Key& __k) -23376: { -23376: _Link_type __x = _M_begin(); -23376: _Base_ptr __y = _M_end(); -23376: while (__x != 0) -23376: { -23376: if (_M_impl._M_key_compare(_S_key(__x), __k)) -23376: __x = _S_right(__x); -23376: else if (_M_impl._M_key_compare(__k, _S_key(__x))) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: { -23376: _Link_type __xu(__x); -23376: _Base_ptr __yu(__y); -23376: __y = __x, __x = _S_left(__x); -23376: __xu = _S_right(__xu); -23376: return pair(_M_lower_bound(__x, __y, __k), -23376: _M_upper_bound(__xu, __yu, __k)); -23376: } -23376: } -23376: return pair(iterator(__y), -23376: iterator(__y)); -23376: } -23376: -23376: template -23376: pair::const_iterator, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::const_iterator> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: equal_range(const _Key& __k) const -23376: { -23376: _Const_Link_type __x = _M_begin(); -23376: _Const_Base_ptr __y = _M_end(); -23376: while (__x != 0) -23376: { -23376: if (_M_impl._M_key_compare(_S_key(__x), __k)) -23376: __x = _S_right(__x); -23376: else if (_M_impl._M_key_compare(__k, _S_key(__x))) -23376: __y = __x, __x = _S_left(__x); -23376: else -23376: { -23376: _Const_Link_type __xu(__x); -23376: _Const_Base_ptr __yu(__y); -23376: __y = __x, __x = _S_left(__x); -23376: __xu = _S_right(__xu); -23376: return pair(_M_lower_bound(__x, __y, __k), -23376: _M_upper_bound(__xu, __yu, __k)); -23376: } -23376: } -23376: return pair(const_iterator(__y), -23376: const_iterator(__y)); -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: swap(_Rb_tree& __t) -23376: noexcept(__is_nothrow_swappable<_Compare>::value) -23376: { -23376: if (_M_root() == 0) -23376: { -23376: if (__t._M_root() != 0) -23376: _M_impl._M_move_data(__t._M_impl); -23376: } -23376: else if (__t._M_root() == 0) -23376: __t._M_impl._M_move_data(_M_impl); -23376: else -23376: { -23376: std::swap(_M_root(),__t._M_root()); -23376: std::swap(_M_leftmost(),__t._M_leftmost()); -23376: std::swap(_M_rightmost(),__t._M_rightmost()); -23376: -23376: _M_root()->_M_parent = _M_end(); -23376: __t._M_root()->_M_parent = __t._M_end(); -23376: std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); -23376: } -23376: -23376: std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare); -23376: -23376: _Alloc_traits::_S_on_swap(_M_get_Node_allocator(), -23376: __t._M_get_Node_allocator()); -23376: } -23376: -23376: template -23376: pair::_Base_ptr, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::_Base_ptr> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_get_insert_unique_pos(const key_type& __k) -23376: { -23376: typedef pair<_Base_ptr, _Base_ptr> _Res; -23376: _Link_type __x = _M_begin(); -23376: _Base_ptr __y = _M_end(); -23376: bool __comp = true; -23376: while (__x != 0) -23376: { -23376: __y = __x; -23376: __comp = _M_impl._M_key_compare(__k, _S_key(__x)); -23376: __x = __comp ? _S_left(__x) : _S_right(__x); -23376: } -23376: iterator __j = iterator(__y); -23376: if (__comp) -23376: { -23376: if (__j == begin()) -23376: return _Res(__x, __y); -23376: else -23376: --__j; -23376: } -23376: if (_M_impl._M_key_compare(_S_key(__j._M_node), __k)) -23376: return _Res(__x, __y); -23376: return _Res(__j._M_node, 0); -23376: } -23376: -23376: template -23376: pair::_Base_ptr, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::_Base_ptr> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_get_insert_equal_pos(const key_type& __k) -23376: { -23376: typedef pair<_Base_ptr, _Base_ptr> _Res; -23376: _Link_type __x = _M_begin(); -23376: _Base_ptr __y = _M_end(); -23376: while (__x != 0) -23376: { -23376: __y = __x; -23376: __x = _M_impl._M_key_compare(__k, _S_key(__x)) ? -23376: _S_left(__x) : _S_right(__x); -23376: } -23376: return _Res(__x, __y); -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: pair::iterator, bool> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: -23376: _M_insert_unique(_Arg&& __v) -23376: -23376: -23376: -23376: { -23376: typedef pair _Res; -23376: pair<_Base_ptr, _Base_ptr> __res -23376: = _M_get_insert_unique_pos(_KeyOfValue()(__v)); -23376: -23376: if (__res.second) -23376: { -23376: _Alloc_node __an(*this); -23376: return _Res(_M_insert_(__res.first, __res.second, -23376: std::forward<_Arg>(__v), __an), -23376: true); -23376: } -23376: -23376: return _Res(iterator(__res.first), false); -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: -23376: _M_insert_equal(_Arg&& __v) -23376: -23376: -23376: -23376: { -23376: pair<_Base_ptr, _Base_ptr> __res -23376: = _M_get_insert_equal_pos(_KeyOfValue()(__v)); -23376: _Alloc_node __an(*this); -23376: return _M_insert_(__res.first, __res.second, -23376: std::forward<_Arg>(__v), __an); -23376: } -23376: -23376: template -23376: pair::_Base_ptr, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::_Base_ptr> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_get_insert_hint_unique_pos(const_iterator __position, -23376: const key_type& __k) -23376: { -23376: iterator __pos = __position._M_const_cast(); -23376: typedef pair<_Base_ptr, _Base_ptr> _Res; -23376: -23376: -23376: if (__pos._M_node == _M_end()) -23376: { -23376: if (size() > 0 -23376: && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k)) -23376: return _Res(0, _M_rightmost()); -23376: else -23376: return _M_get_insert_unique_pos(__k); -23376: } -23376: else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node))) -23376: { -23376: -23376: iterator __before = __pos; -23376: if (__pos._M_node == _M_leftmost()) -23376: return _Res(_M_leftmost(), _M_leftmost()); -23376: else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k)) -23376: { -23376: if (_S_right(__before._M_node) == 0) -23376: return _Res(0, __before._M_node); -23376: else -23376: return _Res(__pos._M_node, __pos._M_node); -23376: } -23376: else -23376: return _M_get_insert_unique_pos(__k); -23376: } -23376: else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) -23376: { -23376: -23376: iterator __after = __pos; -23376: if (__pos._M_node == _M_rightmost()) -23376: return _Res(0, _M_rightmost()); -23376: else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node))) -23376: { -23376: if (_S_right(__pos._M_node) == 0) -23376: return _Res(0, __pos._M_node); -23376: else -23376: return _Res(__after._M_node, __after._M_node); -23376: } -23376: else -23376: return _M_get_insert_unique_pos(__k); -23376: } -23376: else -23376: -23376: return _Res(__pos._M_node, 0); -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_unique_(const_iterator __position, -23376: -23376: _Arg&& __v, -23376: -23376: -23376: -23376: _NodeGen& __node_gen) -23376: { -23376: pair<_Base_ptr, _Base_ptr> __res -23376: = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v)); -23376: -23376: if (__res.second) -23376: return _M_insert_(__res.first, __res.second, -23376: std::forward<_Arg>(__v), -23376: __node_gen); -23376: return iterator(__res.first); -23376: } -23376: -23376: template -23376: pair::_Base_ptr, -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::_Base_ptr> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k) -23376: { -23376: iterator __pos = __position._M_const_cast(); -23376: typedef pair<_Base_ptr, _Base_ptr> _Res; -23376: -23376: -23376: if (__pos._M_node == _M_end()) -23376: { -23376: if (size() > 0 -23376: && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost()))) -23376: return _Res(0, _M_rightmost()); -23376: else -23376: return _M_get_insert_equal_pos(__k); -23376: } -23376: else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k)) -23376: { -23376: -23376: iterator __before = __pos; -23376: if (__pos._M_node == _M_leftmost()) -23376: return _Res(_M_leftmost(), _M_leftmost()); -23376: else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node))) -23376: { -23376: if (_S_right(__before._M_node) == 0) -23376: return _Res(0, __before._M_node); -23376: else -23376: return _Res(__pos._M_node, __pos._M_node); -23376: } -23376: else -23376: return _M_get_insert_equal_pos(__k); -23376: } -23376: else -23376: { -23376: -23376: iterator __after = __pos; -23376: if (__pos._M_node == _M_rightmost()) -23376: return _Res(0, _M_rightmost()); -23376: else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k)) -23376: { -23376: if (_S_right(__pos._M_node) == 0) -23376: return _Res(0, __pos._M_node); -23376: else -23376: return _Res(__after._M_node, __after._M_node); -23376: } -23376: else -23376: return _Res(0, 0); -23376: } -23376: } -23376: -23376: template -23376: -23376: template -23376: -23376: -23376: -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_equal_(const_iterator __position, -23376: -23376: _Arg&& __v, -23376: -23376: -23376: -23376: _NodeGen& __node_gen) -23376: { -23376: pair<_Base_ptr, _Base_ptr> __res -23376: = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v)); -23376: -23376: if (__res.second) -23376: return _M_insert_(__res.first, __res.second, -23376: std::forward<_Arg>(__v), -23376: __node_gen); -23376: -23376: return _M_insert_equal_lower(std::forward<_Arg>(__v)); -23376: } -23376: -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z) -23376: { -23376: bool __insert_left = (__x != 0 || __p == _M_end() -23376: || _M_impl._M_key_compare(_S_key(__z), -23376: _S_key(__p))); -23376: -23376: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, -23376: this->_M_impl._M_header); -23376: ++_M_impl._M_node_count; -23376: return iterator(__z); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_lower_node(_Base_ptr __p, _Link_type __z) -23376: { -23376: bool __insert_left = (__p == _M_end() -23376: || !_M_impl._M_key_compare(_S_key(__p), -23376: _S_key(__z))); -23376: -23376: _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, -23376: this->_M_impl._M_header); -23376: ++_M_impl._M_node_count; -23376: return iterator(__z); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_insert_equal_lower_node(_Link_type __z) -23376: { -23376: _Link_type __x = _M_begin(); -23376: _Base_ptr __y = _M_end(); -23376: while (__x != 0) -23376: { -23376: __y = __x; -23376: __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ? -23376: _S_left(__x) : _S_right(__x); -23376: } -23376: return _M_insert_lower_node(__y, __z); -23376: } -23376: -23376: template -23376: template -23376: pair::iterator, bool> -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_emplace_unique(_Args&&... __args) -23376: { -23376: _Link_type __z = _M_create_node(std::forward<_Args>(__args)...); -23376: -23376: try -23376: { -23376: typedef pair _Res; -23376: auto __res = _M_get_insert_unique_pos(_S_key(__z)); -23376: if (__res.second) -23376: return _Res(_M_insert_node(__res.first, __res.second, __z), true); -23376: -23376: _M_drop_node(__z); -23376: return _Res(iterator(__res.first), false); -23376: } -23376: catch(...) -23376: { -23376: _M_drop_node(__z); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_emplace_equal(_Args&&... __args) -23376: { -23376: _Link_type __z = _M_create_node(std::forward<_Args>(__args)...); -23376: -23376: try -23376: { -23376: auto __res = _M_get_insert_equal_pos(_S_key(__z)); -23376: return _M_insert_node(__res.first, __res.second, __z); -23376: } -23376: catch(...) -23376: { -23376: _M_drop_node(__z); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args) -23376: { -23376: _Link_type __z = _M_create_node(std::forward<_Args>(__args)...); -23376: -23376: try -23376: { -23376: auto __res = _M_get_insert_hint_unique_pos(__pos, _S_key(__z)); -23376: -23376: if (__res.second) -23376: return _M_insert_node(__res.first, __res.second, __z); -23376: -23376: _M_drop_node(__z); -23376: return iterator(__res.first); -23376: } -23376: catch(...) -23376: { -23376: _M_drop_node(__z); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args) -23376: { -23376: _Link_type __z = _M_create_node(std::forward<_Args>(__args)...); -23376: -23376: try -23376: { -23376: auto __res = _M_get_insert_hint_equal_pos(__pos, _S_key(__z)); -23376: -23376: if (__res.second) -23376: return _M_insert_node(__res.first, __res.second, __z); -23376: -23376: return _M_insert_equal_lower_node(__z); -23376: } -23376: catch(...) -23376: { -23376: _M_drop_node(__z); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: -23376: _M_insert_unique(_II __first, _II __last) -23376: { -23376: _Alloc_node __an(*this); -23376: for (; __first != __last; ++__first) -23376: _M_insert_unique_(end(), *__first, __an); -23376: } -23376: -23376: template -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: -23376: _M_insert_equal(_II __first, _II __last) -23376: { -23376: _Alloc_node __an(*this); -23376: for (; __first != __last; ++__first) -23376: _M_insert_equal_(end(), *__first, __an); -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_erase_aux(const_iterator __position) -23376: { -23376: _Link_type __y = -23376: static_cast<_Link_type>(_Rb_tree_rebalance_for_erase -23376: (const_cast<_Base_ptr>(__position._M_node), -23376: this->_M_impl._M_header)); -23376: _M_drop_node(__y); -23376: --_M_impl._M_node_count; -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: _M_erase_aux(const_iterator __first, const_iterator __last) -23376: { -23376: if (__first == begin() && __last == end()) -23376: clear(); -23376: else -23376: while (__first != __last) -23376: _M_erase_aux(__first++); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: erase(const _Key& __x) -23376: { -23376: pair __p = equal_range(__x); -23376: const size_type __old_size = size(); -23376: _M_erase_aux(__p.first, __p.second); -23376: return __old_size - size(); -23376: } -23376: -23376: template -23376: void -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: erase(const _Key* __first, const _Key* __last) -23376: { -23376: while (__first != __last) -23376: erase(*__first++); -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: find(const _Key& __k) -23376: { -23376: iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); -23376: return (__j == end() -23376: || _M_impl._M_key_compare(__k, -23376: _S_key(__j._M_node))) ? end() : __j; -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, -23376: _Compare, _Alloc>::const_iterator -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: find(const _Key& __k) const -23376: { -23376: const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k); -23376: return (__j == end() -23376: || _M_impl._M_key_compare(__k, -23376: _S_key(__j._M_node))) ? end() : __j; -23376: } -23376: -23376: template -23376: typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type -23376: _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: -23376: count(const _Key& __k) const -23376: { -23376: pair __p = equal_range(__k); -23376: const size_type __n = std::distance(__p.first, __p.second); -23376: return __n; -23376: } -23376: -23376: __attribute__ ((__pure__)) unsigned int -23376: _Rb_tree_black_count(const _Rb_tree_node_base* __node, -23376: const _Rb_tree_node_base* __root) throw (); -23376: -23376: template -23376: bool -23376: _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const -23376: { -23376: if (_M_impl._M_node_count == 0 || begin() == end()) -23376: return _M_impl._M_node_count == 0 && begin() == end() -23376: && this->_M_impl._M_header._M_left == _M_end() -23376: && this->_M_impl._M_header._M_right == _M_end(); -23376: -23376: unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root()); -23376: for (const_iterator __it = begin(); __it != end(); ++__it) -23376: { -23376: _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node); -23376: _Const_Link_type __L = _S_left(__x); -23376: _Const_Link_type __R = _S_right(__x); -23376: -23376: if (__x->_M_color == _S_red) -23376: if ((__L && __L->_M_color == _S_red) -23376: || (__R && __R->_M_color == _S_red)) -23376: return false; -23376: -23376: if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L))) -23376: return false; -23376: if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x))) -23376: return false; -23376: -23376: if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len) -23376: return false; -23376: } -23376: -23376: if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root())) -23376: return false; -23376: if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root())) -23376: return false; -23376: return true; -23376: } -23376: # 2627 "/usr/include/c++/8/bits/stl_tree.h" 3 -23376: -23376: } -23376: # 61 "/usr/include/c++/8/set" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_set.h" 1 3 -23376: # 64 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: class multiset; -23376: # 92 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template, -23376: typename _Alloc = std::allocator<_Key> > -23376: class set -23376: { -23376: # 108 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: static_assert(is_same::type, _Key>::value, -23376: "std::set must have a non-const, non-volatile value_type"); -23376: -23376: -23376: -23376: -23376: -23376: -23376: public: -23376: -23376: -23376: -23376: typedef _Key key_type; -23376: typedef _Key value_type; -23376: typedef _Compare key_compare; -23376: typedef _Compare value_compare; -23376: typedef _Alloc allocator_type; -23376: -23376: -23376: private: -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Key>::other _Key_alloc_type; -23376: -23376: typedef _Rb_tree, -23376: key_compare, _Key_alloc_type> _Rep_type; -23376: _Rep_type _M_t; -23376: -23376: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; -23376: -23376: public: -23376: -23376: -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: -23376: -23376: -23376: typedef typename _Rep_type::const_iterator iterator; -23376: typedef typename _Rep_type::const_iterator const_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; -23376: typedef typename _Rep_type::size_type size_type; -23376: typedef typename _Rep_type::difference_type difference_type; -23376: # 167 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: set() = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: set(const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) { } -23376: # 190 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: set(_InputIterator __first, _InputIterator __last) -23376: : _M_t() -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 207 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: set(_InputIterator __first, _InputIterator __last, -23376: const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 223 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: set(const set&) = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: set(set&&) = default; -23376: # 243 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: set(initializer_list __l, -23376: const _Compare& __comp = _Compare(), -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__l.begin(), __l.end()); } -23376: -23376: -23376: explicit -23376: set(const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) { } -23376: -23376: -23376: set(const set& __x, const allocator_type& __a) -23376: : _M_t(__x._M_t, _Key_alloc_type(__a)) { } -23376: -23376: -23376: set(set&& __x, const allocator_type& __a) -23376: noexcept(is_nothrow_copy_constructible<_Compare>::value -23376: && _Alloc_traits::_S_always_equal()) -23376: : _M_t(std::move(__x._M_t), _Key_alloc_type(__a)) { } -23376: -23376: -23376: set(initializer_list __l, const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__l.begin(), __l.end()); } -23376: -23376: -23376: template -23376: set(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~set() = default; -23376: # 297 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: set& -23376: operator=(const set&) = default; -23376: -23376: -23376: set& -23376: operator=(set&&) = default; -23376: # 315 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: set& -23376: operator=(initializer_list __l) -23376: { -23376: _M_t._M_assign_unique(__l.begin(), __l.end()); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: key_compare -23376: key_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: value_compare -23376: value_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_t.get_allocator()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: cbegin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: cend() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: crbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: crend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return _M_t.empty(); } -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_t.size(); } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _M_t.max_size(); } -23376: # 440 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: void -23376: swap(set& __x) -23376: noexcept(__is_nothrow_swappable<_Compare>::value) -23376: { _M_t.swap(__x._M_t); } -23376: # 460 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: std::pair -23376: emplace(_Args&&... __args) -23376: { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); } -23376: # 486 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: iterator -23376: emplace_hint(const_iterator __pos, _Args&&... __args) -23376: { -23376: return _M_t._M_emplace_hint_unique(__pos, -23376: std::forward<_Args>(__args)...); -23376: } -23376: # 508 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: std::pair -23376: insert(const value_type& __x) -23376: { -23376: std::pair __p = -23376: _M_t._M_insert_unique(__x); -23376: return std::pair(__p.first, __p.second); -23376: } -23376: -23376: -23376: std::pair -23376: insert(value_type&& __x) -23376: { -23376: std::pair __p = -23376: _M_t._M_insert_unique(std::move(__x)); -23376: return std::pair(__p.first, __p.second); -23376: } -23376: # 545 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: iterator -23376: insert(const_iterator __position, const value_type& __x) -23376: { return _M_t._M_insert_unique_(__position, __x); } -23376: -23376: -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return _M_t._M_insert_unique_(__position, std::move(__x)); } -23376: # 564 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: void -23376: insert(_InputIterator __first, _InputIterator __last) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 577 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: void -23376: insert(initializer_list __l) -23376: { this->insert(__l.begin(), __l.end()); } -23376: # 652 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __position) -23376: { return _M_t.erase(__position); } -23376: # 683 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: size_type -23376: erase(const key_type& __x) -23376: { return _M_t.erase(__x); } -23376: # 704 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __first, const_iterator __last) -23376: { return _M_t.erase(__first, __last); } -23376: # 732 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: void -23376: clear() noexcept -23376: { _M_t.clear(); } -23376: # 747 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: size_type -23376: count(const key_type& __x) const -23376: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } -23376: -23376: -23376: template -23376: auto -23376: count(const _Kt& __x) const -23376: -> decltype(_M_t._M_count_tr(__x)) -23376: { return _M_t._M_count_tr(__x); } -23376: # 774 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: iterator -23376: find(const key_type& __x) -23376: { return _M_t.find(__x); } -23376: -23376: const_iterator -23376: find(const key_type& __x) const -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) -23376: -> decltype(iterator{_M_t._M_find_tr(__x)}) -23376: { return iterator{_M_t._M_find_tr(__x)}; } -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) const -23376: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) -23376: { return const_iterator{_M_t._M_find_tr(__x)}; } -23376: # 809 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: iterator -23376: lower_bound(const key_type& __x) -23376: { return _M_t.lower_bound(__x); } -23376: -23376: const_iterator -23376: lower_bound(const key_type& __x) const -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return iterator(_M_t._M_lower_bound_tr(__x)); } -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) const -23376: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 839 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: iterator -23376: upper_bound(const key_type& __x) -23376: { return _M_t.upper_bound(__x); } -23376: -23376: const_iterator -23376: upper_bound(const key_type& __x) const -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return iterator(_M_t._M_upper_bound_tr(__x)); } -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) const -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 878 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) -23376: { return _M_t.equal_range(__x); } -23376: -23376: std::pair -23376: equal_range(const key_type& __x) const -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) const -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: -23376: -23376: -23376: template -23376: friend bool -23376: operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); -23376: -23376: template -23376: friend bool -23376: operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&); -23376: }; -23376: # 956 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: inline bool -23376: operator==(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return __x._M_t == __y._M_t; } -23376: # 973 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: template -23376: inline bool -23376: operator<(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return __x._M_t < __y._M_t; } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const set<_Key, _Compare, _Alloc>& __x, -23376: const set<_Key, _Compare, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: # 1035 "/usr/include/c++/8/bits/stl_set.h" 3 -23376: -23376: } -23376: # 62 "/usr/include/c++/8/set" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_multiset.h" 1 3 -23376: # 64 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: class set; -23376: # 94 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template , -23376: typename _Alloc = std::allocator<_Key> > -23376: class multiset -23376: { -23376: # 110 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: static_assert(is_same::type, _Key>::value, -23376: "std::multiset must have a non-const, non-volatile value_type"); -23376: -23376: -23376: -23376: -23376: -23376: -23376: public: -23376: -23376: typedef _Key key_type; -23376: typedef _Key value_type; -23376: typedef _Compare key_compare; -23376: typedef _Compare value_compare; -23376: typedef _Alloc allocator_type; -23376: -23376: private: -23376: -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Key>::other _Key_alloc_type; -23376: -23376: typedef _Rb_tree, -23376: key_compare, _Key_alloc_type> _Rep_type; -23376: -23376: _Rep_type _M_t; -23376: -23376: typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits; -23376: -23376: public: -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: -23376: -23376: -23376: typedef typename _Rep_type::const_iterator iterator; -23376: typedef typename _Rep_type::const_iterator const_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator reverse_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; -23376: typedef typename _Rep_type::size_type size_type; -23376: typedef typename _Rep_type::difference_type difference_type; -23376: # 164 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset() = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: multiset(const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) { } -23376: # 186 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: multiset(_InputIterator __first, _InputIterator __last) -23376: : _M_t() -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 202 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: multiset(_InputIterator __first, _InputIterator __last, -23376: const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 218 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset(const multiset&) = default; -23376: # 227 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset(multiset&&) = default; -23376: # 239 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset(initializer_list __l, -23376: const _Compare& __comp = _Compare(), -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Key_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__l.begin(), __l.end()); } -23376: -23376: -23376: explicit -23376: multiset(const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) { } -23376: -23376: -23376: multiset(const multiset& __m, const allocator_type& __a) -23376: : _M_t(__m._M_t, _Key_alloc_type(__a)) { } -23376: -23376: -23376: multiset(multiset&& __m, const allocator_type& __a) -23376: noexcept(is_nothrow_copy_constructible<_Compare>::value -23376: && _Alloc_traits::_S_always_equal()) -23376: : _M_t(std::move(__m._M_t), _Key_alloc_type(__a)) { } -23376: -23376: -23376: multiset(initializer_list __l, const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__l.begin(), __l.end()); } -23376: -23376: -23376: template -23376: multiset(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a) -23376: : _M_t(_Compare(), _Key_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~multiset() = default; -23376: # 293 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset& -23376: operator=(const multiset&) = default; -23376: -23376: -23376: multiset& -23376: operator=(multiset&&) = default; -23376: # 311 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: multiset& -23376: operator=(initializer_list __l) -23376: { -23376: _M_t._M_assign_equal(__l.begin(), __l.end()); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: key_compare -23376: key_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: value_compare -23376: value_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_t.get_allocator()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: cbegin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: cend() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: crbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: crend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return _M_t.empty(); } -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_t.size(); } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _M_t.max_size(); } -23376: # 436 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: void -23376: swap(multiset& __x) -23376: noexcept(__is_nothrow_swappable<_Compare>::value) -23376: { _M_t.swap(__x._M_t); } -23376: # 455 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: iterator -23376: emplace(_Args&&... __args) -23376: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } -23376: # 481 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: iterator -23376: emplace_hint(const_iterator __pos, _Args&&... __args) -23376: { -23376: return _M_t._M_emplace_hint_equal(__pos, -23376: std::forward<_Args>(__args)...); -23376: } -23376: # 501 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: iterator -23376: insert(const value_type& __x) -23376: { return _M_t._M_insert_equal(__x); } -23376: -23376: -23376: iterator -23376: insert(value_type&& __x) -23376: { return _M_t._M_insert_equal(std::move(__x)); } -23376: # 531 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: iterator -23376: insert(const_iterator __position, const value_type& __x) -23376: { return _M_t._M_insert_equal_(__position, __x); } -23376: -23376: -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return _M_t._M_insert_equal_(__position, std::move(__x)); } -23376: # 549 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: void -23376: insert(_InputIterator __first, _InputIterator __last) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 562 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: void -23376: insert(initializer_list __l) -23376: { this->insert(__l.begin(), __l.end()); } -23376: # 637 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __position) -23376: { return _M_t.erase(__position); } -23376: # 668 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: size_type -23376: erase(const key_type& __x) -23376: { return _M_t.erase(__x); } -23376: # 689 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(const_iterator __first, const_iterator __last) -23376: { return _M_t.erase(__first, __last); } -23376: # 717 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: void -23376: clear() noexcept -23376: { _M_t.clear(); } -23376: # 729 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: size_type -23376: count(const key_type& __x) const -23376: { return _M_t.count(__x); } -23376: -23376: -23376: template -23376: auto -23376: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) -23376: { return _M_t._M_count_tr(__x); } -23376: # 755 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: iterator -23376: find(const key_type& __x) -23376: { return _M_t.find(__x); } -23376: -23376: const_iterator -23376: find(const key_type& __x) const -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) -23376: -> decltype(iterator{_M_t._M_find_tr(__x)}) -23376: { return iterator{_M_t._M_find_tr(__x)}; } -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) const -23376: -> decltype(const_iterator{_M_t._M_find_tr(__x)}) -23376: { return const_iterator{_M_t._M_find_tr(__x)}; } -23376: # 790 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: iterator -23376: lower_bound(const key_type& __x) -23376: { return _M_t.lower_bound(__x); } -23376: -23376: const_iterator -23376: lower_bound(const key_type& __x) const -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return iterator(_M_t._M_lower_bound_tr(__x)); } -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) const -23376: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 820 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: iterator -23376: upper_bound(const key_type& __x) -23376: { return _M_t.upper_bound(__x); } -23376: -23376: const_iterator -23376: upper_bound(const key_type& __x) const -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return iterator(_M_t._M_upper_bound_tr(__x)); } -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) const -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 859 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) -23376: { return _M_t.equal_range(__x); } -23376: -23376: std::pair -23376: equal_range(const key_type& __x) const -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) const -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: -23376: -23376: -23376: template -23376: friend bool -23376: operator==(const multiset<_K1, _C1, _A1>&, -23376: const multiset<_K1, _C1, _A1>&); -23376: -23376: template -23376: friend bool -23376: operator< (const multiset<_K1, _C1, _A1>&, -23376: const multiset<_K1, _C1, _A1>&); -23376: }; -23376: # 941 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: inline bool -23376: operator==(const multiset<_Key, _Compare, _Alloc>& __x, -23376: const multiset<_Key, _Compare, _Alloc>& __y) -23376: { return __x._M_t == __y._M_t; } -23376: # 958 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: template -23376: inline bool -23376: operator<(const multiset<_Key, _Compare, _Alloc>& __x, -23376: const multiset<_Key, _Compare, _Alloc>& __y) -23376: { return __x._M_t < __y._M_t; } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const multiset<_Key, _Compare, _Alloc>& __x, -23376: const multiset<_Key, _Compare, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const multiset<_Key,_Compare,_Alloc>& __x, -23376: const multiset<_Key,_Compare,_Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const multiset<_Key, _Compare, _Alloc>& __x, -23376: const multiset<_Key, _Compare, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const multiset<_Key, _Compare, _Alloc>& __x, -23376: const multiset<_Key, _Compare, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(multiset<_Key, _Compare, _Alloc>& __x, -23376: multiset<_Key, _Compare, _Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: # 1023 "/usr/include/c++/8/bits/stl_multiset.h" 3 -23376: -23376: } -23376: # 63 "/usr/include/c++/8/set" 2 3 -23376: # 34 "../../src/Float_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/math.h" 1 3 4 -23376: # 27 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libc-header-start.h" 1 3 4 -23376: # 28 "/usr/include/math.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/libm-simd-decl-stubs.h" 1 3 4 -23376: # 27 "/usr/include/arm-linux-gnueabihf/bits/math-vector.h" 2 3 4 -23376: # 41 "/usr/include/math.h" 2 3 4 -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/floatn.h" 1 3 4 -23376: # 44 "/usr/include/math.h" 2 3 4 -23376: # 138 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/flt-eval-method.h" 1 3 4 -23376: # 139 "/usr/include/math.h" 2 3 4 -23376: # 149 "/usr/include/math.h" 3 4 -23376: typedef float float_t; -23376: typedef double double_t; -23376: # 190 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-logb.h" 1 3 4 -23376: # 191 "/usr/include/math.h" 2 3 4 -23376: # 233 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/fp-fast.h" 1 3 4 -23376: # 234 "/usr/include/math.h" 2 3 4 -23376: -23376: -23376: -23376: enum -23376: { -23376: FP_INT_UPWARD = -23376: -23376: 0, -23376: FP_INT_DOWNWARD = -23376: -23376: 1, -23376: FP_INT_TOWARDZERO = -23376: -23376: 2, -23376: FP_INT_TONEARESTFROMZERO = -23376: -23376: 3, -23376: FP_INT_TONEAREST = -23376: -23376: 4, -23376: }; -23376: # 289 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 -23376: # 21 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 -23376: extern int __fpclassify (double __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int __signbit (double __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern int __isinf (double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __finite (double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __isnan (double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __iseqsig (double __x, double __y) throw (); -23376: -23376: -23376: extern int __issignaling (double __value) throw () -23376: __attribute__ ((__const__)); -23376: # 290 "/usr/include/math.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern double acos (double __x) throw (); extern double __acos (double __x) throw (); -23376: -23376: extern double asin (double __x) throw (); extern double __asin (double __x) throw (); -23376: -23376: extern double atan (double __x) throw (); extern double __atan (double __x) throw (); -23376: -23376: extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw (); -23376: -23376: -23376: extern double cos (double __x) throw (); extern double __cos (double __x) throw (); -23376: -23376: extern double sin (double __x) throw (); extern double __sin (double __x) throw (); -23376: -23376: extern double tan (double __x) throw (); extern double __tan (double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern double cosh (double __x) throw (); extern double __cosh (double __x) throw (); -23376: -23376: extern double sinh (double __x) throw (); extern double __sinh (double __x) throw (); -23376: -23376: extern double tanh (double __x) throw (); extern double __tanh (double __x) throw (); -23376: -23376: -23376: -23376: extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern double acosh (double __x) throw (); extern double __acosh (double __x) throw (); -23376: -23376: extern double asinh (double __x) throw (); extern double __asinh (double __x) throw (); -23376: -23376: extern double atanh (double __x) throw (); extern double __atanh (double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern double exp (double __x) throw (); extern double __exp (double __x) throw (); -23376: -23376: -23376: extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw (); -23376: -23376: -23376: extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw (); -23376: -23376: -23376: extern double log (double __x) throw (); extern double __log (double __x) throw (); -23376: -23376: -23376: extern double log10 (double __x) throw (); extern double __log10 (double __x) throw (); -23376: -23376: -23376: extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw (); -23376: -23376: -23376: extern double log1p (double __x) throw (); extern double __log1p (double __x) throw (); -23376: -23376: -23376: extern double logb (double __x) throw (); extern double __logb (double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw (); -23376: -23376: -23376: extern double log2 (double __x) throw (); extern double __log2 (double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw (); -23376: -23376: -23376: extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw (); -23376: -23376: -23376: -23376: extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw (); -23376: -23376: -23376: -23376: -23376: extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw (); -23376: # 182 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern int finite (double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw (); -23376: -23376: -23376: -23376: extern double significand (double __x) throw (); extern double __significand (double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern double nan (const char *__tagb) throw (); extern double __nan (const char *__tagb) throw (); -23376: # 217 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern double j0 (double) throw (); extern double __j0 (double) throw (); -23376: extern double j1 (double) throw (); extern double __j1 (double) throw (); -23376: extern double jn (int, double) throw (); extern double __jn (int, double) throw (); -23376: extern double y0 (double) throw (); extern double __y0 (double) throw (); -23376: extern double y1 (double) throw (); extern double __y1 (double) throw (); -23376: extern double yn (int, double) throw (); extern double __yn (int, double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern double erf (double) throw (); extern double __erf (double) throw (); -23376: extern double erfc (double) throw (); extern double __erfc (double) throw (); -23376: extern double lgamma (double) throw (); extern double __lgamma (double) throw (); -23376: -23376: -23376: -23376: -23376: extern double tgamma (double) throw (); extern double __tgamma (double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern double gamma (double) throw (); extern double __gamma (double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double rint (double __x) throw (); extern double __rint (double __x) throw (); -23376: -23376: -23376: extern double nextafter (double __x, double __y) throw (); extern double __nextafter (double __x, double __y) throw (); -23376: -23376: extern double nexttoward (double __x, long double __y) throw (); extern double __nexttoward (double __x, long double __y) throw (); -23376: -23376: -23376: -23376: -23376: extern double nextdown (double __x) throw (); extern double __nextdown (double __x) throw (); -23376: -23376: extern double nextup (double __x) throw (); extern double __nextup (double __x) throw (); -23376: -23376: -23376: -23376: extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw (); -23376: -23376: -23376: -23376: extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogb (double __x) throw (); extern long int __llogb (double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw (); -23376: -23376: -23376: -23376: extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw (); -23376: __extension__ -23376: extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw (); -23376: -23376: -23376: -23376: extern long int lround (double __x) throw (); extern long int __lround (double __x) throw (); -23376: __extension__ -23376: extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw (); -23376: -23376: -23376: -23376: extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw (); -23376: -23376: -23376: extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw (); -23376: -23376: -23376: -23376: -23376: extern double roundeven (double __x) throw () __attribute__ ((__const__)); extern double __roundeven (double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfp (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern double fmaxmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern double fminmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorder (double __x, double __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermag (double __x, double __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalize (double *__cx, const double *__x) throw (); -23376: -23376: -23376: extern double getpayload (const double *__x) throw (); extern double __getpayload (const double *__x) throw (); -23376: -23376: -23376: extern int setpayload (double *__x, double __payload) throw (); -23376: -23376: -23376: extern int setpayloadsig (double *__x, double __payload) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw (); -23376: # 291 "/usr/include/math.h" 2 3 4 -23376: # 306 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 -23376: # 21 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 -23376: extern int __fpclassifyf (float __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int __signbitf (float __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern int __isinff (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __finitef (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __isnanf (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __iseqsigf (float __x, float __y) throw (); -23376: -23376: -23376: extern int __issignalingf (float __value) throw () -23376: __attribute__ ((__const__)); -23376: # 307 "/usr/include/math.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern float acosf (float __x) throw (); extern float __acosf (float __x) throw (); -23376: -23376: extern float asinf (float __x) throw (); extern float __asinf (float __x) throw (); -23376: -23376: extern float atanf (float __x) throw (); extern float __atanf (float __x) throw (); -23376: -23376: extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw (); -23376: -23376: -23376: extern float cosf (float __x) throw (); extern float __cosf (float __x) throw (); -23376: -23376: extern float sinf (float __x) throw (); extern float __sinf (float __x) throw (); -23376: -23376: extern float tanf (float __x) throw (); extern float __tanf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: extern float coshf (float __x) throw (); extern float __coshf (float __x) throw (); -23376: -23376: extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw (); -23376: -23376: extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw (); -23376: -23376: -23376: -23376: extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw (); -23376: -23376: extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw (); -23376: -23376: extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern float expf (float __x) throw (); extern float __expf (float __x) throw (); -23376: -23376: -23376: extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw (); -23376: -23376: -23376: extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw (); -23376: -23376: -23376: extern float logf (float __x) throw (); extern float __logf (float __x) throw (); -23376: -23376: -23376: extern float log10f (float __x) throw (); extern float __log10f (float __x) throw (); -23376: -23376: -23376: extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw (); -23376: -23376: -23376: -23376: -23376: extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw (); -23376: -23376: -23376: extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw (); -23376: -23376: -23376: extern float logbf (float __x) throw (); extern float __logbf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw (); -23376: -23376: -23376: extern float log2f (float __x) throw (); extern float __log2f (float __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw (); -23376: -23376: -23376: extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw (); -23376: -23376: -23376: -23376: extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw (); -23376: -23376: -23376: -23376: -23376: extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw (); -23376: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern int isinff (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern int finitef (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw (); -23376: -23376: -23376: -23376: extern float significandf (float __x) throw (); extern float __significandf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern float nanf (const char *__tagb) throw (); extern float __nanf (const char *__tagb) throw (); -23376: # 211 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern int isnanf (float __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: -23376: extern float j0f (float) throw (); extern float __j0f (float) throw (); -23376: extern float j1f (float) throw (); extern float __j1f (float) throw (); -23376: extern float jnf (int, float) throw (); extern float __jnf (int, float) throw (); -23376: extern float y0f (float) throw (); extern float __y0f (float) throw (); -23376: extern float y1f (float) throw (); extern float __y1f (float) throw (); -23376: extern float ynf (int, float) throw (); extern float __ynf (int, float) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern float erff (float) throw (); extern float __erff (float) throw (); -23376: extern float erfcf (float) throw (); extern float __erfcf (float) throw (); -23376: extern float lgammaf (float) throw (); extern float __lgammaf (float) throw (); -23376: -23376: -23376: -23376: -23376: extern float tgammaf (float) throw (); extern float __tgammaf (float) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern float gammaf (float) throw (); extern float __gammaf (float) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float rintf (float __x) throw (); extern float __rintf (float __x) throw (); -23376: -23376: -23376: extern float nextafterf (float __x, float __y) throw (); extern float __nextafterf (float __x, float __y) throw (); -23376: -23376: extern float nexttowardf (float __x, long double __y) throw (); extern float __nexttowardf (float __x, long double __y) throw (); -23376: -23376: -23376: -23376: -23376: extern float nextdownf (float __x) throw (); extern float __nextdownf (float __x) throw (); -23376: -23376: extern float nextupf (float __x) throw (); extern float __nextupf (float __x) throw (); -23376: -23376: -23376: -23376: extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw (); -23376: -23376: -23376: -23376: extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogbf (float __x) throw (); extern long int __llogbf (float __x) throw (); -23376: -23376: -23376: -23376: -23376: extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw (); -23376: -23376: -23376: -23376: extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw (); -23376: __extension__ -23376: extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw (); -23376: -23376: -23376: -23376: extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw (); -23376: __extension__ -23376: extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw (); -23376: -23376: -23376: -23376: extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw (); -23376: -23376: -23376: extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw (); -23376: -23376: -23376: -23376: -23376: extern float roundevenf (float __x) throw () __attribute__ ((__const__)); extern float __roundevenf (float __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern float fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern float fminmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorderf (float __x, float __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermagf (float __x, float __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalizef (float *__cx, const float *__x) throw (); -23376: -23376: -23376: extern float getpayloadf (const float *__x) throw (); extern float __getpayloadf (const float *__x) throw (); -23376: -23376: -23376: extern int setpayloadf (float *__x, float __payload) throw (); -23376: -23376: -23376: extern int setpayloadsigf (float *__x, float __payload) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw (); -23376: # 308 "/usr/include/math.h" 2 3 4 -23376: # 349 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 1 3 4 -23376: # 21 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-helper-functions.h" 3 4 -23376: extern int __fpclassifyl (long double __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int __signbitl (long double __value) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern int __isinfl (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __finitel (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __isnanl (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int __iseqsigl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern int __issignalingl (long double __value) throw () -23376: __attribute__ ((__const__)); -23376: # 350 "/usr/include/math.h" 2 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw (); -23376: -23376: extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw (); -23376: -23376: extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw (); -23376: -23376: extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw (); -23376: -23376: -23376: extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw (); -23376: -23376: extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw (); -23376: -23376: extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw (); -23376: -23376: extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw (); -23376: -23376: extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw (); -23376: -23376: -23376: -23376: extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw (); -23376: -23376: extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw (); -23376: -23376: extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw (); -23376: -23376: -23376: extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw (); -23376: -23376: -23376: extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw (); -23376: -23376: -23376: extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw (); -23376: -23376: -23376: extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw (); -23376: -23376: -23376: extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw (); -23376: -23376: -23376: extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw (); -23376: -23376: -23376: extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw (); -23376: -23376: -23376: extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw (); -23376: -23376: -23376: -23376: extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw (); -23376: -23376: -23376: -23376: -23376: extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw (); -23376: # 177 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern int isinfl (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern int finitel (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw (); -23376: -23376: -23376: -23376: extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern long double nanl (const char *__tagb) throw (); extern long double __nanl (const char *__tagb) throw (); -23376: # 211 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern int isnanl (long double __value) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: -23376: extern long double j0l (long double) throw (); extern long double __j0l (long double) throw (); -23376: extern long double j1l (long double) throw (); extern long double __j1l (long double) throw (); -23376: extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw (); -23376: extern long double y0l (long double) throw (); extern long double __y0l (long double) throw (); -23376: extern long double y1l (long double) throw (); extern long double __y1l (long double) throw (); -23376: extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern long double erfl (long double) throw (); extern long double __erfl (long double) throw (); -23376: extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw (); -23376: extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw (); -23376: -23376: -23376: -23376: -23376: extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern long double gammal (long double) throw (); extern long double __gammal (long double) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw (); -23376: -23376: -23376: extern long double nextafterl (long double __x, long double __y) throw (); extern long double __nextafterl (long double __x, long double __y) throw (); -23376: -23376: extern long double nexttowardl (long double __x, long double __y) throw (); extern long double __nexttowardl (long double __x, long double __y) throw (); -23376: -23376: -23376: -23376: -23376: extern long double nextdownl (long double __x) throw (); extern long double __nextdownl (long double __x) throw (); -23376: -23376: extern long double nextupl (long double __x) throw (); extern long double __nextupl (long double __x) throw (); -23376: -23376: -23376: -23376: extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw (); -23376: -23376: -23376: -23376: extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogbl (long double __x) throw (); extern long int __llogbl (long double __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw (); -23376: -23376: -23376: -23376: extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw (); -23376: __extension__ -23376: extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw (); -23376: -23376: -23376: -23376: extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw (); -23376: __extension__ -23376: extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw (); -23376: -23376: -23376: -23376: extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw (); -23376: -23376: -23376: extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw (); -23376: -23376: -23376: -23376: -23376: extern long double roundevenl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundevenl (long double __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern long double fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern long double fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorderl (long double __x, long double __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermagl (long double __x, long double __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalizel (long double *__cx, const long double *__x) throw (); -23376: -23376: -23376: extern long double getpayloadl (const long double *__x) throw (); extern long double __getpayloadl (const long double *__x) throw (); -23376: -23376: -23376: extern int setpayloadl (long double *__x, long double __payload) throw (); -23376: -23376: -23376: extern int setpayloadsigl (long double *__x, long double __payload) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw (); -23376: # 351 "/usr/include/math.h" 2 3 4 -23376: # 389 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32 acosf32 (_Float32 __x) throw (); extern _Float32 __acosf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 asinf32 (_Float32 __x) throw (); extern _Float32 __asinf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 atanf32 (_Float32 __x) throw (); extern _Float32 __atanf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) throw (); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 cosf32 (_Float32 __x) throw (); extern _Float32 __cosf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 sinf32 (_Float32 __x) throw (); extern _Float32 __sinf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 tanf32 (_Float32 __x) throw (); extern _Float32 __tanf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 coshf32 (_Float32 __x) throw (); extern _Float32 __coshf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 sinhf32 (_Float32 __x) throw (); extern _Float32 __sinhf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 tanhf32 (_Float32 __x) throw (); extern _Float32 __tanhf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw (); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern _Float32 acoshf32 (_Float32 __x) throw (); extern _Float32 __acoshf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 asinhf32 (_Float32 __x) throw (); extern _Float32 __asinhf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 atanhf32 (_Float32 __x) throw (); extern _Float32 __atanhf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 expf32 (_Float32 __x) throw (); extern _Float32 __expf32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 frexpf32 (_Float32 __x, int *__exponent) throw (); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) throw (); -23376: -23376: -23376: extern _Float32 ldexpf32 (_Float32 __x, int __exponent) throw (); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) throw (); -23376: -23376: -23376: extern _Float32 logf32 (_Float32 __x) throw (); extern _Float32 __logf32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 log10f32 (_Float32 __x) throw (); extern _Float32 __log10f32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) throw (); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern _Float32 exp10f32 (_Float32 __x) throw (); extern _Float32 __exp10f32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 expm1f32 (_Float32 __x) throw (); extern _Float32 __expm1f32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 log1pf32 (_Float32 __x) throw (); extern _Float32 __log1pf32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 logbf32 (_Float32 __x) throw (); extern _Float32 __logbf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 exp2f32 (_Float32 __x) throw (); extern _Float32 __exp2f32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 log2f32 (_Float32 __x) throw (); extern _Float32 __log2f32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 powf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) throw (); -23376: -23376: -23376: extern _Float32 sqrtf32 (_Float32 __x) throw (); extern _Float32 __sqrtf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 cbrtf32 (_Float32 __x) throw (); extern _Float32 __cbrtf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 ceilf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 fabsf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 floorf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) throw (); -23376: # 196 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float32 nanf32 (const char *__tagb) throw (); extern _Float32 __nanf32 (const char *__tagb) throw (); -23376: # 217 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32 j0f32 (_Float32) throw (); extern _Float32 __j0f32 (_Float32) throw (); -23376: extern _Float32 j1f32 (_Float32) throw (); extern _Float32 __j1f32 (_Float32) throw (); -23376: extern _Float32 jnf32 (int, _Float32) throw (); extern _Float32 __jnf32 (int, _Float32) throw (); -23376: extern _Float32 y0f32 (_Float32) throw (); extern _Float32 __y0f32 (_Float32) throw (); -23376: extern _Float32 y1f32 (_Float32) throw (); extern _Float32 __y1f32 (_Float32) throw (); -23376: extern _Float32 ynf32 (int, _Float32) throw (); extern _Float32 __ynf32 (int, _Float32) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 erff32 (_Float32) throw (); extern _Float32 __erff32 (_Float32) throw (); -23376: extern _Float32 erfcf32 (_Float32) throw (); extern _Float32 __erfcf32 (_Float32) throw (); -23376: extern _Float32 lgammaf32 (_Float32) throw (); extern _Float32 __lgammaf32 (_Float32) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 tgammaf32 (_Float32) throw (); extern _Float32 __tgammaf32 (_Float32) throw (); -23376: # 249 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32 lgammaf32_r (_Float32, int *__signgamp) throw (); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 rintf32 (_Float32 __x) throw (); extern _Float32 __rintf32 (_Float32 __x) throw (); -23376: -23376: -23376: extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32 nextdownf32 (_Float32 __x) throw (); extern _Float32 __nextdownf32 (_Float32 __x) throw (); -23376: -23376: extern _Float32 nextupf32 (_Float32 __x) throw (); extern _Float32 __nextupf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) throw (); -23376: -23376: -23376: -23376: extern _Float32 scalbnf32 (_Float32 __x, int __n) throw (); extern _Float32 __scalbnf32 (_Float32 __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogbf32 (_Float32 __x) throw (); extern int __ilogbf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogbf32 (_Float32 __x) throw (); extern long int __llogbf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 scalblnf32 (_Float32 __x, long int __n) throw (); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern _Float32 nearbyintf32 (_Float32 __x) throw (); extern _Float32 __nearbyintf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern _Float32 roundf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern _Float32 truncf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw (); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrintf32 (_Float32 __x) throw (); extern long int __lrintf32 (_Float32 __x) throw (); -23376: __extension__ -23376: extern long long int llrintf32 (_Float32 __x) throw (); extern long long int __llrintf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern long int lroundf32 (_Float32 __x) throw (); extern long int __lroundf32 (_Float32 __x) throw (); -23376: __extension__ -23376: extern long long int llroundf32 (_Float32 __x) throw (); extern long long int __llroundf32 (_Float32 __x) throw (); -23376: -23376: -23376: -23376: extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) throw (); -23376: -23376: -23376: extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw (); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32 roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorderf32 (_Float32 __x, _Float32 __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermagf32 (_Float32 __x, _Float32 __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) throw (); -23376: -23376: -23376: extern _Float32 getpayloadf32 (const _Float32 *__x) throw (); extern _Float32 __getpayloadf32 (const _Float32 *__x) throw (); -23376: -23376: -23376: extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) throw (); -23376: -23376: -23376: extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) throw (); -23376: # 390 "/usr/include/math.h" 2 3 4 -23376: # 406 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float64 acosf64 (_Float64 __x) throw (); extern _Float64 __acosf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 asinf64 (_Float64 __x) throw (); extern _Float64 __asinf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 atanf64 (_Float64 __x) throw (); extern _Float64 __atanf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) throw (); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 cosf64 (_Float64 __x) throw (); extern _Float64 __cosf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 sinf64 (_Float64 __x) throw (); extern _Float64 __sinf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 tanf64 (_Float64 __x) throw (); extern _Float64 __tanf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 coshf64 (_Float64 __x) throw (); extern _Float64 __coshf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 sinhf64 (_Float64 __x) throw (); extern _Float64 __sinhf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 tanhf64 (_Float64 __x) throw (); extern _Float64 __tanhf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw (); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern _Float64 acoshf64 (_Float64 __x) throw (); extern _Float64 __acoshf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 asinhf64 (_Float64 __x) throw (); extern _Float64 __asinhf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 atanhf64 (_Float64 __x) throw (); extern _Float64 __atanhf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 expf64 (_Float64 __x) throw (); extern _Float64 __expf64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 frexpf64 (_Float64 __x, int *__exponent) throw (); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) throw (); -23376: -23376: -23376: extern _Float64 ldexpf64 (_Float64 __x, int __exponent) throw (); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) throw (); -23376: -23376: -23376: extern _Float64 logf64 (_Float64 __x) throw (); extern _Float64 __logf64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 log10f64 (_Float64 __x) throw (); extern _Float64 __log10f64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) throw (); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern _Float64 exp10f64 (_Float64 __x) throw (); extern _Float64 __exp10f64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 expm1f64 (_Float64 __x) throw (); extern _Float64 __expm1f64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 log1pf64 (_Float64 __x) throw (); extern _Float64 __log1pf64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 logbf64 (_Float64 __x) throw (); extern _Float64 __logbf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 exp2f64 (_Float64 __x) throw (); extern _Float64 __exp2f64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 log2f64 (_Float64 __x) throw (); extern _Float64 __log2f64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 powf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float64 sqrtf64 (_Float64 __x) throw (); extern _Float64 __sqrtf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 cbrtf64 (_Float64 __x) throw (); extern _Float64 __cbrtf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 ceilf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 fabsf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 floorf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) throw (); -23376: # 196 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float64 nanf64 (const char *__tagb) throw (); extern _Float64 __nanf64 (const char *__tagb) throw (); -23376: # 217 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float64 j0f64 (_Float64) throw (); extern _Float64 __j0f64 (_Float64) throw (); -23376: extern _Float64 j1f64 (_Float64) throw (); extern _Float64 __j1f64 (_Float64) throw (); -23376: extern _Float64 jnf64 (int, _Float64) throw (); extern _Float64 __jnf64 (int, _Float64) throw (); -23376: extern _Float64 y0f64 (_Float64) throw (); extern _Float64 __y0f64 (_Float64) throw (); -23376: extern _Float64 y1f64 (_Float64) throw (); extern _Float64 __y1f64 (_Float64) throw (); -23376: extern _Float64 ynf64 (int, _Float64) throw (); extern _Float64 __ynf64 (int, _Float64) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 erff64 (_Float64) throw (); extern _Float64 __erff64 (_Float64) throw (); -23376: extern _Float64 erfcf64 (_Float64) throw (); extern _Float64 __erfcf64 (_Float64) throw (); -23376: extern _Float64 lgammaf64 (_Float64) throw (); extern _Float64 __lgammaf64 (_Float64) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 tgammaf64 (_Float64) throw (); extern _Float64 __tgammaf64 (_Float64) throw (); -23376: # 249 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float64 lgammaf64_r (_Float64, int *__signgamp) throw (); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 rintf64 (_Float64 __x) throw (); extern _Float64 __rintf64 (_Float64 __x) throw (); -23376: -23376: -23376: extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float64 nextdownf64 (_Float64 __x) throw (); extern _Float64 __nextdownf64 (_Float64 __x) throw (); -23376: -23376: extern _Float64 nextupf64 (_Float64 __x) throw (); extern _Float64 __nextupf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: -23376: extern _Float64 scalbnf64 (_Float64 __x, int __n) throw (); extern _Float64 __scalbnf64 (_Float64 __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogbf64 (_Float64 __x) throw (); extern int __ilogbf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogbf64 (_Float64 __x) throw (); extern long int __llogbf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 scalblnf64 (_Float64 __x, long int __n) throw (); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern _Float64 nearbyintf64 (_Float64 __x) throw (); extern _Float64 __nearbyintf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern _Float64 roundf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern _Float64 truncf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw (); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrintf64 (_Float64 __x) throw (); extern long int __lrintf64 (_Float64 __x) throw (); -23376: __extension__ -23376: extern long long int llrintf64 (_Float64 __x) throw (); extern long long int __llrintf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern long int lroundf64 (_Float64 __x) throw (); extern long int __lroundf64 (_Float64 __x) throw (); -23376: __extension__ -23376: extern long long int llroundf64 (_Float64 __x) throw (); extern long long int __llroundf64 (_Float64 __x) throw (); -23376: -23376: -23376: -23376: extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw (); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float64 roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorderf64 (_Float64 __x, _Float64 __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermagf64 (_Float64 __x, _Float64 __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) throw (); -23376: -23376: -23376: extern _Float64 getpayloadf64 (const _Float64 *__x) throw (); extern _Float64 __getpayloadf64 (const _Float64 *__x) throw (); -23376: -23376: -23376: extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) throw (); -23376: -23376: -23376: extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) throw (); -23376: # 407 "/usr/include/math.h" 2 3 4 -23376: # 440 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 1 3 4 -23376: # 53 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32x acosf32x (_Float32x __x) throw (); extern _Float32x __acosf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x asinf32x (_Float32x __x) throw (); extern _Float32x __asinf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x atanf32x (_Float32x __x) throw (); extern _Float32x __atanf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) throw (); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x cosf32x (_Float32x __x) throw (); extern _Float32x __cosf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x sinf32x (_Float32x __x) throw (); extern _Float32x __sinf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x tanf32x (_Float32x __x) throw (); extern _Float32x __tanf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x coshf32x (_Float32x __x) throw (); extern _Float32x __coshf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x sinhf32x (_Float32x __x) throw (); extern _Float32x __sinhf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x tanhf32x (_Float32x __x) throw (); extern _Float32x __tanhf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw (); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern _Float32x acoshf32x (_Float32x __x) throw (); extern _Float32x __acoshf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x asinhf32x (_Float32x __x) throw (); extern _Float32x __asinhf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x atanhf32x (_Float32x __x) throw (); extern _Float32x __atanhf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x expf32x (_Float32x __x) throw (); extern _Float32x __expf32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x frexpf32x (_Float32x __x, int *__exponent) throw (); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) throw (); -23376: -23376: -23376: extern _Float32x ldexpf32x (_Float32x __x, int __exponent) throw (); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) throw (); -23376: -23376: -23376: extern _Float32x logf32x (_Float32x __x) throw (); extern _Float32x __logf32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x log10f32x (_Float32x __x) throw (); extern _Float32x __log10f32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) throw (); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) throw () __attribute__ ((__nonnull__ (2))); -23376: -23376: -23376: -23376: extern _Float32x exp10f32x (_Float32x __x) throw (); extern _Float32x __exp10f32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x expm1f32x (_Float32x __x) throw (); extern _Float32x __expm1f32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x log1pf32x (_Float32x __x) throw (); extern _Float32x __log1pf32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x logbf32x (_Float32x __x) throw (); extern _Float32x __logbf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x exp2f32x (_Float32x __x) throw (); extern _Float32x __exp2f32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x log2f32x (_Float32x __x) throw (); extern _Float32x __log2f32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x powf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: extern _Float32x sqrtf32x (_Float32x __x) throw (); extern _Float32x __sqrtf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x cbrtf32x (_Float32x __x) throw (); extern _Float32x __cbrtf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x ceilf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x fabsf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x floorf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) throw (); -23376: # 196 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float32x nanf32x (const char *__tagb) throw (); extern _Float32x __nanf32x (const char *__tagb) throw (); -23376: # 217 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32x j0f32x (_Float32x) throw (); extern _Float32x __j0f32x (_Float32x) throw (); -23376: extern _Float32x j1f32x (_Float32x) throw (); extern _Float32x __j1f32x (_Float32x) throw (); -23376: extern _Float32x jnf32x (int, _Float32x) throw (); extern _Float32x __jnf32x (int, _Float32x) throw (); -23376: extern _Float32x y0f32x (_Float32x) throw (); extern _Float32x __y0f32x (_Float32x) throw (); -23376: extern _Float32x y1f32x (_Float32x) throw (); extern _Float32x __y1f32x (_Float32x) throw (); -23376: extern _Float32x ynf32x (int, _Float32x) throw (); extern _Float32x __ynf32x (int, _Float32x) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x erff32x (_Float32x) throw (); extern _Float32x __erff32x (_Float32x) throw (); -23376: extern _Float32x erfcf32x (_Float32x) throw (); extern _Float32x __erfcf32x (_Float32x) throw (); -23376: extern _Float32x lgammaf32x (_Float32x) throw (); extern _Float32x __lgammaf32x (_Float32x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x tgammaf32x (_Float32x) throw (); extern _Float32x __tgammaf32x (_Float32x) throw (); -23376: # 249 "/usr/include/arm-linux-gnueabihf/bits/mathcalls.h" 3 4 -23376: extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) throw (); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x rintf32x (_Float32x __x) throw (); extern _Float32x __rintf32x (_Float32x __x) throw (); -23376: -23376: -23376: extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern _Float32x nextdownf32x (_Float32x __x) throw (); extern _Float32x __nextdownf32x (_Float32x __x) throw (); -23376: -23376: extern _Float32x nextupf32x (_Float32x __x) throw (); extern _Float32x __nextupf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: -23376: extern _Float32x scalbnf32x (_Float32x __x, int __n) throw (); extern _Float32x __scalbnf32x (_Float32x __x, int __n) throw (); -23376: -23376: -23376: -23376: extern int ilogbf32x (_Float32x __x) throw (); extern int __ilogbf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: extern long int llogbf32x (_Float32x __x) throw (); extern long int __llogbf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x scalblnf32x (_Float32x __x, long int __n) throw (); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) throw (); -23376: -23376: -23376: -23376: extern _Float32x nearbyintf32x (_Float32x __x) throw (); extern _Float32x __nearbyintf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern _Float32x roundf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern _Float32x truncf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: -23376: extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw (); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern long int lrintf32x (_Float32x __x) throw (); extern long int __lrintf32x (_Float32x __x) throw (); -23376: __extension__ -23376: extern long long int llrintf32x (_Float32x __x) throw (); extern long long int __llrintf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern long int lroundf32x (_Float32x __x) throw (); extern long int __lroundf32x (_Float32x __x) throw (); -23376: __extension__ -23376: extern long long int llroundf32x (_Float32x __x) throw (); extern long long int __llroundf32x (_Float32x __x) throw (); -23376: -23376: -23376: -23376: extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw (); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw (); -23376: -23376: -23376: -23376: -23376: extern _Float32x roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__)); -23376: -23376: -23376: -23376: extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: -23376: -23376: extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw () -23376: ; -23376: -23376: -23376: extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalorderf32x (_Float32x __x, _Float32x __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int totalordermagf32x (_Float32x __x, _Float32x __y) throw () -23376: __attribute__ ((__const__)); -23376: -23376: -23376: extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) throw (); -23376: -23376: -23376: extern _Float32x getpayloadf32x (const _Float32x *__x) throw (); extern _Float32x __getpayloadf32x (const _Float32x *__x) throw (); -23376: -23376: -23376: extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) throw (); -23376: -23376: -23376: extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) throw (); -23376: # 441 "/usr/include/math.h" 2 3 4 -23376: # 503 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern float fadd (double __x, double __y) throw (); -23376: -23376: -23376: extern float fdiv (double __x, double __y) throw (); -23376: -23376: -23376: extern float fmul (double __x, double __y) throw (); -23376: -23376: -23376: extern float fsub (double __x, double __y) throw (); -23376: # 504 "/usr/include/math.h" 2 3 4 -23376: # 517 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern float faddl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern float fdivl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern float fmull (long double __x, long double __y) throw (); -23376: -23376: -23376: extern float fsubl (long double __x, long double __y) throw (); -23376: # 518 "/usr/include/math.h" 2 3 4 -23376: # 537 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern double daddl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern double ddivl (long double __x, long double __y) throw (); -23376: -23376: -23376: extern double dmull (long double __x, long double __y) throw (); -23376: -23376: -23376: extern double dsubl (long double __x, long double __y) throw (); -23376: # 538 "/usr/include/math.h" 2 3 4 -23376: # 616 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) throw (); -23376: -23376: -23376: extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) throw (); -23376: # 617 "/usr/include/math.h" 2 3 4 -23376: # 626 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) throw (); -23376: # 627 "/usr/include/math.h" 2 3 4 -23376: # 666 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 1 3 4 -23376: # 24 "/usr/include/arm-linux-gnueabihf/bits/mathcalls-narrow.h" 3 4 -23376: extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) throw (); -23376: -23376: -23376: extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) throw (); -23376: # 667 "/usr/include/math.h" 2 3 4 -23376: # 773 "/usr/include/math.h" 3 4 -23376: extern int signgam; -23376: # 853 "/usr/include/math.h" 3 4 -23376: enum -23376: { -23376: FP_NAN = -23376: -23376: 0, -23376: FP_INFINITE = -23376: -23376: 1, -23376: FP_ZERO = -23376: -23376: 2, -23376: FP_SUBNORMAL = -23376: -23376: 3, -23376: FP_NORMAL = -23376: -23376: 4 -23376: }; -23376: # 968 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/iscanonical.h" 1 3 4 -23376: # 969 "/usr/include/math.h" 2 3 4 -23376: # 980 "/usr/include/math.h" 3 4 -23376: extern "C++" { -23376: inline int issignaling (float __val) { return __issignalingf (__val); } -23376: inline int issignaling (double __val) { return __issignaling (__val); } -23376: inline int -23376: issignaling (long double __val) -23376: { -23376: -23376: return __issignaling (__val); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 1011 "/usr/include/math.h" 3 4 -23376: extern "C++" { -23376: # 1042 "/usr/include/math.h" 3 4 -23376: template inline bool -23376: iszero (__T __val) -23376: { -23376: return __val == 0; -23376: } -23376: -23376: } -23376: # 1240 "/usr/include/math.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/mathinline.h" 1 3 4 -23376: # 1241 "/usr/include/math.h" 2 3 4 -23376: # 1493 "/usr/include/math.h" 3 4 -23376: extern "C++" { -23376: template struct __iseqsig_type; -23376: -23376: template<> struct __iseqsig_type -23376: { -23376: static int __call (float __x, float __y) throw () -23376: { -23376: return __iseqsigf (__x, __y); -23376: } -23376: }; -23376: -23376: template<> struct __iseqsig_type -23376: { -23376: static int __call (double __x, double __y) throw () -23376: { -23376: return __iseqsig (__x, __y); -23376: } -23376: }; -23376: -23376: template<> struct __iseqsig_type -23376: { -23376: static int __call (long double __x, long double __y) throw () -23376: { -23376: -23376: -23376: -23376: return __iseqsig (__x, __y); -23376: -23376: } -23376: }; -23376: # 1536 "/usr/include/math.h" 3 4 -23376: template -23376: inline int -23376: iseqsig (_T1 __x, _T2 __y) throw () -23376: { -23376: -23376: typedef decltype (((__x) + (__y) + 0.0f)) _T3; -23376: -23376: -23376: -23376: return __iseqsig_type<_T3>::__call (__x, __y); -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 46 "/usr/include/c++/8/cmath" 2 3 -23376: # 77 "/usr/include/c++/8/cmath" 3 -23376: extern "C++" -23376: { -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: using ::acos; -23376: -23376: -23376: inline constexpr float -23376: acos(float __x) -23376: { return __builtin_acosf(__x); } -23376: -23376: inline constexpr long double -23376: acos(long double __x) -23376: { return __builtin_acosl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: acos(_Tp __x) -23376: { return __builtin_acos(__x); } -23376: -23376: using ::asin; -23376: -23376: -23376: inline constexpr float -23376: asin(float __x) -23376: { return __builtin_asinf(__x); } -23376: -23376: inline constexpr long double -23376: asin(long double __x) -23376: { return __builtin_asinl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: asin(_Tp __x) -23376: { return __builtin_asin(__x); } -23376: -23376: using ::atan; -23376: -23376: -23376: inline constexpr float -23376: atan(float __x) -23376: { return __builtin_atanf(__x); } -23376: -23376: inline constexpr long double -23376: atan(long double __x) -23376: { return __builtin_atanl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: atan(_Tp __x) -23376: { return __builtin_atan(__x); } -23376: -23376: using ::atan2; -23376: -23376: -23376: inline constexpr float -23376: atan2(float __y, float __x) -23376: { return __builtin_atan2f(__y, __x); } -23376: -23376: inline constexpr long double -23376: atan2(long double __y, long double __x) -23376: { return __builtin_atan2l(__y, __x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: atan2(_Tp __y, _Up __x) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return atan2(__type(__y), __type(__x)); -23376: } -23376: -23376: using ::ceil; -23376: -23376: -23376: inline constexpr float -23376: ceil(float __x) -23376: { return __builtin_ceilf(__x); } -23376: -23376: inline constexpr long double -23376: ceil(long double __x) -23376: { return __builtin_ceill(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: ceil(_Tp __x) -23376: { return __builtin_ceil(__x); } -23376: -23376: using ::cos; -23376: -23376: -23376: inline constexpr float -23376: cos(float __x) -23376: { return __builtin_cosf(__x); } -23376: -23376: inline constexpr long double -23376: cos(long double __x) -23376: { return __builtin_cosl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: cos(_Tp __x) -23376: { return __builtin_cos(__x); } -23376: -23376: using ::cosh; -23376: -23376: -23376: inline constexpr float -23376: cosh(float __x) -23376: { return __builtin_coshf(__x); } -23376: -23376: inline constexpr long double -23376: cosh(long double __x) -23376: { return __builtin_coshl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: cosh(_Tp __x) -23376: { return __builtin_cosh(__x); } -23376: -23376: using ::exp; -23376: -23376: -23376: inline constexpr float -23376: exp(float __x) -23376: { return __builtin_expf(__x); } -23376: -23376: inline constexpr long double -23376: exp(long double __x) -23376: { return __builtin_expl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: exp(_Tp __x) -23376: { return __builtin_exp(__x); } -23376: -23376: using ::fabs; -23376: -23376: -23376: inline constexpr float -23376: fabs(float __x) -23376: { return __builtin_fabsf(__x); } -23376: -23376: inline constexpr long double -23376: fabs(long double __x) -23376: { return __builtin_fabsl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: fabs(_Tp __x) -23376: { return __builtin_fabs(__x); } -23376: -23376: using ::floor; -23376: -23376: -23376: inline constexpr float -23376: floor(float __x) -23376: { return __builtin_floorf(__x); } -23376: -23376: inline constexpr long double -23376: floor(long double __x) -23376: { return __builtin_floorl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: floor(_Tp __x) -23376: { return __builtin_floor(__x); } -23376: -23376: using ::fmod; -23376: -23376: -23376: inline constexpr float -23376: fmod(float __x, float __y) -23376: { return __builtin_fmodf(__x, __y); } -23376: -23376: inline constexpr long double -23376: fmod(long double __x, long double __y) -23376: { return __builtin_fmodl(__x, __y); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: fmod(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return fmod(__type(__x), __type(__y)); -23376: } -23376: -23376: using ::frexp; -23376: -23376: -23376: inline float -23376: frexp(float __x, int* __exp) -23376: { return __builtin_frexpf(__x, __exp); } -23376: -23376: inline long double -23376: frexp(long double __x, int* __exp) -23376: { return __builtin_frexpl(__x, __exp); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: frexp(_Tp __x, int* __exp) -23376: { return __builtin_frexp(__x, __exp); } -23376: -23376: using ::ldexp; -23376: -23376: -23376: inline constexpr float -23376: ldexp(float __x, int __exp) -23376: { return __builtin_ldexpf(__x, __exp); } -23376: -23376: inline constexpr long double -23376: ldexp(long double __x, int __exp) -23376: { return __builtin_ldexpl(__x, __exp); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: ldexp(_Tp __x, int __exp) -23376: { return __builtin_ldexp(__x, __exp); } -23376: -23376: using ::log; -23376: -23376: -23376: inline constexpr float -23376: log(float __x) -23376: { return __builtin_logf(__x); } -23376: -23376: inline constexpr long double -23376: log(long double __x) -23376: { return __builtin_logl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: log(_Tp __x) -23376: { return __builtin_log(__x); } -23376: -23376: using ::log10; -23376: -23376: -23376: inline constexpr float -23376: log10(float __x) -23376: { return __builtin_log10f(__x); } -23376: -23376: inline constexpr long double -23376: log10(long double __x) -23376: { return __builtin_log10l(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: log10(_Tp __x) -23376: { return __builtin_log10(__x); } -23376: -23376: using ::modf; -23376: -23376: -23376: inline float -23376: modf(float __x, float* __iptr) -23376: { return __builtin_modff(__x, __iptr); } -23376: -23376: inline long double -23376: modf(long double __x, long double* __iptr) -23376: { return __builtin_modfl(__x, __iptr); } -23376: -23376: -23376: using ::pow; -23376: -23376: -23376: inline constexpr float -23376: pow(float __x, float __y) -23376: { return __builtin_powf(__x, __y); } -23376: -23376: inline constexpr long double -23376: pow(long double __x, long double __y) -23376: { return __builtin_powl(__x, __y); } -23376: # 412 "/usr/include/c++/8/cmath" 3 -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: pow(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return pow(__type(__x), __type(__y)); -23376: } -23376: -23376: using ::sin; -23376: -23376: -23376: inline constexpr float -23376: sin(float __x) -23376: { return __builtin_sinf(__x); } -23376: -23376: inline constexpr long double -23376: sin(long double __x) -23376: { return __builtin_sinl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: sin(_Tp __x) -23376: { return __builtin_sin(__x); } -23376: -23376: using ::sinh; -23376: -23376: -23376: inline constexpr float -23376: sinh(float __x) -23376: { return __builtin_sinhf(__x); } -23376: -23376: inline constexpr long double -23376: sinh(long double __x) -23376: { return __builtin_sinhl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: sinh(_Tp __x) -23376: { return __builtin_sinh(__x); } -23376: -23376: using ::sqrt; -23376: -23376: -23376: inline constexpr float -23376: sqrt(float __x) -23376: { return __builtin_sqrtf(__x); } -23376: -23376: inline constexpr long double -23376: sqrt(long double __x) -23376: { return __builtin_sqrtl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: sqrt(_Tp __x) -23376: { return __builtin_sqrt(__x); } -23376: -23376: using ::tan; -23376: -23376: -23376: inline constexpr float -23376: tan(float __x) -23376: { return __builtin_tanf(__x); } -23376: -23376: inline constexpr long double -23376: tan(long double __x) -23376: { return __builtin_tanl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: tan(_Tp __x) -23376: { return __builtin_tan(__x); } -23376: -23376: using ::tanh; -23376: -23376: -23376: inline constexpr float -23376: tanh(float __x) -23376: { return __builtin_tanhf(__x); } -23376: -23376: inline constexpr long double -23376: tanh(long double __x) -23376: { return __builtin_tanhl(__x); } -23376: -23376: -23376: template -23376: inline constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: tanh(_Tp __x) -23376: { return __builtin_tanh(__x); } -23376: # 536 "/usr/include/c++/8/cmath" 3 -23376: constexpr int -23376: fpclassify(float __x) -23376: { return __builtin_fpclassify(0, 1, 4, -23376: 3, 2, __x); } -23376: -23376: constexpr int -23376: fpclassify(double __x) -23376: { return __builtin_fpclassify(0, 1, 4, -23376: 3, 2, __x); } -23376: -23376: constexpr int -23376: fpclassify(long double __x) -23376: { return __builtin_fpclassify(0, 1, 4, -23376: 3, 2, __x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: int>::__type -23376: fpclassify(_Tp __x) -23376: { return __x != 0 ? 4 : 2; } -23376: -23376: -23376: -23376: constexpr bool -23376: isfinite(float __x) -23376: { return __builtin_isfinite(__x); } -23376: -23376: constexpr bool -23376: isfinite(double __x) -23376: { return __builtin_isfinite(__x); } -23376: -23376: constexpr bool -23376: isfinite(long double __x) -23376: { return __builtin_isfinite(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: bool>::__type -23376: isfinite(_Tp __x) -23376: { return true; } -23376: -23376: -23376: -23376: constexpr bool -23376: isinf(float __x) -23376: { return __builtin_isinf(__x); } -23376: -23376: -23376: -23376: -23376: -23376: constexpr bool -23376: isinf(double __x) -23376: { return __builtin_isinf(__x); } -23376: -23376: -23376: constexpr bool -23376: isinf(long double __x) -23376: { return __builtin_isinf(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: bool>::__type -23376: isinf(_Tp __x) -23376: { return false; } -23376: -23376: -23376: -23376: constexpr bool -23376: isnan(float __x) -23376: { return __builtin_isnan(__x); } -23376: -23376: -23376: -23376: -23376: -23376: constexpr bool -23376: isnan(double __x) -23376: { return __builtin_isnan(__x); } -23376: -23376: -23376: constexpr bool -23376: isnan(long double __x) -23376: { return __builtin_isnan(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: bool>::__type -23376: isnan(_Tp __x) -23376: { return false; } -23376: -23376: -23376: -23376: constexpr bool -23376: isnormal(float __x) -23376: { return __builtin_isnormal(__x); } -23376: -23376: constexpr bool -23376: isnormal(double __x) -23376: { return __builtin_isnormal(__x); } -23376: -23376: constexpr bool -23376: isnormal(long double __x) -23376: { return __builtin_isnormal(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: bool>::__type -23376: isnormal(_Tp __x) -23376: { return __x != 0 ? true : false; } -23376: -23376: -23376: -23376: -23376: constexpr bool -23376: signbit(float __x) -23376: { return __builtin_signbit(__x); } -23376: -23376: constexpr bool -23376: signbit(double __x) -23376: { return __builtin_signbit(__x); } -23376: -23376: constexpr bool -23376: signbit(long double __x) -23376: { return __builtin_signbit(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: bool>::__type -23376: signbit(_Tp __x) -23376: { return __x < 0 ? true : false; } -23376: -23376: -23376: -23376: constexpr bool -23376: isgreater(float __x, float __y) -23376: { return __builtin_isgreater(__x, __y); } -23376: -23376: constexpr bool -23376: isgreater(double __x, double __y) -23376: { return __builtin_isgreater(__x, __y); } -23376: -23376: constexpr bool -23376: isgreater(long double __x, long double __y) -23376: { return __builtin_isgreater(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: isgreater(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_isgreater(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr bool -23376: isgreaterequal(float __x, float __y) -23376: { return __builtin_isgreaterequal(__x, __y); } -23376: -23376: constexpr bool -23376: isgreaterequal(double __x, double __y) -23376: { return __builtin_isgreaterequal(__x, __y); } -23376: -23376: constexpr bool -23376: isgreaterequal(long double __x, long double __y) -23376: { return __builtin_isgreaterequal(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: isgreaterequal(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_isgreaterequal(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr bool -23376: isless(float __x, float __y) -23376: { return __builtin_isless(__x, __y); } -23376: -23376: constexpr bool -23376: isless(double __x, double __y) -23376: { return __builtin_isless(__x, __y); } -23376: -23376: constexpr bool -23376: isless(long double __x, long double __y) -23376: { return __builtin_isless(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: isless(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_isless(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr bool -23376: islessequal(float __x, float __y) -23376: { return __builtin_islessequal(__x, __y); } -23376: -23376: constexpr bool -23376: islessequal(double __x, double __y) -23376: { return __builtin_islessequal(__x, __y); } -23376: -23376: constexpr bool -23376: islessequal(long double __x, long double __y) -23376: { return __builtin_islessequal(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: islessequal(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_islessequal(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr bool -23376: islessgreater(float __x, float __y) -23376: { return __builtin_islessgreater(__x, __y); } -23376: -23376: constexpr bool -23376: islessgreater(double __x, double __y) -23376: { return __builtin_islessgreater(__x, __y); } -23376: -23376: constexpr bool -23376: islessgreater(long double __x, long double __y) -23376: { return __builtin_islessgreater(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: islessgreater(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_islessgreater(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr bool -23376: isunordered(float __x, float __y) -23376: { return __builtin_isunordered(__x, __y); } -23376: -23376: constexpr bool -23376: isunordered(double __x, double __y) -23376: { return __builtin_isunordered(__x, __y); } -23376: -23376: constexpr bool -23376: isunordered(long double __x, long double __y) -23376: { return __builtin_isunordered(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename -23376: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value -23376: && __is_arithmetic<_Up>::__value), bool>::__type -23376: isunordered(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return __builtin_isunordered(__type(__x), __type(__y)); -23376: } -23376: # 1065 "/usr/include/c++/8/cmath" 3 -23376: using ::double_t; -23376: using ::float_t; -23376: -23376: -23376: using ::acosh; -23376: using ::acoshf; -23376: using ::acoshl; -23376: -23376: using ::asinh; -23376: using ::asinhf; -23376: using ::asinhl; -23376: -23376: using ::atanh; -23376: using ::atanhf; -23376: using ::atanhl; -23376: -23376: using ::cbrt; -23376: using ::cbrtf; -23376: using ::cbrtl; -23376: -23376: using ::copysign; -23376: using ::copysignf; -23376: using ::copysignl; -23376: -23376: using ::erf; -23376: using ::erff; -23376: using ::erfl; -23376: -23376: using ::erfc; -23376: using ::erfcf; -23376: using ::erfcl; -23376: -23376: using ::exp2; -23376: using ::exp2f; -23376: using ::exp2l; -23376: -23376: using ::expm1; -23376: using ::expm1f; -23376: using ::expm1l; -23376: -23376: using ::fdim; -23376: using ::fdimf; -23376: using ::fdiml; -23376: -23376: using ::fma; -23376: using ::fmaf; -23376: using ::fmal; -23376: -23376: using ::fmax; -23376: using ::fmaxf; -23376: using ::fmaxl; -23376: -23376: using ::fmin; -23376: using ::fminf; -23376: using ::fminl; -23376: -23376: using ::hypot; -23376: using ::hypotf; -23376: using ::hypotl; -23376: -23376: using ::ilogb; -23376: using ::ilogbf; -23376: using ::ilogbl; -23376: -23376: using ::lgamma; -23376: using ::lgammaf; -23376: using ::lgammal; -23376: -23376: -23376: using ::llrint; -23376: using ::llrintf; -23376: using ::llrintl; -23376: -23376: using ::llround; -23376: using ::llroundf; -23376: using ::llroundl; -23376: -23376: -23376: using ::log1p; -23376: using ::log1pf; -23376: using ::log1pl; -23376: -23376: using ::log2; -23376: using ::log2f; -23376: using ::log2l; -23376: -23376: using ::logb; -23376: using ::logbf; -23376: using ::logbl; -23376: -23376: using ::lrint; -23376: using ::lrintf; -23376: using ::lrintl; -23376: -23376: using ::lround; -23376: using ::lroundf; -23376: using ::lroundl; -23376: -23376: using ::nan; -23376: using ::nanf; -23376: using ::nanl; -23376: -23376: using ::nearbyint; -23376: using ::nearbyintf; -23376: using ::nearbyintl; -23376: -23376: using ::nextafter; -23376: using ::nextafterf; -23376: using ::nextafterl; -23376: -23376: using ::nexttoward; -23376: using ::nexttowardf; -23376: using ::nexttowardl; -23376: -23376: using ::remainder; -23376: using ::remainderf; -23376: using ::remainderl; -23376: -23376: using ::remquo; -23376: using ::remquof; -23376: using ::remquol; -23376: -23376: using ::rint; -23376: using ::rintf; -23376: using ::rintl; -23376: -23376: using ::round; -23376: using ::roundf; -23376: using ::roundl; -23376: -23376: using ::scalbln; -23376: using ::scalblnf; -23376: using ::scalblnl; -23376: -23376: using ::scalbn; -23376: using ::scalbnf; -23376: using ::scalbnl; -23376: -23376: using ::tgamma; -23376: using ::tgammaf; -23376: using ::tgammal; -23376: -23376: using ::trunc; -23376: using ::truncf; -23376: using ::truncl; -23376: -23376: -23376: -23376: constexpr float -23376: acosh(float __x) -23376: { return __builtin_acoshf(__x); } -23376: -23376: constexpr long double -23376: acosh(long double __x) -23376: { return __builtin_acoshl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: acosh(_Tp __x) -23376: { return __builtin_acosh(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: asinh(float __x) -23376: { return __builtin_asinhf(__x); } -23376: -23376: constexpr long double -23376: asinh(long double __x) -23376: { return __builtin_asinhl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: asinh(_Tp __x) -23376: { return __builtin_asinh(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: atanh(float __x) -23376: { return __builtin_atanhf(__x); } -23376: -23376: constexpr long double -23376: atanh(long double __x) -23376: { return __builtin_atanhl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: atanh(_Tp __x) -23376: { return __builtin_atanh(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: cbrt(float __x) -23376: { return __builtin_cbrtf(__x); } -23376: -23376: constexpr long double -23376: cbrt(long double __x) -23376: { return __builtin_cbrtl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: cbrt(_Tp __x) -23376: { return __builtin_cbrt(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: copysign(float __x, float __y) -23376: { return __builtin_copysignf(__x, __y); } -23376: -23376: constexpr long double -23376: copysign(long double __x, long double __y) -23376: { return __builtin_copysignl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: copysign(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return copysign(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: erf(float __x) -23376: { return __builtin_erff(__x); } -23376: -23376: constexpr long double -23376: erf(long double __x) -23376: { return __builtin_erfl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: erf(_Tp __x) -23376: { return __builtin_erf(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: erfc(float __x) -23376: { return __builtin_erfcf(__x); } -23376: -23376: constexpr long double -23376: erfc(long double __x) -23376: { return __builtin_erfcl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: erfc(_Tp __x) -23376: { return __builtin_erfc(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: exp2(float __x) -23376: { return __builtin_exp2f(__x); } -23376: -23376: constexpr long double -23376: exp2(long double __x) -23376: { return __builtin_exp2l(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: exp2(_Tp __x) -23376: { return __builtin_exp2(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: expm1(float __x) -23376: { return __builtin_expm1f(__x); } -23376: -23376: constexpr long double -23376: expm1(long double __x) -23376: { return __builtin_expm1l(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: expm1(_Tp __x) -23376: { return __builtin_expm1(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: fdim(float __x, float __y) -23376: { return __builtin_fdimf(__x, __y); } -23376: -23376: constexpr long double -23376: fdim(long double __x, long double __y) -23376: { return __builtin_fdiml(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: fdim(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return fdim(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: fma(float __x, float __y, float __z) -23376: { return __builtin_fmaf(__x, __y, __z); } -23376: -23376: constexpr long double -23376: fma(long double __x, long double __y, long double __z) -23376: { return __builtin_fmal(__x, __y, __z); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type -23376: fma(_Tp __x, _Up __y, _Vp __z) -23376: { -23376: typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; -23376: return fma(__type(__x), __type(__y), __type(__z)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: fmax(float __x, float __y) -23376: { return __builtin_fmaxf(__x, __y); } -23376: -23376: constexpr long double -23376: fmax(long double __x, long double __y) -23376: { return __builtin_fmaxl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: fmax(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return fmax(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: fmin(float __x, float __y) -23376: { return __builtin_fminf(__x, __y); } -23376: -23376: constexpr long double -23376: fmin(long double __x, long double __y) -23376: { return __builtin_fminl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: fmin(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return fmin(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: hypot(float __x, float __y) -23376: { return __builtin_hypotf(__x, __y); } -23376: -23376: constexpr long double -23376: hypot(long double __x, long double __y) -23376: { return __builtin_hypotl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: hypot(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return hypot(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr int -23376: ilogb(float __x) -23376: { return __builtin_ilogbf(__x); } -23376: -23376: constexpr int -23376: ilogb(long double __x) -23376: { return __builtin_ilogbl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr -23376: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: int>::__type -23376: ilogb(_Tp __x) -23376: { return __builtin_ilogb(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: lgamma(float __x) -23376: { return __builtin_lgammaf(__x); } -23376: -23376: constexpr long double -23376: lgamma(long double __x) -23376: { return __builtin_lgammal(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: lgamma(_Tp __x) -23376: { return __builtin_lgamma(__x); } -23376: -23376: -23376: -23376: constexpr long long -23376: llrint(float __x) -23376: { return __builtin_llrintf(__x); } -23376: -23376: constexpr long long -23376: llrint(long double __x) -23376: { return __builtin_llrintl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: long long>::__type -23376: llrint(_Tp __x) -23376: { return __builtin_llrint(__x); } -23376: -23376: -23376: -23376: constexpr long long -23376: llround(float __x) -23376: { return __builtin_llroundf(__x); } -23376: -23376: constexpr long long -23376: llround(long double __x) -23376: { return __builtin_llroundl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: long long>::__type -23376: llround(_Tp __x) -23376: { return __builtin_llround(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: log1p(float __x) -23376: { return __builtin_log1pf(__x); } -23376: -23376: constexpr long double -23376: log1p(long double __x) -23376: { return __builtin_log1pl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: log1p(_Tp __x) -23376: { return __builtin_log1p(__x); } -23376: -23376: -23376: -23376: -23376: constexpr float -23376: log2(float __x) -23376: { return __builtin_log2f(__x); } -23376: -23376: constexpr long double -23376: log2(long double __x) -23376: { return __builtin_log2l(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: log2(_Tp __x) -23376: { return __builtin_log2(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: logb(float __x) -23376: { return __builtin_logbf(__x); } -23376: -23376: constexpr long double -23376: logb(long double __x) -23376: { return __builtin_logbl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: logb(_Tp __x) -23376: { return __builtin_logb(__x); } -23376: -23376: -23376: -23376: constexpr long -23376: lrint(float __x) -23376: { return __builtin_lrintf(__x); } -23376: -23376: constexpr long -23376: lrint(long double __x) -23376: { return __builtin_lrintl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: long>::__type -23376: lrint(_Tp __x) -23376: { return __builtin_lrint(__x); } -23376: -23376: -23376: -23376: constexpr long -23376: lround(float __x) -23376: { return __builtin_lroundf(__x); } -23376: -23376: constexpr long -23376: lround(long double __x) -23376: { return __builtin_lroundl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: long>::__type -23376: lround(_Tp __x) -23376: { return __builtin_lround(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: nearbyint(float __x) -23376: { return __builtin_nearbyintf(__x); } -23376: -23376: constexpr long double -23376: nearbyint(long double __x) -23376: { return __builtin_nearbyintl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: nearbyint(_Tp __x) -23376: { return __builtin_nearbyint(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: nextafter(float __x, float __y) -23376: { return __builtin_nextafterf(__x, __y); } -23376: -23376: constexpr long double -23376: nextafter(long double __x, long double __y) -23376: { return __builtin_nextafterl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: nextafter(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return nextafter(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: nexttoward(float __x, long double __y) -23376: { return __builtin_nexttowardf(__x, __y); } -23376: -23376: constexpr long double -23376: nexttoward(long double __x, long double __y) -23376: { return __builtin_nexttowardl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: nexttoward(_Tp __x, long double __y) -23376: { return __builtin_nexttoward(__x, __y); } -23376: -23376: -23376: -23376: constexpr float -23376: remainder(float __x, float __y) -23376: { return __builtin_remainderf(__x, __y); } -23376: -23376: constexpr long double -23376: remainder(long double __x, long double __y) -23376: { return __builtin_remainderl(__x, __y); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: remainder(_Tp __x, _Up __y) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return remainder(__type(__x), __type(__y)); -23376: } -23376: -23376: -23376: -23376: inline float -23376: remquo(float __x, float __y, int* __pquo) -23376: { return __builtin_remquof(__x, __y, __pquo); } -23376: -23376: inline long double -23376: remquo(long double __x, long double __y, int* __pquo) -23376: { return __builtin_remquol(__x, __y, __pquo); } -23376: -23376: -23376: -23376: template -23376: inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type -23376: remquo(_Tp __x, _Up __y, int* __pquo) -23376: { -23376: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; -23376: return remquo(__type(__x), __type(__y), __pquo); -23376: } -23376: -23376: -23376: -23376: constexpr float -23376: rint(float __x) -23376: { return __builtin_rintf(__x); } -23376: -23376: constexpr long double -23376: rint(long double __x) -23376: { return __builtin_rintl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: rint(_Tp __x) -23376: { return __builtin_rint(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: round(float __x) -23376: { return __builtin_roundf(__x); } -23376: -23376: constexpr long double -23376: round(long double __x) -23376: { return __builtin_roundl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: round(_Tp __x) -23376: { return __builtin_round(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: scalbln(float __x, long __ex) -23376: { return __builtin_scalblnf(__x, __ex); } -23376: -23376: constexpr long double -23376: scalbln(long double __x, long __ex) -23376: { return __builtin_scalblnl(__x, __ex); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: scalbln(_Tp __x, long __ex) -23376: { return __builtin_scalbln(__x, __ex); } -23376: -23376: -23376: -23376: constexpr float -23376: scalbn(float __x, int __ex) -23376: { return __builtin_scalbnf(__x, __ex); } -23376: -23376: constexpr long double -23376: scalbn(long double __x, int __ex) -23376: { return __builtin_scalbnl(__x, __ex); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: scalbn(_Tp __x, int __ex) -23376: { return __builtin_scalbn(__x, __ex); } -23376: -23376: -23376: -23376: constexpr float -23376: tgamma(float __x) -23376: { return __builtin_tgammaf(__x); } -23376: -23376: constexpr long double -23376: tgamma(long double __x) -23376: { return __builtin_tgammal(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: tgamma(_Tp __x) -23376: { return __builtin_tgamma(__x); } -23376: -23376: -23376: -23376: constexpr float -23376: trunc(float __x) -23376: { return __builtin_truncf(__x); } -23376: -23376: constexpr long double -23376: trunc(long double __x) -23376: { return __builtin_truncl(__x); } -23376: -23376: -23376: -23376: template -23376: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, -23376: double>::__type -23376: trunc(_Tp __x) -23376: { return __builtin_trunc(__x); } -23376: # 1888 "/usr/include/c++/8/cmath" 3 -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 35 "../../src/Float_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/map" 1 3 -23376: # 58 "/usr/include/c++/8/map" 3 -23376: -23376: # 59 "/usr/include/c++/8/map" 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_map.h" 1 3 -23376: # 63 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: # 1 "/usr/include/c++/8/tuple" 1 3 -23376: # 32 "/usr/include/c++/8/tuple" 3 -23376: -23376: # 33 "/usr/include/c++/8/tuple" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/array" 1 3 -23376: # 32 "/usr/include/c++/8/array" 3 -23376: -23376: # 33 "/usr/include/c++/8/array" 3 -23376: # 43 "/usr/include/c++/8/array" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: struct __array_traits -23376: { -23376: typedef _Tp _Type[_Nm]; -23376: typedef __is_swappable<_Tp> _Is_swappable; -23376: typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable; -23376: -23376: static constexpr _Tp& -23376: _S_ref(const _Type& __t, std::size_t __n) noexcept -23376: { return const_cast<_Tp&>(__t[__n]); } -23376: -23376: static constexpr _Tp* -23376: _S_ptr(const _Type& __t) noexcept -23376: { return const_cast<_Tp*>(__t); } -23376: }; -23376: -23376: template -23376: struct __array_traits<_Tp, 0> -23376: { -23376: struct _Type { }; -23376: typedef true_type _Is_swappable; -23376: typedef true_type _Is_nothrow_swappable; -23376: -23376: static constexpr _Tp& -23376: _S_ref(const _Type&, std::size_t) noexcept -23376: { return *static_cast<_Tp*>(nullptr); } -23376: -23376: static constexpr _Tp* -23376: _S_ptr(const _Type&) noexcept -23376: { return nullptr; } -23376: }; -23376: # 93 "/usr/include/c++/8/array" 3 -23376: template -23376: struct array -23376: { -23376: typedef _Tp value_type; -23376: typedef value_type* pointer; -23376: typedef const value_type* const_pointer; -23376: typedef value_type& reference; -23376: typedef const value_type& const_reference; -23376: typedef value_type* iterator; -23376: typedef const value_type* const_iterator; -23376: typedef std::size_t size_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef std::reverse_iterator reverse_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: -23376: -23376: typedef std::__array_traits<_Tp, _Nm> _AT_Type; -23376: typename _AT_Type::_Type _M_elems; -23376: -23376: -23376: -23376: -23376: void -23376: fill(const value_type& __u) -23376: { std::fill_n(begin(), size(), __u); } -23376: -23376: void -23376: swap(array& __other) -23376: noexcept(_AT_Type::_Is_nothrow_swappable::value) -23376: { std::swap_ranges(begin(), end(), __other.begin()); } -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return iterator(data()); } -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return const_iterator(data()); } -23376: -23376: iterator -23376: end() noexcept -23376: { return iterator(data() + _Nm); } -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return const_iterator(data() + _Nm); } -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(end()); } -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(begin()); } -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return const_iterator(data()); } -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return const_iterator(data() + _Nm); } -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: -23376: constexpr size_type -23376: size() const noexcept { return _Nm; } -23376: -23376: constexpr size_type -23376: max_size() const noexcept { return _Nm; } -23376: -23376: constexpr bool -23376: empty() const noexcept { return size() == 0; } -23376: -23376: -23376: reference -23376: operator[](size_type __n) noexcept -23376: { return _AT_Type::_S_ref(_M_elems, __n); } -23376: -23376: constexpr const_reference -23376: operator[](size_type __n) const noexcept -23376: { return _AT_Type::_S_ref(_M_elems, __n); } -23376: -23376: reference -23376: at(size_type __n) -23376: { -23376: if (__n >= _Nm) -23376: std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") -23376: , -23376: __n, _Nm); -23376: return _AT_Type::_S_ref(_M_elems, __n); -23376: } -23376: -23376: constexpr const_reference -23376: at(size_type __n) const -23376: { -23376: -23376: -23376: return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n) -23376: : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") -23376: , -23376: __n, _Nm), -23376: _AT_Type::_S_ref(_M_elems, 0)); -23376: } -23376: -23376: reference -23376: front() noexcept -23376: { return *begin(); } -23376: -23376: constexpr const_reference -23376: front() const noexcept -23376: { return _AT_Type::_S_ref(_M_elems, 0); } -23376: -23376: reference -23376: back() noexcept -23376: { return _Nm ? *(end() - 1) : *end(); } -23376: -23376: constexpr const_reference -23376: back() const noexcept -23376: { -23376: return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1) -23376: : _AT_Type::_S_ref(_M_elems, 0); -23376: } -23376: -23376: pointer -23376: data() noexcept -23376: { return _AT_Type::_S_ptr(_M_elems); } -23376: -23376: const_pointer -23376: data() const noexcept -23376: { return _AT_Type::_S_ptr(_M_elems); } -23376: }; -23376: # 250 "/usr/include/c++/8/array" 3 -23376: template -23376: inline bool -23376: operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) -23376: { return std::equal(__one.begin(), __one.end(), __two.begin()); } -23376: -23376: template -23376: inline bool -23376: operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) -23376: { return !(__one == __two); } -23376: -23376: template -23376: inline bool -23376: operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) -23376: { -23376: return std::lexicographical_compare(__a.begin(), __a.end(), -23376: __b.begin(), __b.end()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) -23376: { return __two < __one; } -23376: -23376: template -23376: inline bool -23376: operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) -23376: { return !(__one > __two); } -23376: -23376: template -23376: inline bool -23376: operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) -23376: { return !(__one < __two); } -23376: -23376: -23376: template -23376: inline -23376: -23376: -23376: typename enable_if< -23376: std::__array_traits<_Tp, _Nm>::_Is_swappable::value -23376: >::type -23376: -23376: -23376: -23376: swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) -23376: noexcept(noexcept(__one.swap(__two))) -23376: { __one.swap(__two); } -23376: -23376: -23376: template -23376: typename enable_if< -23376: !std::__array_traits<_Tp, _Nm>::_Is_swappable::value>::type -23376: swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete; -23376: -23376: -23376: template -23376: constexpr _Tp& -23376: get(array<_Tp, _Nm>& __arr) noexcept -23376: { -23376: static_assert(_Int < _Nm, "array index is within bounds"); -23376: return std::__array_traits<_Tp, _Nm>:: -23376: _S_ref(__arr._M_elems, _Int); -23376: } -23376: -23376: template -23376: constexpr _Tp&& -23376: get(array<_Tp, _Nm>&& __arr) noexcept -23376: { -23376: static_assert(_Int < _Nm, "array index is within bounds"); -23376: return std::move(std::get<_Int>(__arr)); -23376: } -23376: -23376: template -23376: constexpr const _Tp& -23376: get(const array<_Tp, _Nm>& __arr) noexcept -23376: { -23376: static_assert(_Int < _Nm, "array index is within bounds"); -23376: return std::__array_traits<_Tp, _Nm>:: -23376: _S_ref(__arr._M_elems, _Int); -23376: } -23376: -23376: template -23376: constexpr const _Tp&& -23376: get(const array<_Tp, _Nm>&& __arr) noexcept -23376: { -23376: static_assert(_Int < _Nm, "array index is within bounds"); -23376: return std::move(std::get<_Int>(__arr)); -23376: } -23376: -23376: -23376: } -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct tuple_size; -23376: -23376: -23376: template -23376: struct tuple_size> -23376: : public integral_constant { }; -23376: -23376: -23376: template -23376: struct tuple_element; -23376: -23376: -23376: template -23376: struct tuple_element<_Int, std::array<_Tp, _Nm>> -23376: { -23376: static_assert(_Int < _Nm, "index is out of bounds"); -23376: typedef _Tp type; -23376: }; -23376: -23376: template -23376: struct __is_tuple_like_impl> : true_type -23376: { }; -23376: -23376: -23376: } -23376: # 40 "/usr/include/c++/8/tuple" 2 3 -23376: # 1 "/usr/include/c++/8/bits/uses_allocator.h" 1 3 -23376: # 35 "/usr/include/c++/8/bits/uses_allocator.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: struct __erased_type { }; -23376: -23376: template -23376: using __is_erased_or_convertible -23376: = __or_, is_convertible<_Alloc, _Tp>>; -23376: -23376: -23376: struct allocator_arg_t { explicit allocator_arg_t() = default; }; -23376: -23376: constexpr allocator_arg_t allocator_arg = -23376: allocator_arg_t(); -23376: -23376: template> -23376: struct __uses_allocator_helper -23376: : false_type { }; -23376: -23376: template -23376: struct __uses_allocator_helper<_Tp, _Alloc, -23376: __void_t> -23376: : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type -23376: { }; -23376: -23376: -23376: template -23376: struct uses_allocator -23376: : __uses_allocator_helper<_Tp, _Alloc>::type -23376: { }; -23376: -23376: struct __uses_alloc_base { }; -23376: -23376: struct __uses_alloc0 : __uses_alloc_base -23376: { -23376: struct _Sink { void operator=(const void*) { } } _M_a; -23376: }; -23376: -23376: template -23376: struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; -23376: -23376: template -23376: struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; -23376: -23376: template -23376: struct __uses_alloc; -23376: -23376: template -23376: struct __uses_alloc -23376: : conditional< -23376: is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>::value, -23376: __uses_alloc1<_Alloc>, -23376: __uses_alloc2<_Alloc>>::type -23376: { -23376: static_assert(__or_< -23376: is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>, -23376: is_constructible<_Tp, _Args..., _Alloc>>::value, "construction with" -23376: " an allocator must be possible if uses_allocator is true"); -23376: }; -23376: -23376: template -23376: struct __uses_alloc -23376: : __uses_alloc0 { }; -23376: -23376: template -23376: using __uses_alloc_t = -23376: __uses_alloc::value, _Tp, _Alloc, _Args...>; -23376: -23376: template -23376: inline __uses_alloc_t<_Tp, _Alloc, _Args...> -23376: __use_alloc(const _Alloc& __a) -23376: { -23376: __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; -23376: __ret._M_a = std::__addressof(__a); -23376: return __ret; -23376: } -23376: -23376: template -23376: void -23376: __use_alloc(const _Alloc&&) = delete; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template class _Predicate, -23376: typename _Tp, typename _Alloc, typename... _Args> -23376: struct __is_uses_allocator_predicate -23376: : conditional::value, -23376: __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, -23376: _Predicate<_Tp, _Args..., _Alloc>>, -23376: _Predicate<_Tp, _Args...>>::type { }; -23376: -23376: template -23376: struct __is_uses_allocator_constructible -23376: : __is_uses_allocator_predicate -23376: { }; -23376: -23376: -23376: template -23376: constexpr bool __is_uses_allocator_constructible_v = -23376: __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; -23376: -23376: -23376: template -23376: struct __is_nothrow_uses_allocator_constructible -23376: : __is_uses_allocator_predicate -23376: { }; -23376: -23376: -23376: -23376: template -23376: constexpr bool -23376: __is_nothrow_uses_allocator_constructible_v = -23376: __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; -23376: -23376: -23376: template -23376: void __uses_allocator_construct_impl(__uses_alloc0 __a, _Tp* __ptr, -23376: _Args&&... __args) -23376: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, -23376: _Args&&... __args) -23376: { -23376: ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: template -23376: void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, -23376: _Args&&... __args) -23376: { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } -23376: -23376: template -23376: void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, -23376: _Args&&... __args) -23376: { -23376: __uses_allocator_construct_impl(__use_alloc<_Tp, _Alloc, _Args...>(__a), -23376: __ptr, std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: } -23376: # 41 "/usr/include/c++/8/tuple" 2 3 -23376: # 1 "/usr/include/c++/8/bits/invoke.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/invoke.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/invoke.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 52 "/usr/include/c++/8/bits/invoke.h" 3 -23376: template::type> -23376: constexpr _Up&& -23376: __invfwd(typename remove_reference<_Tp>::type& __t) noexcept -23376: { return static_cast<_Up&&>(__t); } -23376: -23376: template -23376: constexpr _Res -23376: __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) -23376: { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: constexpr _Res -23376: __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, -23376: _Args&&... __args) -23376: { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } -23376: -23376: template -23376: constexpr _Res -23376: __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, -23376: _Args&&... __args) -23376: { -23376: return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); -23376: } -23376: -23376: template -23376: constexpr _Res -23376: __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) -23376: { return __invfwd<_Tp>(__t).*__f; } -23376: -23376: template -23376: constexpr _Res -23376: __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) -23376: { return (*std::forward<_Tp>(__t)).*__f; } -23376: -23376: -23376: template -23376: constexpr typename __invoke_result<_Callable, _Args...>::type -23376: __invoke(_Callable&& __fn, _Args&&... __args) -23376: noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) -23376: { -23376: using __result = __invoke_result<_Callable, _Args...>; -23376: using __type = typename __result::type; -23376: using __tag = typename __result::__invoke_type; -23376: return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: } -23376: # 42 "/usr/include/c++/8/tuple" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class tuple; -23376: -23376: template -23376: struct __is_empty_non_tuple : is_empty<_Tp> { }; -23376: -23376: -23376: template -23376: struct __is_empty_non_tuple> : false_type { }; -23376: -23376: -23376: template -23376: using __empty_not_final -23376: = typename conditional<__is_final(_Tp), false_type, -23376: __is_empty_non_tuple<_Tp>>::type; -23376: -23376: template::value> -23376: struct _Head_base; -23376: -23376: template -23376: struct _Head_base<_Idx, _Head, true> -23376: : public _Head -23376: { -23376: constexpr _Head_base() -23376: : _Head() { } -23376: -23376: constexpr _Head_base(const _Head& __h) -23376: : _Head(__h) { } -23376: -23376: constexpr _Head_base(const _Head_base&) = default; -23376: constexpr _Head_base(_Head_base&&) = default; -23376: -23376: template -23376: constexpr _Head_base(_UHead&& __h) -23376: : _Head(std::forward<_UHead>(__h)) { } -23376: -23376: _Head_base(allocator_arg_t, __uses_alloc0) -23376: : _Head() { } -23376: -23376: template -23376: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) -23376: : _Head(allocator_arg, *__a._M_a) { } -23376: -23376: template -23376: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) -23376: : _Head(*__a._M_a) { } -23376: -23376: template -23376: _Head_base(__uses_alloc0, _UHead&& __uhead) -23376: : _Head(std::forward<_UHead>(__uhead)) { } -23376: -23376: template -23376: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) -23376: : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } -23376: -23376: template -23376: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) -23376: : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { } -23376: -23376: static constexpr _Head& -23376: _M_head(_Head_base& __b) noexcept { return __b; } -23376: -23376: static constexpr const _Head& -23376: _M_head(const _Head_base& __b) noexcept { return __b; } -23376: }; -23376: -23376: template -23376: struct _Head_base<_Idx, _Head, false> -23376: { -23376: constexpr _Head_base() -23376: : _M_head_impl() { } -23376: -23376: constexpr _Head_base(const _Head& __h) -23376: : _M_head_impl(__h) { } -23376: -23376: constexpr _Head_base(const _Head_base&) = default; -23376: constexpr _Head_base(_Head_base&&) = default; -23376: -23376: template -23376: constexpr _Head_base(_UHead&& __h) -23376: : _M_head_impl(std::forward<_UHead>(__h)) { } -23376: -23376: _Head_base(allocator_arg_t, __uses_alloc0) -23376: : _M_head_impl() { } -23376: -23376: template -23376: _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) -23376: : _M_head_impl(allocator_arg, *__a._M_a) { } -23376: -23376: template -23376: _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) -23376: : _M_head_impl(*__a._M_a) { } -23376: -23376: template -23376: _Head_base(__uses_alloc0, _UHead&& __uhead) -23376: : _M_head_impl(std::forward<_UHead>(__uhead)) { } -23376: -23376: template -23376: _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) -23376: : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) -23376: { } -23376: -23376: template -23376: _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) -23376: : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } -23376: -23376: static constexpr _Head& -23376: _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } -23376: -23376: static constexpr const _Head& -23376: _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } -23376: -23376: _Head _M_head_impl; -23376: }; -23376: # 176 "/usr/include/c++/8/tuple" 3 -23376: template -23376: struct _Tuple_impl; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _Tuple_impl<_Idx, _Head, _Tail...> -23376: : public _Tuple_impl<_Idx + 1, _Tail...>, -23376: private _Head_base<_Idx, _Head> -23376: { -23376: template friend class _Tuple_impl; -23376: -23376: typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; -23376: typedef _Head_base<_Idx, _Head> _Base; -23376: -23376: static constexpr _Head& -23376: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } -23376: -23376: static constexpr const _Head& -23376: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } -23376: -23376: static constexpr _Inherited& -23376: _M_tail(_Tuple_impl& __t) noexcept { return __t; } -23376: -23376: static constexpr const _Inherited& -23376: _M_tail(const _Tuple_impl& __t) noexcept { return __t; } -23376: -23376: constexpr _Tuple_impl() -23376: : _Inherited(), _Base() { } -23376: -23376: explicit -23376: constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail) -23376: : _Inherited(__tail...), _Base(__head) { } -23376: -23376: template::type> -23376: explicit -23376: constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail) -23376: : _Inherited(std::forward<_UTail>(__tail)...), -23376: _Base(std::forward<_UHead>(__head)) { } -23376: -23376: constexpr _Tuple_impl(const _Tuple_impl&) = default; -23376: -23376: constexpr -23376: _Tuple_impl(_Tuple_impl&& __in) -23376: noexcept(__and_, -23376: is_nothrow_move_constructible<_Inherited>>::value) -23376: : _Inherited(std::move(_M_tail(__in))), -23376: _Base(std::forward<_Head>(_M_head(__in))) { } -23376: -23376: template -23376: constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) -23376: : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), -23376: _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { } -23376: -23376: template -23376: constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) -23376: : _Inherited(std::move -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), -23376: _Base(std::forward<_UHead> -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) -23376: : _Inherited(__tag, __a), -23376: _Base(__tag, __use_alloc<_Head>(__a)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Head& __head, const _Tail&... __tail) -23376: : _Inherited(__tag, __a, __tail...), -23376: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } -23376: -23376: template::type> -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _UHead&& __head, _UTail&&... __tail) -23376: : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), -23376: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), -23376: std::forward<_UHead>(__head)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Tuple_impl& __in) -23376: : _Inherited(__tag, __a, _M_tail(__in)), -23376: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _Tuple_impl&& __in) -23376: : _Inherited(__tag, __a, std::move(_M_tail(__in))), -23376: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), -23376: std::forward<_Head>(_M_head(__in))) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Tuple_impl<_Idx, _UElements...>& __in) -23376: : _Inherited(__tag, __a, -23376: _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), -23376: _Base(__use_alloc<_Head, _Alloc, _Head>(__a), -23376: _Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) -23376: : _Inherited(__tag, __a, std::move -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), -23376: _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), -23376: std::forward<_UHead> -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } -23376: -23376: _Tuple_impl& -23376: operator=(const _Tuple_impl& __in) -23376: { -23376: _M_head(*this) = _M_head(__in); -23376: _M_tail(*this) = _M_tail(__in); -23376: return *this; -23376: } -23376: -23376: _Tuple_impl& -23376: operator=(_Tuple_impl&& __in) -23376: noexcept(__and_, -23376: is_nothrow_move_assignable<_Inherited>>::value) -23376: { -23376: _M_head(*this) = std::forward<_Head>(_M_head(__in)); -23376: _M_tail(*this) = std::move(_M_tail(__in)); -23376: return *this; -23376: } -23376: -23376: template -23376: _Tuple_impl& -23376: operator=(const _Tuple_impl<_Idx, _UElements...>& __in) -23376: { -23376: _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); -23376: _M_tail(*this) = _Tuple_impl<_Idx, _UElements...>::_M_tail(__in); -23376: return *this; -23376: } -23376: -23376: template -23376: _Tuple_impl& -23376: operator=(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) -23376: { -23376: _M_head(*this) = std::forward<_UHead> -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); -23376: _M_tail(*this) = std::move -23376: (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)); -23376: return *this; -23376: } -23376: -23376: protected: -23376: void -23376: _M_swap(_Tuple_impl& __in) -23376: noexcept(__is_nothrow_swappable<_Head>::value -23376: && noexcept(_M_tail(__in)._M_swap(_M_tail(__in)))) -23376: { -23376: using std::swap; -23376: swap(_M_head(*this), _M_head(__in)); -23376: _Inherited::_M_swap(_M_tail(__in)); -23376: } -23376: }; -23376: -23376: -23376: template -23376: struct _Tuple_impl<_Idx, _Head> -23376: : private _Head_base<_Idx, _Head> -23376: { -23376: template friend class _Tuple_impl; -23376: -23376: typedef _Head_base<_Idx, _Head> _Base; -23376: -23376: static constexpr _Head& -23376: _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } -23376: -23376: static constexpr const _Head& -23376: _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } -23376: -23376: constexpr _Tuple_impl() -23376: : _Base() { } -23376: -23376: explicit -23376: constexpr _Tuple_impl(const _Head& __head) -23376: : _Base(__head) { } -23376: -23376: template -23376: explicit -23376: constexpr _Tuple_impl(_UHead&& __head) -23376: : _Base(std::forward<_UHead>(__head)) { } -23376: -23376: constexpr _Tuple_impl(const _Tuple_impl&) = default; -23376: -23376: constexpr -23376: _Tuple_impl(_Tuple_impl&& __in) -23376: noexcept(is_nothrow_move_constructible<_Head>::value) -23376: : _Base(std::forward<_Head>(_M_head(__in))) { } -23376: -23376: template -23376: constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) -23376: : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } -23376: -23376: template -23376: constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) -23376: : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) -23376: { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) -23376: : _Base(__tag, __use_alloc<_Head>(__a)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Head& __head) -23376: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _UHead&& __head) -23376: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), -23376: std::forward<_UHead>(__head)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Tuple_impl& __in) -23376: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _Tuple_impl&& __in) -23376: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), -23376: std::forward<_Head>(_M_head(__in))) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Tuple_impl<_Idx, _UHead>& __in) -23376: : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), -23376: _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } -23376: -23376: template -23376: _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, -23376: _Tuple_impl<_Idx, _UHead>&& __in) -23376: : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), -23376: std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) -23376: { } -23376: -23376: _Tuple_impl& -23376: operator=(const _Tuple_impl& __in) -23376: { -23376: _M_head(*this) = _M_head(__in); -23376: return *this; -23376: } -23376: -23376: _Tuple_impl& -23376: operator=(_Tuple_impl&& __in) -23376: noexcept(is_nothrow_move_assignable<_Head>::value) -23376: { -23376: _M_head(*this) = std::forward<_Head>(_M_head(__in)); -23376: return *this; -23376: } -23376: -23376: template -23376: _Tuple_impl& -23376: operator=(const _Tuple_impl<_Idx, _UHead>& __in) -23376: { -23376: _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); -23376: return *this; -23376: } -23376: -23376: template -23376: _Tuple_impl& -23376: operator=(_Tuple_impl<_Idx, _UHead>&& __in) -23376: { -23376: _M_head(*this) -23376: = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); -23376: return *this; -23376: } -23376: -23376: protected: -23376: void -23376: _M_swap(_Tuple_impl& __in) -23376: noexcept(__is_nothrow_swappable<_Head>::value) -23376: { -23376: using std::swap; -23376: swap(_M_head(*this), _M_head(__in)); -23376: } -23376: }; -23376: -23376: -23376: -23376: template -23376: struct _TC -23376: { -23376: template -23376: static constexpr bool _ConstructibleTuple() -23376: { -23376: return __and_...>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyConvertibleTuple() -23376: { -23376: return __and_...>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _MoveConstructibleTuple() -23376: { -23376: return __and_...>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyMoveConvertibleTuple() -23376: { -23376: return __and_...>::value; -23376: } -23376: -23376: template -23376: static constexpr bool _NonNestedTuple() -23376: { -23376: return __and_<__not_, -23376: typename remove_cv< -23376: typename remove_reference<_SrcTuple>::type -23376: >::type>>, -23376: __not_>, -23376: __not_> -23376: >::value; -23376: } -23376: template -23376: static constexpr bool _NotSameTuple() -23376: { -23376: return __not_, -23376: typename remove_const< -23376: typename remove_reference<_UElements...>::type -23376: >::type>>::value; -23376: } -23376: }; -23376: -23376: template -23376: struct _TC -23376: { -23376: template -23376: static constexpr bool _ConstructibleTuple() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyConvertibleTuple() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _MoveConstructibleTuple() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _ImplicitlyMoveConvertibleTuple() -23376: { -23376: return false; -23376: } -23376: -23376: template -23376: static constexpr bool _NonNestedTuple() -23376: { -23376: return true; -23376: } -23376: template -23376: static constexpr bool _NotSameTuple() -23376: { -23376: return true; -23376: } -23376: }; -23376: -23376: -23376: template -23376: class tuple : public _Tuple_impl<0, _Elements...> -23376: { -23376: typedef _Tuple_impl<0, _Elements...> _Inherited; -23376: -23376: -23376: -23376: template -23376: struct _TC2 -23376: { -23376: static constexpr bool _DefaultConstructibleTuple() -23376: { -23376: return __and_...>::value; -23376: } -23376: static constexpr bool _ImplicitlyDefaultConstructibleTuple() -23376: { -23376: return __and_<__is_implicitly_default_constructible<_Elements>...> -23376: ::value; -23376: } -23376: }; -23376: -23376: public: -23376: template:: -23376: _ImplicitlyDefaultConstructibleTuple(), -23376: bool>::type = true> -23376: constexpr tuple() -23376: : _Inherited() { } -23376: -23376: template:: -23376: _DefaultConstructibleTuple() -23376: && -23376: !_TC2<_Dummy>:: -23376: _ImplicitlyDefaultConstructibleTuple(), -23376: bool>::type = false> -23376: explicit constexpr tuple() -23376: : _Inherited() { } -23376: -23376: -23376: -23376: template using _TCC = -23376: _TC::value, -23376: _Elements...>; -23376: -23376: template::template -23376: _ConstructibleTuple<_Elements...>() -23376: && _TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_Elements...>() -23376: && (sizeof...(_Elements) >= 1), -23376: bool>::type=true> -23376: constexpr tuple(const _Elements&... __elements) -23376: : _Inherited(__elements...) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_Elements...>() -23376: && !_TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_Elements...>() -23376: && (sizeof...(_Elements) >= 1), -23376: bool>::type=false> -23376: explicit constexpr tuple(const _Elements&... __elements) -23376: : _Inherited(__elements...) { } -23376: -23376: -23376: -23376: template using _TMC = -23376: _TC<(sizeof...(_Elements) == sizeof...(_UElements)) -23376: && (_TC<(sizeof...(_UElements)==1), _Elements...>:: -23376: template _NotSameTuple<_UElements...>()), -23376: _Elements...>; -23376: -23376: -23376: -23376: template using _TMCT = -23376: _TC<(sizeof...(_Elements) == sizeof...(_UElements)) -23376: && !is_same, -23376: tuple<_UElements...>>::value, -23376: _Elements...>; -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && _TMC<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && (sizeof...(_Elements) >= 1), -23376: bool>::type=true> -23376: constexpr tuple(_UElements&&... __elements) -23376: : _Inherited(std::forward<_UElements>(__elements)...) { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && !_TMC<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && (sizeof...(_Elements) >= 1), -23376: bool>::type=false> -23376: explicit constexpr tuple(_UElements&&... __elements) -23376: : _Inherited(std::forward<_UElements>(__elements)...) { } -23376: -23376: constexpr tuple(const tuple&) = default; -23376: -23376: constexpr tuple(tuple&&) = default; -23376: -23376: -23376: -23376: template using _TNTC = -23376: _TC::value && sizeof...(_Elements) == 1, -23376: _Elements...>; -23376: -23376: template::template -23376: _ConstructibleTuple<_UElements...>() -23376: && _TMCT<_UElements...>::template -23376: _ImplicitlyConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&>(), -23376: bool>::type=true> -23376: constexpr tuple(const tuple<_UElements...>& __in) -23376: : _Inherited(static_cast&>(__in)) -23376: { } -23376: -23376: template::template -23376: _ConstructibleTuple<_UElements...>() -23376: && !_TMCT<_UElements...>::template -23376: _ImplicitlyConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&>(), -23376: bool>::type=false> -23376: explicit constexpr tuple(const tuple<_UElements...>& __in) -23376: : _Inherited(static_cast&>(__in)) -23376: { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && _TMCT<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=true> -23376: constexpr tuple(tuple<_UElements...>&& __in) -23376: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && !_TMCT<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=false> -23376: explicit constexpr tuple(tuple<_UElements...>&& __in) -23376: : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } -23376: -23376: -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a) -23376: : _Inherited(__tag, __a) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_Elements...>() -23376: && _TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_Elements...>(), -23376: bool>::type=true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Elements&... __elements) -23376: : _Inherited(__tag, __a, __elements...) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_Elements...>() -23376: && !_TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_Elements...>(), -23376: bool>::type=false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const _Elements&... __elements) -23376: : _Inherited(__tag, __a, __elements...) { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && _TMC<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>(), -23376: bool>::type=true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: _UElements&&... __elements) -23376: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) -23376: { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && !_TMC<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>(), -23376: bool>::type=false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: _UElements&&... __elements) -23376: : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) -23376: { } -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) -23376: : _Inherited(__tag, __a, static_cast(__in)) { } -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) -23376: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_UElements...>() -23376: && _TMCT<_UElements...>::template -23376: _ImplicitlyConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const tuple<_UElements...>& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast&>(__in)) -23376: { } -23376: -23376: template::template -23376: _ConstructibleTuple<_UElements...>() -23376: && !_TMCT<_UElements...>::template -23376: _ImplicitlyConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const tuple<_UElements...>& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast&>(__in)) -23376: { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && _TMCT<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: tuple<_UElements...>&& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) -23376: { } -23376: -23376: template::template -23376: _MoveConstructibleTuple<_UElements...>() -23376: && !_TMCT<_UElements...>::template -23376: _ImplicitlyMoveConvertibleTuple<_UElements...>() -23376: && _TNTC<_Dummy>::template -23376: _NonNestedTuple&&>(), -23376: bool>::type=false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: tuple<_UElements...>&& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) -23376: { } -23376: -23376: tuple& -23376: operator=(const tuple& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = __in; -23376: return *this; -23376: } -23376: -23376: tuple& -23376: operator=(tuple&& __in) -23376: noexcept(is_nothrow_move_assignable<_Inherited>::value) -23376: { -23376: static_cast<_Inherited&>(*this) = std::move(__in); -23376: return *this; -23376: } -23376: -23376: template -23376: typename -23376: enable_if::type -23376: operator=(const tuple<_UElements...>& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = __in; -23376: return *this; -23376: } -23376: -23376: template -23376: typename -23376: enable_if::type -23376: operator=(tuple<_UElements...>&& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = std::move(__in); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(tuple& __in) -23376: noexcept(noexcept(__in._M_swap(__in))) -23376: { _Inherited::_M_swap(__in); } -23376: }; -23376: # 889 "/usr/include/c++/8/tuple" 3 -23376: template<> -23376: class tuple<> -23376: { -23376: public: -23376: void swap(tuple&) noexcept { } -23376: -23376: -23376: tuple() = default; -23376: -23376: template -23376: tuple(allocator_arg_t, const _Alloc&) { } -23376: template -23376: tuple(allocator_arg_t, const _Alloc&, const tuple&) { } -23376: }; -23376: -23376: -23376: -23376: template -23376: class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> -23376: { -23376: typedef _Tuple_impl<0, _T1, _T2> _Inherited; -23376: -23376: public: -23376: template , -23376: __is_implicitly_default_constructible<_U2>> -23376: ::value, bool>::type = true> -23376: -23376: constexpr tuple() -23376: : _Inherited() { } -23376: -23376: template , -23376: is_default_constructible<_U2>, -23376: __not_< -23376: __and_<__is_implicitly_default_constructible<_U1>, -23376: __is_implicitly_default_constructible<_U2>>>> -23376: ::value, bool>::type = false> -23376: -23376: explicit constexpr tuple() -23376: : _Inherited() { } -23376: -23376: -23376: -23376: template using _TCC = -23376: _TC::value, _T1, _T2>; -23376: -23376: template::template -23376: _ConstructibleTuple<_T1, _T2>() -23376: && _TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_T1, _T2>(), -23376: bool>::type = true> -23376: constexpr tuple(const _T1& __a1, const _T2& __a2) -23376: : _Inherited(__a1, __a2) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_T1, _T2>() -23376: && !_TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_T1, _T2>(), -23376: bool>::type = false> -23376: explicit constexpr tuple(const _T1& __a1, const _T2& __a2) -23376: : _Inherited(__a1, __a2) { } -23376: -23376: -23376: -23376: using _TMC = _TC; -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>() -23376: && !is_same::type, -23376: allocator_arg_t>::value, -23376: bool>::type = true> -23376: constexpr tuple(_U1&& __a1, _U2&& __a2) -23376: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>() -23376: && !is_same::type, -23376: allocator_arg_t>::value, -23376: bool>::type = false> -23376: explicit constexpr tuple(_U1&& __a1, _U2&& __a2) -23376: : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } -23376: -23376: constexpr tuple(const tuple&) = default; -23376: -23376: constexpr tuple(tuple&&) = default; -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: constexpr tuple(const tuple<_U1, _U2>& __in) -23376: : _Inherited(static_cast&>(__in)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit constexpr tuple(const tuple<_U1, _U2>& __in) -23376: : _Inherited(static_cast&>(__in)) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: constexpr tuple(tuple<_U1, _U2>&& __in) -23376: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit constexpr tuple(tuple<_U1, _U2>&& __in) -23376: : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: constexpr tuple(const pair<_U1, _U2>& __in) -23376: : _Inherited(__in.first, __in.second) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit constexpr tuple(const pair<_U1, _U2>& __in) -23376: : _Inherited(__in.first, __in.second) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: constexpr tuple(pair<_U1, _U2>&& __in) -23376: : _Inherited(std::forward<_U1>(__in.first), -23376: std::forward<_U2>(__in.second)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit constexpr tuple(pair<_U1, _U2>&& __in) -23376: : _Inherited(std::forward<_U1>(__in.first), -23376: std::forward<_U2>(__in.second)) { } -23376: -23376: -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a) -23376: : _Inherited(__tag, __a) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_T1, _T2>() -23376: && _TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_T1, _T2>(), -23376: bool>::type=true> -23376: -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const _T1& __a1, const _T2& __a2) -23376: : _Inherited(__tag, __a, __a1, __a2) { } -23376: -23376: template::template -23376: _ConstructibleTuple<_T1, _T2>() -23376: && !_TCC<_Dummy>::template -23376: _ImplicitlyConvertibleTuple<_T1, _T2>(), -23376: bool>::type=false> -23376: -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const _T1& __a1, const _T2& __a2) -23376: : _Inherited(__tag, __a, __a1, __a2) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2) -23376: : _Inherited(__tag, __a, std::forward<_U1>(__a1), -23376: std::forward<_U2>(__a2)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: _U1&& __a1, _U2&& __a2) -23376: : _Inherited(__tag, __a, std::forward<_U1>(__a1), -23376: std::forward<_U2>(__a2)) { } -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) -23376: : _Inherited(__tag, __a, static_cast(__in)) { } -23376: -23376: template -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) -23376: : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const tuple<_U1, _U2>& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast&>(__in)) -23376: { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const tuple<_U1, _U2>& __in) -23376: : _Inherited(__tag, __a, -23376: static_cast&>(__in)) -23376: { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) -23376: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) -23376: { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: tuple<_U1, _U2>&& __in) -23376: : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) -23376: { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const pair<_U1, _U2>& __in) -23376: : _Inherited(__tag, __a, __in.first, __in.second) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: const pair<_U1, _U2>& __in) -23376: : _Inherited(__tag, __a, __in.first, __in.second) { } -23376: -23376: template() -23376: && _TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = true> -23376: tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) -23376: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), -23376: std::forward<_U2>(__in.second)) { } -23376: -23376: template() -23376: && !_TMC::template -23376: _ImplicitlyMoveConvertibleTuple<_U1, _U2>(), -23376: bool>::type = false> -23376: explicit tuple(allocator_arg_t __tag, const _Alloc& __a, -23376: pair<_U1, _U2>&& __in) -23376: : _Inherited(__tag, __a, std::forward<_U1>(__in.first), -23376: std::forward<_U2>(__in.second)) { } -23376: -23376: tuple& -23376: operator=(const tuple& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = __in; -23376: return *this; -23376: } -23376: -23376: tuple& -23376: operator=(tuple&& __in) -23376: noexcept(is_nothrow_move_assignable<_Inherited>::value) -23376: { -23376: static_cast<_Inherited&>(*this) = std::move(__in); -23376: return *this; -23376: } -23376: -23376: template -23376: tuple& -23376: operator=(const tuple<_U1, _U2>& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = __in; -23376: return *this; -23376: } -23376: -23376: template -23376: tuple& -23376: operator=(tuple<_U1, _U2>&& __in) -23376: { -23376: static_cast<_Inherited&>(*this) = std::move(__in); -23376: return *this; -23376: } -23376: -23376: template -23376: tuple& -23376: operator=(const pair<_U1, _U2>& __in) -23376: { -23376: this->_M_head(*this) = __in.first; -23376: this->_M_tail(*this)._M_head(*this) = __in.second; -23376: return *this; -23376: } -23376: -23376: template -23376: tuple& -23376: operator=(pair<_U1, _U2>&& __in) -23376: { -23376: this->_M_head(*this) = std::forward<_U1>(__in.first); -23376: this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(tuple& __in) -23376: noexcept(noexcept(__in._M_swap(__in))) -23376: { _Inherited::_M_swap(__in); } -23376: }; -23376: -23376: -23376: -23376: template -23376: struct tuple_size> -23376: : public integral_constant { }; -23376: # 1278 "/usr/include/c++/8/tuple" 3 -23376: template -23376: struct tuple_element<__i, tuple<_Head, _Tail...> > -23376: : tuple_element<__i - 1, tuple<_Tail...> > { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct tuple_element<0, tuple<_Head, _Tail...> > -23376: { -23376: typedef _Head type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct tuple_element<__i, tuple<>> -23376: { -23376: static_assert(__i < tuple_size>::value, -23376: "tuple index is in range"); -23376: }; -23376: -23376: template -23376: constexpr _Head& -23376: __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept -23376: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } -23376: -23376: template -23376: constexpr const _Head& -23376: __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept -23376: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } -23376: -23376: -23376: template -23376: constexpr __tuple_element_t<__i, tuple<_Elements...>>& -23376: get(tuple<_Elements...>& __t) noexcept -23376: { return std::__get_helper<__i>(__t); } -23376: -23376: -23376: template -23376: constexpr const __tuple_element_t<__i, tuple<_Elements...>>& -23376: get(const tuple<_Elements...>& __t) noexcept -23376: { return std::__get_helper<__i>(__t); } -23376: -23376: -23376: template -23376: constexpr __tuple_element_t<__i, tuple<_Elements...>>&& -23376: get(tuple<_Elements...>&& __t) noexcept -23376: { -23376: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; -23376: return std::forward<__element_type&&>(std::get<__i>(__t)); -23376: } -23376: -23376: -23376: template -23376: constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& -23376: get(const tuple<_Elements...>&& __t) noexcept -23376: { -23376: typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; -23376: return std::forward(std::get<__i>(__t)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: constexpr _Head& -23376: __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept -23376: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } -23376: -23376: template -23376: constexpr const _Head& -23376: __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept -23376: { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } -23376: -23376: -23376: template -23376: constexpr _Tp& -23376: get(tuple<_Types...>& __t) noexcept -23376: { return std::__get_helper2<_Tp>(__t); } -23376: -23376: -23376: template -23376: constexpr _Tp&& -23376: get(tuple<_Types...>&& __t) noexcept -23376: { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); } -23376: -23376: -23376: template -23376: constexpr const _Tp& -23376: get(const tuple<_Types...>& __t) noexcept -23376: { return std::__get_helper2<_Tp>(__t); } -23376: -23376: -23376: -23376: template -23376: constexpr const _Tp&& -23376: get(const tuple<_Types...>&& __t) noexcept -23376: { return std::forward(std::__get_helper2<_Tp>(__t)); } -23376: -23376: -23376: -23376: template -23376: struct __tuple_compare -23376: { -23376: static constexpr bool -23376: __eq(const _Tp& __t, const _Up& __u) -23376: { -23376: return bool(std::get<__i>(__t) == std::get<__i>(__u)) -23376: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); -23376: } -23376: -23376: static constexpr bool -23376: __less(const _Tp& __t, const _Up& __u) -23376: { -23376: return bool(std::get<__i>(__t) < std::get<__i>(__u)) -23376: || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) -23376: && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); -23376: } -23376: }; -23376: -23376: template -23376: struct __tuple_compare<_Tp, _Up, __size, __size> -23376: { -23376: static constexpr bool -23376: __eq(const _Tp&, const _Up&) { return true; } -23376: -23376: static constexpr bool -23376: __less(const _Tp&, const _Up&) { return false; } -23376: }; -23376: -23376: template -23376: constexpr bool -23376: operator==(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { -23376: static_assert(sizeof...(_TElements) == sizeof...(_UElements), -23376: "tuple objects can only be compared if they have equal sizes."); -23376: using __compare = __tuple_compare, -23376: tuple<_UElements...>, -23376: 0, sizeof...(_TElements)>; -23376: return __compare::__eq(__t, __u); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator<(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { -23376: static_assert(sizeof...(_TElements) == sizeof...(_UElements), -23376: "tuple objects can only be compared if they have equal sizes."); -23376: using __compare = __tuple_compare, -23376: tuple<_UElements...>, -23376: 0, sizeof...(_TElements)>; -23376: return __compare::__less(__t, __u); -23376: } -23376: -23376: template -23376: constexpr bool -23376: operator!=(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { return !(__t == __u); } -23376: -23376: template -23376: constexpr bool -23376: operator>(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { return __u < __t; } -23376: -23376: template -23376: constexpr bool -23376: operator<=(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { return !(__u < __t); } -23376: -23376: template -23376: constexpr bool -23376: operator>=(const tuple<_TElements...>& __t, -23376: const tuple<_UElements...>& __u) -23376: { return !(__t < __u); } -23376: -23376: -23376: template -23376: constexpr tuple::__type...> -23376: make_tuple(_Elements&&... __args) -23376: { -23376: typedef tuple::__type...> -23376: __result_type; -23376: return __result_type(std::forward<_Elements>(__args)...); -23376: } -23376: -23376: -23376: -23376: template -23376: constexpr tuple<_Elements&&...> -23376: forward_as_tuple(_Elements&&... __args) noexcept -23376: { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } -23376: -23376: template -23376: struct __make_tuple_impl; -23376: -23376: template -23376: struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> -23376: : __make_tuple_impl<_Idx + 1, -23376: tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, -23376: _Tuple, _Nm> -23376: { }; -23376: -23376: template -23376: struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> -23376: { -23376: typedef tuple<_Tp...> __type; -23376: }; -23376: -23376: template -23376: struct __do_make_tuple -23376: : __make_tuple_impl<0, tuple<>, _Tuple, std::tuple_size<_Tuple>::value> -23376: { }; -23376: -23376: -23376: template -23376: struct __make_tuple -23376: : public __do_make_tuple::type>::type> -23376: { }; -23376: -23376: -23376: template -23376: struct __combine_tuples; -23376: -23376: template<> -23376: struct __combine_tuples<> -23376: { -23376: typedef tuple<> __type; -23376: }; -23376: -23376: template -23376: struct __combine_tuples> -23376: { -23376: typedef tuple<_Ts...> __type; -23376: }; -23376: -23376: template -23376: struct __combine_tuples, tuple<_T2s...>, _Rem...> -23376: { -23376: typedef typename __combine_tuples, -23376: _Rem...>::__type __type; -23376: }; -23376: -23376: -23376: template -23376: struct __tuple_cat_result -23376: { -23376: typedef typename __combine_tuples -23376: ::__type...>::__type __type; -23376: }; -23376: -23376: -23376: -23376: template -23376: struct __make_1st_indices; -23376: -23376: template<> -23376: struct __make_1st_indices<> -23376: { -23376: typedef std::_Index_tuple<> __type; -23376: }; -23376: -23376: template -23376: struct __make_1st_indices<_Tp, _Tpls...> -23376: { -23376: typedef typename std::_Build_index_tuple::type>::value>::__type __type; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct __tuple_concater; -23376: -23376: template -23376: struct __tuple_concater<_Ret, std::_Index_tuple<_Is...>, _Tp, _Tpls...> -23376: { -23376: template -23376: static constexpr _Ret -23376: _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) -23376: { -23376: typedef typename __make_1st_indices<_Tpls...>::__type __idx; -23376: typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; -23376: return __next::_S_do(std::forward<_Tpls>(__tps)..., -23376: std::forward<_Us>(__us)..., -23376: std::get<_Is>(std::forward<_Tp>(__tp))...); -23376: } -23376: }; -23376: -23376: template -23376: struct __tuple_concater<_Ret, std::_Index_tuple<>> -23376: { -23376: template -23376: static constexpr _Ret -23376: _S_do(_Us&&... __us) -23376: { -23376: return _Ret(std::forward<_Us>(__us)...); -23376: } -23376: }; -23376: -23376: -23376: template...>::value>::type> -23376: constexpr auto -23376: tuple_cat(_Tpls&&... __tpls) -23376: -> typename __tuple_cat_result<_Tpls...>::__type -23376: { -23376: typedef typename __tuple_cat_result<_Tpls...>::__type __ret; -23376: typedef typename __make_1st_indices<_Tpls...>::__type __idx; -23376: typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; -23376: return __concater::_S_do(std::forward<_Tpls>(__tpls)...); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: constexpr tuple<_Elements&...> -23376: tie(_Elements&... __args) noexcept -23376: { return tuple<_Elements&...>(__args...); } -23376: -23376: -23376: template -23376: inline -23376: -23376: -23376: typename enable_if<__and_<__is_swappable<_Elements>...>::value -23376: >::type -23376: -23376: -23376: -23376: swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: typename enable_if...>::value>::type -23376: swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct _Swallow_assign -23376: { -23376: template -23376: constexpr const _Swallow_assign& -23376: operator=(const _Tp&) const -23376: { return *this; } -23376: }; -23376: -23376: -23376: -23376: constexpr _Swallow_assign ignore{}; -23376: -23376: -23376: template -23376: struct uses_allocator, _Alloc> : true_type { }; -23376: -23376: -23376: template -23376: template -23376: inline -23376: pair<_T1, _T2>:: -23376: pair(piecewise_construct_t, -23376: tuple<_Args1...> __first, tuple<_Args2...> __second) -23376: : pair(__first, __second, -23376: typename _Build_index_tuple::__type(), -23376: typename _Build_index_tuple::__type()) -23376: { } -23376: -23376: template -23376: template -23376: inline -23376: pair<_T1, _T2>:: -23376: pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, -23376: _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) -23376: : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), -23376: second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) -23376: { } -23376: # 1711 "/usr/include/c++/8/tuple" 3 -23376: -23376: } -23376: # 64 "/usr/include/c++/8/bits/stl_map.h" 2 3 -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: class multimap; -23376: # 98 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template , -23376: typename _Alloc = std::allocator > > -23376: class map -23376: { -23376: public: -23376: typedef _Key key_type; -23376: typedef _Tp mapped_type; -23376: typedef std::pair value_type; -23376: typedef _Compare key_compare; -23376: typedef _Alloc allocator_type; -23376: -23376: private: -23376: # 126 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: public: -23376: class value_compare -23376: : public std::binary_function -23376: { -23376: friend class map<_Key, _Tp, _Compare, _Alloc>; -23376: protected: -23376: _Compare comp; -23376: -23376: value_compare(_Compare __c) -23376: : comp(__c) { } -23376: -23376: public: -23376: bool operator()(const value_type& __x, const value_type& __y) const -23376: { return comp(__x.first, __y.first); } -23376: }; -23376: -23376: private: -23376: -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind::other _Pair_alloc_type; -23376: -23376: typedef _Rb_tree, -23376: key_compare, _Pair_alloc_type> _Rep_type; -23376: -23376: -23376: _Rep_type _M_t; -23376: -23376: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; -23376: -23376: public: -23376: -23376: -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: typedef typename _Rep_type::iterator iterator; -23376: typedef typename _Rep_type::const_iterator const_iterator; -23376: typedef typename _Rep_type::size_type size_type; -23376: typedef typename _Rep_type::difference_type difference_type; -23376: typedef typename _Rep_type::reverse_iterator reverse_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; -23376: # 183 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: map() = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: map(const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) { } -23376: # 205 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: map(const map&) = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: map(map&&) = default; -23376: # 226 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: map(initializer_list __l, -23376: const _Compare& __comp = _Compare(), -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__l.begin(), __l.end()); } -23376: -23376: -23376: explicit -23376: map(const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) { } -23376: -23376: -23376: map(const map& __m, const allocator_type& __a) -23376: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } -23376: -23376: -23376: map(map&& __m, const allocator_type& __a) -23376: noexcept(is_nothrow_copy_constructible<_Compare>::value -23376: && _Alloc_traits::_S_always_equal()) -23376: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } -23376: -23376: -23376: map(initializer_list __l, const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__l.begin(), __l.end()); } -23376: -23376: -23376: template -23376: map(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 270 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: map(_InputIterator __first, _InputIterator __last) -23376: : _M_t() -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 287 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: map(_InputIterator __first, _InputIterator __last, -23376: const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~map() = default; -23376: # 316 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: map& -23376: operator=(const map&) = default; -23376: -23376: -23376: map& -23376: operator=(map&&) = default; -23376: # 334 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: map& -23376: operator=(initializer_list __l) -23376: { -23376: _M_t._M_assign_unique(__l.begin(), __l.end()); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_t.get_allocator()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return _M_t.empty(); } -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_t.size(); } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _M_t.max_size(); } -23376: # 489 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: mapped_type& -23376: operator[](const key_type& __k) -23376: { -23376: -23376: -23376: -23376: iterator __i = lower_bound(__k); -23376: -23376: if (__i == end() || key_comp()(__k, (*__i).first)) -23376: -23376: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, -23376: std::tuple(__k), -23376: std::tuple<>()); -23376: -23376: -23376: -23376: return (*__i).second; -23376: } -23376: -23376: -23376: mapped_type& -23376: operator[](key_type&& __k) -23376: { -23376: -23376: -23376: -23376: iterator __i = lower_bound(__k); -23376: -23376: if (__i == end() || key_comp()(__k, (*__i).first)) -23376: __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, -23376: std::forward_as_tuple(std::move(__k)), -23376: std::tuple<>()); -23376: return (*__i).second; -23376: } -23376: # 534 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: mapped_type& -23376: at(const key_type& __k) -23376: { -23376: iterator __i = lower_bound(__k); -23376: if (__i == end() || key_comp()(__k, (*__i).first)) -23376: __throw_out_of_range(("map::at")); -23376: return (*__i).second; -23376: } -23376: -23376: const mapped_type& -23376: at(const key_type& __k) const -23376: { -23376: const_iterator __i = lower_bound(__k); -23376: if (__i == end() || key_comp()(__k, (*__i).first)) -23376: __throw_out_of_range(("map::at")); -23376: return (*__i).second; -23376: } -23376: # 572 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: std::pair -23376: emplace(_Args&&... __args) -23376: { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); } -23376: # 602 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: iterator -23376: emplace_hint(const_iterator __pos, _Args&&... __args) -23376: { -23376: return _M_t._M_emplace_hint_unique(__pos, -23376: std::forward<_Args>(__args)...); -23376: } -23376: # 800 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: std::pair -23376: insert(const value_type& __x) -23376: { return _M_t._M_insert_unique(__x); } -23376: -23376: -23376: -23376: -23376: std::pair -23376: insert(value_type&& __x) -23376: { return _M_t._M_insert_unique(std::move(__x)); } -23376: -23376: template -23376: __enable_if_t::value, -23376: pair> -23376: insert(_Pair&& __x) -23376: { return _M_t._M_emplace_unique(std::forward<_Pair>(__x)); } -23376: # 827 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: void -23376: insert(std::initializer_list __list) -23376: { insert(__list.begin(), __list.end()); } -23376: # 856 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: -23376: insert(const_iterator __position, const value_type& __x) -23376: -23376: -23376: -23376: { return _M_t._M_insert_unique_(__position, __x); } -23376: -23376: -23376: -23376: -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return _M_t._M_insert_unique_(__position, std::move(__x)); } -23376: -23376: template -23376: __enable_if_t::value, iterator> -23376: insert(const_iterator __position, _Pair&& __x) -23376: { -23376: return _M_t._M_emplace_hint_unique(__position, -23376: std::forward<_Pair>(__x)); -23376: } -23376: # 889 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: void -23376: insert(_InputIterator __first, _InputIterator __last) -23376: { _M_t._M_insert_unique(__first, __last); } -23376: # 1029 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: erase(const_iterator __position) -23376: { return _M_t.erase(__position); } -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(iterator __position) -23376: { return _M_t.erase(__position); } -23376: # 1066 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: size_type -23376: erase(const key_type& __x) -23376: { return _M_t.erase(__x); } -23376: # 1086 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: erase(const_iterator __first, const_iterator __last) -23376: { return _M_t.erase(__first, __last); } -23376: # 1120 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: void -23376: swap(map& __x) -23376: noexcept(__is_nothrow_swappable<_Compare>::value) -23376: { _M_t.swap(__x._M_t); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: clear() noexcept -23376: { _M_t.clear(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: key_compare -23376: key_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: -23376: -23376: -23376: -23376: value_compare -23376: value_comp() const -23376: { return value_compare(_M_t.key_comp()); } -23376: # 1167 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: find(const key_type& __x) -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) -23376: { return _M_t._M_find_tr(__x); } -23376: # 1192 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: const_iterator -23376: find(const key_type& __x) const -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) -23376: { return _M_t._M_find_tr(__x); } -23376: # 1213 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: size_type -23376: count(const key_type& __x) const -23376: { return _M_t.find(__x) == _M_t.end() ? 0 : 1; } -23376: -23376: -23376: template -23376: auto -23376: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) -23376: { return _M_t._M_count_tr(__x); } -23376: # 1237 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: lower_bound(const key_type& __x) -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 1262 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: const_iterator -23376: lower_bound(const key_type& __x) const -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) const -23376: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 1282 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: iterator -23376: upper_bound(const key_type& __x) -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 1302 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: const_iterator -23376: upper_bound(const key_type& __x) const -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) const -23376: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 1331 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: # 1360 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) const -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) const -23376: -> decltype(pair( -23376: _M_t._M_equal_range_tr(__x))) -23376: { -23376: return pair( -23376: _M_t._M_equal_range_tr(__x)); -23376: } -23376: -23376: -23376: -23376: template -23376: friend bool -23376: operator==(const map<_K1, _T1, _C1, _A1>&, -23376: const map<_K1, _T1, _C1, _A1>&); -23376: -23376: template -23376: friend bool -23376: operator<(const map<_K1, _T1, _C1, _A1>&, -23376: const map<_K1, _T1, _C1, _A1>&); -23376: }; -23376: # 1432 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: inline bool -23376: operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __x._M_t == __y._M_t; } -23376: # 1449 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: template -23376: inline bool -23376: operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __x._M_t < __y._M_t; } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(map<_Key, _Tp, _Compare, _Alloc>& __x, -23376: map<_Key, _Tp, _Compare, _Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: # 1514 "/usr/include/c++/8/bits/stl_map.h" 3 -23376: -23376: } -23376: # 62 "/usr/include/c++/8/map" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_multimap.h" 1 3 -23376: # 64 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: class map; -23376: # 96 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template , -23376: typename _Alloc = std::allocator > > -23376: class multimap -23376: { -23376: public: -23376: typedef _Key key_type; -23376: typedef _Tp mapped_type; -23376: typedef std::pair value_type; -23376: typedef _Compare key_compare; -23376: typedef _Alloc allocator_type; -23376: -23376: private: -23376: # 125 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: public: -23376: class value_compare -23376: : public std::binary_function -23376: { -23376: friend class multimap<_Key, _Tp, _Compare, _Alloc>; -23376: protected: -23376: _Compare comp; -23376: -23376: value_compare(_Compare __c) -23376: : comp(__c) { } -23376: -23376: public: -23376: bool operator()(const value_type& __x, const value_type& __y) const -23376: { return comp(__x.first, __y.first); } -23376: }; -23376: -23376: private: -23376: -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind::other _Pair_alloc_type; -23376: -23376: typedef _Rb_tree, -23376: key_compare, _Pair_alloc_type> _Rep_type; -23376: -23376: _Rep_type _M_t; -23376: -23376: typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits; -23376: -23376: public: -23376: -23376: -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: typedef typename _Rep_type::iterator iterator; -23376: typedef typename _Rep_type::const_iterator const_iterator; -23376: typedef typename _Rep_type::size_type size_type; -23376: typedef typename _Rep_type::difference_type difference_type; -23376: typedef typename _Rep_type::reverse_iterator reverse_iterator; -23376: typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; -23376: # 180 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap() = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: multimap(const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) { } -23376: # 202 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap(const multimap&) = default; -23376: # 211 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap(multimap&&) = default; -23376: # 223 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap(initializer_list __l, -23376: const _Compare& __comp = _Compare(), -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__l.begin(), __l.end()); } -23376: -23376: -23376: explicit -23376: multimap(const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) { } -23376: -23376: -23376: multimap(const multimap& __m, const allocator_type& __a) -23376: : _M_t(__m._M_t, _Pair_alloc_type(__a)) { } -23376: -23376: -23376: multimap(multimap&& __m, const allocator_type& __a) -23376: noexcept(is_nothrow_copy_constructible<_Compare>::value -23376: && _Alloc_traits::_S_always_equal()) -23376: : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { } -23376: -23376: -23376: multimap(initializer_list __l, const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__l.begin(), __l.end()); } -23376: -23376: -23376: template -23376: multimap(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a) -23376: : _M_t(_Compare(), _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 266 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: multimap(_InputIterator __first, _InputIterator __last) -23376: : _M_t() -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 282 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: multimap(_InputIterator __first, _InputIterator __last, -23376: const _Compare& __comp, -23376: const allocator_type& __a = allocator_type()) -23376: : _M_t(__comp, _Pair_alloc_type(__a)) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~multimap() = default; -23376: # 311 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap& -23376: operator=(const multimap&) = default; -23376: -23376: -23376: multimap& -23376: operator=(multimap&&) = default; -23376: # 329 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: multimap& -23376: operator=(initializer_list __l) -23376: { -23376: _M_t._M_assign_equal(__l.begin(), __l.end()); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_t.get_allocator()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return _M_t.begin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return _M_t.end(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return _M_t.rbegin(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return _M_t.rend(); } -23376: -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return _M_t.empty(); } -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return _M_t.size(); } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _M_t.max_size(); } -23376: # 487 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: iterator -23376: emplace(_Args&&... __args) -23376: { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); } -23376: # 514 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: iterator -23376: emplace_hint(const_iterator __pos, _Args&&... __args) -23376: { -23376: return _M_t._M_emplace_hint_equal(__pos, -23376: std::forward<_Args>(__args)...); -23376: } -23376: # 536 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: insert(const value_type& __x) -23376: { return _M_t._M_insert_equal(__x); } -23376: -23376: -23376: -23376: -23376: iterator -23376: insert(value_type&& __x) -23376: { return _M_t._M_insert_equal(std::move(__x)); } -23376: -23376: template -23376: __enable_if_t::value, iterator> -23376: insert(_Pair&& __x) -23376: { return _M_t._M_emplace_equal(std::forward<_Pair>(__x)); } -23376: # 575 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: -23376: insert(const_iterator __position, const value_type& __x) -23376: -23376: -23376: -23376: { return _M_t._M_insert_equal_(__position, __x); } -23376: -23376: -23376: -23376: -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return _M_t._M_insert_equal_(__position, std::move(__x)); } -23376: -23376: template -23376: __enable_if_t::value, iterator> -23376: insert(const_iterator __position, _Pair&& __x) -23376: { -23376: return _M_t._M_emplace_hint_equal(__position, -23376: std::forward<_Pair>(__x)); -23376: } -23376: # 609 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: void -23376: insert(_InputIterator __first, _InputIterator __last) -23376: { _M_t._M_insert_equal(__first, __last); } -23376: # 622 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: void -23376: insert(initializer_list __l) -23376: { this->insert(__l.begin(), __l.end()); } -23376: # 699 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: erase(const_iterator __position) -23376: { return _M_t.erase(__position); } -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iterator -23376: erase(iterator __position) -23376: { return _M_t.erase(__position); } -23376: # 736 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: size_type -23376: erase(const key_type& __x) -23376: { return _M_t.erase(__x); } -23376: # 757 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: erase(const_iterator __first, const_iterator __last) -23376: { return _M_t.erase(__first, __last); } -23376: # 794 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: void -23376: swap(multimap& __x) -23376: noexcept(__is_nothrow_swappable<_Compare>::value) -23376: { _M_t.swap(__x._M_t); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: clear() noexcept -23376: { _M_t.clear(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: key_compare -23376: key_comp() const -23376: { return _M_t.key_comp(); } -23376: -23376: -23376: -23376: -23376: -23376: value_compare -23376: value_comp() const -23376: { return value_compare(_M_t.key_comp()); } -23376: # 840 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: find(const key_type& __x) -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x)) -23376: { return _M_t._M_find_tr(__x); } -23376: # 864 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: const_iterator -23376: find(const key_type& __x) const -23376: { return _M_t.find(__x); } -23376: -23376: -23376: template -23376: auto -23376: find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x)) -23376: { return _M_t._M_find_tr(__x); } -23376: # 882 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: size_type -23376: count(const key_type& __x) const -23376: { return _M_t.count(__x); } -23376: -23376: -23376: template -23376: auto -23376: count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x)) -23376: { return _M_t._M_count_tr(__x); } -23376: # 906 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: lower_bound(const key_type& __x) -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 931 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: const_iterator -23376: lower_bound(const key_type& __x) const -23376: { return _M_t.lower_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: lower_bound(const _Kt& __x) const -23376: -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_lower_bound_tr(__x)); } -23376: # 951 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: iterator -23376: upper_bound(const key_type& __x) -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) -23376: -> decltype(iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 971 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: const_iterator -23376: upper_bound(const key_type& __x) const -23376: { return _M_t.upper_bound(__x); } -23376: -23376: -23376: template -23376: auto -23376: upper_bound(const _Kt& __x) const -23376: -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x))) -23376: { return const_iterator(_M_t._M_upper_bound_tr(__x)); } -23376: # 998 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) -23376: -> decltype(pair(_M_t._M_equal_range_tr(__x))) -23376: { return pair(_M_t._M_equal_range_tr(__x)); } -23376: # 1025 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: std::pair -23376: equal_range(const key_type& __x) const -23376: { return _M_t.equal_range(__x); } -23376: -23376: -23376: template -23376: auto -23376: equal_range(const _Kt& __x) const -23376: -> decltype(pair( -23376: _M_t._M_equal_range_tr(__x))) -23376: { -23376: return pair( -23376: _M_t._M_equal_range_tr(__x)); -23376: } -23376: -23376: -23376: -23376: template -23376: friend bool -23376: operator==(const multimap<_K1, _T1, _C1, _A1>&, -23376: const multimap<_K1, _T1, _C1, _A1>&); -23376: -23376: template -23376: friend bool -23376: operator<(const multimap<_K1, _T1, _C1, _A1>&, -23376: const multimap<_K1, _T1, _C1, _A1>&); -23376: }; -23376: # 1096 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: inline bool -23376: operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __x._M_t == __y._M_t; } -23376: # 1113 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: template -23376: inline bool -23376: operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __x._M_t < __y._M_t; } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: const multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x, -23376: multimap<_Key, _Tp, _Compare, _Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: # 1178 "/usr/include/c++/8/bits/stl_multimap.h" 3 -23376: -23376: } -23376: # 63 "/usr/include/c++/8/map" 2 3 -23376: # 36 "../../src/Float_defs.hh" 2 -23376: # 44 "../../src/Float_defs.hh" -23376: -23376: # 44 "../../src/Float_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: struct float_ieee754_half { -23376: uint16_t word; -23376: static const uint16_t SGN_MASK = 0x8000U; -23376: static const uint16_t EXP_MASK = 0xfc00U; -23376: static const uint16_t WRD_MAX = 0x7bffU; -23376: static const uint16_t POS_INF = 0x7c00U; -23376: static const uint16_t NEG_INF = 0xfc00U; -23376: static const uint16_t POS_ZERO = 0x0000U; -23376: static const uint16_t NEG_ZERO = 0x8000U; -23376: static const unsigned int BASE = 2; -23376: static const unsigned int EXPONENT_BITS = 5; -23376: static const unsigned int MANTISSA_BITS = 10; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_BIAS = EXPONENT_MAX; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = IEEE754_HALF; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: struct float_ieee754_single { -23376: uint32_t word; -23376: static const uint32_t SGN_MASK = 0x80000000U; -23376: static const uint32_t EXP_MASK = 0x7f800000U; -23376: static const uint32_t WRD_MAX = 0x7f7fffffU; -23376: static const uint32_t POS_INF = 0x7f800000U; -23376: static const uint32_t NEG_INF = 0xff800000U; -23376: static const uint32_t POS_ZERO = 0x00000000U; -23376: static const uint32_t NEG_ZERO = 0x80000000U; -23376: static const unsigned int BASE = 2; -23376: static const unsigned int EXPONENT_BITS = 8; -23376: static const unsigned int MANTISSA_BITS = 23; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_BIAS = EXPONENT_MAX; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = IEEE754_SINGLE; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: }; -23376: # 120 "../../src/Float_defs.hh" -23376: struct float_ieee754_double { -23376: -23376: -23376: -23376: -23376: uint32_t lsp; -23376: uint32_t msp; -23376: -23376: static const uint32_t MSP_SGN_MASK = 0x80000000U; -23376: static const uint32_t MSP_POS_INF = 0x7ff00000U; -23376: static const uint32_t MSP_NEG_INF = 0xfff00000U; -23376: static const uint32_t MSP_POS_ZERO = 0x00000000U; -23376: static const uint32_t MSP_NEG_ZERO = 0x80000000U; -23376: static const uint32_t LSP_INF = 0; -23376: static const uint32_t LSP_ZERO = 0; -23376: static const uint32_t MSP_MAX = 0x7fefffffU; -23376: static const uint32_t LSP_MAX = 0xffffffffU; -23376: static const unsigned int BASE = 2; -23376: static const unsigned int EXPONENT_BITS = 11; -23376: static const unsigned int MANTISSA_BITS = 52; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_BIAS = EXPONENT_MAX; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = IEEE754_DOUBLE; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: }; -23376: -23376: -23376: -23376: -23376: struct float_ibm_single { -23376: uint32_t word; -23376: static const uint32_t SGN_MASK = 0x80000000U; -23376: static const uint32_t EXP_MASK = 0x7f000000U; -23376: static const uint32_t WRD_MAX = 0x7fffffffU; -23376: static const uint32_t POS_INF = 0x7f000000U; -23376: static const uint32_t NEG_INF = 0xff000000U; -23376: static const uint32_t POS_ZERO = 0x00000000U; -23376: static const uint32_t NEG_ZERO = 0x80000000U; -23376: static const unsigned int BASE = 16; -23376: static const unsigned int EXPONENT_BITS = 7; -23376: static const unsigned int MANTISSA_BITS = 24; -23376: static const int EXPONENT_BIAS = 64; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = IBM_SINGLE; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: }; -23376: -23376: -23376: -23376: -23376: struct float_ibm_double { -23376: static const unsigned int BASE = 16; -23376: static const unsigned int EXPONENT_BITS = 7; -23376: static const unsigned int MANTISSA_BITS = 56; -23376: static const int EXPONENT_BIAS = 64; -23376: }; -23376: -23376: -23376: -23376: -23376: struct float_intel_double_extended { -23376: -23376: -23376: -23376: -23376: uint64_t lsp; -23376: uint32_t msp; -23376: -23376: static const uint32_t MSP_SGN_MASK = 0x00008000U; -23376: static const uint32_t MSP_POS_INF = 0x00007fffU; -23376: static const uint32_t MSP_NEG_INF = 0x0000ffffU; -23376: static const uint32_t MSP_POS_ZERO = 0x00000000U; -23376: static const uint32_t MSP_NEG_ZERO = 0x00008000U; -23376: static const uint64_t LSP_INF = static_cast(0x8000000000000000ULL); -23376: static const uint64_t LSP_ZERO = 0; -23376: static const uint32_t MSP_MAX = 0x00007ffeU; -23376: static const uint64_t LSP_DMAX = static_cast(0x7fffffffffffffffULL); -23376: static const uint64_t LSP_NMAX = static_cast(0xffffffffffffffffULL); -23376: static const unsigned int BASE = 2; -23376: static const unsigned int EXPONENT_BITS = 15; -23376: static const unsigned int MANTISSA_BITS = 63; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_BIAS = EXPONENT_MAX; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = -23376: INTEL_DOUBLE_EXTENDED; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: }; -23376: -23376: -23376: -23376: -23376: struct float_ieee754_quad { -23376: -23376: -23376: -23376: -23376: uint64_t lsp; -23376: uint64_t msp; -23376: -23376: static const uint64_t MSP_SGN_MASK = static_cast(0x8000000000000000ULL); -23376: static const uint64_t MSP_POS_INF = static_cast(0x7fff000000000000ULL); -23376: static const uint64_t MSP_NEG_INF = static_cast(0xffff000000000000ULL); -23376: static const uint64_t MSP_POS_ZERO = static_cast(0x0000000000000000ULL); -23376: static const uint64_t MSP_NEG_ZERO = static_cast(0x8000000000000000ULL); -23376: static const uint64_t LSP_INF = 0; -23376: static const uint64_t LSP_ZERO = 0; -23376: static const uint64_t MSP_MAX = static_cast(0x7ffeffffffffffffULL); -23376: static const uint64_t LSP_MAX = static_cast(0xffffffffffffffffULL); -23376: static const unsigned int BASE = 2; -23376: static const unsigned int EXPONENT_BITS = 15; -23376: static const unsigned int MANTISSA_BITS = 112; -23376: static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1; -23376: static const int EXPONENT_BIAS = EXPONENT_MAX; -23376: static const int EXPONENT_MIN = -EXPONENT_MAX + 1; -23376: static const int EXPONENT_MIN_DENORM = EXPONENT_MIN -23376: - static_cast(MANTISSA_BITS); -23376: static const Floating_Point_Format floating_point_format = IEEE754_QUAD; -23376: int inf_sign() const; -23376: bool is_nan() const; -23376: int zero_sign() const; -23376: bool sign_bit() const; -23376: void negate(); -23376: void dec(); -23376: void inc(); -23376: void set_max(bool negative); -23376: void build(bool negative, mpz_t mantissa, int exponent); -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Float : public False { }; -23376: # 383 "../../src/Float_defs.hh" -23376: unsigned int msb_position(unsigned long long v); -23376: # 398 "../../src/Float_defs.hh" -23376: template -23376: class FP_Oracle { -23376: public: -23376: # 414 "../../src/Float_defs.hh" -23376: virtual bool get_interval(dimension_type dim, FP_Interval_Type& result) const -23376: = 0; -23376: # 425 "../../src/Float_defs.hh" -23376: virtual bool get_fp_constant_value( -23376: const Floating_Point_Constant& expr, -23376: FP_Interval_Type& result) const = 0; -23376: # 437 "../../src/Float_defs.hh" -23376: virtual bool get_integer_expr_value(const Concrete_Expression& expr, -23376: FP_Interval_Type& result) const = 0; -23376: # 450 "../../src/Float_defs.hh" -23376: virtual bool get_associated_dimensions( -23376: const Approximable_Reference& expr, -23376: std::set& result) const = 0; -23376: -23376: }; -23376: # 463 "../../src/Float_defs.hh" -23376: bool is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2); -23376: # 481 "../../src/Float_defs.hh" -23376: template -23376: const FP_Interval_Type& -23376: compute_absolute_error(Floating_Point_Format analyzed_format); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: discard_occurrences(std::map >& lf_store, -23376: Variable var); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: affine_form_image(std::map >& lf_store, -23376: Variable var, -23376: const Linear_Form& lf); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: upper_bound_assign(std::map >& ls1, -23376: const std::map >& ls2); -23376: -23376: } -23376: -23376: # 1 "../../src/Float_inlines.hh" 1 -23376: # 27 "../../src/Float_inlines.hh" -23376: # 1 "../../src/Variable_defs.hh" 1 -23376: # 28 "../../src/Variable_defs.hh" -23376: # 1 "../../src/Init_types.hh" 1 -23376: # 16 "../../src/Init_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Init; -23376: -23376: } -23376: # 29 "../../src/Variable_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& -23376: operator<<(std::ostream& s, const Variable v); -23376: -23376: } -23376: -23376: -23376: -23376: bool less(Variable v, Variable w); -23376: -23376: -23376: void -23376: swap(Variable& x, Variable& y); -23376: -23376: } -23376: # 85 "../../src/Variable_defs.hh" -23376: class Parma_Polyhedra_Library::Variable { -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit Variable(dimension_type i); -23376: -23376: -23376: dimension_type id() const; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: -23376: typedef void output_function_type(std::ostream& s, const Variable v); -23376: -23376: -23376: static void default_output_function(std::ostream& s, const Variable v); -23376: -23376: -23376: static void set_output_function(output_function_type* p); -23376: -23376: -23376: static output_function_type* get_output_function(); -23376: -23376: -23376: -23376: struct Compare { -23376: -23376: bool operator()(Variable x, Variable y) const; -23376: }; -23376: -23376: -23376: void m_swap(Variable& v); -23376: -23376: private: -23376: -23376: dimension_type varid; -23376: -23376: -23376: friend class Init; -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s, -23376: const Variable v); -23376: -23376: -23376: static output_function_type* current_output_function; -23376: -23376: }; -23376: -23376: # 1 "../../src/Variable_inlines.hh" 1 -23376: # 27 "../../src/Variable_inlines.hh" -23376: # 1 "../../src/globals_defs.hh" 1 -23376: # 28 "../../src/globals_defs.hh" -23376: # 1 "../../src/C_Integer.hh" 1 -23376: # 28 "../../src/C_Integer.hh" -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 29 "../../src/C_Integer.hh" 2 -23376: # 59 "../../src/C_Integer.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: struct C_Integer : public False { }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: -23376: -23376: -23376: is_signed = false -23376: -23376: }; -23376: typedef void smaller_type; -23376: typedef void smaller_signed_type; -23376: typedef void smaller_unsigned_type; -23376: -23376: -23376: -23376: typedef signed char other_type; -23376: -23376: static const char min = static_cast( -23376: # 81 "../../src/C_Integer.hh" 3 4 -23376: 0 -23376: # 81 "../../src/C_Integer.hh" -23376: ); -23376: static const char max = static_cast( -23376: # 82 "../../src/C_Integer.hh" 3 4 -23376: (0x7f * 2 + 1) -23376: # 82 "../../src/C_Integer.hh" -23376: ); -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = true -23376: }; -23376: typedef void smaller_type; -23376: typedef void smaller_signed_type; -23376: typedef void smaller_unsigned_type; -23376: typedef unsigned char other_type; -23376: static const signed char min = static_cast( -23376: # 94 "../../src/C_Integer.hh" 3 4 -23376: (-0x7f - 1) -23376: # 94 "../../src/C_Integer.hh" -23376: ); -23376: static const signed char max = static_cast(0x7f); -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = true -23376: }; -23376: typedef signed char smaller_type; -23376: typedef signed char smaller_signed_type; -23376: typedef unsigned char smaller_unsigned_type; -23376: typedef unsigned short other_type; -23376: static const signed short min = static_cast( -23376: # 107 "../../src/C_Integer.hh" 3 4 -23376: (-0x7fff - 1) -23376: # 107 "../../src/C_Integer.hh" -23376: ); -23376: static const signed short max = static_cast(0x7fff); -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = true -23376: }; -23376: typedef signed short smaller_type; -23376: typedef signed short smaller_signed_type; -23376: typedef unsigned short smaller_unsigned_type; -23376: typedef unsigned int other_type; -23376: static const signed int min = -23376: # 120 "../../src/C_Integer.hh" 3 4 -23376: (-0x7fffffff - 1) -23376: # 120 "../../src/C_Integer.hh" -23376: ; -23376: static const signed int max = 0x7fffffff; -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = true -23376: }; -23376: typedef signed int smaller_type; -23376: typedef signed int smaller_signed_type; -23376: typedef unsigned int smaller_unsigned_type; -23376: typedef unsigned long other_type; -23376: static const signed long min = -23376: # 133 "../../src/C_Integer.hh" 3 4 -23376: (-0x7fffffffL - 1L) -23376: # 133 "../../src/C_Integer.hh" -23376: ; -23376: static const signed long max = 0x7fffffffL; -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = true -23376: }; -23376: typedef signed long smaller_type; -23376: typedef signed long smaller_signed_type; -23376: typedef unsigned long smaller_unsigned_type; -23376: typedef unsigned long long other_type; -23376: static const signed long long min = -23376: # 146 "../../src/C_Integer.hh" 3 4 -23376: (-0x7fffffffffffffffLL -1) -23376: # 146 "../../src/C_Integer.hh" -23376: ; -23376: static const signed long long max = 0x7fffffffffffffffLL; -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = false -23376: }; -23376: typedef void smaller_type; -23376: typedef void smaller_signed_type; -23376: typedef void smaller_unsigned_type; -23376: typedef signed char other_type; -23376: static const unsigned char min = static_cast(0U); -23376: static const unsigned char max = static_cast( -23376: # 160 "../../src/C_Integer.hh" 3 4 -23376: (0x7f * 2 + 1) -23376: # 160 "../../src/C_Integer.hh" -23376: ); -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = false -23376: }; -23376: typedef unsigned char smaller_type; -23376: typedef signed char smaller_signed_type; -23376: typedef unsigned char smaller_unsigned_type; -23376: typedef signed short other_type; -23376: static const unsigned short min = static_cast(0U); -23376: static const unsigned short max = static_cast( -23376: # 173 "../../src/C_Integer.hh" 3 4 -23376: (0x7fff * 2 + 1) -23376: # 173 "../../src/C_Integer.hh" -23376: ); -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = false -23376: }; -23376: typedef unsigned short smaller_type; -23376: typedef signed short smaller_signed_type; -23376: typedef unsigned short smaller_unsigned_type; -23376: typedef signed int other_type; -23376: static const unsigned int min = 0U; -23376: static const unsigned int max = -23376: # 186 "../../src/C_Integer.hh" 3 4 -23376: (0x7fffffff * 2U + 1U) -23376: # 186 "../../src/C_Integer.hh" -23376: ; -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = false -23376: }; -23376: typedef unsigned int smaller_type; -23376: typedef signed int smaller_signed_type; -23376: typedef unsigned int smaller_unsigned_type; -23376: typedef signed long other_type; -23376: static const unsigned long min = 0UL; -23376: static const unsigned long max = -23376: # 199 "../../src/C_Integer.hh" 3 4 -23376: (0x7fffffffL * 2UL + 1UL) -23376: # 199 "../../src/C_Integer.hh" -23376: ; -23376: }; -23376: -23376: template <> -23376: struct C_Integer : public True { -23376: enum const_bool_value { -23376: is_signed = false -23376: }; -23376: typedef unsigned long smaller_type; -23376: typedef signed long smaller_signed_type; -23376: typedef unsigned long smaller_unsigned_type; -23376: typedef signed long long other_type; -23376: static const unsigned long long min = 0ULL; -23376: static const unsigned long long max = -23376: # 212 "../../src/C_Integer.hh" 3 4 -23376: (0x7fffffffffffffffLL * 2ULL + 1) -23376: # 212 "../../src/C_Integer.hh" -23376: ; -23376: }; -23376: -23376: } -23376: # 29 "../../src/globals_defs.hh" 2 -23376: # 100 "../../src/globals_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: dimension_type -23376: not_a_dimension(); -23376: -23376: -23376: -23376: -23376: int32_t -23376: hash_code_from_dimension(dimension_type dim); -23376: # 120 "../../src/globals_defs.hh" -23376: template -23376: inline typename Enable_If::value, void>::type -23376: swap(T&, T&) { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_123 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Slow_Copy::value)>) }; -23376: } -23376: # 156 "../../src/globals_defs.hh" -23376: dimension_type -23376: compute_capacity(dimension_type requested_size, -23376: dimension_type maximum_size); -23376: # 169 "../../src/globals_defs.hh" -23376: struct Weightwatch_Traits { -23376: -23376: typedef unsigned long long Threshold; -23376: -23376: -23376: typedef unsigned long long Delta; -23376: -23376: -23376: static const Threshold& get(); -23376: -23376: -23376: static bool less_than(const Threshold& a, const Threshold& b); -23376: # 194 "../../src/globals_defs.hh" -23376: static Delta compute_delta(unsigned long unscaled, unsigned scale); -23376: -23376: -23376: static void from_delta(Threshold& threshold, const Delta& delta); -23376: -23376: -23376: static Threshold weight; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void (*check_function)(void); -23376: }; -23376: # 239 "../../src/globals_defs.hh" -23376: class Throwable { -23376: public: -23376: -23376: virtual void throw_me() const = 0; -23376: -23376: -23376: virtual ~Throwable(); -23376: }; -23376: # 271 "../../src/globals_defs.hh" -23376: extern const Throwable* volatile abandon_expensive_computations; -23376: # 281 "../../src/globals_defs.hh" -23376: void -23376: maybe_abandon(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct Recycle_Input { -23376: }; -23376: # 401 "../../src/globals_defs.hh" -23376: bool is_space(char c); -23376: -23376: template -23376: struct Fit : public False { -23376: }; -23376: -23376: template -23376: struct Fit::value>::type> { -23376: enum { -23376: value = (v >= static_cast(C_Integer::min) -23376: && v <= static_cast(C_Integer::max)) -23376: }; -23376: }; -23376: -23376: template -23376: struct TConstant { -23376: static const T value = v; -23376: }; -23376: -23376: -23376: template -23376: const T TConstant::value; -23376: -23376: template -23376: struct Constant_ : public TConstant { -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Constant_::smaller_signed_type, v>::value -23376: && (prefer_signed -23376: || !Fit::smaller_unsigned_type, v>::value))>::type> -23376: : public Constant_::smaller_signed_type, v, prefer_signed> { -23376: }; -23376: -23376: template -23376: struct Constant_::smaller_unsigned_type, v>::value -23376: && (!prefer_signed -23376: || !Fit::smaller_signed_type, v>::value))>::type> -23376: : public Constant_::smaller_unsigned_type, v, prefer_signed> { -23376: }; -23376: -23376: -23376: -23376: template -23376: struct Constant : public Constant_ { -23376: }; -23376: # 465 "../../src/globals_defs.hh" -23376: template -23376: typename Enable_If::value, memory_size_type>::type -23376: total_memory_in_bytes(const T&); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, memory_size_type>::type -23376: external_memory_in_bytes(const T&); -23376: -23376: -23376: -23376: -23376: memory_size_type -23376: total_memory_in_bytes(const mpz_class& x); -23376: -23376: -23376: -23376: -23376: memory_size_type -23376: external_memory_in_bytes(const mpz_class& x); -23376: -23376: -23376: -23376: -23376: memory_size_type -23376: total_memory_in_bytes(const mpq_class& x); -23376: -23376: -23376: -23376: -23376: memory_size_type -23376: external_memory_in_bytes(const mpq_class& x); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Has_OK : public False { }; -23376: -23376: template -23376: struct Has_OK::type> -23376: : public True { -23376: }; -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: f_OK(const T& to) { -23376: return to.OK(); -23376: } -23376: -23376: -23376: -23376: inline bool f_OK(const char&) { return true; } -23376: inline bool f_OK(const signed char&) { return true; } -23376: inline bool f_OK(const unsigned char&) { return true; } -23376: inline bool f_OK(const signed short&) { return true; } -23376: inline bool f_OK(const unsigned short&) { return true; } -23376: inline bool f_OK(const signed int&) { return true; } -23376: inline bool f_OK(const unsigned int&) { return true; } -23376: inline bool f_OK(const signed long&) { return true; } -23376: inline bool f_OK(const unsigned long&) { return true; } -23376: inline bool f_OK(const signed long long&) { return true; } -23376: inline bool f_OK(const unsigned long long&) { return true; } -23376: inline bool f_OK(const float&) { return true; } -23376: inline bool f_OK(const double&) { return true; } -23376: inline bool f_OK(const long double&) { return true; } -23376: inline bool f_OK(const mpz_class&) { return true; } -23376: inline bool f_OK(const mpq_class&) { return true; } -23376: -23376: void ascii_dump(std::ostream& s, Representation r); -23376: bool ascii_load(std::istream& s, Representation& r); -23376: -23376: dimension_type -23376: check_space_dimension_overflow(dimension_type dim, -23376: dimension_type max, -23376: const char* domain, -23376: const char* method, -23376: const char* reason); -23376: -23376: template -23376: typename RA_Container::iterator -23376: nth_iter(RA_Container& cont, dimension_type n); -23376: -23376: template -23376: typename RA_Container::const_iterator -23376: nth_iter(const RA_Container& cont, dimension_type n); -23376: -23376: dimension_type -23376: least_significant_one_mask(dimension_type i); -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "../../src/globals_inlines.hh" 1 -23376: # 29 "../../src/globals_inlines.hh" -23376: # 1 "/usr/include/c++/8/cassert" 1 3 -23376: # 41 "/usr/include/c++/8/cassert" 3 -23376: -23376: # 42 "/usr/include/c++/8/cassert" 3 -23376: -23376: -23376: # 1 "/usr/include/assert.h" 1 3 4 -23376: # 44 "/usr/include/c++/8/cassert" 2 3 -23376: # 30 "../../src/globals_inlines.hh" 2 -23376: # 1 "/usr/include/c++/8/istream" 1 3 -23376: # 36 "/usr/include/c++/8/istream" 3 -23376: -23376: # 37 "/usr/include/c++/8/istream" 3 -23376: -23376: # 1 "/usr/include/c++/8/ios" 1 3 -23376: # 36 "/usr/include/c++/8/ios" 3 -23376: -23376: # 37 "/usr/include/c++/8/ios" 3 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/ios_base.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_classes.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 43 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 62 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: class locale -23376: { -23376: public: -23376: -23376: -23376: typedef int category; -23376: -23376: -23376: class facet; -23376: class id; -23376: class _Impl; -23376: -23376: friend class facet; -23376: friend class _Impl; -23376: -23376: template -23376: friend bool -23376: has_facet(const locale&) throw(); -23376: -23376: template -23376: friend const _Facet& -23376: use_facet(const locale&); -23376: -23376: template -23376: friend struct __use_cache; -23376: # 98 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: static const category none = 0; -23376: static const category ctype = 1L << 0; -23376: static const category numeric = 1L << 1; -23376: static const category collate = 1L << 2; -23376: static const category time = 1L << 3; -23376: static const category monetary = 1L << 4; -23376: static const category messages = 1L << 5; -23376: static const category all = (ctype | numeric | collate | -23376: time | monetary | messages); -23376: # 117 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: locale() throw(); -23376: # 126 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: locale(const locale& __other) throw(); -23376: # 136 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: explicit -23376: locale(const char* __s); -23376: # 151 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: locale(const locale& __base, const char* __s, category __cat); -23376: # 162 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: explicit -23376: locale(const std::string& __s) : locale(__s.c_str()) { } -23376: # 177 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: locale(const locale& __base, const std::string& __s, category __cat) -23376: : locale(__base, __s.c_str(), __cat) { } -23376: # 192 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: locale(const locale& __base, const locale& __add, category __cat); -23376: # 205 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: template -23376: locale(const locale& __other, _Facet* __f); -23376: -23376: -23376: ~locale() throw(); -23376: # 219 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: const locale& -23376: operator=(const locale& __other) throw(); -23376: # 234 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: template -23376: locale -23376: combine(const locale& __other) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: string -23376: name() const; -23376: # 254 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: bool -23376: operator==(const locale& __other) const throw(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: operator!=(const locale& __other) const throw() -23376: { return !(this->operator==(__other)); } -23376: # 282 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: template -23376: bool -23376: operator()(const basic_string<_Char, _Traits, _Alloc>& __s1, -23376: const basic_string<_Char, _Traits, _Alloc>& __s2) const; -23376: # 298 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: static locale -23376: global(const locale& __loc); -23376: -23376: -23376: -23376: -23376: static const locale& -23376: classic(); -23376: -23376: private: -23376: -23376: _Impl* _M_impl; -23376: -23376: -23376: static _Impl* _S_classic; -23376: -23376: -23376: static _Impl* _S_global; -23376: -23376: -23376: -23376: -23376: -23376: static const char* const* const _S_categories; -23376: # 333 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: enum { _S_categories_size = 6 + 6 }; -23376: -23376: -23376: static __gthread_once_t _S_once; -23376: -23376: -23376: explicit -23376: locale(_Impl*) throw(); -23376: -23376: static void -23376: _S_initialize(); -23376: -23376: static void -23376: _S_initialize_once() throw(); -23376: -23376: static category -23376: _S_normalize_category(category); -23376: -23376: void -23376: _M_coalesce(const locale& __base, const locale& __add, category __cat); -23376: -23376: -23376: static const id* const _S_twinned_facets[]; -23376: -23376: }; -23376: # 371 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: class locale::facet -23376: { -23376: private: -23376: friend class locale; -23376: friend class locale::_Impl; -23376: -23376: mutable _Atomic_word _M_refcount; -23376: -23376: -23376: static __c_locale _S_c_locale; -23376: -23376: -23376: static const char _S_c_name[2]; -23376: -23376: -23376: static __gthread_once_t _S_once; -23376: -23376: -23376: static void -23376: _S_initialize_once(); -23376: -23376: protected: -23376: # 402 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: explicit -23376: facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0) -23376: { } -23376: -23376: -23376: virtual -23376: ~facet(); -23376: -23376: static void -23376: _S_create_c_locale(__c_locale& __cloc, const char* __s, -23376: __c_locale __old = 0); -23376: -23376: static __c_locale -23376: _S_clone_c_locale(__c_locale& __cloc) throw(); -23376: -23376: static void -23376: _S_destroy_c_locale(__c_locale& __cloc); -23376: -23376: static __c_locale -23376: _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s); -23376: -23376: -23376: -23376: static __c_locale -23376: _S_get_c_locale(); -23376: -23376: __attribute__ ((__const__)) static const char* -23376: _S_get_c_name() throw(); -23376: # 438 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: facet(const facet&) = delete; -23376: -23376: facet& -23376: operator=(const facet&) = delete; -23376: -23376: -23376: private: -23376: void -23376: _M_add_reference() const throw() -23376: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } -23376: -23376: void -23376: _M_remove_reference() const throw() -23376: { -23376: -23376: ; -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) -23376: { -23376: ; -23376: try -23376: { delete this; } -23376: catch(...) -23376: { } -23376: } -23376: } -23376: -23376: const facet* _M_sso_shim(const id*) const; -23376: const facet* _M_cow_shim(const id*) const; -23376: -23376: protected: -23376: class __shim; -23376: }; -23376: # 483 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: class locale::id -23376: { -23376: private: -23376: friend class locale; -23376: friend class locale::_Impl; -23376: -23376: template -23376: friend const _Facet& -23376: use_facet(const locale&); -23376: -23376: template -23376: friend bool -23376: has_facet(const locale&) throw(); -23376: -23376: -23376: -23376: -23376: mutable size_t _M_index; -23376: -23376: -23376: static _Atomic_word _S_refcount; -23376: -23376: void -23376: operator=(const id&); -23376: -23376: id(const id&); -23376: -23376: public: -23376: -23376: -23376: -23376: id() { } -23376: -23376: size_t -23376: _M_id() const throw(); -23376: }; -23376: -23376: -23376: -23376: class locale::_Impl -23376: { -23376: public: -23376: -23376: friend class locale; -23376: friend class locale::facet; -23376: -23376: template -23376: friend bool -23376: has_facet(const locale&) throw(); -23376: -23376: template -23376: friend const _Facet& -23376: use_facet(const locale&); -23376: -23376: template -23376: friend struct __use_cache; -23376: -23376: private: -23376: -23376: _Atomic_word _M_refcount; -23376: const facet** _M_facets; -23376: size_t _M_facets_size; -23376: const facet** _M_caches; -23376: char** _M_names; -23376: static const locale::id* const _S_id_ctype[]; -23376: static const locale::id* const _S_id_numeric[]; -23376: static const locale::id* const _S_id_collate[]; -23376: static const locale::id* const _S_id_time[]; -23376: static const locale::id* const _S_id_monetary[]; -23376: static const locale::id* const _S_id_messages[]; -23376: static const locale::id* const* const _S_facet_categories[]; -23376: -23376: void -23376: _M_add_reference() throw() -23376: { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } -23376: -23376: void -23376: _M_remove_reference() throw() -23376: { -23376: -23376: ; -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1) -23376: { -23376: ; -23376: try -23376: { delete this; } -23376: catch(...) -23376: { } -23376: } -23376: } -23376: -23376: _Impl(const _Impl&, size_t); -23376: _Impl(const char*, size_t); -23376: _Impl(size_t) throw(); -23376: -23376: ~_Impl() throw(); -23376: -23376: _Impl(const _Impl&); -23376: -23376: void -23376: operator=(const _Impl&); -23376: -23376: bool -23376: _M_check_same_name() -23376: { -23376: bool __ret = true; -23376: if (_M_names[1]) -23376: -23376: for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i) -23376: __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0; -23376: return __ret; -23376: } -23376: -23376: void -23376: _M_replace_categories(const _Impl*, category); -23376: -23376: void -23376: _M_replace_category(const _Impl*, const locale::id* const*); -23376: -23376: void -23376: _M_replace_facet(const _Impl*, const locale::id*); -23376: -23376: void -23376: _M_install_facet(const locale::id*, const facet*); -23376: -23376: template -23376: void -23376: _M_init_facet(_Facet* __facet) -23376: { _M_install_facet(&_Facet::id, __facet); } -23376: -23376: template -23376: void -23376: _M_init_facet_unchecked(_Facet* __facet) -23376: { -23376: __facet->_M_add_reference(); -23376: _M_facets[_Facet::id._M_id()] = __facet; -23376: } -23376: -23376: void -23376: _M_install_cache(const facet*, size_t); -23376: -23376: void _M_init_extra(facet**); -23376: void _M_init_extra(void*, void*, const char*, const char*); -23376: }; -23376: # 641 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: template -23376: class __cxx11:: collate : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: -23376: protected: -23376: -23376: -23376: __c_locale _M_c_locale_collate; -23376: -23376: public: -23376: -23376: static locale::id id; -23376: # 668 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: explicit -23376: collate(size_t __refs = 0) -23376: : facet(__refs), _M_c_locale_collate(_S_get_c_locale()) -23376: { } -23376: # 682 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: explicit -23376: collate(__c_locale __cloc, size_t __refs = 0) -23376: : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc)) -23376: { } -23376: # 699 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: int -23376: compare(const _CharT* __lo1, const _CharT* __hi1, -23376: const _CharT* __lo2, const _CharT* __hi2) const -23376: { return this->do_compare(__lo1, __hi1, __lo2, __hi2); } -23376: # 718 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: string_type -23376: transform(const _CharT* __lo, const _CharT* __hi) const -23376: { return this->do_transform(__lo, __hi); } -23376: # 732 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: long -23376: hash(const _CharT* __lo, const _CharT* __hi) const -23376: { return this->do_hash(__lo, __hi); } -23376: -23376: -23376: int -23376: _M_compare(const _CharT*, const _CharT*) const throw(); -23376: -23376: size_t -23376: _M_transform(_CharT*, const _CharT*, size_t) const throw(); -23376: -23376: protected: -23376: -23376: virtual -23376: ~collate() -23376: { _S_destroy_c_locale(_M_c_locale_collate); } -23376: # 761 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: virtual int -23376: do_compare(const _CharT* __lo1, const _CharT* __hi1, -23376: const _CharT* __lo2, const _CharT* __hi2) const; -23376: # 775 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: virtual string_type -23376: do_transform(const _CharT* __lo, const _CharT* __hi) const; -23376: # 788 "/usr/include/c++/8/bits/locale_classes.h" 3 -23376: virtual long -23376: do_hash(const _CharT* __lo, const _CharT* __hi) const; -23376: }; -23376: -23376: template -23376: locale::id collate<_CharT>::id; -23376: -23376: -23376: template<> -23376: int -23376: collate::_M_compare(const char*, const char*) const throw(); -23376: -23376: template<> -23376: size_t -23376: collate::_M_transform(char*, const char*, size_t) const throw(); -23376: -23376: -23376: template<> -23376: int -23376: collate::_M_compare(const wchar_t*, const wchar_t*) const throw(); -23376: -23376: template<> -23376: size_t -23376: collate::_M_transform(wchar_t*, const wchar_t*, size_t) const throw(); -23376: -23376: -23376: -23376: template -23376: class __cxx11:: collate_byname : public collate<_CharT> -23376: { -23376: public: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: -23376: explicit -23376: collate_byname(const char* __s, size_t __refs = 0) -23376: : collate<_CharT>(__refs) -23376: { -23376: if (__builtin_strcmp(__s, "C") != 0 -23376: && __builtin_strcmp(__s, "POSIX") != 0) -23376: { -23376: this->_S_destroy_c_locale(this->_M_c_locale_collate); -23376: this->_S_create_c_locale(this->_M_c_locale_collate, __s); -23376: } -23376: } -23376: -23376: -23376: explicit -23376: collate_byname(const string& __s, size_t __refs = 0) -23376: : collate_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~collate_byname() { } -23376: }; -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_classes.tcc" 1 3 -23376: # 37 "/usr/include/c++/8/bits/locale_classes.tcc" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/locale_classes.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: locale:: -23376: locale(const locale& __other, _Facet* __f) -23376: { -23376: _M_impl = new _Impl(*__other._M_impl, 1); -23376: -23376: try -23376: { _M_impl->_M_install_facet(&_Facet::id, __f); } -23376: catch(...) -23376: { -23376: _M_impl->_M_remove_reference(); -23376: throw; -23376: } -23376: delete [] _M_impl->_M_names[0]; -23376: _M_impl->_M_names[0] = 0; -23376: } -23376: -23376: template -23376: locale -23376: locale:: -23376: combine(const locale& __other) const -23376: { -23376: _Impl* __tmp = new _Impl(*_M_impl, 1); -23376: try -23376: { -23376: __tmp->_M_replace_facet(__other._M_impl, &_Facet::id); -23376: } -23376: catch(...) -23376: { -23376: __tmp->_M_remove_reference(); -23376: throw; -23376: } -23376: return locale(__tmp); -23376: } -23376: -23376: template -23376: bool -23376: locale:: -23376: operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1, -23376: const basic_string<_CharT, _Traits, _Alloc>& __s2) const -23376: { -23376: typedef std::collate<_CharT> __collate_type; -23376: const __collate_type& __collate = use_facet<__collate_type>(*this); -23376: return (__collate.compare(__s1.data(), __s1.data() + __s1.length(), -23376: __s2.data(), __s2.data() + __s2.length()) < 0); -23376: } -23376: # 102 "/usr/include/c++/8/bits/locale_classes.tcc" 3 -23376: template -23376: bool -23376: has_facet(const locale& __loc) throw() -23376: { -23376: const size_t __i = _Facet::id._M_id(); -23376: const locale::facet** __facets = __loc._M_impl->_M_facets; -23376: return (__i < __loc._M_impl->_M_facets_size -23376: -23376: && dynamic_cast(__facets[__i])); -23376: -23376: -23376: -23376: } -23376: # 130 "/usr/include/c++/8/bits/locale_classes.tcc" 3 -23376: template -23376: const _Facet& -23376: use_facet(const locale& __loc) -23376: { -23376: const size_t __i = _Facet::id._M_id(); -23376: const locale::facet** __facets = __loc._M_impl->_M_facets; -23376: if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i]) -23376: __throw_bad_cast(); -23376: -23376: return dynamic_cast(*__facets[__i]); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: template -23376: int -23376: collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw () -23376: { return 0; } -23376: -23376: -23376: template -23376: size_t -23376: collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw () -23376: { return 0; } -23376: -23376: template -23376: int -23376: collate<_CharT>:: -23376: do_compare(const _CharT* __lo1, const _CharT* __hi1, -23376: const _CharT* __lo2, const _CharT* __hi2) const -23376: { -23376: -23376: -23376: const string_type __one(__lo1, __hi1); -23376: const string_type __two(__lo2, __hi2); -23376: -23376: const _CharT* __p = __one.c_str(); -23376: const _CharT* __pend = __one.data() + __one.length(); -23376: const _CharT* __q = __two.c_str(); -23376: const _CharT* __qend = __two.data() + __two.length(); -23376: -23376: -23376: -23376: -23376: for (;;) -23376: { -23376: const int __res = _M_compare(__p, __q); -23376: if (__res) -23376: return __res; -23376: -23376: __p += char_traits<_CharT>::length(__p); -23376: __q += char_traits<_CharT>::length(__q); -23376: if (__p == __pend && __q == __qend) -23376: return 0; -23376: else if (__p == __pend) -23376: return -1; -23376: else if (__q == __qend) -23376: return 1; -23376: -23376: __p++; -23376: __q++; -23376: } -23376: } -23376: -23376: template -23376: typename collate<_CharT>::string_type -23376: collate<_CharT>:: -23376: do_transform(const _CharT* __lo, const _CharT* __hi) const -23376: { -23376: string_type __ret; -23376: -23376: -23376: const string_type __str(__lo, __hi); -23376: -23376: const _CharT* __p = __str.c_str(); -23376: const _CharT* __pend = __str.data() + __str.length(); -23376: -23376: size_t __len = (__hi - __lo) * 2; -23376: -23376: _CharT* __c = new _CharT[__len]; -23376: -23376: try -23376: { -23376: -23376: -23376: -23376: for (;;) -23376: { -23376: -23376: size_t __res = _M_transform(__c, __p, __len); -23376: -23376: -23376: if (__res >= __len) -23376: { -23376: __len = __res + 1; -23376: delete [] __c, __c = 0; -23376: __c = new _CharT[__len]; -23376: __res = _M_transform(__c, __p, __len); -23376: } -23376: -23376: __ret.append(__c, __res); -23376: __p += char_traits<_CharT>::length(__p); -23376: if (__p == __pend) -23376: break; -23376: -23376: __p++; -23376: __ret.push_back(_CharT()); -23376: } -23376: } -23376: catch(...) -23376: { -23376: delete [] __c; -23376: throw; -23376: } -23376: -23376: delete [] __c; -23376: -23376: return __ret; -23376: } -23376: -23376: template -23376: long -23376: collate<_CharT>:: -23376: do_hash(const _CharT* __lo, const _CharT* __hi) const -23376: { -23376: unsigned long __val = 0; -23376: for (; __lo < __hi; ++__lo) -23376: __val = -23376: *__lo + ((__val << 7) -23376: | (__val >> (__gnu_cxx::__numeric_traits:: -23376: __digits - 7))); -23376: return static_cast(__val); -23376: } -23376: -23376: -23376: -23376: -23376: extern template class collate; -23376: extern template class collate_byname; -23376: -23376: extern template -23376: const collate& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: extern template class collate; -23376: extern template class collate_byname; -23376: -23376: extern template -23376: const collate& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: -23376: -23376: } -23376: # 852 "/usr/include/c++/8/bits/locale_classes.h" 2 3 -23376: # 42 "/usr/include/c++/8/bits/ios_base.h" 2 3 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/system_error" 1 3 -23376: # 32 "/usr/include/c++/8/system_error" 3 -23376: -23376: # 33 "/usr/include/c++/8/system_error" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/error_constants.h" 1 3 -23376: # 34 "/usr/include/arm-linux-gnueabihf/c++/8/bits/error_constants.h" 3 -23376: # 1 "/usr/include/c++/8/cerrno" 1 3 -23376: # 39 "/usr/include/c++/8/cerrno" 3 -23376: -23376: # 40 "/usr/include/c++/8/cerrno" 3 -23376: # 35 "/usr/include/arm-linux-gnueabihf/c++/8/bits/error_constants.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: enum class errc -23376: { -23376: address_family_not_supported = 97, -23376: address_in_use = 98, -23376: address_not_available = 99, -23376: already_connected = 106, -23376: argument_list_too_long = 7, -23376: argument_out_of_domain = 33, -23376: bad_address = 14, -23376: bad_file_descriptor = 9, -23376: -23376: -23376: bad_message = 74, -23376: -23376: -23376: broken_pipe = 32, -23376: connection_aborted = 103, -23376: connection_already_in_progress = 114, -23376: connection_refused = 111, -23376: connection_reset = 104, -23376: cross_device_link = 18, -23376: destination_address_required = 89, -23376: device_or_resource_busy = 16, -23376: directory_not_empty = 39, -23376: executable_format_error = 8, -23376: file_exists = 17, -23376: file_too_large = 27, -23376: filename_too_long = 36, -23376: function_not_supported = 38, -23376: host_unreachable = 113, -23376: -23376: -23376: identifier_removed = 43, -23376: -23376: -23376: illegal_byte_sequence = 84, -23376: inappropriate_io_control_operation = 25, -23376: interrupted = 4, -23376: invalid_argument = 22, -23376: invalid_seek = 29, -23376: io_error = 5, -23376: is_a_directory = 21, -23376: message_size = 90, -23376: network_down = 100, -23376: network_reset = 102, -23376: network_unreachable = 101, -23376: no_buffer_space = 105, -23376: no_child_process = 10, -23376: -23376: -23376: no_link = 67, -23376: -23376: -23376: no_lock_available = 37, -23376: -23376: -23376: no_message_available = 61, -23376: -23376: -23376: no_message = 42, -23376: no_protocol_option = 92, -23376: no_space_on_device = 28, -23376: -23376: -23376: no_stream_resources = 63, -23376: -23376: -23376: no_such_device_or_address = 6, -23376: no_such_device = 19, -23376: no_such_file_or_directory = 2, -23376: no_such_process = 3, -23376: not_a_directory = 20, -23376: not_a_socket = 88, -23376: -23376: -23376: not_a_stream = 60, -23376: -23376: -23376: not_connected = 107, -23376: not_enough_memory = 12, -23376: -23376: -23376: not_supported = 95, -23376: -23376: -23376: -23376: operation_canceled = 125, -23376: -23376: -23376: operation_in_progress = 115, -23376: operation_not_permitted = 1, -23376: operation_not_supported = 95, -23376: operation_would_block = 11, -23376: -23376: -23376: owner_dead = 130, -23376: -23376: -23376: permission_denied = 13, -23376: -23376: -23376: protocol_error = 71, -23376: -23376: -23376: protocol_not_supported = 93, -23376: read_only_file_system = 30, -23376: resource_deadlock_would_occur = 35, -23376: resource_unavailable_try_again = 11, -23376: result_out_of_range = 34, -23376: -23376: -23376: state_not_recoverable = 131, -23376: -23376: -23376: -23376: stream_timeout = 62, -23376: -23376: -23376: -23376: text_file_busy = 26, -23376: -23376: -23376: timed_out = 110, -23376: too_many_files_open_in_system = 23, -23376: too_many_files_open = 24, -23376: too_many_links = 31, -23376: too_many_symbolic_link_levels = 40, -23376: -23376: -23376: value_too_large = 75, -23376: -23376: -23376: wrong_protocol_type = 91 -23376: }; -23376: -23376: -23376: } -23376: # 40 "/usr/include/c++/8/system_error" 2 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: class error_code; -23376: class error_condition; -23376: class system_error; -23376: -23376: -23376: template -23376: struct is_error_code_enum : public false_type { }; -23376: -23376: -23376: template -23376: struct is_error_condition_enum : public false_type { }; -23376: -23376: template<> -23376: struct is_error_condition_enum -23376: : public true_type { }; -23376: # 71 "/usr/include/c++/8/system_error" 3 -23376: inline namespace _V2 { -23376: -23376: -23376: class error_category -23376: { -23376: public: -23376: constexpr error_category() noexcept = default; -23376: -23376: virtual ~error_category(); -23376: -23376: error_category(const error_category&) = delete; -23376: error_category& operator=(const error_category&) = delete; -23376: -23376: virtual const char* -23376: name() const noexcept = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: private: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: virtual __cow_string -23376: _M_message(int) const; -23376: -23376: public: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: virtual string -23376: message(int) const = 0; -23376: # 110 "/usr/include/c++/8/system_error" 3 -23376: public: -23376: virtual error_condition -23376: default_error_condition(int __i) const noexcept; -23376: -23376: virtual bool -23376: equivalent(int __i, const error_condition& __cond) const noexcept; -23376: -23376: virtual bool -23376: equivalent(const error_code& __code, int __i) const noexcept; -23376: -23376: bool -23376: operator<(const error_category& __other) const noexcept -23376: { return less()(this, &__other); } -23376: -23376: bool -23376: operator==(const error_category& __other) const noexcept -23376: { return this == &__other; } -23376: -23376: bool -23376: operator!=(const error_category& __other) const noexcept -23376: { return this != &__other; } -23376: }; -23376: -23376: -23376: __attribute__ ((__const__)) const error_category& system_category() noexcept; -23376: __attribute__ ((__const__)) const error_category& generic_category() noexcept; -23376: -23376: } -23376: -23376: error_code make_error_code(errc) noexcept; -23376: -23376: template -23376: struct hash; -23376: -23376: -23376: -23376: struct error_code -23376: { -23376: error_code() noexcept -23376: : _M_value(0), _M_cat(&system_category()) { } -23376: -23376: error_code(int __v, const error_category& __cat) noexcept -23376: : _M_value(__v), _M_cat(&__cat) { } -23376: -23376: template::value>::type> -23376: error_code(_ErrorCodeEnum __e) noexcept -23376: { *this = make_error_code(__e); } -23376: -23376: void -23376: assign(int __v, const error_category& __cat) noexcept -23376: { -23376: _M_value = __v; -23376: _M_cat = &__cat; -23376: } -23376: -23376: void -23376: clear() noexcept -23376: { assign(0, system_category()); } -23376: -23376: -23376: template -23376: typename enable_if::value, -23376: error_code&>::type -23376: operator=(_ErrorCodeEnum __e) noexcept -23376: { return *this = make_error_code(__e); } -23376: -23376: int -23376: value() const noexcept { return _M_value; } -23376: -23376: const error_category& -23376: category() const noexcept { return *_M_cat; } -23376: -23376: error_condition -23376: default_error_condition() const noexcept; -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: string -23376: message() const -23376: { return category().message(value()); } -23376: -23376: explicit operator bool() const noexcept -23376: { return _M_value != 0; } -23376: -23376: -23376: private: -23376: friend class hash; -23376: -23376: int _M_value; -23376: const error_category* _M_cat; -23376: }; -23376: -23376: -23376: inline error_code -23376: make_error_code(errc __e) noexcept -23376: { return error_code(static_cast(__e), generic_category()); } -23376: -23376: inline bool -23376: operator<(const error_code& __lhs, const error_code& __rhs) noexcept -23376: { -23376: return (__lhs.category() < __rhs.category() -23376: || (__lhs.category() == __rhs.category() -23376: && __lhs.value() < __rhs.value())); -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e) -23376: { return (__os << __e.category().name() << ':' << __e.value()); } -23376: -23376: error_condition make_error_condition(errc) noexcept; -23376: -23376: -23376: -23376: struct error_condition -23376: { -23376: error_condition() noexcept -23376: : _M_value(0), _M_cat(&generic_category()) { } -23376: -23376: error_condition(int __v, const error_category& __cat) noexcept -23376: : _M_value(__v), _M_cat(&__cat) { } -23376: -23376: template::value>::type> -23376: error_condition(_ErrorConditionEnum __e) noexcept -23376: { *this = make_error_condition(__e); } -23376: -23376: void -23376: assign(int __v, const error_category& __cat) noexcept -23376: { -23376: _M_value = __v; -23376: _M_cat = &__cat; -23376: } -23376: -23376: -23376: template -23376: typename enable_if::value, error_condition&>::type -23376: operator=(_ErrorConditionEnum __e) noexcept -23376: { return *this = make_error_condition(__e); } -23376: -23376: void -23376: clear() noexcept -23376: { assign(0, generic_category()); } -23376: -23376: -23376: int -23376: value() const noexcept { return _M_value; } -23376: -23376: const error_category& -23376: category() const noexcept { return *_M_cat; } -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: string -23376: message() const -23376: { return category().message(value()); } -23376: -23376: explicit operator bool() const noexcept -23376: { return _M_value != 0; } -23376: -23376: -23376: private: -23376: int _M_value; -23376: const error_category* _M_cat; -23376: }; -23376: -23376: -23376: inline error_condition -23376: make_error_condition(errc __e) noexcept -23376: { return error_condition(static_cast(__e), generic_category()); } -23376: -23376: inline bool -23376: operator<(const error_condition& __lhs, -23376: const error_condition& __rhs) noexcept -23376: { -23376: return (__lhs.category() < __rhs.category() -23376: || (__lhs.category() == __rhs.category() -23376: && __lhs.value() < __rhs.value())); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const error_code& __lhs, const error_code& __rhs) noexcept -23376: { return (__lhs.category() == __rhs.category() -23376: && __lhs.value() == __rhs.value()); } -23376: -23376: inline bool -23376: operator==(const error_code& __lhs, const error_condition& __rhs) noexcept -23376: { -23376: return (__lhs.category().equivalent(__lhs.value(), __rhs) -23376: || __rhs.category().equivalent(__lhs, __rhs.value())); -23376: } -23376: -23376: inline bool -23376: operator==(const error_condition& __lhs, const error_code& __rhs) noexcept -23376: { -23376: return (__rhs.category().equivalent(__rhs.value(), __lhs) -23376: || __lhs.category().equivalent(__rhs, __lhs.value())); -23376: } -23376: -23376: inline bool -23376: operator==(const error_condition& __lhs, -23376: const error_condition& __rhs) noexcept -23376: { -23376: return (__lhs.category() == __rhs.category() -23376: && __lhs.value() == __rhs.value()); -23376: } -23376: -23376: inline bool -23376: operator!=(const error_code& __lhs, const error_code& __rhs) noexcept -23376: { return !(__lhs == __rhs); } -23376: -23376: inline bool -23376: operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept -23376: { return !(__lhs == __rhs); } -23376: -23376: inline bool -23376: operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept -23376: { return !(__lhs == __rhs); } -23376: -23376: inline bool -23376: operator!=(const error_condition& __lhs, -23376: const error_condition& __rhs) noexcept -23376: { return !(__lhs == __rhs); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class system_error : public std::runtime_error -23376: { -23376: private: -23376: error_code _M_code; -23376: -23376: public: -23376: system_error(error_code __ec = error_code()) -23376: : runtime_error(__ec.message()), _M_code(__ec) { } -23376: -23376: system_error(error_code __ec, const string& __what) -23376: : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { } -23376: -23376: system_error(error_code __ec, const char* __what) -23376: : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { } -23376: -23376: system_error(int __v, const error_category& __ecat, const char* __what) -23376: : system_error(error_code(__v, __ecat), __what) { } -23376: -23376: system_error(int __v, const error_category& __ecat) -23376: : runtime_error(error_code(__v, __ecat).message()), -23376: _M_code(__v, __ecat) { } -23376: -23376: system_error(int __v, const error_category& __ecat, const string& __what) -23376: : runtime_error(__what + ": " + error_code(__v, __ecat).message()), -23376: _M_code(__v, __ecat) { } -23376: -23376: virtual ~system_error() noexcept; -23376: -23376: const error_code& -23376: code() const noexcept { return _M_code; } -23376: }; -23376: -23376: -23376: } -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: struct hash -23376: : public __hash_base -23376: { -23376: size_t -23376: operator()(const error_code& __e) const noexcept -23376: { -23376: const size_t __tmp = std::_Hash_impl::hash(__e._M_value); -23376: return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp); -23376: } -23376: }; -23376: # 414 "/usr/include/c++/8/system_error" 3 -23376: -23376: } -23376: # 47 "/usr/include/c++/8/bits/ios_base.h" 2 3 -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum _Ios_Fmtflags -23376: { -23376: _S_boolalpha = 1L << 0, -23376: _S_dec = 1L << 1, -23376: _S_fixed = 1L << 2, -23376: _S_hex = 1L << 3, -23376: _S_internal = 1L << 4, -23376: _S_left = 1L << 5, -23376: _S_oct = 1L << 6, -23376: _S_right = 1L << 7, -23376: _S_scientific = 1L << 8, -23376: _S_showbase = 1L << 9, -23376: _S_showpoint = 1L << 10, -23376: _S_showpos = 1L << 11, -23376: _S_skipws = 1L << 12, -23376: _S_unitbuf = 1L << 13, -23376: _S_uppercase = 1L << 14, -23376: _S_adjustfield = _S_left | _S_right | _S_internal, -23376: _S_basefield = _S_dec | _S_oct | _S_hex, -23376: _S_floatfield = _S_scientific | _S_fixed, -23376: _S_ios_fmtflags_end = 1L << 16, -23376: _S_ios_fmtflags_max = 0x7fffffff, -23376: _S_ios_fmtflags_min = ~0x7fffffff -23376: }; -23376: -23376: inline constexpr _Ios_Fmtflags -23376: operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b) -23376: { return _Ios_Fmtflags(static_cast(__a) & static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Fmtflags -23376: operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b) -23376: { return _Ios_Fmtflags(static_cast(__a) | static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Fmtflags -23376: operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b) -23376: { return _Ios_Fmtflags(static_cast(__a) ^ static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Fmtflags -23376: operator~(_Ios_Fmtflags __a) -23376: { return _Ios_Fmtflags(~static_cast(__a)); } -23376: -23376: inline const _Ios_Fmtflags& -23376: operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) -23376: { return __a = __a | __b; } -23376: -23376: inline const _Ios_Fmtflags& -23376: operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) -23376: { return __a = __a & __b; } -23376: -23376: inline const _Ios_Fmtflags& -23376: operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) -23376: { return __a = __a ^ __b; } -23376: -23376: -23376: enum _Ios_Openmode -23376: { -23376: _S_app = 1L << 0, -23376: _S_ate = 1L << 1, -23376: _S_bin = 1L << 2, -23376: _S_in = 1L << 3, -23376: _S_out = 1L << 4, -23376: _S_trunc = 1L << 5, -23376: _S_ios_openmode_end = 1L << 16, -23376: _S_ios_openmode_max = 0x7fffffff, -23376: _S_ios_openmode_min = ~0x7fffffff -23376: }; -23376: -23376: inline constexpr _Ios_Openmode -23376: operator&(_Ios_Openmode __a, _Ios_Openmode __b) -23376: { return _Ios_Openmode(static_cast(__a) & static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Openmode -23376: operator|(_Ios_Openmode __a, _Ios_Openmode __b) -23376: { return _Ios_Openmode(static_cast(__a) | static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Openmode -23376: operator^(_Ios_Openmode __a, _Ios_Openmode __b) -23376: { return _Ios_Openmode(static_cast(__a) ^ static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Openmode -23376: operator~(_Ios_Openmode __a) -23376: { return _Ios_Openmode(~static_cast(__a)); } -23376: -23376: inline const _Ios_Openmode& -23376: operator|=(_Ios_Openmode& __a, _Ios_Openmode __b) -23376: { return __a = __a | __b; } -23376: -23376: inline const _Ios_Openmode& -23376: operator&=(_Ios_Openmode& __a, _Ios_Openmode __b) -23376: { return __a = __a & __b; } -23376: -23376: inline const _Ios_Openmode& -23376: operator^=(_Ios_Openmode& __a, _Ios_Openmode __b) -23376: { return __a = __a ^ __b; } -23376: -23376: -23376: enum _Ios_Iostate -23376: { -23376: _S_goodbit = 0, -23376: _S_badbit = 1L << 0, -23376: _S_eofbit = 1L << 1, -23376: _S_failbit = 1L << 2, -23376: _S_ios_iostate_end = 1L << 16, -23376: _S_ios_iostate_max = 0x7fffffff, -23376: _S_ios_iostate_min = ~0x7fffffff -23376: }; -23376: -23376: inline constexpr _Ios_Iostate -23376: operator&(_Ios_Iostate __a, _Ios_Iostate __b) -23376: { return _Ios_Iostate(static_cast(__a) & static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Iostate -23376: operator|(_Ios_Iostate __a, _Ios_Iostate __b) -23376: { return _Ios_Iostate(static_cast(__a) | static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Iostate -23376: operator^(_Ios_Iostate __a, _Ios_Iostate __b) -23376: { return _Ios_Iostate(static_cast(__a) ^ static_cast(__b)); } -23376: -23376: inline constexpr _Ios_Iostate -23376: operator~(_Ios_Iostate __a) -23376: { return _Ios_Iostate(~static_cast(__a)); } -23376: -23376: inline const _Ios_Iostate& -23376: operator|=(_Ios_Iostate& __a, _Ios_Iostate __b) -23376: { return __a = __a | __b; } -23376: -23376: inline const _Ios_Iostate& -23376: operator&=(_Ios_Iostate& __a, _Ios_Iostate __b) -23376: { return __a = __a & __b; } -23376: -23376: inline const _Ios_Iostate& -23376: operator^=(_Ios_Iostate& __a, _Ios_Iostate __b) -23376: { return __a = __a ^ __b; } -23376: -23376: -23376: enum _Ios_Seekdir -23376: { -23376: _S_beg = 0, -23376: _S_cur = 1, -23376: _S_end = 2, -23376: _S_ios_seekdir_end = 1L << 16 -23376: }; -23376: -23376: -23376: -23376: enum class io_errc { stream = 1 }; -23376: -23376: template <> struct is_error_code_enum : public true_type { }; -23376: -23376: const error_category& iostream_category() noexcept; -23376: -23376: inline error_code -23376: make_error_code(io_errc __e) noexcept -23376: { return error_code(static_cast(__e), iostream_category()); } -23376: -23376: inline error_condition -23376: make_error_condition(io_errc __e) noexcept -23376: { return error_condition(static_cast(__e), iostream_category()); } -23376: # 228 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: class ios_base -23376: { -23376: # 246 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: public: -23376: # 255 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error -23376: { -23376: public: -23376: explicit -23376: failure(const string& __str); -23376: -23376: -23376: explicit -23376: failure(const string&, const error_code&); -23376: -23376: explicit -23376: failure(const char*, const error_code& = io_errc::stream); -23376: -23376: -23376: virtual -23376: ~failure() throw(); -23376: -23376: virtual const char* -23376: what() const throw(); -23376: }; -23376: # 323 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: typedef _Ios_Fmtflags fmtflags; -23376: -23376: -23376: static const fmtflags boolalpha = _S_boolalpha; -23376: -23376: -23376: static const fmtflags dec = _S_dec; -23376: -23376: -23376: static const fmtflags fixed = _S_fixed; -23376: -23376: -23376: static const fmtflags hex = _S_hex; -23376: -23376: -23376: -23376: -23376: static const fmtflags internal = _S_internal; -23376: -23376: -23376: -23376: static const fmtflags left = _S_left; -23376: -23376: -23376: static const fmtflags oct = _S_oct; -23376: -23376: -23376: -23376: static const fmtflags right = _S_right; -23376: -23376: -23376: static const fmtflags scientific = _S_scientific; -23376: -23376: -23376: -23376: static const fmtflags showbase = _S_showbase; -23376: -23376: -23376: -23376: static const fmtflags showpoint = _S_showpoint; -23376: -23376: -23376: static const fmtflags showpos = _S_showpos; -23376: -23376: -23376: static const fmtflags skipws = _S_skipws; -23376: -23376: -23376: static const fmtflags unitbuf = _S_unitbuf; -23376: -23376: -23376: -23376: static const fmtflags uppercase = _S_uppercase; -23376: -23376: -23376: static const fmtflags adjustfield = _S_adjustfield; -23376: -23376: -23376: static const fmtflags basefield = _S_basefield; -23376: -23376: -23376: static const fmtflags floatfield = _S_floatfield; -23376: # 398 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: typedef _Ios_Iostate iostate; -23376: -23376: -23376: -23376: static const iostate badbit = _S_badbit; -23376: -23376: -23376: static const iostate eofbit = _S_eofbit; -23376: -23376: -23376: -23376: -23376: static const iostate failbit = _S_failbit; -23376: -23376: -23376: static const iostate goodbit = _S_goodbit; -23376: # 429 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: typedef _Ios_Openmode openmode; -23376: -23376: -23376: static const openmode app = _S_app; -23376: -23376: -23376: static const openmode ate = _S_ate; -23376: -23376: -23376: -23376: -23376: static const openmode binary = _S_bin; -23376: -23376: -23376: static const openmode in = _S_in; -23376: -23376: -23376: static const openmode out = _S_out; -23376: -23376: -23376: static const openmode trunc = _S_trunc; -23376: # 461 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: typedef _Ios_Seekdir seekdir; -23376: -23376: -23376: static const seekdir beg = _S_beg; -23376: -23376: -23376: static const seekdir cur = _S_cur; -23376: -23376: -23376: static const seekdir end = _S_end; -23376: -23376: -23376: -23376: typedef int io_state; -23376: typedef int open_mode; -23376: typedef int seek_dir; -23376: -23376: typedef std::streampos streampos; -23376: typedef std::streamoff streamoff; -23376: # 489 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: enum event -23376: { -23376: erase_event, -23376: imbue_event, -23376: copyfmt_event -23376: }; -23376: # 506 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: typedef void (*event_callback) (event __e, ios_base& __b, int __i); -23376: # 518 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: void -23376: register_callback(event_callback __fn, int __index); -23376: -23376: protected: -23376: streamsize _M_precision; -23376: streamsize _M_width; -23376: fmtflags _M_flags; -23376: iostate _M_exception; -23376: iostate _M_streambuf_state; -23376: -23376: -23376: -23376: struct _Callback_list -23376: { -23376: -23376: _Callback_list* _M_next; -23376: ios_base::event_callback _M_fn; -23376: int _M_index; -23376: _Atomic_word _M_refcount; -23376: -23376: _Callback_list(ios_base::event_callback __fn, int __index, -23376: _Callback_list* __cb) -23376: : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { } -23376: -23376: void -23376: _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); } -23376: -23376: -23376: int -23376: _M_remove_reference() -23376: { -23376: -23376: ; -23376: int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1); -23376: if (__res == 0) -23376: { -23376: ; -23376: } -23376: return __res; -23376: } -23376: }; -23376: -23376: _Callback_list* _M_callbacks; -23376: -23376: void -23376: _M_call_callbacks(event __ev) throw(); -23376: -23376: void -23376: _M_dispose_callbacks(void) throw(); -23376: -23376: -23376: struct _Words -23376: { -23376: void* _M_pword; -23376: long _M_iword; -23376: _Words() : _M_pword(0), _M_iword(0) { } -23376: }; -23376: -23376: -23376: _Words _M_word_zero; -23376: -23376: -23376: -23376: enum { _S_local_word_size = 8 }; -23376: _Words _M_local_word[_S_local_word_size]; -23376: -23376: -23376: int _M_word_size; -23376: _Words* _M_word; -23376: -23376: _Words& -23376: _M_grow_words(int __index, bool __iword); -23376: -23376: -23376: locale _M_ios_locale; -23376: -23376: void -23376: _M_init() throw(); -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: class Init -23376: { -23376: friend class ios_base; -23376: public: -23376: Init(); -23376: ~Init(); -23376: -23376: private: -23376: static _Atomic_word _S_refcount; -23376: static bool _S_synced_with_stdio; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: fmtflags -23376: flags() const -23376: { return _M_flags; } -23376: # 631 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: fmtflags -23376: flags(fmtflags __fmtfl) -23376: { -23376: fmtflags __old = _M_flags; -23376: _M_flags = __fmtfl; -23376: return __old; -23376: } -23376: # 647 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: fmtflags -23376: setf(fmtflags __fmtfl) -23376: { -23376: fmtflags __old = _M_flags; -23376: _M_flags |= __fmtfl; -23376: return __old; -23376: } -23376: # 664 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: fmtflags -23376: setf(fmtflags __fmtfl, fmtflags __mask) -23376: { -23376: fmtflags __old = _M_flags; -23376: _M_flags &= ~__mask; -23376: _M_flags |= (__fmtfl & __mask); -23376: return __old; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: unsetf(fmtflags __mask) -23376: { _M_flags &= ~__mask; } -23376: # 690 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: streamsize -23376: precision() const -23376: { return _M_precision; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: streamsize -23376: precision(streamsize __prec) -23376: { -23376: streamsize __old = _M_precision; -23376: _M_precision = __prec; -23376: return __old; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: streamsize -23376: width() const -23376: { return _M_width; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: streamsize -23376: width(streamsize __wide) -23376: { -23376: streamsize __old = _M_width; -23376: _M_width = __wide; -23376: return __old; -23376: } -23376: # 741 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: static bool -23376: sync_with_stdio(bool __sync = true); -23376: # 753 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: locale -23376: imbue(const locale& __loc) throw(); -23376: # 764 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: locale -23376: getloc() const -23376: { return _M_ios_locale; } -23376: # 775 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: const locale& -23376: _M_getloc() const -23376: { return _M_ios_locale; } -23376: # 794 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: static int -23376: xalloc() throw(); -23376: # 810 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: long& -23376: iword(int __ix) -23376: { -23376: _Words& __word = (__ix < _M_word_size) -23376: ? _M_word[__ix] : _M_grow_words(__ix, true); -23376: return __word._M_iword; -23376: } -23376: # 831 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: void*& -23376: pword(int __ix) -23376: { -23376: _Words& __word = (__ix < _M_word_size) -23376: ? _M_word[__ix] : _M_grow_words(__ix, false); -23376: return __word._M_pword; -23376: } -23376: # 848 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: virtual ~ios_base(); -23376: -23376: protected: -23376: ios_base() throw (); -23376: # 862 "/usr/include/c++/8/bits/ios_base.h" 3 -23376: public: -23376: ios_base(const ios_base&) = delete; -23376: -23376: ios_base& -23376: operator=(const ios_base&) = delete; -23376: -23376: protected: -23376: void -23376: _M_move(ios_base&) noexcept; -23376: -23376: void -23376: _M_swap(ios_base& __rhs) noexcept; -23376: -23376: }; -23376: -23376: -23376: -23376: inline ios_base& -23376: boolalpha(ios_base& __base) -23376: { -23376: __base.setf(ios_base::boolalpha); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: noboolalpha(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::boolalpha); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: showbase(ios_base& __base) -23376: { -23376: __base.setf(ios_base::showbase); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: noshowbase(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::showbase); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: showpoint(ios_base& __base) -23376: { -23376: __base.setf(ios_base::showpoint); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: noshowpoint(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::showpoint); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: showpos(ios_base& __base) -23376: { -23376: __base.setf(ios_base::showpos); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: noshowpos(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::showpos); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: skipws(ios_base& __base) -23376: { -23376: __base.setf(ios_base::skipws); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: noskipws(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::skipws); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: uppercase(ios_base& __base) -23376: { -23376: __base.setf(ios_base::uppercase); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: nouppercase(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::uppercase); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: unitbuf(ios_base& __base) -23376: { -23376: __base.setf(ios_base::unitbuf); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: nounitbuf(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::unitbuf); -23376: return __base; -23376: } -23376: -23376: -23376: -23376: inline ios_base& -23376: internal(ios_base& __base) -23376: { -23376: __base.setf(ios_base::internal, ios_base::adjustfield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: left(ios_base& __base) -23376: { -23376: __base.setf(ios_base::left, ios_base::adjustfield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: right(ios_base& __base) -23376: { -23376: __base.setf(ios_base::right, ios_base::adjustfield); -23376: return __base; -23376: } -23376: -23376: -23376: -23376: inline ios_base& -23376: dec(ios_base& __base) -23376: { -23376: __base.setf(ios_base::dec, ios_base::basefield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: hex(ios_base& __base) -23376: { -23376: __base.setf(ios_base::hex, ios_base::basefield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: oct(ios_base& __base) -23376: { -23376: __base.setf(ios_base::oct, ios_base::basefield); -23376: return __base; -23376: } -23376: -23376: -23376: -23376: inline ios_base& -23376: fixed(ios_base& __base) -23376: { -23376: __base.setf(ios_base::fixed, ios_base::floatfield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: scientific(ios_base& __base) -23376: { -23376: __base.setf(ios_base::scientific, ios_base::floatfield); -23376: return __base; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: inline ios_base& -23376: hexfloat(ios_base& __base) -23376: { -23376: __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield); -23376: return __base; -23376: } -23376: -23376: -23376: inline ios_base& -23376: defaultfloat(ios_base& __base) -23376: { -23376: __base.unsetf(ios_base::floatfield); -23376: return __base; -23376: } -23376: -23376: -23376: -23376: } -23376: # 43 "/usr/include/c++/8/ios" 2 3 -23376: # 1 "/usr/include/c++/8/streambuf" 1 3 -23376: # 36 "/usr/include/c++/8/streambuf" 3 -23376: -23376: # 37 "/usr/include/c++/8/streambuf" 3 -23376: # 45 "/usr/include/c++/8/streambuf" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*, -23376: basic_streambuf<_CharT, _Traits>*, bool&); -23376: # 121 "/usr/include/c++/8/streambuf" 3 -23376: template -23376: class basic_streambuf -23376: { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: typedef typename traits_type::int_type int_type; -23376: typedef typename traits_type::pos_type pos_type; -23376: typedef typename traits_type::off_type off_type; -23376: -23376: -23376: -23376: -23376: typedef basic_streambuf __streambuf_type; -23376: -23376: -23376: friend class basic_ios; -23376: friend class basic_istream; -23376: friend class basic_ostream; -23376: friend class istreambuf_iterator; -23376: friend class ostreambuf_iterator; -23376: -23376: friend streamsize -23376: __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: _CharT2*>::__type -23376: __copy_move_a2(istreambuf_iterator<_CharT2>, -23376: istreambuf_iterator<_CharT2>, _CharT2*); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: istreambuf_iterator<_CharT2> >::__type -23376: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, -23376: const _CharT2&); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: void>::__type -23376: advance(istreambuf_iterator<_CharT2>&, _Distance); -23376: -23376: template -23376: friend basic_istream<_CharT2, _Traits2>& -23376: operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*); -23376: -23376: template -23376: friend basic_istream<_CharT2, _Traits2>& -23376: operator>>(basic_istream<_CharT2, _Traits2>&, -23376: basic_string<_CharT2, _Traits2, _Alloc>&); -23376: -23376: template -23376: friend basic_istream<_CharT2, _Traits2>& -23376: getline(basic_istream<_CharT2, _Traits2>&, -23376: basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2); -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: char_type* _M_in_beg; -23376: char_type* _M_in_cur; -23376: char_type* _M_in_end; -23376: char_type* _M_out_beg; -23376: char_type* _M_out_cur; -23376: char_type* _M_out_end; -23376: -23376: -23376: locale _M_buf_locale; -23376: -23376: public: -23376: -23376: virtual -23376: ~basic_streambuf() -23376: { } -23376: # 215 "/usr/include/c++/8/streambuf" 3 -23376: locale -23376: pubimbue(const locale& __loc) -23376: { -23376: locale __tmp(this->getloc()); -23376: this->imbue(__loc); -23376: _M_buf_locale = __loc; -23376: return __tmp; -23376: } -23376: # 232 "/usr/include/c++/8/streambuf" 3 -23376: locale -23376: getloc() const -23376: { return _M_buf_locale; } -23376: # 245 "/usr/include/c++/8/streambuf" 3 -23376: basic_streambuf* -23376: pubsetbuf(char_type* __s, streamsize __n) -23376: { return this->setbuf(__s, __n); } -23376: # 257 "/usr/include/c++/8/streambuf" 3 -23376: pos_type -23376: pubseekoff(off_type __off, ios_base::seekdir __way, -23376: ios_base::openmode __mode = ios_base::in | ios_base::out) -23376: { return this->seekoff(__off, __way, __mode); } -23376: # 269 "/usr/include/c++/8/streambuf" 3 -23376: pos_type -23376: pubseekpos(pos_type __sp, -23376: ios_base::openmode __mode = ios_base::in | ios_base::out) -23376: { return this->seekpos(__sp, __mode); } -23376: -23376: -23376: -23376: -23376: int -23376: pubsync() { return this->sync(); } -23376: # 290 "/usr/include/c++/8/streambuf" 3 -23376: streamsize -23376: in_avail() -23376: { -23376: const streamsize __ret = this->egptr() - this->gptr(); -23376: return __ret ? __ret : this->showmanyc(); -23376: } -23376: # 304 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: snextc() -23376: { -23376: int_type __ret = traits_type::eof(); -23376: if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(), -23376: __ret), true)) -23376: __ret = this->sgetc(); -23376: return __ret; -23376: } -23376: # 322 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: sbumpc() -23376: { -23376: int_type __ret; -23376: if (__builtin_expect(this->gptr() < this->egptr(), true)) -23376: { -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: this->gbump(1); -23376: } -23376: else -23376: __ret = this->uflow(); -23376: return __ret; -23376: } -23376: # 344 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: sgetc() -23376: { -23376: int_type __ret; -23376: if (__builtin_expect(this->gptr() < this->egptr(), true)) -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: else -23376: __ret = this->underflow(); -23376: return __ret; -23376: } -23376: # 363 "/usr/include/c++/8/streambuf" 3 -23376: streamsize -23376: sgetn(char_type* __s, streamsize __n) -23376: { return this->xsgetn(__s, __n); } -23376: # 378 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: sputbackc(char_type __c) -23376: { -23376: int_type __ret; -23376: const bool __testpos = this->eback() < this->gptr(); -23376: if (__builtin_expect(!__testpos || -23376: !traits_type::eq(__c, this->gptr()[-1]), false)) -23376: __ret = this->pbackfail(traits_type::to_int_type(__c)); -23376: else -23376: { -23376: this->gbump(-1); -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: } -23376: return __ret; -23376: } -23376: # 403 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: sungetc() -23376: { -23376: int_type __ret; -23376: if (__builtin_expect(this->eback() < this->gptr(), true)) -23376: { -23376: this->gbump(-1); -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: } -23376: else -23376: __ret = this->pbackfail(); -23376: return __ret; -23376: } -23376: # 430 "/usr/include/c++/8/streambuf" 3 -23376: int_type -23376: sputc(char_type __c) -23376: { -23376: int_type __ret; -23376: if (__builtin_expect(this->pptr() < this->epptr(), true)) -23376: { -23376: *this->pptr() = __c; -23376: this->pbump(1); -23376: __ret = traits_type::to_int_type(__c); -23376: } -23376: else -23376: __ret = this->overflow(traits_type::to_int_type(__c)); -23376: return __ret; -23376: } -23376: # 456 "/usr/include/c++/8/streambuf" 3 -23376: streamsize -23376: sputn(const char_type* __s, streamsize __n) -23376: { return this->xsputn(__s, __n); } -23376: -23376: protected: -23376: # 470 "/usr/include/c++/8/streambuf" 3 -23376: basic_streambuf() -23376: : _M_in_beg(0), _M_in_cur(0), _M_in_end(0), -23376: _M_out_beg(0), _M_out_cur(0), _M_out_end(0), -23376: _M_buf_locale(locale()) -23376: { } -23376: # 488 "/usr/include/c++/8/streambuf" 3 -23376: char_type* -23376: eback() const { return _M_in_beg; } -23376: -23376: char_type* -23376: gptr() const { return _M_in_cur; } -23376: -23376: char_type* -23376: egptr() const { return _M_in_end; } -23376: # 504 "/usr/include/c++/8/streambuf" 3 -23376: void -23376: gbump(int __n) { _M_in_cur += __n; } -23376: # 515 "/usr/include/c++/8/streambuf" 3 -23376: void -23376: setg(char_type* __gbeg, char_type* __gnext, char_type* __gend) -23376: { -23376: _M_in_beg = __gbeg; -23376: _M_in_cur = __gnext; -23376: _M_in_end = __gend; -23376: } -23376: # 535 "/usr/include/c++/8/streambuf" 3 -23376: char_type* -23376: pbase() const { return _M_out_beg; } -23376: -23376: char_type* -23376: pptr() const { return _M_out_cur; } -23376: -23376: char_type* -23376: epptr() const { return _M_out_end; } -23376: # 551 "/usr/include/c++/8/streambuf" 3 -23376: void -23376: pbump(int __n) { _M_out_cur += __n; } -23376: # 561 "/usr/include/c++/8/streambuf" 3 -23376: void -23376: setp(char_type* __pbeg, char_type* __pend) -23376: { -23376: _M_out_beg = _M_out_cur = __pbeg; -23376: _M_out_end = __pend; -23376: } -23376: # 582 "/usr/include/c++/8/streambuf" 3 -23376: virtual void -23376: imbue(const locale& __loc __attribute__ ((__unused__))) -23376: { } -23376: # 597 "/usr/include/c++/8/streambuf" 3 -23376: virtual basic_streambuf* -23376: setbuf(char_type*, streamsize) -23376: { return this; } -23376: # 608 "/usr/include/c++/8/streambuf" 3 -23376: virtual pos_type -23376: seekoff(off_type, ios_base::seekdir, -23376: ios_base::openmode = ios_base::in | ios_base::out) -23376: { return pos_type(off_type(-1)); } -23376: # 620 "/usr/include/c++/8/streambuf" 3 -23376: virtual pos_type -23376: seekpos(pos_type, -23376: ios_base::openmode = ios_base::in | ios_base::out) -23376: { return pos_type(off_type(-1)); } -23376: # 633 "/usr/include/c++/8/streambuf" 3 -23376: virtual int -23376: sync() { return 0; } -23376: # 655 "/usr/include/c++/8/streambuf" 3 -23376: virtual streamsize -23376: showmanyc() { return 0; } -23376: # 671 "/usr/include/c++/8/streambuf" 3 -23376: virtual streamsize -23376: xsgetn(char_type* __s, streamsize __n); -23376: # 693 "/usr/include/c++/8/streambuf" 3 -23376: virtual int_type -23376: underflow() -23376: { return traits_type::eof(); } -23376: # 706 "/usr/include/c++/8/streambuf" 3 -23376: virtual int_type -23376: uflow() -23376: { -23376: int_type __ret = traits_type::eof(); -23376: const bool __testeof = traits_type::eq_int_type(this->underflow(), -23376: __ret); -23376: if (!__testeof) -23376: { -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: this->gbump(1); -23376: } -23376: return __ret; -23376: } -23376: # 730 "/usr/include/c++/8/streambuf" 3 -23376: virtual int_type -23376: pbackfail(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) -23376: { return traits_type::eof(); } -23376: # 748 "/usr/include/c++/8/streambuf" 3 -23376: virtual streamsize -23376: xsputn(const char_type* __s, streamsize __n); -23376: # 774 "/usr/include/c++/8/streambuf" 3 -23376: virtual int_type -23376: overflow(int_type __c __attribute__ ((__unused__)) = traits_type::eof()) -23376: { return traits_type::eof(); } -23376: -23376: -23376: -23376: public: -23376: # 790 "/usr/include/c++/8/streambuf" 3 -23376: [[__deprecated__("stossc is deprecated, use sbumpc instead")]] -23376: -23376: void -23376: stossc() -23376: { -23376: if (this->gptr() < this->egptr()) -23376: this->gbump(1); -23376: else -23376: this->uflow(); -23376: } -23376: -23376: -23376: -23376: void -23376: __safe_gbump(streamsize __n) { _M_in_cur += __n; } -23376: -23376: void -23376: __safe_pbump(streamsize __n) { _M_out_cur += __n; } -23376: -23376: -23376: -23376: -23376: protected: -23376: -23376: basic_streambuf(const basic_streambuf&); -23376: -23376: basic_streambuf& -23376: operator=(const basic_streambuf&); -23376: -23376: -23376: void -23376: swap(basic_streambuf& __sb) -23376: { -23376: std::swap(_M_in_beg, __sb._M_in_beg); -23376: std::swap(_M_in_cur, __sb._M_in_cur); -23376: std::swap(_M_in_end, __sb._M_in_end); -23376: std::swap(_M_out_beg, __sb._M_out_beg); -23376: std::swap(_M_out_cur, __sb._M_out_cur); -23376: std::swap(_M_out_end, __sb._M_out_end); -23376: std::swap(_M_buf_locale, __sb._M_buf_locale); -23376: } -23376: -23376: }; -23376: -23376: -23376: template -23376: std::basic_streambuf<_CharT, _Traits>:: -23376: basic_streambuf(const basic_streambuf&) = default; -23376: -23376: template -23376: std::basic_streambuf<_CharT, _Traits>& -23376: std::basic_streambuf<_CharT, _Traits>:: -23376: operator=(const basic_streambuf&) = default; -23376: -23376: -23376: -23376: template<> -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf* __sbin, -23376: basic_streambuf* __sbout, bool& __ineof); -23376: -23376: template<> -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf* __sbin, -23376: basic_streambuf* __sbout, bool& __ineof); -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/streambuf.tcc" 1 3 -23376: # 37 "/usr/include/c++/8/bits/streambuf.tcc" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/streambuf.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: streamsize -23376: basic_streambuf<_CharT, _Traits>:: -23376: xsgetn(char_type* __s, streamsize __n) -23376: { -23376: streamsize __ret = 0; -23376: while (__ret < __n) -23376: { -23376: const streamsize __buf_len = this->egptr() - this->gptr(); -23376: if (__buf_len) -23376: { -23376: const streamsize __remaining = __n - __ret; -23376: const streamsize __len = std::min(__buf_len, __remaining); -23376: traits_type::copy(__s, this->gptr(), __len); -23376: __ret += __len; -23376: __s += __len; -23376: this->__safe_gbump(__len); -23376: } -23376: -23376: if (__ret < __n) -23376: { -23376: const int_type __c = this->uflow(); -23376: if (!traits_type::eq_int_type(__c, traits_type::eof())) -23376: { -23376: traits_type::assign(*__s++, traits_type::to_char_type(__c)); -23376: ++__ret; -23376: } -23376: else -23376: break; -23376: } -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: streamsize -23376: basic_streambuf<_CharT, _Traits>:: -23376: xsputn(const char_type* __s, streamsize __n) -23376: { -23376: streamsize __ret = 0; -23376: while (__ret < __n) -23376: { -23376: const streamsize __buf_len = this->epptr() - this->pptr(); -23376: if (__buf_len) -23376: { -23376: const streamsize __remaining = __n - __ret; -23376: const streamsize __len = std::min(__buf_len, __remaining); -23376: traits_type::copy(this->pptr(), __s, __len); -23376: __ret += __len; -23376: __s += __len; -23376: this->__safe_pbump(__len); -23376: } -23376: -23376: if (__ret < __n) -23376: { -23376: int_type __c = this->overflow(traits_type::to_int_type(*__s)); -23376: if (!traits_type::eq_int_type(__c, traits_type::eof())) -23376: { -23376: ++__ret; -23376: ++__s; -23376: } -23376: else -23376: break; -23376: } -23376: } -23376: return __ret; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin, -23376: basic_streambuf<_CharT, _Traits>* __sbout, -23376: bool& __ineof) -23376: { -23376: streamsize __ret = 0; -23376: __ineof = true; -23376: typename _Traits::int_type __c = __sbin->sgetc(); -23376: while (!_Traits::eq_int_type(__c, _Traits::eof())) -23376: { -23376: __c = __sbout->sputc(_Traits::to_char_type(__c)); -23376: if (_Traits::eq_int_type(__c, _Traits::eof())) -23376: { -23376: __ineof = false; -23376: break; -23376: } -23376: ++__ret; -23376: __c = __sbin->snextc(); -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: inline streamsize -23376: __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin, -23376: basic_streambuf<_CharT, _Traits>* __sbout) -23376: { -23376: bool __ineof; -23376: return __copy_streambufs_eof(__sbin, __sbout, __ineof); -23376: } -23376: -23376: -23376: -23376: -23376: extern template class basic_streambuf; -23376: extern template -23376: streamsize -23376: __copy_streambufs(basic_streambuf*, -23376: basic_streambuf*); -23376: extern template -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf*, -23376: basic_streambuf*, bool&); -23376: -23376: -23376: extern template class basic_streambuf; -23376: extern template -23376: streamsize -23376: __copy_streambufs(basic_streambuf*, -23376: basic_streambuf*); -23376: extern template -23376: streamsize -23376: __copy_streambufs_eof(basic_streambuf*, -23376: basic_streambuf*, bool&); -23376: -23376: -23376: -23376: -23376: } -23376: # 863 "/usr/include/c++/8/streambuf" 2 3 -23376: # 44 "/usr/include/c++/8/ios" 2 3 -23376: # 1 "/usr/include/c++/8/bits/basic_ios.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_facets.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: -23376: # 1 "/usr/include/c++/8/cwctype" 1 3 -23376: # 39 "/usr/include/c++/8/cwctype" 3 -23376: -23376: # 40 "/usr/include/c++/8/cwctype" 3 -23376: # 50 "/usr/include/c++/8/cwctype" 3 -23376: # 1 "/usr/include/wctype.h" 1 3 4 -23376: # 38 "/usr/include/wctype.h" 3 4 -23376: # 1 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 1 3 4 -23376: # 38 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 -23376: typedef unsigned long int wctype_t; -23376: # 56 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 -23376: enum -23376: { -23376: __ISwupper = 0, -23376: __ISwlower = 1, -23376: __ISwalpha = 2, -23376: __ISwdigit = 3, -23376: __ISwxdigit = 4, -23376: __ISwspace = 5, -23376: __ISwprint = 6, -23376: __ISwgraph = 7, -23376: __ISwblank = 8, -23376: __ISwcntrl = 9, -23376: __ISwpunct = 10, -23376: __ISwalnum = 11, -23376: -23376: _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))), -23376: _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))), -23376: _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))), -23376: _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))), -23376: _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))), -23376: _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))), -23376: _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))), -23376: _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))), -23376: _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))), -23376: _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))), -23376: _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))), -23376: _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24)))) -23376: }; -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int iswalnum (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int iswalpha (wint_t __wc) throw (); -23376: -23376: -23376: extern int iswcntrl (wint_t __wc) throw (); -23376: -23376: -23376: -23376: extern int iswdigit (wint_t __wc) throw (); -23376: -23376: -23376: -23376: extern int iswgraph (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswlower (wint_t __wc) throw (); -23376: -23376: -23376: extern int iswprint (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswpunct (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswspace (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswupper (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswxdigit (wint_t __wc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int iswblank (wint_t __wc) throw (); -23376: # 155 "/usr/include/arm-linux-gnueabihf/bits/wctype-wchar.h" 3 4 -23376: extern wctype_t wctype (const char *__property) throw (); -23376: -23376: -23376: -23376: extern int iswctype (wint_t __wc, wctype_t __desc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t towlower (wint_t __wc) throw (); -23376: -23376: -23376: extern wint_t towupper (wint_t __wc) throw (); -23376: -23376: } -23376: # 39 "/usr/include/wctype.h" 2 3 4 -23376: -23376: -23376: -23376: -23376: -23376: extern "C" { -23376: -23376: -23376: -23376: typedef const __int32_t *wctrans_t; -23376: -23376: -23376: -23376: extern wctrans_t wctrans (const char *__property) throw (); -23376: -23376: -23376: extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern int iswalnum_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: -23376: extern int iswalpha_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: extern int iswcntrl_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: extern int iswdigit_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: extern int iswgraph_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswlower_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: extern int iswprint_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswpunct_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswspace_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswupper_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswxdigit_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: -23376: extern int iswblank_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: extern wctype_t wctype_l (const char *__property, locale_t __locale) -23376: throw (); -23376: -23376: -23376: -23376: extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale) -23376: throw (); -23376: -23376: -23376: -23376: -23376: -23376: -23376: extern wint_t towlower_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: extern wint_t towupper_l (wint_t __wc, locale_t __locale) throw (); -23376: -23376: -23376: -23376: extern wctrans_t wctrans_l (const char *__property, locale_t __locale) -23376: throw (); -23376: -23376: -23376: extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc, -23376: locale_t __locale) throw (); -23376: -23376: -23376: -23376: } -23376: # 51 "/usr/include/c++/8/cwctype" 2 3 -23376: # 80 "/usr/include/c++/8/cwctype" 3 -23376: namespace std -23376: { -23376: using ::wctrans_t; -23376: using ::wctype_t; -23376: using ::wint_t; -23376: -23376: using ::iswalnum; -23376: using ::iswalpha; -23376: -23376: using ::iswblank; -23376: -23376: using ::iswcntrl; -23376: using ::iswctype; -23376: using ::iswdigit; -23376: using ::iswgraph; -23376: using ::iswlower; -23376: using ::iswprint; -23376: using ::iswpunct; -23376: using ::iswspace; -23376: using ::iswupper; -23376: using ::iswxdigit; -23376: using ::towctrans; -23376: using ::towlower; -23376: using ::towupper; -23376: using ::wctrans; -23376: using ::wctype; -23376: } -23376: # 40 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: # 1 "/usr/include/c++/8/cctype" 1 3 -23376: # 39 "/usr/include/c++/8/cctype" 3 -23376: -23376: # 40 "/usr/include/c++/8/cctype" 3 -23376: # 41 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/ctype_base.h" 1 3 -23376: # 36 "/usr/include/arm-linux-gnueabihf/c++/8/bits/ctype_base.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: struct ctype_base -23376: { -23376: -23376: typedef const int* __to_type; -23376: -23376: -23376: -23376: typedef unsigned short mask; -23376: static const mask upper = _ISupper; -23376: static const mask lower = _ISlower; -23376: static const mask alpha = _ISalpha; -23376: static const mask digit = _ISdigit; -23376: static const mask xdigit = _ISxdigit; -23376: static const mask space = _ISspace; -23376: static const mask print = _ISprint; -23376: static const mask graph = _ISalpha | _ISdigit | _ISpunct; -23376: static const mask cntrl = _IScntrl; -23376: static const mask punct = _ISpunct; -23376: static const mask alnum = _ISalpha | _ISdigit; -23376: -23376: static const mask blank = _ISblank; -23376: -23376: }; -23376: -23376: -23376: } -23376: # 42 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/streambuf_iterator.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/streambuf_iterator.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/streambuf_iterator.h" 3 -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 49 "/usr/include/c++/8/bits/streambuf_iterator.h" 3 -23376: template -23376: class istreambuf_iterator -23376: : public iterator -23376: -23376: -23376: -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef basic_streambuf<_CharT, _Traits> streambuf_type; -23376: typedef basic_istream<_CharT, _Traits> istream_type; -23376: -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: ostreambuf_iterator<_CharT2> >::__type -23376: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, -23376: ostreambuf_iterator<_CharT2>); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: _CharT2*>::__type -23376: __copy_move_a2(istreambuf_iterator<_CharT2>, -23376: istreambuf_iterator<_CharT2>, _CharT2*); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: istreambuf_iterator<_CharT2> >::__type -23376: find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, -23376: const _CharT2&); -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: void>::__type -23376: advance(istreambuf_iterator<_CharT2>&, _Distance); -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: mutable streambuf_type* _M_sbuf; -23376: int_type _M_c; -23376: -23376: public: -23376: -23376: constexpr istreambuf_iterator() noexcept -23376: : _M_sbuf(0), _M_c(traits_type::eof()) { } -23376: -23376: -23376: istreambuf_iterator(const istreambuf_iterator&) noexcept = default; -23376: -23376: ~istreambuf_iterator() = default; -23376: -23376: -23376: -23376: istreambuf_iterator(istream_type& __s) noexcept -23376: : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { } -23376: -23376: -23376: istreambuf_iterator(streambuf_type* __s) noexcept -23376: : _M_sbuf(__s), _M_c(traits_type::eof()) { } -23376: -23376: -23376: -23376: -23376: char_type -23376: operator*() const -23376: { -23376: int_type __c = _M_get(); -23376: # 139 "/usr/include/c++/8/bits/streambuf_iterator.h" 3 -23376: return traits_type::to_char_type(__c); -23376: } -23376: -23376: -23376: istreambuf_iterator& -23376: operator++() -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: _M_sbuf->sbumpc(); -23376: _M_c = traits_type::eof(); -23376: return *this; -23376: } -23376: -23376: -23376: istreambuf_iterator -23376: operator++(int) -23376: { -23376: -23376: -23376: -23376: ; -23376: -23376: istreambuf_iterator __old = *this; -23376: __old._M_c = _M_sbuf->sbumpc(); -23376: _M_c = traits_type::eof(); -23376: return __old; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: equal(const istreambuf_iterator& __b) const -23376: { return _M_at_eof() == __b._M_at_eof(); } -23376: -23376: private: -23376: int_type -23376: _M_get() const -23376: { -23376: int_type __ret = _M_c; -23376: if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc())) -23376: _M_sbuf = 0; -23376: return __ret; -23376: } -23376: -23376: bool -23376: _M_at_eof() const -23376: { return _S_is_eof(_M_get()); } -23376: -23376: static bool -23376: _S_is_eof(int_type __c) -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: return traits_type::eq_int_type(__c, __eof); -23376: } -23376: }; -23376: -23376: template -23376: inline bool -23376: operator==(const istreambuf_iterator<_CharT, _Traits>& __a, -23376: const istreambuf_iterator<_CharT, _Traits>& __b) -23376: { return __a.equal(__b); } -23376: -23376: template -23376: inline bool -23376: operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, -23376: const istreambuf_iterator<_CharT, _Traits>& __b) -23376: { return !__a.equal(__b); } -23376: -23376: -23376: template -23376: class ostreambuf_iterator -23376: : public iterator -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: typedef basic_streambuf<_CharT, _Traits> streambuf_type; -23376: typedef basic_ostream<_CharT, _Traits> ostream_type; -23376: -23376: -23376: template -23376: friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, -23376: ostreambuf_iterator<_CharT2> >::__type -23376: copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>, -23376: ostreambuf_iterator<_CharT2>); -23376: -23376: private: -23376: streambuf_type* _M_sbuf; -23376: bool _M_failed; -23376: -23376: public: -23376: -23376: ostreambuf_iterator(ostream_type& __s) noexcept -23376: : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { } -23376: -23376: -23376: ostreambuf_iterator(streambuf_type* __s) noexcept -23376: : _M_sbuf(__s), _M_failed(!_M_sbuf) { } -23376: -23376: -23376: ostreambuf_iterator& -23376: operator=(_CharT __c) -23376: { -23376: if (!_M_failed && -23376: _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof())) -23376: _M_failed = true; -23376: return *this; -23376: } -23376: -23376: -23376: ostreambuf_iterator& -23376: operator*() -23376: { return *this; } -23376: -23376: -23376: ostreambuf_iterator& -23376: operator++(int) -23376: { return *this; } -23376: -23376: -23376: ostreambuf_iterator& -23376: operator++() -23376: { return *this; } -23376: -23376: -23376: bool -23376: failed() const noexcept -23376: { return _M_failed; } -23376: -23376: ostreambuf_iterator& -23376: _M_put(const _CharT* __ws, streamsize __len) -23376: { -23376: if (__builtin_expect(!_M_failed, true) -23376: && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, -23376: false)) -23376: _M_failed = true; -23376: return *this; -23376: } -23376: }; -23376: -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: ostreambuf_iterator<_CharT> >::__type -23376: copy(istreambuf_iterator<_CharT> __first, -23376: istreambuf_iterator<_CharT> __last, -23376: ostreambuf_iterator<_CharT> __result) -23376: { -23376: if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed) -23376: { -23376: bool __ineof; -23376: __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof); -23376: if (!__ineof) -23376: __result._M_failed = true; -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: ostreambuf_iterator<_CharT> >::__type -23376: __copy_move_a2(_CharT* __first, _CharT* __last, -23376: ostreambuf_iterator<_CharT> __result) -23376: { -23376: const streamsize __num = __last - __first; -23376: if (__num > 0) -23376: __result._M_put(__first, __num); -23376: return __result; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: ostreambuf_iterator<_CharT> >::__type -23376: __copy_move_a2(const _CharT* __first, const _CharT* __last, -23376: ostreambuf_iterator<_CharT> __result) -23376: { -23376: const streamsize __num = __last - __first; -23376: if (__num > 0) -23376: __result._M_put(__first, __num); -23376: return __result; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: _CharT*>::__type -23376: __copy_move_a2(istreambuf_iterator<_CharT> __first, -23376: istreambuf_iterator<_CharT> __last, _CharT* __result) -23376: { -23376: typedef istreambuf_iterator<_CharT> __is_iterator_type; -23376: typedef typename __is_iterator_type::traits_type traits_type; -23376: typedef typename __is_iterator_type::streambuf_type streambuf_type; -23376: typedef typename traits_type::int_type int_type; -23376: -23376: if (__first._M_sbuf && !__last._M_sbuf) -23376: { -23376: streambuf_type* __sb = __first._M_sbuf; -23376: int_type __c = __sb->sgetc(); -23376: while (!traits_type::eq_int_type(__c, traits_type::eof())) -23376: { -23376: const streamsize __n = __sb->egptr() - __sb->gptr(); -23376: if (__n > 1) -23376: { -23376: traits_type::copy(__result, __sb->gptr(), __n); -23376: __sb->__safe_gbump(__n); -23376: __result += __n; -23376: __c = __sb->underflow(); -23376: } -23376: else -23376: { -23376: *__result++ = traits_type::to_char_type(__c); -23376: __c = __sb->snextc(); -23376: } -23376: } -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: istreambuf_iterator<_CharT> >::__type -23376: find(istreambuf_iterator<_CharT> __first, -23376: istreambuf_iterator<_CharT> __last, const _CharT& __val) -23376: { -23376: typedef istreambuf_iterator<_CharT> __is_iterator_type; -23376: typedef typename __is_iterator_type::traits_type traits_type; -23376: typedef typename __is_iterator_type::streambuf_type streambuf_type; -23376: typedef typename traits_type::int_type int_type; -23376: const int_type __eof = traits_type::eof(); -23376: -23376: if (__first._M_sbuf && !__last._M_sbuf) -23376: { -23376: const int_type __ival = traits_type::to_int_type(__val); -23376: streambuf_type* __sb = __first._M_sbuf; -23376: int_type __c = __sb->sgetc(); -23376: while (!traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __ival)) -23376: { -23376: streamsize __n = __sb->egptr() - __sb->gptr(); -23376: if (__n > 1) -23376: { -23376: const _CharT* __p = traits_type::find(__sb->gptr(), -23376: __n, __val); -23376: if (__p) -23376: __n = __p - __sb->gptr(); -23376: __sb->__safe_gbump(__n); -23376: __c = __sb->sgetc(); -23376: } -23376: else -23376: __c = __sb->snextc(); -23376: } -23376: -23376: __first._M_c = __eof; -23376: } -23376: -23376: return __first; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, -23376: void>::__type -23376: advance(istreambuf_iterator<_CharT>& __i, _Distance __n) -23376: { -23376: if (__n == 0) -23376: return; -23376: -23376: ; -23376: -23376: -23376: ; -23376: -23376: typedef istreambuf_iterator<_CharT> __is_iterator_type; -23376: typedef typename __is_iterator_type::traits_type traits_type; -23376: typedef typename __is_iterator_type::streambuf_type streambuf_type; -23376: typedef typename traits_type::int_type int_type; -23376: const int_type __eof = traits_type::eof(); -23376: -23376: streambuf_type* __sb = __i._M_sbuf; -23376: while (__n > 0) -23376: { -23376: streamsize __size = __sb->egptr() - __sb->gptr(); -23376: if (__size > __n) -23376: { -23376: __sb->__safe_gbump(__n); -23376: break; -23376: } -23376: -23376: __sb->__safe_gbump(__size); -23376: __n -= __size; -23376: if (traits_type::eq_int_type(__sb->underflow(), __eof)) -23376: { -23376: -23376: -23376: ; -23376: break; -23376: } -23376: } -23376: -23376: __i._M_c = __eof; -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 49 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 71 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: void -23376: __convert_to_v(const char*, _Tp&, ios_base::iostate&, -23376: const __c_locale&) throw(); -23376: -23376: -23376: template<> -23376: void -23376: __convert_to_v(const char*, float&, ios_base::iostate&, -23376: const __c_locale&) throw(); -23376: -23376: template<> -23376: void -23376: __convert_to_v(const char*, double&, ios_base::iostate&, -23376: const __c_locale&) throw(); -23376: -23376: template<> -23376: void -23376: __convert_to_v(const char*, long double&, ios_base::iostate&, -23376: const __c_locale&) throw(); -23376: -23376: -23376: -23376: template -23376: struct __pad -23376: { -23376: static void -23376: _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, -23376: const _CharT* __olds, streamsize __newlen, streamsize __oldlen); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _CharT* -23376: __add_grouping(_CharT* __s, _CharT __sep, -23376: const char* __gbeg, size_t __gsize, -23376: const _CharT* __first, const _CharT* __last); -23376: -23376: -23376: -23376: -23376: template -23376: inline -23376: ostreambuf_iterator<_CharT> -23376: __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len) -23376: { -23376: __s._M_put(__ws, __len); -23376: return __s; -23376: } -23376: -23376: -23376: template -23376: inline -23376: _OutIter -23376: __write(_OutIter __s, const _CharT* __ws, int __len) -23376: { -23376: for (int __j = 0; __j < __len; __j++, ++__s) -23376: *__s = __ws[__j]; -23376: return __s; -23376: } -23376: # 149 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: class __ctype_abstract_base : public locale::facet, public ctype_base -23376: { -23376: public: -23376: -23376: -23376: typedef _CharT char_type; -23376: # 168 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: bool -23376: is(mask __m, char_type __c) const -23376: { return this->do_is(__m, __c); } -23376: # 185 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: is(const char_type *__lo, const char_type *__hi, mask *__vec) const -23376: { return this->do_is(__lo, __hi, __vec); } -23376: # 201 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: scan_is(mask __m, const char_type* __lo, const char_type* __hi) const -23376: { return this->do_scan_is(__m, __lo, __hi); } -23376: # 217 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: scan_not(mask __m, const char_type* __lo, const char_type* __hi) const -23376: { return this->do_scan_not(__m, __lo, __hi); } -23376: # 231 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: toupper(char_type __c) const -23376: { return this->do_toupper(__c); } -23376: # 246 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: toupper(char_type *__lo, const char_type* __hi) const -23376: { return this->do_toupper(__lo, __hi); } -23376: # 260 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: tolower(char_type __c) const -23376: { return this->do_tolower(__c); } -23376: # 275 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: tolower(char_type* __lo, const char_type* __hi) const -23376: { return this->do_tolower(__lo, __hi); } -23376: # 292 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: widen(char __c) const -23376: { return this->do_widen(__c); } -23376: # 311 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char* -23376: widen(const char* __lo, const char* __hi, char_type* __to) const -23376: { return this->do_widen(__lo, __hi, __to); } -23376: # 330 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char -23376: narrow(char_type __c, char __dfault) const -23376: { return this->do_narrow(__c, __dfault); } -23376: # 352 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault, char* __to) const -23376: { return this->do_narrow(__lo, __hi, __dfault, __to); } -23376: -23376: protected: -23376: explicit -23376: __ctype_abstract_base(size_t __refs = 0): facet(__refs) { } -23376: -23376: virtual -23376: ~__ctype_abstract_base() { } -23376: # 377 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual bool -23376: do_is(mask __m, char_type __c) const = 0; -23376: # 396 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_is(const char_type* __lo, const char_type* __hi, -23376: mask* __vec) const = 0; -23376: # 415 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_scan_is(mask __m, const char_type* __lo, -23376: const char_type* __hi) const = 0; -23376: # 434 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_scan_not(mask __m, const char_type* __lo, -23376: const char_type* __hi) const = 0; -23376: # 452 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_toupper(char_type __c) const = 0; -23376: # 469 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_toupper(char_type* __lo, const char_type* __hi) const = 0; -23376: # 485 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_tolower(char_type __c) const = 0; -23376: # 502 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_tolower(char_type* __lo, const char_type* __hi) const = 0; -23376: # 521 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_widen(char __c) const = 0; -23376: # 542 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char* -23376: do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0; -23376: # 563 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char -23376: do_narrow(char_type __c, char __dfault) const = 0; -23376: # 588 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault, char* __to) const = 0; -23376: }; -23376: # 611 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: class ctype : public __ctype_abstract_base<_CharT> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef typename __ctype_abstract_base<_CharT>::mask mask; -23376: -23376: -23376: static locale::id id; -23376: -23376: explicit -23376: ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { } -23376: -23376: protected: -23376: virtual -23376: ~ctype(); -23376: -23376: virtual bool -23376: do_is(mask __m, char_type __c) const; -23376: -23376: virtual const char_type* -23376: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; -23376: -23376: virtual const char_type* -23376: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; -23376: -23376: virtual const char_type* -23376: do_scan_not(mask __m, const char_type* __lo, -23376: const char_type* __hi) const; -23376: -23376: virtual char_type -23376: do_toupper(char_type __c) const; -23376: -23376: virtual const char_type* -23376: do_toupper(char_type* __lo, const char_type* __hi) const; -23376: -23376: virtual char_type -23376: do_tolower(char_type __c) const; -23376: -23376: virtual const char_type* -23376: do_tolower(char_type* __lo, const char_type* __hi) const; -23376: -23376: virtual char_type -23376: do_widen(char __c) const; -23376: -23376: virtual const char* -23376: do_widen(const char* __lo, const char* __hi, char_type* __dest) const; -23376: -23376: virtual char -23376: do_narrow(char_type, char __dfault) const; -23376: -23376: virtual const char_type* -23376: do_narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault, char* __to) const; -23376: }; -23376: -23376: template -23376: locale::id ctype<_CharT>::id; -23376: # 680 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template<> -23376: class ctype : public locale::facet, public ctype_base -23376: { -23376: public: -23376: -23376: -23376: typedef char char_type; -23376: -23376: protected: -23376: -23376: __c_locale _M_c_locale_ctype; -23376: bool _M_del; -23376: __to_type _M_toupper; -23376: __to_type _M_tolower; -23376: const mask* _M_table; -23376: mutable char _M_widen_ok; -23376: mutable char _M_widen[1 + static_cast(-1)]; -23376: mutable char _M_narrow[1 + static_cast(-1)]; -23376: mutable char _M_narrow_ok; -23376: -23376: -23376: public: -23376: -23376: static locale::id id; -23376: -23376: static const size_t table_size = 1 + static_cast(-1); -23376: # 717 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0); -23376: # 730 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, -23376: size_t __refs = 0); -23376: # 743 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: inline bool -23376: is(mask __m, char __c) const; -23376: # 758 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: inline const char* -23376: is(const char* __lo, const char* __hi, mask* __vec) const; -23376: # 772 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: inline const char* -23376: scan_is(mask __m, const char* __lo, const char* __hi) const; -23376: # 786 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: inline const char* -23376: scan_not(mask __m, const char* __lo, const char* __hi) const; -23376: # 801 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: toupper(char_type __c) const -23376: { return this->do_toupper(__c); } -23376: # 818 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: toupper(char_type *__lo, const char_type* __hi) const -23376: { return this->do_toupper(__lo, __hi); } -23376: # 834 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: tolower(char_type __c) const -23376: { return this->do_tolower(__c); } -23376: # 851 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: tolower(char_type* __lo, const char_type* __hi) const -23376: { return this->do_tolower(__lo, __hi); } -23376: # 871 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: widen(char __c) const -23376: { -23376: if (_M_widen_ok) -23376: return _M_widen[static_cast(__c)]; -23376: this->_M_widen_init(); -23376: return this->do_widen(__c); -23376: } -23376: # 898 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char* -23376: widen(const char* __lo, const char* __hi, char_type* __to) const -23376: { -23376: if (_M_widen_ok == 1) -23376: { -23376: if (__builtin_expect(__hi != __lo, true)) -23376: __builtin_memcpy(__to, __lo, __hi - __lo); -23376: return __hi; -23376: } -23376: if (!_M_widen_ok) -23376: _M_widen_init(); -23376: return this->do_widen(__lo, __hi, __to); -23376: } -23376: # 930 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char -23376: narrow(char_type __c, char __dfault) const -23376: { -23376: if (_M_narrow[static_cast(__c)]) -23376: return _M_narrow[static_cast(__c)]; -23376: const char __t = do_narrow(__c, __dfault); -23376: if (__t != __dfault) -23376: _M_narrow[static_cast(__c)] = __t; -23376: return __t; -23376: } -23376: # 963 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: const char_type* -23376: narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault, char* __to) const -23376: { -23376: if (__builtin_expect(_M_narrow_ok == 1, true)) -23376: { -23376: if (__builtin_expect(__hi != __lo, true)) -23376: __builtin_memcpy(__to, __lo, __hi - __lo); -23376: return __hi; -23376: } -23376: if (!_M_narrow_ok) -23376: _M_narrow_init(); -23376: return this->do_narrow(__lo, __hi, __dfault, __to); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const mask* -23376: table() const throw() -23376: { return _M_table; } -23376: -23376: -23376: static const mask* -23376: classic_table() throw(); -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual -23376: ~ctype(); -23376: # 1013 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_toupper(char_type __c) const; -23376: # 1030 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_toupper(char_type* __lo, const char_type* __hi) const; -23376: # 1046 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_tolower(char_type __c) const; -23376: # 1063 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_tolower(char_type* __lo, const char_type* __hi) const; -23376: # 1083 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_widen(char __c) const -23376: { return __c; } -23376: # 1106 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char* -23376: do_widen(const char* __lo, const char* __hi, char_type* __to) const -23376: { -23376: if (__builtin_expect(__hi != __lo, true)) -23376: __builtin_memcpy(__to, __lo, __hi - __lo); -23376: return __hi; -23376: } -23376: # 1133 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char -23376: do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const -23376: { return __c; } -23376: # 1159 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault __attribute__((__unused__)), char* __to) const -23376: { -23376: if (__builtin_expect(__hi != __lo, true)) -23376: __builtin_memcpy(__to, __lo, __hi - __lo); -23376: return __hi; -23376: } -23376: -23376: private: -23376: void _M_narrow_init() const; -23376: void _M_widen_init() const; -23376: }; -23376: # 1185 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template<> -23376: class ctype : public __ctype_abstract_base -23376: { -23376: public: -23376: -23376: -23376: typedef wchar_t char_type; -23376: typedef wctype_t __wmask_type; -23376: -23376: protected: -23376: __c_locale _M_c_locale_ctype; -23376: -23376: -23376: bool _M_narrow_ok; -23376: char _M_narrow[128]; -23376: wint_t _M_widen[1 + static_cast(-1)]; -23376: -23376: -23376: mask _M_bit[16]; -23376: __wmask_type _M_wmask[16]; -23376: -23376: public: -23376: -23376: -23376: static locale::id id; -23376: # 1218 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: ctype(size_t __refs = 0); -23376: # 1229 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: ctype(__c_locale __cloc, size_t __refs = 0); -23376: -23376: protected: -23376: __wmask_type -23376: _M_convert_to_wmask(const mask __m) const throw(); -23376: -23376: -23376: virtual -23376: ~ctype(); -23376: # 1253 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual bool -23376: do_is(mask __m, char_type __c) const; -23376: # 1272 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const; -23376: # 1290 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const; -23376: # 1308 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_scan_not(mask __m, const char_type* __lo, -23376: const char_type* __hi) const; -23376: # 1325 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_toupper(char_type __c) const; -23376: # 1342 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_toupper(char_type* __lo, const char_type* __hi) const; -23376: # 1358 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_tolower(char_type __c) const; -23376: # 1375 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_tolower(char_type* __lo, const char_type* __hi) const; -23376: # 1395 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_widen(char __c) const; -23376: # 1417 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char* -23376: do_widen(const char* __lo, const char* __hi, char_type* __to) const; -23376: # 1440 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char -23376: do_narrow(char_type __c, char __dfault) const; -23376: # 1466 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual const char_type* -23376: do_narrow(const char_type* __lo, const char_type* __hi, -23376: char __dfault, char* __to) const; -23376: -23376: -23376: void -23376: _M_initialize_ctype() throw(); -23376: }; -23376: -23376: -23376: -23376: template -23376: class ctype_byname : public ctype<_CharT> -23376: { -23376: public: -23376: typedef typename ctype<_CharT>::mask mask; -23376: -23376: explicit -23376: ctype_byname(const char* __s, size_t __refs = 0); -23376: -23376: -23376: explicit -23376: ctype_byname(const string& __s, size_t __refs = 0) -23376: : ctype_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~ctype_byname() { } -23376: }; -23376: -23376: -23376: template<> -23376: class ctype_byname : public ctype -23376: { -23376: public: -23376: explicit -23376: ctype_byname(const char* __s, size_t __refs = 0); -23376: -23376: -23376: explicit -23376: ctype_byname(const string& __s, size_t __refs = 0); -23376: -23376: -23376: protected: -23376: virtual -23376: ~ctype_byname(); -23376: }; -23376: -23376: -23376: template<> -23376: class ctype_byname : public ctype -23376: { -23376: public: -23376: explicit -23376: ctype_byname(const char* __s, size_t __refs = 0); -23376: -23376: -23376: explicit -23376: ctype_byname(const string& __s, size_t __refs = 0); -23376: -23376: -23376: protected: -23376: virtual -23376: ~ctype_byname(); -23376: }; -23376: -23376: -23376: -23376: } -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/ctype_inline.h" 1 3 -23376: # 37 "/usr/include/arm-linux-gnueabihf/c++/8/bits/ctype_inline.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: bool -23376: ctype:: -23376: is(mask __m, char __c) const -23376: { return _M_table[static_cast(__c)] & __m; } -23376: -23376: const char* -23376: ctype:: -23376: is(const char* __low, const char* __high, mask* __vec) const -23376: { -23376: while (__low < __high) -23376: *__vec++ = _M_table[static_cast(*__low++)]; -23376: return __high; -23376: } -23376: -23376: const char* -23376: ctype:: -23376: scan_is(mask __m, const char* __low, const char* __high) const -23376: { -23376: while (__low < __high -23376: && !(_M_table[static_cast(*__low)] & __m)) -23376: ++__low; -23376: return __low; -23376: } -23376: -23376: const char* -23376: ctype:: -23376: scan_not(mask __m, const char* __low, const char* __high) const -23376: { -23376: while (__low < __high -23376: && (_M_table[static_cast(*__low)] & __m) != 0) -23376: ++__low; -23376: return __low; -23376: } -23376: -23376: -23376: } -23376: # 1539 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: class __num_base -23376: { -23376: public: -23376: -23376: -23376: enum -23376: { -23376: _S_ominus, -23376: _S_oplus, -23376: _S_ox, -23376: _S_oX, -23376: _S_odigits, -23376: _S_odigits_end = _S_odigits + 16, -23376: _S_oudigits = _S_odigits_end, -23376: _S_oudigits_end = _S_oudigits + 16, -23376: _S_oe = _S_odigits + 14, -23376: _S_oE = _S_oudigits + 14, -23376: _S_oend = _S_oudigits_end -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const char* _S_atoms_out; -23376: -23376: -23376: -23376: static const char* _S_atoms_in; -23376: -23376: enum -23376: { -23376: _S_iminus, -23376: _S_iplus, -23376: _S_ix, -23376: _S_iX, -23376: _S_izero, -23376: _S_ie = _S_izero + 14, -23376: _S_iE = _S_izero + 20, -23376: _S_iend = 26 -23376: }; -23376: -23376: -23376: -23376: static void -23376: _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw(); -23376: }; -23376: -23376: template -23376: struct __numpunct_cache : public locale::facet -23376: { -23376: const char* _M_grouping; -23376: size_t _M_grouping_size; -23376: bool _M_use_grouping; -23376: const _CharT* _M_truename; -23376: size_t _M_truename_size; -23376: const _CharT* _M_falsename; -23376: size_t _M_falsename_size; -23376: _CharT _M_decimal_point; -23376: _CharT _M_thousands_sep; -23376: -23376: -23376: -23376: -23376: -23376: _CharT _M_atoms_out[__num_base::_S_oend]; -23376: -23376: -23376: -23376: -23376: -23376: _CharT _M_atoms_in[__num_base::_S_iend]; -23376: -23376: bool _M_allocated; -23376: -23376: __numpunct_cache(size_t __refs = 0) -23376: : facet(__refs), _M_grouping(0), _M_grouping_size(0), -23376: _M_use_grouping(false), -23376: _M_truename(0), _M_truename_size(0), _M_falsename(0), -23376: _M_falsename_size(0), _M_decimal_point(_CharT()), -23376: _M_thousands_sep(_CharT()), _M_allocated(false) -23376: { } -23376: -23376: ~__numpunct_cache(); -23376: -23376: void -23376: _M_cache(const locale& __loc); -23376: -23376: private: -23376: __numpunct_cache& -23376: operator=(const __numpunct_cache&); -23376: -23376: explicit -23376: __numpunct_cache(const __numpunct_cache&); -23376: }; -23376: -23376: template -23376: __numpunct_cache<_CharT>::~__numpunct_cache() -23376: { -23376: if (_M_allocated) -23376: { -23376: delete [] _M_grouping; -23376: delete [] _M_truename; -23376: delete [] _M_falsename; -23376: } -23376: } -23376: -23376: namespace __cxx11 { -23376: # 1669 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: class numpunct : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: -23376: protected: -23376: __cache_type* _M_data; -23376: -23376: public: -23376: -23376: static locale::id id; -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: numpunct(size_t __refs = 0) -23376: : facet(__refs), _M_data(0) -23376: { _M_initialize_numpunct(); } -23376: # 1707 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: numpunct(__cache_type* __cache, size_t __refs = 0) -23376: : facet(__refs), _M_data(__cache) -23376: { _M_initialize_numpunct(); } -23376: # 1721 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: numpunct(__c_locale __cloc, size_t __refs = 0) -23376: : facet(__refs), _M_data(0) -23376: { _M_initialize_numpunct(__cloc); } -23376: # 1735 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: decimal_point() const -23376: { return this->do_decimal_point(); } -23376: # 1748 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: char_type -23376: thousands_sep() const -23376: { return this->do_thousands_sep(); } -23376: # 1779 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: string -23376: grouping() const -23376: { return this->do_grouping(); } -23376: # 1792 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: string_type -23376: truename() const -23376: { return this->do_truename(); } -23376: # 1805 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: string_type -23376: falsename() const -23376: { return this->do_falsename(); } -23376: -23376: protected: -23376: -23376: virtual -23376: ~numpunct(); -23376: # 1822 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_decimal_point() const -23376: { return _M_data->_M_decimal_point; } -23376: # 1834 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual char_type -23376: do_thousands_sep() const -23376: { return _M_data->_M_thousands_sep; } -23376: # 1847 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual string -23376: do_grouping() const -23376: { return _M_data->_M_grouping; } -23376: # 1860 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual string_type -23376: do_truename() const -23376: { return _M_data->_M_truename; } -23376: # 1873 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual string_type -23376: do_falsename() const -23376: { return _M_data->_M_falsename; } -23376: -23376: -23376: void -23376: _M_initialize_numpunct(__c_locale __cloc = 0); -23376: }; -23376: -23376: template -23376: locale::id numpunct<_CharT>::id; -23376: -23376: template<> -23376: numpunct::~numpunct(); -23376: -23376: template<> -23376: void -23376: numpunct::_M_initialize_numpunct(__c_locale __cloc); -23376: -23376: -23376: template<> -23376: numpunct::~numpunct(); -23376: -23376: template<> -23376: void -23376: numpunct::_M_initialize_numpunct(__c_locale __cloc); -23376: -23376: -23376: -23376: template -23376: class numpunct_byname : public numpunct<_CharT> -23376: { -23376: public: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: explicit -23376: numpunct_byname(const char* __s, size_t __refs = 0) -23376: : numpunct<_CharT>(__refs) -23376: { -23376: if (__builtin_strcmp(__s, "C") != 0 -23376: && __builtin_strcmp(__s, "POSIX") != 0) -23376: { -23376: __c_locale __tmp; -23376: this->_S_create_c_locale(__tmp, __s); -23376: this->_M_initialize_numpunct(__tmp); -23376: this->_S_destroy_c_locale(__tmp); -23376: } -23376: } -23376: -23376: -23376: explicit -23376: numpunct_byname(const string& __s, size_t __refs = 0) -23376: : numpunct_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~numpunct_byname() { } -23376: }; -23376: -23376: } -23376: -23376: -23376: # 1951 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: class num_get : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _InIter iter_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 1972 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: num_get(size_t __refs = 0) : facet(__refs) { } -23376: # 1998 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, bool& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: # 2035 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned short& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned int& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned long& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long long& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned long long& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: # 2095 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, float& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, double& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long double& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: # 2138 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: get(iter_type __in, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, void*& __v) const -23376: { return this->do_get(__in, __end, __io, __err, __v); } -23376: -23376: protected: -23376: -23376: virtual ~num_get() { } -23376: -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iter_type -23376: _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&, -23376: string&) const; -23376: -23376: template -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: iter_type -23376: _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&, -23376: _ValueT&) const; -23376: -23376: template -23376: typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type -23376: _M_find(const _CharT2*, size_t __len, _CharT2 __c) const -23376: { -23376: int __ret = -1; -23376: if (__len <= 10) -23376: { -23376: if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len)) -23376: __ret = __c - _CharT2('0'); -23376: } -23376: else -23376: { -23376: if (__c >= _CharT2('0') && __c <= _CharT2('9')) -23376: __ret = __c - _CharT2('0'); -23376: else if (__c >= _CharT2('a') && __c <= _CharT2('f')) -23376: __ret = 10 + (__c - _CharT2('a')); -23376: else if (__c >= _CharT2('A') && __c <= _CharT2('F')) -23376: __ret = 10 + (__c - _CharT2('A')); -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename __gnu_cxx::__enable_if::__value, -23376: int>::__type -23376: _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const -23376: { -23376: int __ret = -1; -23376: const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c); -23376: if (__q) -23376: { -23376: __ret = __q - __zero; -23376: if (__ret > 15) -23376: __ret -= 6; -23376: } -23376: return __ret; -23376: } -23376: # 2211 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual iter_type -23376: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const; -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned short& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned int& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned long& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long long& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: virtual iter_type -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, unsigned long long& __v) const -23376: { return _M_extract_int(__beg, __end, __io, __err, __v); } -23376: -23376: -23376: virtual iter_type -23376: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const; -23376: -23376: virtual iter_type -23376: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, -23376: double&) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual iter_type -23376: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, -23376: long double&) const; -23376: -23376: -23376: virtual iter_type -23376: do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const; -23376: # 2274 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: }; -23376: -23376: template -23376: locale::id num_get<_CharT, _InIter>::id; -23376: # 2292 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: template -23376: class num_put : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _OutIter iter_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 2313 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: explicit -23376: num_put(size_t __refs = 0) : facet(__refs) { } -23376: # 2331 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: # 2373 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, long __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, -23376: unsigned long __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: -23376: -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, -23376: unsigned long long __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: # 2436 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, double __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, -23376: long double __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: # 2461 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, -23376: const void* __v) const -23376: { return this->do_put(__s, __io, __fill, __v); } -23376: -23376: protected: -23376: template -23376: iter_type -23376: _M_insert_float(iter_type, ios_base& __io, char_type __fill, -23376: char __mod, _ValueT __v) const; -23376: -23376: void -23376: _M_group_float(const char* __grouping, size_t __grouping_size, -23376: char_type __sep, const char_type* __p, char_type* __new, -23376: char_type* __cs, int& __len) const; -23376: -23376: template -23376: iter_type -23376: _M_insert_int(iter_type, ios_base& __io, char_type __fill, -23376: _ValueT __v) const; -23376: -23376: void -23376: _M_group_int(const char* __grouping, size_t __grouping_size, -23376: char_type __sep, ios_base& __io, char_type* __new, -23376: char_type* __cs, int& __len) const; -23376: -23376: void -23376: _M_pad(char_type __fill, streamsize __w, ios_base& __io, -23376: char_type* __new, const char_type* __cs, int& __len) const; -23376: -23376: -23376: virtual -23376: ~num_put() { } -23376: # 2509 "/usr/include/c++/8/bits/locale_facets.h" 3 -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const; -23376: -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const -23376: { return _M_insert_int(__s, __io, __fill, __v); } -23376: -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, -23376: unsigned long __v) const -23376: { return _M_insert_int(__s, __io, __fill, __v); } -23376: -23376: -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, -23376: long long __v) const -23376: { return _M_insert_int(__s, __io, __fill, __v); } -23376: -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, -23376: unsigned long long __v) const -23376: { return _M_insert_int(__s, __io, __fill, __v); } -23376: -23376: -23376: virtual iter_type -23376: do_put(iter_type, ios_base&, char_type, double) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual iter_type -23376: do_put(iter_type, ios_base&, char_type, long double) const; -23376: -23376: -23376: virtual iter_type -23376: do_put(iter_type, ios_base&, char_type, const void*) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: }; -23376: -23376: template -23376: locale::id num_put<_CharT, _OutIter>::id; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: isspace(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::space, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isprint(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::print, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: iscntrl(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::cntrl, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isupper(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::upper, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: islower(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::lower, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isalpha(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::alpha, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isdigit(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::digit, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: ispunct(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::punct, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isxdigit(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::xdigit, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isalnum(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::alnum, __c); } -23376: -23376: -23376: template -23376: inline bool -23376: isgraph(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::graph, __c); } -23376: -23376: -23376: -23376: template -23376: inline bool -23376: isblank(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).is(ctype_base::blank, __c); } -23376: -23376: -23376: -23376: template -23376: inline _CharT -23376: toupper(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).toupper(__c); } -23376: -23376: -23376: template -23376: inline _CharT -23376: tolower(_CharT __c, const locale& __loc) -23376: { return use_facet >(__loc).tolower(__c); } -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_facets.tcc" 1 3 -23376: # 33 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: struct __use_cache -23376: { -23376: const _Facet* -23376: operator() (const locale& __loc) const; -23376: }; -23376: -23376: -23376: template -23376: struct __use_cache<__numpunct_cache<_CharT> > -23376: { -23376: const __numpunct_cache<_CharT>* -23376: operator() (const locale& __loc) const -23376: { -23376: const size_t __i = numpunct<_CharT>::id._M_id(); -23376: const locale::facet** __caches = __loc._M_impl->_M_caches; -23376: if (!__caches[__i]) -23376: { -23376: __numpunct_cache<_CharT>* __tmp = 0; -23376: try -23376: { -23376: __tmp = new __numpunct_cache<_CharT>; -23376: __tmp->_M_cache(__loc); -23376: } -23376: catch(...) -23376: { -23376: delete __tmp; -23376: throw; -23376: } -23376: __loc._M_impl->_M_install_cache(__tmp, __i); -23376: } -23376: return static_cast*>(__caches[__i]); -23376: } -23376: }; -23376: -23376: template -23376: void -23376: __numpunct_cache<_CharT>::_M_cache(const locale& __loc) -23376: { -23376: const numpunct<_CharT>& __np = use_facet >(__loc); -23376: -23376: char* __grouping = 0; -23376: _CharT* __truename = 0; -23376: _CharT* __falsename = 0; -23376: try -23376: { -23376: const string& __g = __np.grouping(); -23376: _M_grouping_size = __g.size(); -23376: __grouping = new char[_M_grouping_size]; -23376: __g.copy(__grouping, _M_grouping_size); -23376: _M_use_grouping = (_M_grouping_size -23376: && static_cast(__grouping[0]) > 0 -23376: && (__grouping[0] -23376: != __gnu_cxx::__numeric_traits::__max)); -23376: -23376: const basic_string<_CharT>& __tn = __np.truename(); -23376: _M_truename_size = __tn.size(); -23376: __truename = new _CharT[_M_truename_size]; -23376: __tn.copy(__truename, _M_truename_size); -23376: -23376: const basic_string<_CharT>& __fn = __np.falsename(); -23376: _M_falsename_size = __fn.size(); -23376: __falsename = new _CharT[_M_falsename_size]; -23376: __fn.copy(__falsename, _M_falsename_size); -23376: -23376: _M_decimal_point = __np.decimal_point(); -23376: _M_thousands_sep = __np.thousands_sep(); -23376: -23376: const ctype<_CharT>& __ct = use_facet >(__loc); -23376: __ct.widen(__num_base::_S_atoms_out, -23376: __num_base::_S_atoms_out -23376: + __num_base::_S_oend, _M_atoms_out); -23376: __ct.widen(__num_base::_S_atoms_in, -23376: __num_base::_S_atoms_in -23376: + __num_base::_S_iend, _M_atoms_in); -23376: -23376: _M_grouping = __grouping; -23376: _M_truename = __truename; -23376: _M_falsename = __falsename; -23376: _M_allocated = true; -23376: } -23376: catch(...) -23376: { -23376: delete [] __grouping; -23376: delete [] __truename; -23376: delete [] __falsename; -23376: throw; -23376: } -23376: } -23376: # 139 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: __attribute__ ((__pure__)) bool -23376: __verify_grouping(const char* __grouping, size_t __grouping_size, -23376: const string& __grouping_tmp) throw (); -23376: -23376: -23376: -23376: template -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io, -23376: ios_base::iostate& __err, string& __xtrc) const -23376: { -23376: typedef char_traits<_CharT> __traits_type; -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: const _CharT* __lit = __lc->_M_atoms_in; -23376: char_type __c = char_type(); -23376: -23376: -23376: bool __testeof = __beg == __end; -23376: -23376: -23376: if (!__testeof) -23376: { -23376: __c = *__beg; -23376: const bool __plus = __c == __lit[__num_base::_S_iplus]; -23376: if ((__plus || __c == __lit[__num_base::_S_iminus]) -23376: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: && !(__c == __lc->_M_decimal_point)) -23376: { -23376: __xtrc += __plus ? '+' : '-'; -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: } -23376: -23376: -23376: bool __found_mantissa = false; -23376: int __sep_pos = 0; -23376: while (!__testeof) -23376: { -23376: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: || __c == __lc->_M_decimal_point) -23376: break; -23376: else if (__c == __lit[__num_base::_S_izero]) -23376: { -23376: if (!__found_mantissa) -23376: { -23376: __xtrc += '0'; -23376: __found_mantissa = true; -23376: } -23376: ++__sep_pos; -23376: -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: else -23376: break; -23376: } -23376: -23376: -23376: bool __found_dec = false; -23376: bool __found_sci = false; -23376: string __found_grouping; -23376: if (__lc->_M_use_grouping) -23376: __found_grouping.reserve(32); -23376: const char_type* __lit_zero = __lit + __num_base::_S_izero; -23376: -23376: if (!__lc->_M_allocated) -23376: -23376: while (!__testeof) -23376: { -23376: const int __digit = _M_find(__lit_zero, 10, __c); -23376: if (__digit != -1) -23376: { -23376: __xtrc += '0' + __digit; -23376: __found_mantissa = true; -23376: } -23376: else if (__c == __lc->_M_decimal_point -23376: && !__found_dec && !__found_sci) -23376: { -23376: __xtrc += '.'; -23376: __found_dec = true; -23376: } -23376: else if ((__c == __lit[__num_base::_S_ie] -23376: || __c == __lit[__num_base::_S_iE]) -23376: && !__found_sci && __found_mantissa) -23376: { -23376: -23376: __xtrc += 'e'; -23376: __found_sci = true; -23376: -23376: -23376: if (++__beg != __end) -23376: { -23376: __c = *__beg; -23376: const bool __plus = __c == __lit[__num_base::_S_iplus]; -23376: if (__plus || __c == __lit[__num_base::_S_iminus]) -23376: __xtrc += __plus ? '+' : '-'; -23376: else -23376: continue; -23376: } -23376: else -23376: { -23376: __testeof = true; -23376: break; -23376: } -23376: } -23376: else -23376: break; -23376: -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: else -23376: while (!__testeof) -23376: { -23376: -23376: -23376: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: { -23376: if (!__found_dec && !__found_sci) -23376: { -23376: -23376: -23376: if (__sep_pos) -23376: { -23376: __found_grouping += static_cast(__sep_pos); -23376: __sep_pos = 0; -23376: } -23376: else -23376: { -23376: -23376: -23376: __xtrc.clear(); -23376: break; -23376: } -23376: } -23376: else -23376: break; -23376: } -23376: else if (__c == __lc->_M_decimal_point) -23376: { -23376: if (!__found_dec && !__found_sci) -23376: { -23376: -23376: -23376: -23376: if (__found_grouping.size()) -23376: __found_grouping += static_cast(__sep_pos); -23376: __xtrc += '.'; -23376: __found_dec = true; -23376: } -23376: else -23376: break; -23376: } -23376: else -23376: { -23376: const char_type* __q = -23376: __traits_type::find(__lit_zero, 10, __c); -23376: if (__q) -23376: { -23376: __xtrc += '0' + (__q - __lit_zero); -23376: __found_mantissa = true; -23376: ++__sep_pos; -23376: } -23376: else if ((__c == __lit[__num_base::_S_ie] -23376: || __c == __lit[__num_base::_S_iE]) -23376: && !__found_sci && __found_mantissa) -23376: { -23376: -23376: if (__found_grouping.size() && !__found_dec) -23376: __found_grouping += static_cast(__sep_pos); -23376: __xtrc += 'e'; -23376: __found_sci = true; -23376: -23376: -23376: if (++__beg != __end) -23376: { -23376: __c = *__beg; -23376: const bool __plus = __c == __lit[__num_base::_S_iplus]; -23376: if ((__plus || __c == __lit[__num_base::_S_iminus]) -23376: && !(__lc->_M_use_grouping -23376: && __c == __lc->_M_thousands_sep) -23376: && !(__c == __lc->_M_decimal_point)) -23376: __xtrc += __plus ? '+' : '-'; -23376: else -23376: continue; -23376: } -23376: else -23376: { -23376: __testeof = true; -23376: break; -23376: } -23376: } -23376: else -23376: break; -23376: } -23376: -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: -23376: -23376: -23376: if (__found_grouping.size()) -23376: { -23376: -23376: if (!__found_dec && !__found_sci) -23376: __found_grouping += static_cast(__sep_pos); -23376: -23376: if (!std::__verify_grouping(__lc->_M_grouping, -23376: __lc->_M_grouping_size, -23376: __found_grouping)) -23376: __err = ios_base::failbit; -23376: } -23376: -23376: return __beg; -23376: } -23376: -23376: template -23376: template -23376: __attribute ((__abi_tag__ ("cxx11"))) -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io, -23376: ios_base::iostate& __err, _ValueT& __v) const -23376: { -23376: typedef char_traits<_CharT> __traits_type; -23376: using __gnu_cxx::__add_unsigned; -23376: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: const _CharT* __lit = __lc->_M_atoms_in; -23376: char_type __c = char_type(); -23376: -23376: -23376: const ios_base::fmtflags __basefield = __io.flags() -23376: & ios_base::basefield; -23376: const bool __oct = __basefield == ios_base::oct; -23376: int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10); -23376: -23376: -23376: bool __testeof = __beg == __end; -23376: -23376: -23376: bool __negative = false; -23376: if (!__testeof) -23376: { -23376: __c = *__beg; -23376: __negative = __c == __lit[__num_base::_S_iminus]; -23376: if ((__negative || __c == __lit[__num_base::_S_iplus]) -23376: && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: && !(__c == __lc->_M_decimal_point)) -23376: { -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: } -23376: -23376: -23376: -23376: bool __found_zero = false; -23376: int __sep_pos = 0; -23376: while (!__testeof) -23376: { -23376: if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: || __c == __lc->_M_decimal_point) -23376: break; -23376: else if (__c == __lit[__num_base::_S_izero] -23376: && (!__found_zero || __base == 10)) -23376: { -23376: __found_zero = true; -23376: ++__sep_pos; -23376: if (__basefield == 0) -23376: __base = 8; -23376: if (__base == 8) -23376: __sep_pos = 0; -23376: } -23376: else if (__found_zero -23376: && (__c == __lit[__num_base::_S_ix] -23376: || __c == __lit[__num_base::_S_iX])) -23376: { -23376: if (__basefield == 0) -23376: __base = 16; -23376: if (__base == 16) -23376: { -23376: __found_zero = false; -23376: __sep_pos = 0; -23376: } -23376: else -23376: break; -23376: } -23376: else -23376: break; -23376: -23376: if (++__beg != __end) -23376: { -23376: __c = *__beg; -23376: if (!__found_zero) -23376: break; -23376: } -23376: else -23376: __testeof = true; -23376: } -23376: -23376: -23376: -23376: const size_t __len = (__base == 16 ? __num_base::_S_iend -23376: - __num_base::_S_izero : __base); -23376: -23376: -23376: typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits; -23376: string __found_grouping; -23376: if (__lc->_M_use_grouping) -23376: __found_grouping.reserve(32); -23376: bool __testfail = false; -23376: bool __testoverflow = false; -23376: const __unsigned_type __max = -23376: (__negative && __num_traits::__is_signed) -23376: ? -static_cast<__unsigned_type>(__num_traits::__min) -23376: : __num_traits::__max; -23376: const __unsigned_type __smax = __max / __base; -23376: __unsigned_type __result = 0; -23376: int __digit = 0; -23376: const char_type* __lit_zero = __lit + __num_base::_S_izero; -23376: -23376: if (!__lc->_M_allocated) -23376: -23376: while (!__testeof) -23376: { -23376: __digit = _M_find(__lit_zero, __len, __c); -23376: if (__digit == -1) -23376: break; -23376: -23376: if (__result > __smax) -23376: __testoverflow = true; -23376: else -23376: { -23376: __result *= __base; -23376: __testoverflow |= __result > __max - __digit; -23376: __result += __digit; -23376: ++__sep_pos; -23376: } -23376: -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: else -23376: while (!__testeof) -23376: { -23376: -23376: -23376: if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) -23376: { -23376: -23376: -23376: if (__sep_pos) -23376: { -23376: __found_grouping += static_cast(__sep_pos); -23376: __sep_pos = 0; -23376: } -23376: else -23376: { -23376: __testfail = true; -23376: break; -23376: } -23376: } -23376: else if (__c == __lc->_M_decimal_point) -23376: break; -23376: else -23376: { -23376: const char_type* __q = -23376: __traits_type::find(__lit_zero, __len, __c); -23376: if (!__q) -23376: break; -23376: -23376: __digit = __q - __lit_zero; -23376: if (__digit > 15) -23376: __digit -= 6; -23376: if (__result > __smax) -23376: __testoverflow = true; -23376: else -23376: { -23376: __result *= __base; -23376: __testoverflow |= __result > __max - __digit; -23376: __result += __digit; -23376: ++__sep_pos; -23376: } -23376: } -23376: -23376: if (++__beg != __end) -23376: __c = *__beg; -23376: else -23376: __testeof = true; -23376: } -23376: -23376: -23376: -23376: if (__found_grouping.size()) -23376: { -23376: -23376: __found_grouping += static_cast(__sep_pos); -23376: -23376: if (!std::__verify_grouping(__lc->_M_grouping, -23376: __lc->_M_grouping_size, -23376: __found_grouping)) -23376: __err = ios_base::failbit; -23376: } -23376: -23376: -23376: -23376: if ((!__sep_pos && !__found_zero && !__found_grouping.size()) -23376: || __testfail) -23376: { -23376: __v = 0; -23376: __err = ios_base::failbit; -23376: } -23376: else if (__testoverflow) -23376: { -23376: if (__negative && __num_traits::__is_signed) -23376: __v = __num_traits::__min; -23376: else -23376: __v = __num_traits::__max; -23376: __err = ios_base::failbit; -23376: } -23376: else -23376: __v = __negative ? -__result : __result; -23376: -23376: if (__testeof) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: -23376: -23376: template -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, bool& __v) const -23376: { -23376: if (!(__io.flags() & ios_base::boolalpha)) -23376: { -23376: -23376: -23376: -23376: long __l = -1; -23376: __beg = _M_extract_int(__beg, __end, __io, __err, __l); -23376: if (__l == 0 || __l == 1) -23376: __v = bool(__l); -23376: else -23376: { -23376: -23376: -23376: __v = true; -23376: __err = ios_base::failbit; -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: } -23376: } -23376: else -23376: { -23376: -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: -23376: bool __testf = true; -23376: bool __testt = true; -23376: bool __donef = __lc->_M_falsename_size == 0; -23376: bool __donet = __lc->_M_truename_size == 0; -23376: bool __testeof = false; -23376: size_t __n = 0; -23376: while (!__donef || !__donet) -23376: { -23376: if (__beg == __end) -23376: { -23376: __testeof = true; -23376: break; -23376: } -23376: -23376: const char_type __c = *__beg; -23376: -23376: if (!__donef) -23376: __testf = __c == __lc->_M_falsename[__n]; -23376: -23376: if (!__testf && __donet) -23376: break; -23376: -23376: if (!__donet) -23376: __testt = __c == __lc->_M_truename[__n]; -23376: -23376: if (!__testt && __donef) -23376: break; -23376: -23376: if (!__testt && !__testf) -23376: break; -23376: -23376: ++__n; -23376: ++__beg; -23376: -23376: __donef = !__testf || __n >= __lc->_M_falsename_size; -23376: __donet = !__testt || __n >= __lc->_M_truename_size; -23376: } -23376: if (__testf && __n == __lc->_M_falsename_size && __n) -23376: { -23376: __v = false; -23376: if (__testt && __n == __lc->_M_truename_size) -23376: __err = ios_base::failbit; -23376: else -23376: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; -23376: } -23376: else if (__testt && __n == __lc->_M_truename_size && __n) -23376: { -23376: __v = true; -23376: __err = __testeof ? ios_base::eofbit : ios_base::goodbit; -23376: } -23376: else -23376: { -23376: -23376: -23376: __v = false; -23376: __err = ios_base::failbit; -23376: if (__testeof) -23376: __err |= ios_base::eofbit; -23376: } -23376: } -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, float& __v) const -23376: { -23376: string __xtrc; -23376: __xtrc.reserve(32); -23376: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); -23376: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, double& __v) const -23376: { -23376: string __xtrc; -23376: __xtrc.reserve(32); -23376: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); -23376: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: # 735 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: template -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, long double& __v) const -23376: { -23376: string __xtrc; -23376: __xtrc.reserve(32); -23376: __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); -23376: std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: num_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, void*& __v) const -23376: { -23376: -23376: typedef ios_base::fmtflags fmtflags; -23376: const fmtflags __fmt = __io.flags(); -23376: __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex); -23376: -23376: typedef __gnu_cxx::__conditional_type<(sizeof(void*) -23376: <= sizeof(unsigned long)), -23376: unsigned long, unsigned long long>::__type _UIntPtrType; -23376: -23376: _UIntPtrType __ul; -23376: __beg = _M_extract_int(__beg, __end, __io, __err, __ul); -23376: -23376: -23376: __io.flags(__fmt); -23376: -23376: __v = reinterpret_cast(__ul); -23376: return __beg; -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: num_put<_CharT, _OutIter>:: -23376: _M_pad(_CharT __fill, streamsize __w, ios_base& __io, -23376: _CharT* __new, const _CharT* __cs, int& __len) const -23376: { -23376: -23376: -23376: __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new, -23376: __cs, __w, __len); -23376: __len = static_cast(__w); -23376: } -23376: -23376: -23376: -23376: template -23376: int -23376: __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit, -23376: ios_base::fmtflags __flags, bool __dec) -23376: { -23376: _CharT* __buf = __bufend; -23376: if (__builtin_expect(__dec, true)) -23376: { -23376: -23376: do -23376: { -23376: *--__buf = __lit[(__v % 10) + __num_base::_S_odigits]; -23376: __v /= 10; -23376: } -23376: while (__v != 0); -23376: } -23376: else if ((__flags & ios_base::basefield) == ios_base::oct) -23376: { -23376: -23376: do -23376: { -23376: *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits]; -23376: __v >>= 3; -23376: } -23376: while (__v != 0); -23376: } -23376: else -23376: { -23376: -23376: const bool __uppercase = __flags & ios_base::uppercase; -23376: const int __case_offset = __uppercase ? __num_base::_S_oudigits -23376: : __num_base::_S_odigits; -23376: do -23376: { -23376: *--__buf = __lit[(__v & 0xf) + __case_offset]; -23376: __v >>= 4; -23376: } -23376: while (__v != 0); -23376: } -23376: return __bufend - __buf; -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: num_put<_CharT, _OutIter>:: -23376: _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep, -23376: ios_base&, _CharT* __new, _CharT* __cs, int& __len) const -23376: { -23376: _CharT* __p = std::__add_grouping(__new, __sep, __grouping, -23376: __grouping_size, __cs, __cs + __len); -23376: __len = __p - __new; -23376: } -23376: -23376: template -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill, -23376: _ValueT __v) const -23376: { -23376: using __gnu_cxx::__add_unsigned; -23376: typedef typename __add_unsigned<_ValueT>::__type __unsigned_type; -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: const _CharT* __lit = __lc->_M_atoms_out; -23376: const ios_base::fmtflags __flags = __io.flags(); -23376: -23376: -23376: const int __ilen = 5 * sizeof(_ValueT); -23376: _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __ilen)); -23376: -23376: -23376: -23376: const ios_base::fmtflags __basefield = __flags & ios_base::basefield; -23376: const bool __dec = (__basefield != ios_base::oct -23376: && __basefield != ios_base::hex); -23376: const __unsigned_type __u = ((__v > 0 || !__dec) -23376: ? __unsigned_type(__v) -23376: : -__unsigned_type(__v)); -23376: int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec); -23376: __cs += __ilen - __len; -23376: -23376: -23376: if (__lc->_M_use_grouping) -23376: { -23376: -23376: -23376: _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * (__len + 1) -23376: * 2)); -23376: _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size, -23376: __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len); -23376: __cs = __cs2 + 2; -23376: } -23376: -23376: -23376: if (__builtin_expect(__dec, true)) -23376: { -23376: -23376: if (__v >= 0) -23376: { -23376: if (bool(__flags & ios_base::showpos) -23376: && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) -23376: *--__cs = __lit[__num_base::_S_oplus], ++__len; -23376: } -23376: else -23376: *--__cs = __lit[__num_base::_S_ominus], ++__len; -23376: } -23376: else if (bool(__flags & ios_base::showbase) && __v) -23376: { -23376: if (__basefield == ios_base::oct) -23376: *--__cs = __lit[__num_base::_S_odigits], ++__len; -23376: else -23376: { -23376: -23376: const bool __uppercase = __flags & ios_base::uppercase; -23376: *--__cs = __lit[__num_base::_S_ox + __uppercase]; -23376: -23376: *--__cs = __lit[__num_base::_S_odigits]; -23376: __len += 2; -23376: } -23376: } -23376: -23376: -23376: const streamsize __w = __io.width(); -23376: if (__w > static_cast(__len)) -23376: { -23376: _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __w)); -23376: _M_pad(__fill, __w, __io, __cs3, __cs, __len); -23376: __cs = __cs3; -23376: } -23376: __io.width(0); -23376: -23376: -23376: -23376: return std::__write(__s, __cs, __len); -23376: } -23376: -23376: template -23376: void -23376: num_put<_CharT, _OutIter>:: -23376: _M_group_float(const char* __grouping, size_t __grouping_size, -23376: _CharT __sep, const _CharT* __p, _CharT* __new, -23376: _CharT* __cs, int& __len) const -23376: { -23376: -23376: -23376: -23376: const int __declen = __p ? __p - __cs : __len; -23376: _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping, -23376: __grouping_size, -23376: __cs, __cs + __declen); -23376: -23376: -23376: int __newlen = __p2 - __new; -23376: if (__p) -23376: { -23376: char_traits<_CharT>::copy(__p2, __p, __len - __declen); -23376: __newlen += __len - __declen; -23376: } -23376: __len = __newlen; -23376: } -23376: # 971 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: template -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod, -23376: _ValueT __v) const -23376: { -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: -23376: -23376: const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); -23376: -23376: const int __max_digits = -23376: __gnu_cxx::__numeric_traits<_ValueT>::__digits10; -23376: -23376: -23376: int __len; -23376: -23376: char __fbuf[16]; -23376: __num_base::_S_format_float(__io, __fbuf, __mod); -23376: -23376: -23376: -23376: const bool __use_prec = -23376: (__io.flags() & ios_base::floatfield) != ios_base::floatfield; -23376: -23376: -23376: -23376: int __cs_size = __max_digits * 3; -23376: char* __cs = static_cast(__builtin_alloca(__cs_size)); -23376: if (__use_prec) -23376: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: __fbuf, __prec, __v); -23376: else -23376: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: __fbuf, __v); -23376: -23376: -23376: if (__len >= __cs_size) -23376: { -23376: __cs_size = __len + 1; -23376: __cs = static_cast(__builtin_alloca(__cs_size)); -23376: if (__use_prec) -23376: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: __fbuf, __prec, __v); -23376: else -23376: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: __fbuf, __v); -23376: } -23376: # 1044 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __len)); -23376: __ctype.widen(__cs, __cs + __len, __ws); -23376: -23376: -23376: _CharT* __wp = 0; -23376: const char* __p = char_traits::find(__cs, __len, '.'); -23376: if (__p) -23376: { -23376: __wp = __ws + (__p - __cs); -23376: *__wp = __lc->_M_decimal_point; -23376: } -23376: -23376: -23376: -23376: -23376: if (__lc->_M_use_grouping -23376: && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9' -23376: && __cs[1] >= '0' && __cs[2] >= '0'))) -23376: { -23376: -23376: -23376: _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __len * 2)); -23376: -23376: streamsize __off = 0; -23376: if (__cs[0] == '-' || __cs[0] == '+') -23376: { -23376: __off = 1; -23376: __ws2[0] = __ws[0]; -23376: __len -= 1; -23376: } -23376: -23376: _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size, -23376: __lc->_M_thousands_sep, __wp, __ws2 + __off, -23376: __ws + __off, __len); -23376: __len += __off; -23376: -23376: __ws = __ws2; -23376: } -23376: -23376: -23376: const streamsize __w = __io.width(); -23376: if (__w > static_cast(__len)) -23376: { -23376: _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __w)); -23376: _M_pad(__fill, __w, __io, __ws3, __ws, __len); -23376: __ws = __ws3; -23376: } -23376: __io.width(0); -23376: -23376: -23376: -23376: return std::__write(__s, __ws, __len); -23376: } -23376: -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const -23376: { -23376: const ios_base::fmtflags __flags = __io.flags(); -23376: if ((__flags & ios_base::boolalpha) == 0) -23376: { -23376: const long __l = __v; -23376: __s = _M_insert_int(__s, __io, __fill, __l); -23376: } -23376: else -23376: { -23376: typedef __numpunct_cache<_CharT> __cache_type; -23376: __use_cache<__cache_type> __uc; -23376: const locale& __loc = __io._M_getloc(); -23376: const __cache_type* __lc = __uc(__loc); -23376: -23376: const _CharT* __name = __v ? __lc->_M_truename -23376: : __lc->_M_falsename; -23376: int __len = __v ? __lc->_M_truename_size -23376: : __lc->_M_falsename_size; -23376: -23376: const streamsize __w = __io.width(); -23376: if (__w > static_cast(__len)) -23376: { -23376: const streamsize __plen = __w - __len; -23376: _CharT* __ps -23376: = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) -23376: * __plen)); -23376: -23376: char_traits<_CharT>::assign(__ps, __plen, __fill); -23376: __io.width(0); -23376: -23376: if ((__flags & ios_base::adjustfield) == ios_base::left) -23376: { -23376: __s = std::__write(__s, __name, __len); -23376: __s = std::__write(__s, __ps, __plen); -23376: } -23376: else -23376: { -23376: __s = std::__write(__s, __ps, __plen); -23376: __s = std::__write(__s, __name, __len); -23376: } -23376: return __s; -23376: } -23376: __io.width(0); -23376: __s = std::__write(__s, __name, __len); -23376: } -23376: return __s; -23376: } -23376: -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const -23376: { return _M_insert_float(__s, __io, __fill, char(), __v); } -23376: # 1169 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, -23376: long double __v) const -23376: { return _M_insert_float(__s, __io, __fill, 'L', __v); } -23376: -23376: template -23376: _OutIter -23376: num_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, -23376: const void* __v) const -23376: { -23376: const ios_base::fmtflags __flags = __io.flags(); -23376: const ios_base::fmtflags __fmt = ~(ios_base::basefield -23376: | ios_base::uppercase); -23376: __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase)); -23376: -23376: typedef __gnu_cxx::__conditional_type<(sizeof(const void*) -23376: <= sizeof(unsigned long)), -23376: unsigned long, unsigned long long>::__type _UIntPtrType; -23376: -23376: __s = _M_insert_int(__s, __io, __fill, -23376: reinterpret_cast<_UIntPtrType>(__v)); -23376: __io.flags(__flags); -23376: return __s; -23376: } -23376: -23376: -23376: # 1206 "/usr/include/c++/8/bits/locale_facets.tcc" 3 -23376: template -23376: void -23376: __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill, -23376: _CharT* __news, const _CharT* __olds, -23376: streamsize __newlen, streamsize __oldlen) -23376: { -23376: const size_t __plen = static_cast(__newlen - __oldlen); -23376: const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield; -23376: -23376: -23376: if (__adjust == ios_base::left) -23376: { -23376: _Traits::copy(__news, __olds, __oldlen); -23376: _Traits::assign(__news + __oldlen, __plen, __fill); -23376: return; -23376: } -23376: -23376: size_t __mod = 0; -23376: if (__adjust == ios_base::internal) -23376: { -23376: -23376: -23376: -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: if (__ctype.widen('-') == __olds[0] -23376: || __ctype.widen('+') == __olds[0]) -23376: { -23376: __news[0] = __olds[0]; -23376: __mod = 1; -23376: ++__news; -23376: } -23376: else if (__ctype.widen('0') == __olds[0] -23376: && __oldlen > 1 -23376: && (__ctype.widen('x') == __olds[1] -23376: || __ctype.widen('X') == __olds[1])) -23376: { -23376: __news[0] = __olds[0]; -23376: __news[1] = __olds[1]; -23376: __mod = 2; -23376: __news += 2; -23376: } -23376: -23376: } -23376: _Traits::assign(__news, __plen, __fill); -23376: _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod); -23376: } -23376: -23376: template -23376: _CharT* -23376: __add_grouping(_CharT* __s, _CharT __sep, -23376: const char* __gbeg, size_t __gsize, -23376: const _CharT* __first, const _CharT* __last) -23376: { -23376: size_t __idx = 0; -23376: size_t __ctr = 0; -23376: -23376: while (__last - __first > __gbeg[__idx] -23376: && static_cast(__gbeg[__idx]) > 0 -23376: && __gbeg[__idx] != __gnu_cxx::__numeric_traits::__max) -23376: { -23376: __last -= __gbeg[__idx]; -23376: __idx < __gsize - 1 ? ++__idx : ++__ctr; -23376: } -23376: -23376: while (__first != __last) -23376: *__s++ = *__first++; -23376: -23376: while (__ctr--) -23376: { -23376: *__s++ = __sep; -23376: for (char __i = __gbeg[__idx]; __i > 0; --__i) -23376: *__s++ = *__first++; -23376: } -23376: -23376: while (__idx--) -23376: { -23376: *__s++ = __sep; -23376: for (char __i = __gbeg[__idx]; __i > 0; --__i) -23376: *__s++ = *__first++; -23376: } -23376: -23376: return __s; -23376: } -23376: -23376: -23376: -23376: -23376: extern template class __cxx11:: numpunct; -23376: extern template class __cxx11:: numpunct_byname; -23376: extern template class num_get; -23376: extern template class num_put; -23376: extern template class ctype_byname; -23376: -23376: extern template -23376: const ctype& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const numpunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const num_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const num_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: extern template class __cxx11:: numpunct; -23376: extern template class __cxx11:: numpunct_byname; -23376: extern template class num_get; -23376: extern template class num_put; -23376: extern template class ctype_byname; -23376: -23376: extern template -23376: const ctype& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const numpunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const num_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const num_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: -23376: -23376: } -23376: # 2656 "/usr/include/c++/8/bits/locale_facets.h" 2 3 -23376: # 38 "/usr/include/c++/8/bits/basic_ios.h" 2 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: inline const _Facet& -23376: __check_facet(const _Facet* __f) -23376: { -23376: if (!__f) -23376: __throw_bad_cast(); -23376: return *__f; -23376: } -23376: # 66 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: template -23376: class basic_ios : public ios_base -23376: { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef typename _Traits::pos_type pos_type; -23376: typedef typename _Traits::off_type off_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef ctype<_CharT> __ctype_type; -23376: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > -23376: __num_put_type; -23376: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > -23376: __num_get_type; -23376: -23376: -23376: -23376: protected: -23376: basic_ostream<_CharT, _Traits>* _M_tie; -23376: mutable char_type _M_fill; -23376: mutable bool _M_fill_init; -23376: basic_streambuf<_CharT, _Traits>* _M_streambuf; -23376: -23376: -23376: const __ctype_type* _M_ctype; -23376: -23376: const __num_put_type* _M_num_put; -23376: -23376: const __num_get_type* _M_num_get; -23376: -23376: public: -23376: # 117 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: explicit operator bool() const -23376: { return !this->fail(); } -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: operator!() const -23376: { return this->fail(); } -23376: # 136 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: iostate -23376: rdstate() const -23376: { return _M_streambuf_state; } -23376: # 147 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: void -23376: clear(iostate __state = goodbit); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: setstate(iostate __state) -23376: { this->clear(this->rdstate() | __state); } -23376: -23376: -23376: -23376: -23376: void -23376: _M_setstate(iostate __state) -23376: { -23376: -23376: -23376: _M_streambuf_state |= __state; -23376: if (this->exceptions() & __state) -23376: throw; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: good() const -23376: { return this->rdstate() == 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: eof() const -23376: { return (this->rdstate() & eofbit) != 0; } -23376: # 200 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: bool -23376: fail() const -23376: { return (this->rdstate() & (badbit | failbit)) != 0; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: bad() const -23376: { return (this->rdstate() & badbit) != 0; } -23376: # 221 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: iostate -23376: exceptions() const -23376: { return _M_exception; } -23376: # 256 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: void -23376: exceptions(iostate __except) -23376: { -23376: _M_exception = __except; -23376: this->clear(_M_streambuf_state); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: basic_ios(basic_streambuf<_CharT, _Traits>* __sb) -23376: : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0), -23376: _M_ctype(0), _M_num_put(0), _M_num_get(0) -23376: { this->init(__sb); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual -23376: ~basic_ios() { } -23376: # 294 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: basic_ostream<_CharT, _Traits>* -23376: tie() const -23376: { return _M_tie; } -23376: # 306 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: basic_ostream<_CharT, _Traits>* -23376: tie(basic_ostream<_CharT, _Traits>* __tiestr) -23376: { -23376: basic_ostream<_CharT, _Traits>* __old = _M_tie; -23376: _M_tie = __tiestr; -23376: return __old; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_streambuf<_CharT, _Traits>* -23376: rdbuf() const -23376: { return _M_streambuf; } -23376: # 346 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: basic_streambuf<_CharT, _Traits>* -23376: rdbuf(basic_streambuf<_CharT, _Traits>* __sb); -23376: # 360 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: basic_ios& -23376: copyfmt(const basic_ios& __rhs); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: char_type -23376: fill() const -23376: { -23376: if (!_M_fill_init) -23376: { -23376: _M_fill = this->widen(' '); -23376: _M_fill_init = true; -23376: } -23376: return _M_fill; -23376: } -23376: # 389 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: char_type -23376: fill(char_type __ch) -23376: { -23376: char_type __old = this->fill(); -23376: _M_fill = __ch; -23376: return __old; -23376: } -23376: # 409 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: locale -23376: imbue(const locale& __loc); -23376: # 429 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: char -23376: narrow(char_type __c, char __dfault) const -23376: { return __check_facet(_M_ctype).narrow(__c, __dfault); } -23376: # 448 "/usr/include/c++/8/bits/basic_ios.h" 3 -23376: char_type -23376: widen(char __c) const -23376: { return __check_facet(_M_ctype).widen(__c); } -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: basic_ios() -23376: : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false), -23376: _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0) -23376: { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: init(basic_streambuf<_CharT, _Traits>* __sb); -23376: -23376: -23376: basic_ios(const basic_ios&) = delete; -23376: basic_ios& operator=(const basic_ios&) = delete; -23376: -23376: void -23376: move(basic_ios& __rhs) -23376: { -23376: ios_base::_M_move(__rhs); -23376: _M_cache_locale(_M_ios_locale); -23376: this->tie(__rhs.tie(nullptr)); -23376: _M_fill = __rhs._M_fill; -23376: _M_fill_init = __rhs._M_fill_init; -23376: _M_streambuf = nullptr; -23376: } -23376: -23376: void -23376: move(basic_ios&& __rhs) -23376: { this->move(__rhs); } -23376: -23376: void -23376: swap(basic_ios& __rhs) noexcept -23376: { -23376: ios_base::_M_swap(__rhs); -23376: _M_cache_locale(_M_ios_locale); -23376: __rhs._M_cache_locale(__rhs._M_ios_locale); -23376: std::swap(_M_tie, __rhs._M_tie); -23376: std::swap(_M_fill, __rhs._M_fill); -23376: std::swap(_M_fill_init, __rhs._M_fill_init); -23376: } -23376: -23376: void -23376: set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb) -23376: { _M_streambuf = __sb; } -23376: -23376: -23376: void -23376: _M_cache_locale(const locale& __loc); -23376: }; -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/basic_ios.tcc" 1 3 -23376: # 33 "/usr/include/c++/8/bits/basic_ios.tcc" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/basic_ios.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: void -23376: basic_ios<_CharT, _Traits>::clear(iostate __state) -23376: { -23376: if (this->rdbuf()) -23376: _M_streambuf_state = __state; -23376: else -23376: _M_streambuf_state = __state | badbit; -23376: if (this->exceptions() & this->rdstate()) -23376: __throw_ios_failure(("basic_ios::clear")); -23376: } -23376: -23376: template -23376: basic_streambuf<_CharT, _Traits>* -23376: basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb) -23376: { -23376: basic_streambuf<_CharT, _Traits>* __old = _M_streambuf; -23376: _M_streambuf = __sb; -23376: this->clear(); -23376: return __old; -23376: } -23376: -23376: template -23376: basic_ios<_CharT, _Traits>& -23376: basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) -23376: { -23376: -23376: -23376: if (this != &__rhs) -23376: { -23376: -23376: -23376: -23376: -23376: _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ? -23376: _M_local_word : new _Words[__rhs._M_word_size]; -23376: -23376: -23376: _Callback_list* __cb = __rhs._M_callbacks; -23376: if (__cb) -23376: __cb->_M_add_reference(); -23376: _M_call_callbacks(erase_event); -23376: if (_M_word != _M_local_word) -23376: { -23376: delete [] _M_word; -23376: _M_word = 0; -23376: } -23376: _M_dispose_callbacks(); -23376: -23376: -23376: _M_callbacks = __cb; -23376: for (int __i = 0; __i < __rhs._M_word_size; ++__i) -23376: __words[__i] = __rhs._M_word[__i]; -23376: _M_word = __words; -23376: _M_word_size = __rhs._M_word_size; -23376: -23376: this->flags(__rhs.flags()); -23376: this->width(__rhs.width()); -23376: this->precision(__rhs.precision()); -23376: this->tie(__rhs.tie()); -23376: this->fill(__rhs.fill()); -23376: _M_ios_locale = __rhs.getloc(); -23376: _M_cache_locale(_M_ios_locale); -23376: -23376: _M_call_callbacks(copyfmt_event); -23376: -23376: -23376: this->exceptions(__rhs.exceptions()); -23376: } -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: locale -23376: basic_ios<_CharT, _Traits>::imbue(const locale& __loc) -23376: { -23376: locale __old(this->getloc()); -23376: ios_base::imbue(__loc); -23376: _M_cache_locale(__loc); -23376: if (this->rdbuf() != 0) -23376: this->rdbuf()->pubimbue(__loc); -23376: return __old; -23376: } -23376: -23376: template -23376: void -23376: basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb) -23376: { -23376: -23376: ios_base::_M_init(); -23376: -23376: -23376: _M_cache_locale(_M_ios_locale); -23376: # 146 "/usr/include/c++/8/bits/basic_ios.tcc" 3 -23376: _M_fill = _CharT(); -23376: _M_fill_init = false; -23376: -23376: _M_tie = 0; -23376: _M_exception = goodbit; -23376: _M_streambuf = __sb; -23376: _M_streambuf_state = __sb ? goodbit : badbit; -23376: } -23376: -23376: template -23376: void -23376: basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc) -23376: { -23376: if (__builtin_expect(has_facet<__ctype_type>(__loc), true)) -23376: _M_ctype = std::__addressof(use_facet<__ctype_type>(__loc)); -23376: else -23376: _M_ctype = 0; -23376: -23376: if (__builtin_expect(has_facet<__num_put_type>(__loc), true)) -23376: _M_num_put = std::__addressof(use_facet<__num_put_type>(__loc)); -23376: else -23376: _M_num_put = 0; -23376: -23376: if (__builtin_expect(has_facet<__num_get_type>(__loc), true)) -23376: _M_num_get = std::__addressof(use_facet<__num_get_type>(__loc)); -23376: else -23376: _M_num_get = 0; -23376: } -23376: -23376: -23376: -23376: -23376: extern template class basic_ios; -23376: -23376: -23376: extern template class basic_ios; -23376: -23376: -23376: -23376: -23376: } -23376: # 517 "/usr/include/c++/8/bits/basic_ios.h" 2 3 -23376: # 45 "/usr/include/c++/8/ios" 2 3 -23376: # 39 "/usr/include/c++/8/istream" 2 3 -23376: # 1 "/usr/include/c++/8/ostream" 1 3 -23376: # 36 "/usr/include/c++/8/ostream" 3 -23376: -23376: # 37 "/usr/include/c++/8/ostream" 3 -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 57 "/usr/include/c++/8/ostream" 3 -23376: template -23376: class basic_ostream : virtual public basic_ios<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef typename _Traits::pos_type pos_type; -23376: typedef typename _Traits::off_type off_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; -23376: typedef basic_ios<_CharT, _Traits> __ios_type; -23376: typedef basic_ostream<_CharT, _Traits> __ostream_type; -23376: typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > -23376: __num_put_type; -23376: typedef ctype<_CharT> __ctype_type; -23376: # 83 "/usr/include/c++/8/ostream" 3 -23376: explicit -23376: basic_ostream(__streambuf_type* __sb) -23376: { this->init(__sb); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual -23376: ~basic_ostream() { } -23376: -23376: -23376: class sentry; -23376: friend class sentry; -23376: # 107 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: operator<<(__ostream_type& (*__pf)(__ostream_type&)) -23376: { -23376: -23376: -23376: -23376: return __pf(*this); -23376: } -23376: -23376: __ostream_type& -23376: operator<<(__ios_type& (*__pf)(__ios_type&)) -23376: { -23376: -23376: -23376: -23376: __pf(*this); -23376: return *this; -23376: } -23376: -23376: __ostream_type& -23376: operator<<(ios_base& (*__pf) (ios_base&)) -23376: { -23376: -23376: -23376: -23376: __pf(*this); -23376: return *this; -23376: } -23376: # 165 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: operator<<(long __n) -23376: { return _M_insert(__n); } -23376: -23376: __ostream_type& -23376: operator<<(unsigned long __n) -23376: { return _M_insert(__n); } -23376: -23376: __ostream_type& -23376: operator<<(bool __n) -23376: { return _M_insert(__n); } -23376: -23376: __ostream_type& -23376: operator<<(short __n); -23376: -23376: __ostream_type& -23376: operator<<(unsigned short __n) -23376: { -23376: -23376: -23376: return _M_insert(static_cast(__n)); -23376: } -23376: -23376: __ostream_type& -23376: operator<<(int __n); -23376: -23376: __ostream_type& -23376: operator<<(unsigned int __n) -23376: { -23376: -23376: -23376: return _M_insert(static_cast(__n)); -23376: } -23376: -23376: -23376: __ostream_type& -23376: operator<<(long long __n) -23376: { return _M_insert(__n); } -23376: -23376: __ostream_type& -23376: operator<<(unsigned long long __n) -23376: { return _M_insert(__n); } -23376: # 219 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: operator<<(double __f) -23376: { return _M_insert(__f); } -23376: -23376: __ostream_type& -23376: operator<<(float __f) -23376: { -23376: -23376: -23376: return _M_insert(static_cast(__f)); -23376: } -23376: -23376: __ostream_type& -23376: operator<<(long double __f) -23376: { return _M_insert(__f); } -23376: # 244 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: operator<<(const void* __p) -23376: { return _M_insert(__p); } -23376: # 269 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: operator<<(__streambuf_type* __sb); -23376: # 302 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: put(char_type __c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: _M_write(const char_type* __s, streamsize __n) -23376: { -23376: const streamsize __put = this->rdbuf()->sputn(__s, __n); -23376: if (__put != __n) -23376: this->setstate(ios_base::badbit); -23376: } -23376: # 334 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: write(const char_type* __s, streamsize __n); -23376: # 347 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: flush(); -23376: # 357 "/usr/include/c++/8/ostream" 3 -23376: pos_type -23376: tellp(); -23376: # 368 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: seekp(pos_type); -23376: # 380 "/usr/include/c++/8/ostream" 3 -23376: __ostream_type& -23376: seekp(off_type, ios_base::seekdir); -23376: -23376: protected: -23376: basic_ostream() -23376: { this->init(0); } -23376: -23376: -23376: -23376: basic_ostream(basic_iostream<_CharT, _Traits>&) { } -23376: -23376: basic_ostream(const basic_ostream&) = delete; -23376: -23376: basic_ostream(basic_ostream&& __rhs) -23376: : __ios_type() -23376: { __ios_type::move(__rhs); } -23376: -23376: -23376: -23376: basic_ostream& operator=(const basic_ostream&) = delete; -23376: -23376: basic_ostream& -23376: operator=(basic_ostream&& __rhs) -23376: { -23376: swap(__rhs); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_ostream& __rhs) -23376: { __ios_type::swap(__rhs); } -23376: -23376: -23376: template -23376: __ostream_type& -23376: _M_insert(_ValueT __v); -23376: }; -23376: # 425 "/usr/include/c++/8/ostream" 3 -23376: template -23376: class basic_ostream<_CharT, _Traits>::sentry -23376: { -23376: -23376: bool _M_ok; -23376: basic_ostream<_CharT, _Traits>& _M_os; -23376: -23376: public: -23376: # 444 "/usr/include/c++/8/ostream" 3 -23376: explicit -23376: sentry(basic_ostream<_CharT, _Traits>& __os); -23376: # 454 "/usr/include/c++/8/ostream" 3 -23376: ~sentry() -23376: { -23376: -23376: if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception()) -23376: { -23376: -23376: if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1) -23376: _M_os.setstate(ios_base::badbit); -23376: } -23376: } -23376: # 473 "/usr/include/c++/8/ostream" 3 -23376: explicit -23376: -23376: operator bool() const -23376: { return _M_ok; } -23376: }; -23376: # 495 "/usr/include/c++/8/ostream" 3 -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c) -23376: { return __ostream_insert(__out, &__c, 1); } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __out, char __c) -23376: { return (__out << __out.widen(__c)); } -23376: -23376: -23376: template -23376: inline basic_ostream& -23376: operator<<(basic_ostream& __out, char __c) -23376: { return __ostream_insert(__out, &__c, 1); } -23376: -23376: -23376: template -23376: inline basic_ostream& -23376: operator<<(basic_ostream& __out, signed char __c) -23376: { return (__out << static_cast(__c)); } -23376: -23376: template -23376: inline basic_ostream& -23376: operator<<(basic_ostream& __out, unsigned char __c) -23376: { return (__out << static_cast(__c)); } -23376: # 537 "/usr/include/c++/8/ostream" 3 -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) -23376: { -23376: if (!__s) -23376: __out.setstate(ios_base::badbit); -23376: else -23376: __ostream_insert(__out, __s, -23376: static_cast(_Traits::length(__s))); -23376: return __out; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits> & -23376: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s); -23376: -23376: -23376: template -23376: inline basic_ostream& -23376: operator<<(basic_ostream& __out, const char* __s) -23376: { -23376: if (!__s) -23376: __out.setstate(ios_base::badbit); -23376: else -23376: __ostream_insert(__out, __s, -23376: static_cast(_Traits::length(__s))); -23376: return __out; -23376: } -23376: -23376: -23376: template -23376: inline basic_ostream& -23376: operator<<(basic_ostream& __out, const signed char* __s) -23376: { return (__out << reinterpret_cast(__s)); } -23376: -23376: template -23376: inline basic_ostream & -23376: operator<<(basic_ostream& __out, const unsigned char* __s) -23376: { return (__out << reinterpret_cast(__s)); } -23376: # 588 "/usr/include/c++/8/ostream" 3 -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: endl(basic_ostream<_CharT, _Traits>& __os) -23376: { return flush(__os.put(__os.widen('\n'))); } -23376: # 600 "/usr/include/c++/8/ostream" 3 -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: ends(basic_ostream<_CharT, _Traits>& __os) -23376: { return __os.put(_CharT()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: flush(basic_ostream<_CharT, _Traits>& __os) -23376: { return __os.flush(); } -23376: -23376: -23376: template -23376: basic_ostream<_Ch, _Up>& -23376: __is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*); -23376: -23376: template -23376: struct __is_convertible_to_basic_ostream_impl -23376: { -23376: using __ostream_type = void; -23376: }; -23376: -23376: template -23376: using __do_is_convertible_to_basic_ostream_impl = -23376: decltype(__is_convertible_to_basic_ostream_test -23376: (declval::type*>())); -23376: -23376: template -23376: struct __is_convertible_to_basic_ostream_impl -23376: <_Tp, -23376: __void_t<__do_is_convertible_to_basic_ostream_impl<_Tp>>> -23376: { -23376: using __ostream_type = -23376: __do_is_convertible_to_basic_ostream_impl<_Tp>; -23376: }; -23376: -23376: template -23376: struct __is_convertible_to_basic_ostream -23376: : __is_convertible_to_basic_ostream_impl<_Tp> -23376: { -23376: public: -23376: using type = __not_::__ostream_type>>; -23376: constexpr static bool value = type::value; -23376: }; -23376: -23376: template -23376: struct __is_insertable : false_type {}; -23376: -23376: template -23376: struct __is_insertable<_Ostream, _Tp, -23376: __void_t() -23376: << declval())>> -23376: : true_type {}; -23376: -23376: template -23376: using __rvalue_ostream_type = -23376: typename __is_convertible_to_basic_ostream< -23376: _Ostream>::__ostream_type; -23376: # 674 "/usr/include/c++/8/ostream" 3 -23376: template -23376: inline -23376: typename enable_if<__and_<__not_>, -23376: __is_convertible_to_basic_ostream<_Ostream>, -23376: __is_insertable< -23376: __rvalue_ostream_type<_Ostream>, -23376: const _Tp&>>::value, -23376: __rvalue_ostream_type<_Ostream>>::type -23376: operator<<(_Ostream&& __os, const _Tp& __x) -23376: { -23376: __rvalue_ostream_type<_Ostream> __ret_os = __os; -23376: __ret_os << __x; -23376: return __ret_os; -23376: } -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/ostream.tcc" 1 3 -23376: # 37 "/usr/include/c++/8/bits/ostream.tcc" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/ostream.tcc" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>::sentry:: -23376: sentry(basic_ostream<_CharT, _Traits>& __os) -23376: : _M_ok(false), _M_os(__os) -23376: { -23376: -23376: if (__os.tie() && __os.good()) -23376: __os.tie()->flush(); -23376: -23376: if (__os.good()) -23376: _M_ok = true; -23376: else -23376: __os.setstate(ios_base::failbit); -23376: } -23376: -23376: template -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: _M_insert(_ValueT __v) -23376: { -23376: sentry __cerb(*this); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const __num_put_type& __np = __check_facet(this->_M_num_put); -23376: if (__np.put(*this, *this, this->fill(), __v).failed()) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: operator<<(short __n) -23376: { -23376: -23376: -23376: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; -23376: if (__fmt == ios_base::oct || __fmt == ios_base::hex) -23376: return _M_insert(static_cast(static_cast(__n))); -23376: else -23376: return _M_insert(static_cast(__n)); -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: operator<<(int __n) -23376: { -23376: -23376: -23376: const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; -23376: if (__fmt == ios_base::oct || __fmt == ios_base::hex) -23376: return _M_insert(static_cast(static_cast(__n))); -23376: else -23376: return _M_insert(static_cast(__n)); -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: operator<<(__streambuf_type* __sbin) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this); -23376: if (__cerb && __sbin) -23376: { -23376: try -23376: { -23376: if (!__copy_streambufs(__sbin, this->rdbuf())) -23376: __err |= ios_base::failbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::failbit); } -23376: } -23376: else if (!__sbin) -23376: __err |= ios_base::badbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: put(char_type __c) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: sentry __cerb(*this); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __put = this->rdbuf()->sputc(__c); -23376: if (traits_type::eq_int_type(__put, traits_type::eof())) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: write(const _CharT* __s, streamsize __n) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: sentry __cerb(*this); -23376: if (__cerb) -23376: { -23376: try -23376: { _M_write(__s, __n); } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: flush() -23376: { -23376: -23376: -23376: -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: if (this->rdbuf() && this->rdbuf()->pubsync() == -1) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: typename basic_ostream<_CharT, _Traits>::pos_type -23376: basic_ostream<_CharT, _Traits>:: -23376: tellp() -23376: { -23376: pos_type __ret = pos_type(-1); -23376: try -23376: { -23376: if (!this->fail()) -23376: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: return __ret; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: seekp(pos_type __pos) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: if (!this->fail()) -23376: { -23376: -23376: -23376: const pos_type __p = this->rdbuf()->pubseekpos(__pos, -23376: ios_base::out); -23376: -23376: -23376: if (__p == pos_type(off_type(-1))) -23376: __err |= ios_base::failbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: basic_ostream<_CharT, _Traits>:: -23376: seekp(off_type __off, ios_base::seekdir __dir) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: if (!this->fail()) -23376: { -23376: -23376: -23376: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, -23376: ios_base::out); -23376: -23376: -23376: if (__p == pos_type(off_type(-1))) -23376: __err |= ios_base::failbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s) -23376: { -23376: if (!__s) -23376: __out.setstate(ios_base::badbit); -23376: else -23376: { -23376: -23376: -23376: const size_t __clen = char_traits::length(__s); -23376: try -23376: { -23376: struct __ptr_guard -23376: { -23376: _CharT *__p; -23376: __ptr_guard (_CharT *__ip): __p(__ip) { } -23376: ~__ptr_guard() { delete[] __p; } -23376: _CharT* __get() { return __p; } -23376: } __pg (new _CharT[__clen]); -23376: -23376: _CharT *__ws = __pg.__get(); -23376: for (size_t __i = 0; __i < __clen; ++__i) -23376: __ws[__i] = __out.widen(__s[__i]); -23376: __ostream_insert(__out, __ws, __clen); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __out._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __out._M_setstate(ios_base::badbit); } -23376: } -23376: return __out; -23376: } -23376: -23376: -23376: -23376: -23376: extern template class basic_ostream; -23376: extern template ostream& endl(ostream&); -23376: extern template ostream& ends(ostream&); -23376: extern template ostream& flush(ostream&); -23376: extern template ostream& operator<<(ostream&, char); -23376: extern template ostream& operator<<(ostream&, unsigned char); -23376: extern template ostream& operator<<(ostream&, signed char); -23376: extern template ostream& operator<<(ostream&, const char*); -23376: extern template ostream& operator<<(ostream&, const unsigned char*); -23376: extern template ostream& operator<<(ostream&, const signed char*); -23376: -23376: extern template ostream& ostream::_M_insert(long); -23376: extern template ostream& ostream::_M_insert(unsigned long); -23376: extern template ostream& ostream::_M_insert(bool); -23376: -23376: extern template ostream& ostream::_M_insert(long long); -23376: extern template ostream& ostream::_M_insert(unsigned long long); -23376: -23376: extern template ostream& ostream::_M_insert(double); -23376: extern template ostream& ostream::_M_insert(long double); -23376: extern template ostream& ostream::_M_insert(const void*); -23376: -23376: -23376: extern template class basic_ostream; -23376: extern template wostream& endl(wostream&); -23376: extern template wostream& ends(wostream&); -23376: extern template wostream& flush(wostream&); -23376: extern template wostream& operator<<(wostream&, wchar_t); -23376: extern template wostream& operator<<(wostream&, char); -23376: extern template wostream& operator<<(wostream&, const wchar_t*); -23376: extern template wostream& operator<<(wostream&, const char*); -23376: -23376: extern template wostream& wostream::_M_insert(long); -23376: extern template wostream& wostream::_M_insert(unsigned long); -23376: extern template wostream& wostream::_M_insert(bool); -23376: -23376: extern template wostream& wostream::_M_insert(long long); -23376: extern template wostream& wostream::_M_insert(unsigned long long); -23376: -23376: extern template wostream& wostream::_M_insert(double); -23376: extern template wostream& wostream::_M_insert(long double); -23376: extern template wostream& wostream::_M_insert(const void*); -23376: -23376: -23376: -23376: -23376: } -23376: # 694 "/usr/include/c++/8/ostream" 2 3 -23376: # 40 "/usr/include/c++/8/istream" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 57 "/usr/include/c++/8/istream" 3 -23376: template -23376: class basic_istream : virtual public basic_ios<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef typename _Traits::pos_type pos_type; -23376: typedef typename _Traits::off_type off_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; -23376: typedef basic_ios<_CharT, _Traits> __ios_type; -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> > -23376: __num_get_type; -23376: typedef ctype<_CharT> __ctype_type; -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: streamsize _M_gcount; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: basic_istream(__streambuf_type* __sb) -23376: : _M_gcount(streamsize(0)) -23376: { this->init(__sb); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual -23376: ~basic_istream() -23376: { _M_gcount = streamsize(0); } -23376: -23376: -23376: class sentry; -23376: friend class sentry; -23376: # 119 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: operator>>(__istream_type& (*__pf)(__istream_type&)) -23376: { return __pf(*this); } -23376: -23376: __istream_type& -23376: operator>>(__ios_type& (*__pf)(__ios_type&)) -23376: { -23376: __pf(*this); -23376: return *this; -23376: } -23376: -23376: __istream_type& -23376: operator>>(ios_base& (*__pf)(ios_base&)) -23376: { -23376: __pf(*this); -23376: return *this; -23376: } -23376: # 167 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: operator>>(bool& __n) -23376: { return _M_extract(__n); } -23376: -23376: __istream_type& -23376: operator>>(short& __n); -23376: -23376: __istream_type& -23376: operator>>(unsigned short& __n) -23376: { return _M_extract(__n); } -23376: -23376: __istream_type& -23376: operator>>(int& __n); -23376: -23376: __istream_type& -23376: operator>>(unsigned int& __n) -23376: { return _M_extract(__n); } -23376: -23376: __istream_type& -23376: operator>>(long& __n) -23376: { return _M_extract(__n); } -23376: -23376: __istream_type& -23376: operator>>(unsigned long& __n) -23376: { return _M_extract(__n); } -23376: -23376: -23376: __istream_type& -23376: operator>>(long long& __n) -23376: { return _M_extract(__n); } -23376: -23376: __istream_type& -23376: operator>>(unsigned long long& __n) -23376: { return _M_extract(__n); } -23376: # 213 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: operator>>(float& __f) -23376: { return _M_extract(__f); } -23376: -23376: __istream_type& -23376: operator>>(double& __f) -23376: { return _M_extract(__f); } -23376: -23376: __istream_type& -23376: operator>>(long double& __f) -23376: { return _M_extract(__f); } -23376: # 234 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: operator>>(void*& __p) -23376: { return _M_extract(__p); } -23376: # 258 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: operator>>(__streambuf_type* __sb); -23376: # 268 "/usr/include/c++/8/istream" 3 -23376: streamsize -23376: gcount() const -23376: { return _M_gcount; } -23376: # 301 "/usr/include/c++/8/istream" 3 -23376: int_type -23376: get(); -23376: # 315 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: get(char_type& __c); -23376: # 342 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: get(char_type* __s, streamsize __n, char_type __delim); -23376: # 353 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: get(char_type* __s, streamsize __n) -23376: { return this->get(__s, __n, this->widen('\n')); } -23376: # 376 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: get(__streambuf_type& __sb, char_type __delim); -23376: # 386 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: get(__streambuf_type& __sb) -23376: { return this->get(__sb, this->widen('\n')); } -23376: # 415 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: getline(char_type* __s, streamsize __n, char_type __delim); -23376: # 426 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: getline(char_type* __s, streamsize __n) -23376: { return this->getline(__s, __n, this->widen('\n')); } -23376: # 450 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: ignore(streamsize __n, int_type __delim); -23376: -23376: __istream_type& -23376: ignore(streamsize __n); -23376: -23376: __istream_type& -23376: ignore(); -23376: # 467 "/usr/include/c++/8/istream" 3 -23376: int_type -23376: peek(); -23376: # 485 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: read(char_type* __s, streamsize __n); -23376: # 504 "/usr/include/c++/8/istream" 3 -23376: streamsize -23376: readsome(char_type* __s, streamsize __n); -23376: # 521 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: putback(char_type __c); -23376: # 537 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: unget(); -23376: # 555 "/usr/include/c++/8/istream" 3 -23376: int -23376: sync(); -23376: # 570 "/usr/include/c++/8/istream" 3 -23376: pos_type -23376: tellg(); -23376: # 585 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: seekg(pos_type); -23376: # 601 "/usr/include/c++/8/istream" 3 -23376: __istream_type& -23376: seekg(off_type, ios_base::seekdir); -23376: -23376: -23376: protected: -23376: basic_istream() -23376: : _M_gcount(streamsize(0)) -23376: { this->init(0); } -23376: -23376: -23376: basic_istream(const basic_istream&) = delete; -23376: -23376: basic_istream(basic_istream&& __rhs) -23376: : __ios_type(), _M_gcount(__rhs._M_gcount) -23376: { -23376: __ios_type::move(__rhs); -23376: __rhs._M_gcount = 0; -23376: } -23376: -23376: -23376: -23376: basic_istream& operator=(const basic_istream&) = delete; -23376: -23376: basic_istream& -23376: operator=(basic_istream&& __rhs) -23376: { -23376: swap(__rhs); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_istream& __rhs) -23376: { -23376: __ios_type::swap(__rhs); -23376: std::swap(_M_gcount, __rhs._M_gcount); -23376: } -23376: -23376: -23376: template -23376: __istream_type& -23376: _M_extract(_ValueT& __v); -23376: }; -23376: -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: getline(char_type* __s, streamsize __n, char_type __delim); -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: ignore(streamsize __n); -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: ignore(streamsize __n, int_type __delim); -23376: -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: getline(char_type* __s, streamsize __n, char_type __delim); -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: ignore(streamsize __n); -23376: -23376: template<> -23376: basic_istream& -23376: basic_istream:: -23376: ignore(streamsize __n, int_type __delim); -23376: # 685 "/usr/include/c++/8/istream" 3 -23376: template -23376: class basic_istream<_CharT, _Traits>::sentry -23376: { -23376: -23376: bool _M_ok; -23376: -23376: public: -23376: -23376: typedef _Traits traits_type; -23376: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef typename __istream_type::__ctype_type __ctype_type; -23376: typedef typename _Traits::int_type __int_type; -23376: # 721 "/usr/include/c++/8/istream" 3 -23376: explicit -23376: sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false); -23376: # 732 "/usr/include/c++/8/istream" 3 -23376: explicit -23376: -23376: operator bool() const -23376: { return _M_ok; } -23376: }; -23376: # 750 "/usr/include/c++/8/istream" 3 -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c); -23376: -23376: template -23376: inline basic_istream& -23376: operator>>(basic_istream& __in, unsigned char& __c) -23376: { return (__in >> reinterpret_cast(__c)); } -23376: -23376: template -23376: inline basic_istream& -23376: operator>>(basic_istream& __in, signed char& __c) -23376: { return (__in >> reinterpret_cast(__c)); } -23376: # 792 "/usr/include/c++/8/istream" 3 -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s); -23376: -23376: -23376: template<> -23376: basic_istream& -23376: operator>>(basic_istream& __in, char* __s); -23376: -23376: template -23376: inline basic_istream& -23376: operator>>(basic_istream& __in, unsigned char* __s) -23376: { return (__in >> reinterpret_cast(__s)); } -23376: -23376: template -23376: inline basic_istream& -23376: operator>>(basic_istream& __in, signed char* __s) -23376: { return (__in >> reinterpret_cast(__s)); } -23376: # 823 "/usr/include/c++/8/istream" 3 -23376: template -23376: class basic_iostream -23376: : public basic_istream<_CharT, _Traits>, -23376: public basic_ostream<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef typename _Traits::pos_type pos_type; -23376: typedef typename _Traits::off_type off_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef basic_ostream<_CharT, _Traits> __ostream_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: basic_iostream(basic_streambuf<_CharT, _Traits>* __sb) -23376: : __istream_type(__sb), __ostream_type(__sb) { } -23376: -23376: -23376: -23376: -23376: virtual -23376: ~basic_iostream() { } -23376: -23376: protected: -23376: basic_iostream() -23376: : __istream_type(), __ostream_type() { } -23376: -23376: -23376: basic_iostream(const basic_iostream&) = delete; -23376: -23376: basic_iostream(basic_iostream&& __rhs) -23376: : __istream_type(std::move(__rhs)), __ostream_type(*this) -23376: { } -23376: -23376: -23376: -23376: basic_iostream& operator=(const basic_iostream&) = delete; -23376: -23376: basic_iostream& -23376: operator=(basic_iostream&& __rhs) -23376: { -23376: swap(__rhs); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_iostream& __rhs) -23376: { __istream_type::swap(__rhs); } -23376: -23376: }; -23376: # 906 "/usr/include/c++/8/istream" 3 -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: ws(basic_istream<_CharT, _Traits>& __is); -23376: -23376: -23376: template -23376: basic_istream<_Ch, _Up>& -23376: __is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*); -23376: -23376: template -23376: struct __is_convertible_to_basic_istream_impl -23376: { -23376: using __istream_type = void; -23376: }; -23376: -23376: template -23376: using __do_is_convertible_to_basic_istream_impl = -23376: decltype(__is_convertible_to_basic_istream_test -23376: (declval::type*>())); -23376: -23376: template -23376: struct __is_convertible_to_basic_istream_impl -23376: <_Tp, -23376: __void_t<__do_is_convertible_to_basic_istream_impl<_Tp>>> -23376: { -23376: using __istream_type = -23376: __do_is_convertible_to_basic_istream_impl<_Tp>; -23376: }; -23376: -23376: template -23376: struct __is_convertible_to_basic_istream -23376: : __is_convertible_to_basic_istream_impl<_Tp> -23376: { -23376: public: -23376: using type = __not_::__istream_type>>; -23376: constexpr static bool value = type::value; -23376: }; -23376: -23376: template -23376: struct __is_extractable : false_type {}; -23376: -23376: template -23376: struct __is_extractable<_Istream, _Tp, -23376: __void_t() -23376: >> declval<_Tp>())>> -23376: : true_type {}; -23376: -23376: template -23376: using __rvalue_istream_type = -23376: typename __is_convertible_to_basic_istream< -23376: _Istream>::__istream_type; -23376: # 972 "/usr/include/c++/8/istream" 3 -23376: template -23376: inline -23376: typename enable_if<__and_<__not_>, -23376: __is_convertible_to_basic_istream<_Istream>, -23376: __is_extractable< -23376: __rvalue_istream_type<_Istream>, -23376: _Tp&&>>::value, -23376: __rvalue_istream_type<_Istream>>::type -23376: operator>>(_Istream&& __is, _Tp&& __x) -23376: { -23376: __rvalue_istream_type<_Istream> __ret_is = __is; -23376: __ret_is >> std::forward<_Tp>(__x); -23376: return __ret_is; -23376: } -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/istream.tcc" 1 3 -23376: # 37 "/usr/include/c++/8/bits/istream.tcc" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/istream.tcc" 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: basic_istream<_CharT, _Traits>::sentry:: -23376: sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: if (__in.good()) -23376: try -23376: { -23376: if (__in.tie()) -23376: __in.tie()->flush(); -23376: if (!__noskip && bool(__in.flags() & ios_base::skipws)) -23376: { -23376: const __int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = __in.rdbuf(); -23376: __int_type __c = __sb->sgetc(); -23376: -23376: const __ctype_type& __ct = __check_facet(__in._M_ctype); -23376: while (!traits_type::eq_int_type(__c, __eof) -23376: && __ct.is(ctype_base::space, -23376: traits_type::to_char_type(__c))) -23376: __c = __sb->snextc(); -23376: -23376: -23376: -23376: -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __in._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __in._M_setstate(ios_base::badbit); } -23376: -23376: if (__in.good() && __err == ios_base::goodbit) -23376: _M_ok = true; -23376: else -23376: { -23376: __err |= ios_base::failbit; -23376: __in.setstate(__err); -23376: } -23376: } -23376: -23376: template -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: _M_extract(_ValueT& __v) -23376: { -23376: sentry __cerb(*this, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const __num_get_type& __ng = __check_facet(this->_M_num_get); -23376: __ng.get(*this, 0, *this, __err, __v); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: operator>>(short& __n) -23376: { -23376: -23376: -23376: sentry __cerb(*this, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: long __l; -23376: const __num_get_type& __ng = __check_facet(this->_M_num_get); -23376: __ng.get(*this, 0, *this, __err, __l); -23376: -23376: -23376: -23376: if (__l < __gnu_cxx::__numeric_traits::__min) -23376: { -23376: __err |= ios_base::failbit; -23376: __n = __gnu_cxx::__numeric_traits::__min; -23376: } -23376: else if (__l > __gnu_cxx::__numeric_traits::__max) -23376: { -23376: __err |= ios_base::failbit; -23376: __n = __gnu_cxx::__numeric_traits::__max; -23376: } -23376: else -23376: __n = short(__l); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: operator>>(int& __n) -23376: { -23376: -23376: -23376: sentry __cerb(*this, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: long __l; -23376: const __num_get_type& __ng = __check_facet(this->_M_num_get); -23376: __ng.get(*this, 0, *this, __err, __l); -23376: -23376: -23376: -23376: if (__l < __gnu_cxx::__numeric_traits::__min) -23376: { -23376: __err |= ios_base::failbit; -23376: __n = __gnu_cxx::__numeric_traits::__min; -23376: } -23376: else if (__l > __gnu_cxx::__numeric_traits::__max) -23376: { -23376: __err |= ios_base::failbit; -23376: __n = __gnu_cxx::__numeric_traits::__max; -23376: } -23376: else -23376: __n = int(__l); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: operator>>(__streambuf_type* __sbout) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, false); -23376: if (__cerb && __sbout) -23376: { -23376: try -23376: { -23376: bool __ineof; -23376: if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof)) -23376: __err |= ios_base::failbit; -23376: if (__ineof) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::failbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::failbit); } -23376: } -23376: else if (!__sbout) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: typename basic_istream<_CharT, _Traits>::int_type -23376: basic_istream<_CharT, _Traits>:: -23376: get(void) -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: int_type __c = __eof; -23376: _M_gcount = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: __c = this->rdbuf()->sbumpc(); -23376: -23376: if (!traits_type::eq_int_type(__c, __eof)) -23376: _M_gcount = 1; -23376: else -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: if (!_M_gcount) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return __c; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: get(char_type& __c) -23376: { -23376: _M_gcount = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: const int_type __cb = this->rdbuf()->sbumpc(); -23376: -23376: if (!traits_type::eq_int_type(__cb, traits_type::eof())) -23376: { -23376: _M_gcount = 1; -23376: __c = traits_type::to_char_type(__cb); -23376: } -23376: else -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: if (!_M_gcount) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: get(char_type* __s, streamsize __n, char_type __delim) -23376: { -23376: _M_gcount = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: const int_type __idelim = traits_type::to_int_type(__delim); -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: int_type __c = __sb->sgetc(); -23376: -23376: while (_M_gcount + 1 < __n -23376: && !traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __idelim)) -23376: { -23376: *__s++ = traits_type::to_char_type(__c); -23376: ++_M_gcount; -23376: __c = __sb->snextc(); -23376: } -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: -23376: -23376: if (__n > 0) -23376: *__s = char_type(); -23376: if (!_M_gcount) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: get(__streambuf_type& __sb, char_type __delim) -23376: { -23376: _M_gcount = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: const int_type __idelim = traits_type::to_int_type(__delim); -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __this_sb = this->rdbuf(); -23376: int_type __c = __this_sb->sgetc(); -23376: char_type __c2 = traits_type::to_char_type(__c); -23376: -23376: while (!traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __idelim) -23376: && !traits_type::eq_int_type(__sb.sputc(__c2), __eof)) -23376: { -23376: ++_M_gcount; -23376: __c = __this_sb->snextc(); -23376: __c2 = traits_type::to_char_type(__c); -23376: } -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: if (!_M_gcount) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: getline(char_type* __s, streamsize __n, char_type __delim) -23376: { -23376: _M_gcount = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: const int_type __idelim = traits_type::to_int_type(__delim); -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: int_type __c = __sb->sgetc(); -23376: -23376: while (_M_gcount + 1 < __n -23376: && !traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __idelim)) -23376: { -23376: *__s++ = traits_type::to_char_type(__c); -23376: __c = __sb->snextc(); -23376: ++_M_gcount; -23376: } -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: else -23376: { -23376: if (traits_type::eq_int_type(__c, __idelim)) -23376: { -23376: __sb->sbumpc(); -23376: ++_M_gcount; -23376: } -23376: else -23376: __err |= ios_base::failbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: -23376: -23376: if (__n > 0) -23376: *__s = char_type(); -23376: if (!_M_gcount) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: this->setstate(__err); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: ignore(void) -23376: { -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: -23376: if (traits_type::eq_int_type(__sb->sbumpc(), __eof)) -23376: __err |= ios_base::eofbit; -23376: else -23376: _M_gcount = 1; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: ignore(streamsize __n) -23376: { -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb && __n > 0) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: int_type __c = __sb->sgetc(); -23376: # 521 "/usr/include/c++/8/bits/istream.tcc" 3 -23376: bool __large_ignore = false; -23376: while (true) -23376: { -23376: while (_M_gcount < __n -23376: && !traits_type::eq_int_type(__c, __eof)) -23376: { -23376: ++_M_gcount; -23376: __c = __sb->snextc(); -23376: } -23376: if (__n == __gnu_cxx::__numeric_traits::__max -23376: && !traits_type::eq_int_type(__c, __eof)) -23376: { -23376: _M_gcount = -23376: __gnu_cxx::__numeric_traits::__min; -23376: __large_ignore = true; -23376: } -23376: else -23376: break; -23376: } -23376: -23376: if (__large_ignore) -23376: _M_gcount = __gnu_cxx::__numeric_traits::__max; -23376: -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: ignore(streamsize __n, int_type __delim) -23376: { -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb && __n > 0) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: int_type __c = __sb->sgetc(); -23376: -23376: -23376: bool __large_ignore = false; -23376: while (true) -23376: { -23376: while (_M_gcount < __n -23376: && !traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __delim)) -23376: { -23376: ++_M_gcount; -23376: __c = __sb->snextc(); -23376: } -23376: if (__n == __gnu_cxx::__numeric_traits::__max -23376: && !traits_type::eq_int_type(__c, __eof) -23376: && !traits_type::eq_int_type(__c, __delim)) -23376: { -23376: _M_gcount = -23376: __gnu_cxx::__numeric_traits::__min; -23376: __large_ignore = true; -23376: } -23376: else -23376: break; -23376: } -23376: -23376: if (__large_ignore) -23376: _M_gcount = __gnu_cxx::__numeric_traits::__max; -23376: -23376: if (traits_type::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: else if (traits_type::eq_int_type(__c, __delim)) -23376: { -23376: if (_M_gcount -23376: < __gnu_cxx::__numeric_traits::__max) -23376: ++_M_gcount; -23376: __sb->sbumpc(); -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: typename basic_istream<_CharT, _Traits>::int_type -23376: basic_istream<_CharT, _Traits>:: -23376: peek(void) -23376: { -23376: int_type __c = traits_type::eof(); -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: __c = this->rdbuf()->sgetc(); -23376: if (traits_type::eq_int_type(__c, traits_type::eof())) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return __c; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: read(char_type* __s, streamsize __n) -23376: { -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: _M_gcount = this->rdbuf()->sgetn(__s, __n); -23376: if (_M_gcount != __n) -23376: __err |= (ios_base::eofbit | ios_base::failbit); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: streamsize -23376: basic_istream<_CharT, _Traits>:: -23376: readsome(char_type* __s, streamsize __n) -23376: { -23376: _M_gcount = 0; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: -23376: const streamsize __num = this->rdbuf()->in_avail(); -23376: if (__num > 0) -23376: _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); -23376: else if (__num == -1) -23376: __err |= ios_base::eofbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return _M_gcount; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: putback(char_type __c) -23376: { -23376: -23376: -23376: _M_gcount = 0; -23376: -23376: this->clear(this->rdstate() & ~ios_base::eofbit); -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: if (!__sb -23376: || traits_type::eq_int_type(__sb->sputbackc(__c), __eof)) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: unget(void) -23376: { -23376: -23376: -23376: _M_gcount = 0; -23376: -23376: this->clear(this->rdstate() & ~ios_base::eofbit); -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const int_type __eof = traits_type::eof(); -23376: __streambuf_type* __sb = this->rdbuf(); -23376: if (!__sb -23376: || traits_type::eq_int_type(__sb->sungetc(), __eof)) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: int -23376: basic_istream<_CharT, _Traits>:: -23376: sync(void) -23376: { -23376: -23376: -23376: int __ret = -1; -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: __streambuf_type* __sb = this->rdbuf(); -23376: if (__sb) -23376: { -23376: if (__sb->pubsync() == -1) -23376: __err |= ios_base::badbit; -23376: else -23376: __ret = 0; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename basic_istream<_CharT, _Traits>::pos_type -23376: basic_istream<_CharT, _Traits>:: -23376: tellg(void) -23376: { -23376: -23376: -23376: pos_type __ret = pos_type(-1); -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: if (!this->fail()) -23376: __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, -23376: ios_base::in); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: seekg(pos_type __pos) -23376: { -23376: -23376: -23376: -23376: this->clear(this->rdstate() & ~ios_base::eofbit); -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: if (!this->fail()) -23376: { -23376: -23376: const pos_type __p = this->rdbuf()->pubseekpos(__pos, -23376: ios_base::in); -23376: -23376: -23376: if (__p == pos_type(off_type(-1))) -23376: __err |= ios_base::failbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: basic_istream<_CharT, _Traits>:: -23376: seekg(off_type __off, ios_base::seekdir __dir) -23376: { -23376: -23376: -23376: -23376: this->clear(this->rdstate() & ~ios_base::eofbit); -23376: sentry __cerb(*this, true); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: if (!this->fail()) -23376: { -23376: -23376: const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir, -23376: ios_base::in); -23376: -23376: -23376: if (__p == pos_type(off_type(-1))) -23376: __err |= ios_base::failbit; -23376: } -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: this->_M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { this->_M_setstate(ios_base::badbit); } -23376: if (__err) -23376: this->setstate(__err); -23376: } -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c) -23376: { -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef typename __istream_type::int_type __int_type; -23376: -23376: typename __istream_type::sentry __cerb(__in, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: const __int_type __cb = __in.rdbuf()->sbumpc(); -23376: if (!_Traits::eq_int_type(__cb, _Traits::eof())) -23376: __c = _Traits::to_char_type(__cb); -23376: else -23376: __err |= (ios_base::eofbit | ios_base::failbit); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __in._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __in._M_setstate(ios_base::badbit); } -23376: if (__err) -23376: __in.setstate(__err); -23376: } -23376: return __in; -23376: } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s) -23376: { -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; -23376: typedef typename _Traits::int_type int_type; -23376: typedef _CharT char_type; -23376: typedef ctype<_CharT> __ctype_type; -23376: -23376: streamsize __extracted = 0; -23376: ios_base::iostate __err = ios_base::goodbit; -23376: typename __istream_type::sentry __cerb(__in, false); -23376: if (__cerb) -23376: { -23376: try -23376: { -23376: -23376: streamsize __num = __in.width(); -23376: if (__num <= 0) -23376: __num = __gnu_cxx::__numeric_traits::__max; -23376: -23376: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); -23376: -23376: const int_type __eof = _Traits::eof(); -23376: __streambuf_type* __sb = __in.rdbuf(); -23376: int_type __c = __sb->sgetc(); -23376: -23376: while (__extracted < __num - 1 -23376: && !_Traits::eq_int_type(__c, __eof) -23376: && !__ct.is(ctype_base::space, -23376: _Traits::to_char_type(__c))) -23376: { -23376: *__s++ = _Traits::to_char_type(__c); -23376: ++__extracted; -23376: __c = __sb->snextc(); -23376: } -23376: if (_Traits::eq_int_type(__c, __eof)) -23376: __err |= ios_base::eofbit; -23376: -23376: -23376: -23376: *__s = char_type(); -23376: __in.width(0); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __in._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __in._M_setstate(ios_base::badbit); } -23376: } -23376: if (!__extracted) -23376: __err |= ios_base::failbit; -23376: if (__err) -23376: __in.setstate(__err); -23376: return __in; -23376: } -23376: -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: ws(basic_istream<_CharT, _Traits>& __in) -23376: { -23376: typedef basic_istream<_CharT, _Traits> __istream_type; -23376: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; -23376: typedef typename __istream_type::int_type __int_type; -23376: typedef ctype<_CharT> __ctype_type; -23376: -23376: const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); -23376: const __int_type __eof = _Traits::eof(); -23376: __streambuf_type* __sb = __in.rdbuf(); -23376: __int_type __c = __sb->sgetc(); -23376: -23376: while (!_Traits::eq_int_type(__c, __eof) -23376: && __ct.is(ctype_base::space, _Traits::to_char_type(__c))) -23376: __c = __sb->snextc(); -23376: -23376: if (_Traits::eq_int_type(__c, __eof)) -23376: __in.setstate(ios_base::eofbit); -23376: return __in; -23376: } -23376: -23376: -23376: -23376: -23376: extern template class basic_istream; -23376: extern template istream& ws(istream&); -23376: extern template istream& operator>>(istream&, char&); -23376: extern template istream& operator>>(istream&, char*); -23376: extern template istream& operator>>(istream&, unsigned char&); -23376: extern template istream& operator>>(istream&, signed char&); -23376: extern template istream& operator>>(istream&, unsigned char*); -23376: extern template istream& operator>>(istream&, signed char*); -23376: -23376: extern template istream& istream::_M_extract(unsigned short&); -23376: extern template istream& istream::_M_extract(unsigned int&); -23376: extern template istream& istream::_M_extract(long&); -23376: extern template istream& istream::_M_extract(unsigned long&); -23376: extern template istream& istream::_M_extract(bool&); -23376: -23376: extern template istream& istream::_M_extract(long long&); -23376: extern template istream& istream::_M_extract(unsigned long long&); -23376: -23376: extern template istream& istream::_M_extract(float&); -23376: extern template istream& istream::_M_extract(double&); -23376: extern template istream& istream::_M_extract(long double&); -23376: extern template istream& istream::_M_extract(void*&); -23376: -23376: extern template class basic_iostream; -23376: -23376: -23376: extern template class basic_istream; -23376: extern template wistream& ws(wistream&); -23376: extern template wistream& operator>>(wistream&, wchar_t&); -23376: extern template wistream& operator>>(wistream&, wchar_t*); -23376: -23376: extern template wistream& wistream::_M_extract(unsigned short&); -23376: extern template wistream& wistream::_M_extract(unsigned int&); -23376: extern template wistream& wistream::_M_extract(long&); -23376: extern template wistream& wistream::_M_extract(unsigned long&); -23376: extern template wistream& wistream::_M_extract(bool&); -23376: -23376: extern template wistream& wistream::_M_extract(long long&); -23376: extern template wistream& wistream::_M_extract(unsigned long long&); -23376: -23376: extern template wistream& wistream::_M_extract(float&); -23376: extern template wistream& wistream::_M_extract(double&); -23376: extern template wistream& wistream::_M_extract(long double&); -23376: extern template wistream& wistream::_M_extract(void*&); -23376: -23376: extern template class basic_iostream; -23376: -23376: -23376: -23376: -23376: } -23376: # 992 "/usr/include/c++/8/istream" 2 3 -23376: # 31 "../../src/globals_inlines.hh" 2 -23376: -23376: # 1 "/usr/include/c++/8/cctype" 1 3 -23376: # 39 "/usr/include/c++/8/cctype" 3 -23376: -23376: # 40 "/usr/include/c++/8/cctype" 3 -23376: # 33 "../../src/globals_inlines.hh" 2 -23376: -23376: -23376: -23376: # 35 "../../src/globals_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline dimension_type -23376: not_a_dimension() { -23376: return std::numeric_limits::max(); -23376: } -23376: -23376: inline int32_t -23376: hash_code_from_dimension(dimension_type dim) { -23376: const dimension_type divisor = 1U << (32 - 1); -23376: dim = dim % divisor; -23376: return static_cast(dim); -23376: } -23376: -23376: inline const Weightwatch_Traits::Threshold& -23376: Weightwatch_Traits::get() { -23376: return weight; -23376: } -23376: -23376: inline bool -23376: Weightwatch_Traits::less_than(const Threshold& a, const Threshold& b) { -23376: return b - a < (1ULL << (((sizeof(Threshold)) * static_cast(8)) - 1)); -23376: } -23376: -23376: inline Weightwatch_Traits::Delta -23376: Weightwatch_Traits::compute_delta(unsigned long unscaled, unsigned scale) { -23376: if ((std::numeric_limits::max() >> scale) < unscaled) { -23376: throw std::invalid_argument("PPL::Weightwatch_Traits::" -23376: "compute_delta(u, s):\n" -23376: "values of u and s cause wrap around."); -23376: } -23376: return static_cast(unscaled) << scale; -23376: } -23376: -23376: inline void -23376: Weightwatch_Traits::from_delta(Threshold& threshold, const Delta& delta) { -23376: threshold = weight + delta; -23376: } -23376: -23376: inline void -23376: maybe_abandon() { -23376: -23376: -23376: -23376: -23376: -23376: if (Weightwatch_Traits::check_function != 0) { -23376: Weightwatch_Traits::check_function(); -23376: } -23376: if (const Throwable* const p = abandon_expensive_computations) { -23376: p->throw_me(); -23376: } -23376: } -23376: -23376: inline dimension_type -23376: compute_capacity(const dimension_type requested_size, -23376: const dimension_type maximum_size) { -23376: -23376: # 92 "../../src/globals_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 92 "../../src/globals_inlines.hh" -23376: ; -23376: -23376: return (requested_size < maximum_size/2) -23376: ? (2*(requested_size + 1)) -23376: : maximum_size; -23376: -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline typename -23376: Enable_If::value, memory_size_type>::type -23376: external_memory_in_bytes(const T&) { -23376: return 0; -23376: } -23376: -23376: template -23376: inline typename -23376: Enable_If::value, memory_size_type>::type -23376: total_memory_in_bytes(const T&) { -23376: return sizeof(T); -23376: } -23376: -23376: inline memory_size_type -23376: external_memory_in_bytes(const mpz_class& x) { -23376: return static_cast(x.get_mpz_t()[0]._mp_alloc) -23376: * 4; -23376: } -23376: -23376: inline memory_size_type -23376: total_memory_in_bytes(const mpz_class& x) { -23376: return sizeof(x) + external_memory_in_bytes(x); -23376: } -23376: -23376: inline memory_size_type -23376: external_memory_in_bytes(const mpq_class& x) { -23376: return external_memory_in_bytes(x.get_num()) -23376: + external_memory_in_bytes(x.get_den()); -23376: } -23376: -23376: inline memory_size_type -23376: total_memory_in_bytes(const mpq_class& x) { -23376: return sizeof(x) + external_memory_in_bytes(x); -23376: } -23376: -23376: inline void -23376: ascii_dump(std::ostream& s, Representation r) { -23376: if (r == DENSE) { -23376: s << "DENSE"; -23376: } -23376: else { -23376: s << "SPARSE"; -23376: } -23376: } -23376: -23376: inline bool -23376: ascii_load(std::istream& is, Representation& r) { -23376: std::string s; -23376: if (!(is >> s)) { -23376: return false; -23376: } -23376: -23376: if (s == "DENSE") { -23376: r = DENSE; -23376: return true; -23376: } -23376: if (s == "SPARSE") { -23376: r = SPARSE; -23376: return true; -23376: } -23376: return false; -23376: } -23376: -23376: inline bool -23376: is_space(char c) { -23376: return isspace(c) != 0; -23376: } -23376: -23376: template -23376: inline typename RA_Container::iterator -23376: nth_iter(RA_Container& cont, dimension_type n) { -23376: typedef typename RA_Container::difference_type diff_t; -23376: return cont.begin() + static_cast(n); -23376: } -23376: -23376: template -23376: inline typename RA_Container::const_iterator -23376: nth_iter(const RA_Container& cont, dimension_type n) { -23376: typedef typename RA_Container::difference_type diff_t; -23376: return cont.begin() + static_cast(n); -23376: } -23376: -23376: inline dimension_type -23376: least_significant_one_mask(const dimension_type i) { -23376: return i & (~i + 1U); -23376: } -23376: -23376: } -23376: # 570 "../../src/globals_defs.hh" 2 -23376: # 28 "../../src/Variable_inlines.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline dimension_type -23376: Variable::max_space_dimension() { -23376: return not_a_dimension() - 1; -23376: } -23376: -23376: inline -23376: Variable::Variable(dimension_type i) -23376: : varid((i < max_space_dimension()) -23376: ? i -23376: : (throw std::length_error("PPL::Variable::Variable(i):\n" -23376: "i exceeds the maximum allowed " -23376: "variable identifier."), i)) { -23376: } -23376: -23376: inline dimension_type -23376: Variable::id() const { -23376: return varid; -23376: } -23376: -23376: inline dimension_type -23376: Variable::space_dimension() const { -23376: return varid + 1; -23376: } -23376: -23376: inline memory_size_type -23376: Variable::external_memory_in_bytes() const { -23376: return 0; -23376: } -23376: -23376: inline memory_size_type -23376: Variable::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline void -23376: Variable::set_output_function(output_function_type* p) { -23376: current_output_function = p; -23376: } -23376: -23376: inline Variable::output_function_type* -23376: Variable::get_output_function() { -23376: return current_output_function; -23376: } -23376: -23376: -23376: inline bool -23376: less(const Variable v, const Variable w) { -23376: return v.id() < w.id(); -23376: } -23376: -23376: inline bool -23376: Variable::Compare::operator()(const Variable x, const Variable y) const { -23376: return less(x, y); -23376: } -23376: -23376: inline void -23376: Variable::m_swap(Variable& v) { -23376: using std::swap; -23376: swap(varid, v.varid); -23376: } -23376: -23376: inline void -23376: swap(Variable& x, Variable& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 156 "../../src/Variable_defs.hh" 2 -23376: # 28 "../../src/Float_inlines.hh" 2 -23376: # 1 "../../src/Linear_Form_defs.hh" 1 -23376: # 28 "../../src/Linear_Form_defs.hh" -23376: # 1 "../../src/Linear_Expression_types.hh" 1 -23376: # 16 "../../src/Linear_Expression_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Linear_Expression; -23376: -23376: } -23376: # 29 "../../src/Linear_Form_defs.hh" 2 -23376: -23376: # 1 "../../src/Box_types.hh" 1 -23376: # 16 "../../src/Box_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Box; -23376: -23376: class Box_Helpers; -23376: -23376: } -23376: # 31 "../../src/Linear_Form_defs.hh" 2 -23376: # 1 "../../src/Float_defs.hh" 1 -23376: # 32 "../../src/Linear_Form_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/vector" 1 3 -23376: # 58 "/usr/include/c++/8/vector" 3 -23376: -23376: # 59 "/usr/include/c++/8/vector" 3 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_uninitialized.h" 1 3 -23376: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: -23376: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: struct __uninitialized_copy -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_copy(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result) -23376: { -23376: _ForwardIterator __cur = __result; -23376: try -23376: { -23376: for (; __first != __last; ++__first, (void)++__cur) -23376: std::_Construct(std::__addressof(*__cur), *__first); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_copy -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_copy(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result) -23376: { return std::copy(__first, __last, __result); } -23376: }; -23376: # 113 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: template -23376: inline _ForwardIterator -23376: uninitialized_copy(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result) -23376: { -23376: typedef typename iterator_traits<_InputIterator>::value_type -23376: _ValueType1; -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType2; -23376: -23376: -23376: -23376: -23376: typedef typename iterator_traits<_InputIterator>::reference _RefType1; -23376: typedef typename iterator_traits<_ForwardIterator>::reference _RefType2; -23376: const bool __assignable = is_assignable<_RefType2, _RefType1>::value; -23376: -23376: -23376: return std::__uninitialized_copy<__is_trivial(_ValueType1) -23376: && __is_trivial(_ValueType2) -23376: && __assignable>:: -23376: __uninit_copy(__first, __last, __result); -23376: } -23376: -23376: -23376: template -23376: struct __uninitialized_fill -23376: { -23376: template -23376: static void -23376: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __x) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __cur != __last; ++__cur) -23376: std::_Construct(std::__addressof(*__cur), __x); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_fill -23376: { -23376: template -23376: static void -23376: __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __x) -23376: { std::fill(__first, __last, __x); } -23376: }; -23376: # 179 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: template -23376: inline void -23376: uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __x) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: -23376: -23376: -23376: const bool __assignable = is_copy_assignable<_ValueType>::value; -23376: -23376: -23376: std::__uninitialized_fill<__is_trivial(_ValueType) && __assignable>:: -23376: __uninit_fill(__first, __last, __x); -23376: } -23376: -23376: -23376: template -23376: struct __uninitialized_fill_n -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_fill_n(_ForwardIterator __first, _Size __n, -23376: const _Tp& __x) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __n > 0; --__n, (void) ++__cur) -23376: std::_Construct(std::__addressof(*__cur), __x); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_fill_n -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_fill_n(_ForwardIterator __first, _Size __n, -23376: const _Tp& __x) -23376: { return std::fill_n(__first, __n, __x); } -23376: }; -23376: # 242 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: template -23376: inline _ForwardIterator -23376: uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: -23376: -23376: -23376: const bool __assignable = is_copy_assignable<_ValueType>::value; -23376: -23376: return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>:: -23376: __uninit_fill_n(__first, __n, __x); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result, _Allocator& __alloc) -23376: { -23376: _ForwardIterator __cur = __result; -23376: try -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __first != __last; ++__first, (void)++__cur) -23376: __traits::construct(__alloc, std::__addressof(*__cur), *__first); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __cur, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result, allocator<_Tp>&) -23376: { return std::uninitialized_copy(__first, __last, __result); } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_move_a(_InputIterator __first, _InputIterator __last, -23376: _ForwardIterator __result, _Allocator& __alloc) -23376: { -23376: return std::__uninitialized_copy_a(std::make_move_iterator(__first), -23376: std::make_move_iterator(__last), -23376: __result, __alloc); -23376: } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_move_if_noexcept_a(_InputIterator __first, -23376: _InputIterator __last, -23376: _ForwardIterator __result, -23376: _Allocator& __alloc) -23376: { -23376: return std::__uninitialized_copy_a -23376: (std::__make_move_if_noexcept_iterator(__first), -23376: std::__make_move_if_noexcept_iterator(__last), __result, __alloc); -23376: } -23376: -23376: template -23376: void -23376: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __x, _Allocator& __alloc) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __cur != __last; ++__cur) -23376: __traits::construct(__alloc, std::__addressof(*__cur), __x); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, -23376: const _Tp& __x, allocator<_Tp2>&) -23376: { std::uninitialized_fill(__first, __last, __x); } -23376: -23376: template -23376: _ForwardIterator -23376: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, -23376: const _Tp& __x, _Allocator& __alloc) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __n > 0; --__n, (void) ++__cur) -23376: __traits::construct(__alloc, std::__addressof(*__cur), __x); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, -23376: const _Tp& __x, allocator<_Tp2>&) -23376: { return std::uninitialized_fill_n(__first, __n, __x); } -23376: # 378 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_copy_move(_InputIterator1 __first1, -23376: _InputIterator1 __last1, -23376: _InputIterator2 __first2, -23376: _InputIterator2 __last2, -23376: _ForwardIterator __result, -23376: _Allocator& __alloc) -23376: { -23376: _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1, -23376: __result, -23376: __alloc); -23376: try -23376: { -23376: return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __mid, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_move_copy(_InputIterator1 __first1, -23376: _InputIterator1 __last1, -23376: _InputIterator2 __first2, -23376: _InputIterator2 __last2, -23376: _ForwardIterator __result, -23376: _Allocator& __alloc) -23376: { -23376: _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1, -23376: __result, -23376: __alloc); -23376: try -23376: { -23376: return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __mid, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid, -23376: const _Tp& __x, _InputIterator __first, -23376: _InputIterator __last, _Allocator& __alloc) -23376: { -23376: std::__uninitialized_fill_a(__result, __mid, __x, __alloc); -23376: try -23376: { -23376: return std::__uninitialized_move_a(__first, __last, __mid, __alloc); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __mid, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1, -23376: _ForwardIterator __first2, -23376: _ForwardIterator __last2, const _Tp& __x, -23376: _Allocator& __alloc) -23376: { -23376: _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1, -23376: __first2, -23376: __alloc); -23376: try -23376: { -23376: std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first2, __mid2, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __uninitialized_default_1 -23376: { -23376: template -23376: static void -23376: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __cur != __last; ++__cur) -23376: std::_Construct(std::__addressof(*__cur)); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_default_1 -23376: { -23376: template -23376: static void -23376: __uninit_default(_ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: std::fill(__first, __last, _ValueType()); -23376: } -23376: }; -23376: -23376: template -23376: struct __uninitialized_default_n_1 -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_default_n(_ForwardIterator __first, _Size __n) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __n > 0; --__n, (void) ++__cur) -23376: std::_Construct(std::__addressof(*__cur)); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_default_n_1 -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_default_n(_ForwardIterator __first, _Size __n) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: return std::fill_n(__first, __n, _ValueType()); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: __uninitialized_default(_ForwardIterator __first, -23376: _ForwardIterator __last) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: const bool __assignable = is_copy_assignable<_ValueType>::value; -23376: -23376: std::__uninitialized_default_1<__is_trivial(_ValueType) -23376: && __assignable>:: -23376: __uninit_default(__first, __last); -23376: } -23376: -23376: -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_default_n(_ForwardIterator __first, _Size __n) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: const bool __assignable = is_copy_assignable<_ValueType>::value; -23376: -23376: return __uninitialized_default_n_1<__is_trivial(_ValueType) -23376: && __assignable>:: -23376: __uninit_default_n(__first, __n); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: __uninitialized_default_a(_ForwardIterator __first, -23376: _ForwardIterator __last, -23376: _Allocator& __alloc) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __cur != __last; ++__cur) -23376: __traits::construct(__alloc, std::__addressof(*__cur)); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: __uninitialized_default_a(_ForwardIterator __first, -23376: _ForwardIterator __last, -23376: allocator<_Tp>&) -23376: { std::__uninitialized_default(__first, __last); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: _ForwardIterator -23376: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, -23376: _Allocator& __alloc) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; -23376: for (; __n > 0; --__n, (void) ++__cur) -23376: __traits::construct(__alloc, std::__addressof(*__cur)); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur, __alloc); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, -23376: allocator<_Tp>&) -23376: { return std::__uninitialized_default_n(__first, __n); } -23376: -23376: template -23376: struct __uninitialized_default_novalue_1 -23376: { -23376: template -23376: static void -23376: __uninit_default_novalue(_ForwardIterator __first, -23376: _ForwardIterator __last) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __cur != __last; ++__cur) -23376: std::_Construct_novalue(std::__addressof(*__cur)); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_default_novalue_1 -23376: { -23376: template -23376: static void -23376: __uninit_default_novalue(_ForwardIterator __first, -23376: _ForwardIterator __last) -23376: { -23376: } -23376: }; -23376: -23376: template -23376: struct __uninitialized_default_novalue_n_1 -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) -23376: { -23376: _ForwardIterator __cur = __first; -23376: try -23376: { -23376: for (; __n > 0; --__n, (void) ++__cur) -23376: std::_Construct_novalue(std::__addressof(*__cur)); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__first, __cur); -23376: throw; -23376: } -23376: } -23376: }; -23376: -23376: template<> -23376: struct __uninitialized_default_novalue_n_1 -23376: { -23376: template -23376: static _ForwardIterator -23376: __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) -23376: { return std::next(__first, __n); } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: __uninitialized_default_novalue(_ForwardIterator __first, -23376: _ForwardIterator __last) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: std::__uninitialized_default_novalue_1< -23376: is_trivially_default_constructible<_ValueType>::value>:: -23376: __uninit_default_novalue(__first, __last); -23376: } -23376: -23376: -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) -23376: { -23376: typedef typename iterator_traits<_ForwardIterator>::value_type -23376: _ValueType; -23376: -23376: return __uninitialized_default_novalue_n_1< -23376: is_trivially_default_constructible<_ValueType>::value>:: -23376: __uninit_default_novalue_n(__first, __n); -23376: } -23376: -23376: template -23376: _ForwardIterator -23376: __uninitialized_copy_n(_InputIterator __first, _Size __n, -23376: _ForwardIterator __result, input_iterator_tag) -23376: { -23376: _ForwardIterator __cur = __result; -23376: try -23376: { -23376: for (; __n > 0; --__n, (void) ++__first, ++__cur) -23376: std::_Construct(std::__addressof(*__cur), *__first); -23376: return __cur; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __cur); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline _ForwardIterator -23376: __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, -23376: _ForwardIterator __result, -23376: random_access_iterator_tag) -23376: { return std::uninitialized_copy(__first, __first + __n, __result); } -23376: -23376: template -23376: pair<_InputIterator, _ForwardIterator> -23376: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, -23376: _ForwardIterator __result, input_iterator_tag) -23376: { -23376: _ForwardIterator __cur = __result; -23376: try -23376: { -23376: for (; __n > 0; --__n, (void) ++__first, ++__cur) -23376: std::_Construct(std::__addressof(*__cur), *__first); -23376: return {__first, __cur}; -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__result, __cur); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: inline pair<_RandomAccessIterator, _ForwardIterator> -23376: __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n, -23376: _ForwardIterator __result, -23376: random_access_iterator_tag) -23376: { -23376: auto __second_res = uninitialized_copy(__first, __first + __n, __result); -23376: auto __first_res = std::next(__first, __n); -23376: return {__first_res, __second_res}; -23376: } -23376: # 810 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: template -23376: inline _ForwardIterator -23376: uninitialized_copy_n(_InputIterator __first, _Size __n, -23376: _ForwardIterator __result) -23376: { return std::__uninitialized_copy_n(__first, __n, __result, -23376: std::__iterator_category(__first)); } -23376: -23376: template -23376: inline pair<_InputIterator, _ForwardIterator> -23376: __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, -23376: _ForwardIterator __result) -23376: { -23376: return -23376: std::__uninitialized_copy_n_pair(__first, __n, __result, -23376: std::__iterator_category(__first)); -23376: } -23376: # 882 "/usr/include/c++/8/bits/stl_uninitialized.h" 3 -23376: -23376: } -23376: # 64 "/usr/include/c++/8/vector" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_vector.h" 1 3 -23376: # 74 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: struct _Vector_base -23376: { -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Tp>::other _Tp_alloc_type; -23376: typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer -23376: pointer; -23376: -23376: struct _Vector_impl -23376: : public _Tp_alloc_type -23376: { -23376: pointer _M_start; -23376: pointer _M_finish; -23376: pointer _M_end_of_storage; -23376: -23376: _Vector_impl() -23376: : _Tp_alloc_type(), _M_start(), _M_finish(), _M_end_of_storage() -23376: { } -23376: -23376: _Vector_impl(_Tp_alloc_type const& __a) noexcept -23376: : _Tp_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage() -23376: { } -23376: -23376: -23376: _Vector_impl(_Tp_alloc_type&& __a) noexcept -23376: : _Tp_alloc_type(std::move(__a)), -23376: _M_start(), _M_finish(), _M_end_of_storage() -23376: { } -23376: -23376: -23376: void _M_swap_data(_Vector_impl& __x) noexcept -23376: { -23376: std::swap(_M_start, __x._M_start); -23376: std::swap(_M_finish, __x._M_finish); -23376: std::swap(_M_end_of_storage, __x._M_end_of_storage); -23376: } -23376: # 231 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: }; -23376: -23376: public: -23376: typedef _Alloc allocator_type; -23376: -23376: _Tp_alloc_type& -23376: _M_get_Tp_allocator() noexcept -23376: { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); } -23376: -23376: const _Tp_alloc_type& -23376: _M_get_Tp_allocator() const noexcept -23376: { return *static_cast(&this->_M_impl); } -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_get_Tp_allocator()); } -23376: -23376: _Vector_base() -23376: : _M_impl() { } -23376: -23376: _Vector_base(const allocator_type& __a) noexcept -23376: : _M_impl(__a) { } -23376: -23376: _Vector_base(size_t __n) -23376: : _M_impl() -23376: { _M_create_storage(__n); } -23376: -23376: _Vector_base(size_t __n, const allocator_type& __a) -23376: : _M_impl(__a) -23376: { _M_create_storage(__n); } -23376: -23376: -23376: _Vector_base(_Tp_alloc_type&& __a) noexcept -23376: : _M_impl(std::move(__a)) { } -23376: -23376: _Vector_base(_Vector_base&& __x) noexcept -23376: : _M_impl(std::move(__x._M_get_Tp_allocator())) -23376: { this->_M_impl._M_swap_data(__x._M_impl); } -23376: -23376: _Vector_base(_Vector_base&& __x, const allocator_type& __a) -23376: : _M_impl(__a) -23376: { -23376: if (__x.get_allocator() == __a) -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: else -23376: { -23376: size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; -23376: _M_create_storage(__n); -23376: } -23376: } -23376: -23376: -23376: ~_Vector_base() noexcept -23376: { -23376: _M_deallocate(_M_impl._M_start, -23376: _M_impl._M_end_of_storage - _M_impl._M_start); -23376: } -23376: -23376: public: -23376: _Vector_impl _M_impl; -23376: -23376: pointer -23376: _M_allocate(size_t __n) -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; -23376: return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); -23376: } -23376: -23376: void -23376: _M_deallocate(pointer __p, size_t __n) -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; -23376: if (__p) -23376: _Tr::deallocate(_M_impl, __p, __n); -23376: } -23376: -23376: private: -23376: void -23376: _M_create_storage(size_t __n) -23376: { -23376: this->_M_impl._M_start = this->_M_allocate(__n); -23376: this->_M_impl._M_finish = this->_M_impl._M_start; -23376: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; -23376: } -23376: }; -23376: # 338 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template > -23376: class vector : protected _Vector_base<_Tp, _Alloc> -23376: { -23376: # 351 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: static_assert(is_same::type, _Tp>::value, -23376: "std::vector must have a non-const, non-volatile value_type"); -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef _Vector_base<_Tp, _Alloc> _Base; -23376: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; -23376: -23376: public: -23376: typedef _Tp value_type; -23376: typedef typename _Base::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: typedef __gnu_cxx::__normal_iterator iterator; -23376: typedef __gnu_cxx::__normal_iterator -23376: const_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: typedef std::reverse_iterator reverse_iterator; -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Alloc allocator_type; -23376: -23376: protected: -23376: using _Base::_M_allocate; -23376: using _Base::_M_deallocate; -23376: using _Base::_M_impl; -23376: using _Base::_M_get_Tp_allocator; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: vector() -23376: -23376: noexcept(is_nothrow_default_constructible<_Alloc>::value) -23376: -23376: : _Base() { } -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: vector(const allocator_type& __a) noexcept -23376: : _Base(__a) { } -23376: # 414 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: explicit -23376: vector(size_type __n, const allocator_type& __a = allocator_type()) -23376: : _Base(__n, __a) -23376: { _M_default_initialize(__n); } -23376: # 427 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector(size_type __n, const value_type& __value, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__n, __a) -23376: { _M_fill_initialize(__n, __value); } -23376: # 458 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector(const vector& __x) -23376: : _Base(__x.size(), -23376: _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator())) -23376: { -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_copy_a(__x.begin(), __x.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); -23376: } -23376: # 476 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector(vector&& __x) noexcept -23376: : _Base(std::move(__x)) { } -23376: -23376: -23376: vector(const vector& __x, const allocator_type& __a) -23376: : _Base(__x.size(), __a) -23376: { -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_copy_a(__x.begin(), __x.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: vector(vector&& __rv, const allocator_type& __m) -23376: noexcept(_Alloc_traits::_S_always_equal()) -23376: : _Base(std::move(__rv), __m) -23376: { -23376: if (__rv.get_allocator() != __m) -23376: { -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_move_a(__rv.begin(), __rv.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); -23376: __rv.clear(); -23376: } -23376: } -23376: # 515 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector(initializer_list __l, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { -23376: _M_range_initialize(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: } -23376: # 541 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template> -23376: vector(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { _M_initialize_dispatch(__first, __last, __false_type()); } -23376: # 565 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: ~vector() noexcept -23376: { -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: ; -23376: } -23376: # 581 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector& -23376: operator=(const vector& __x); -23376: # 595 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector& -23376: operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) -23376: { -23376: constexpr bool __move_storage = -23376: _Alloc_traits::_S_propagate_on_move_assign() -23376: || _Alloc_traits::_S_always_equal(); -23376: _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); -23376: return *this; -23376: } -23376: # 616 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: vector& -23376: operator=(initializer_list __l) -23376: { -23376: this->_M_assign_aux(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: return *this; -23376: } -23376: # 635 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: assign(size_type __n, const value_type& __val) -23376: { _M_fill_assign(__n, __val); } -23376: # 652 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template> -23376: void -23376: assign(_InputIterator __first, _InputIterator __last) -23376: { _M_assign_dispatch(__first, __last, __false_type()); } -23376: # 680 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: assign(initializer_list __l) -23376: { -23376: this->_M_assign_aux(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: } -23376: -23376: -23376: -23376: using _Base::get_allocator; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return const_iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() noexcept -23376: { return iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return const_iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(begin()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return const_iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return const_iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _Alloc_traits::max_size(_M_get_Tp_allocator()); } -23376: # 823 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: resize(size_type __new_size) -23376: { -23376: if (__new_size > size()) -23376: _M_default_append(__new_size - size()); -23376: else if (__new_size < size()) -23376: _M_erase_at_end(this->_M_impl._M_start + __new_size); -23376: } -23376: # 843 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: resize(size_type __new_size, const value_type& __x) -23376: { -23376: if (__new_size > size()) -23376: _M_fill_insert(end(), __new_size - size(), __x); -23376: else if (__new_size < size()) -23376: _M_erase_at_end(this->_M_impl._M_start + __new_size); -23376: } -23376: # 875 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: shrink_to_fit() -23376: { _M_shrink_to_fit(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: size_type -23376: capacity() const noexcept -23376: { return size_type(this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return begin() == end(); } -23376: # 914 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: reserve(size_type __n); -23376: # 929 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: reference -23376: operator[](size_type __n) noexcept -23376: { -23376: ; -23376: return *(this->_M_impl._M_start + __n); -23376: } -23376: # 947 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: const_reference -23376: operator[](size_type __n) const noexcept -23376: { -23376: ; -23376: return *(this->_M_impl._M_start + __n); -23376: } -23376: -23376: protected: -23376: -23376: void -23376: _M_range_check(size_type __n) const -23376: { -23376: if (__n >= this->size()) -23376: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") -23376: -23376: , -23376: __n, this->size()); -23376: } -23376: -23376: public: -23376: # 978 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: reference -23376: at(size_type __n) -23376: { -23376: _M_range_check(__n); -23376: return (*this)[__n]; -23376: } -23376: # 996 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: const_reference -23376: at(size_type __n) const -23376: { -23376: _M_range_check(__n); -23376: return (*this)[__n]; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: front() noexcept -23376: { -23376: ; -23376: return *begin(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: front() const noexcept -23376: { -23376: ; -23376: return *begin(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: back() noexcept -23376: { -23376: ; -23376: return *(end() - 1); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: back() const noexcept -23376: { -23376: ; -23376: return *(end() - 1); -23376: } -23376: # 1054 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: _Tp* -23376: data() noexcept -23376: { return _M_data_ptr(this->_M_impl._M_start); } -23376: -23376: const _Tp* -23376: data() const noexcept -23376: { return _M_data_ptr(this->_M_impl._M_start); } -23376: # 1073 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: push_back(const value_type& __x) -23376: { -23376: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: __x); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: } -23376: else -23376: _M_realloc_insert(end(), __x); -23376: } -23376: -23376: -23376: void -23376: push_back(value_type&& __x) -23376: { emplace_back(std::move(__x)); } -23376: -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: emplace_back(_Args&&... __args); -23376: # 1111 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: pop_back() noexcept -23376: { -23376: ; -23376: --this->_M_impl._M_finish; -23376: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); -23376: ; -23376: } -23376: # 1133 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template -23376: iterator -23376: emplace(const_iterator __position, _Args&&... __args) -23376: { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); } -23376: # 1149 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: insert(const_iterator __position, const value_type& __x); -23376: # 1179 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return _M_insert_rval(__position, std::move(__x)); } -23376: # 1196 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: insert(const_iterator __position, initializer_list __l) -23376: { -23376: auto __offset = __position - cbegin(); -23376: _M_range_insert(begin() + __offset, __l.begin(), __l.end(), -23376: std::random_access_iterator_tag()); -23376: return begin() + __offset; -23376: } -23376: # 1221 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: insert(const_iterator __position, size_type __n, const value_type& __x) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_fill_insert(begin() + __offset, __n, __x); -23376: return begin() + __offset; -23376: } -23376: # 1263 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template> -23376: iterator -23376: insert(const_iterator __position, _InputIterator __first, -23376: _InputIterator __last) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_insert_dispatch(begin() + __offset, -23376: __first, __last, __false_type()); -23376: return begin() + __offset; -23376: } -23376: # 1315 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: -23376: erase(const_iterator __position) -23376: { return _M_erase(begin() + (__position - cbegin())); } -23376: # 1342 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: iterator -23376: -23376: erase(const_iterator __first, const_iterator __last) -23376: { -23376: const auto __beg = begin(); -23376: const auto __cbeg = cbegin(); -23376: return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg)); -23376: } -23376: # 1366 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: void -23376: swap(vector& __x) noexcept -23376: { -23376: -23376: -23376: ; -23376: -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), -23376: __x._M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: clear() noexcept -23376: { _M_erase_at_end(this->_M_impl._M_start); } -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: template -23376: pointer -23376: _M_allocate_and_copy(size_type __n, -23376: _ForwardIterator __first, _ForwardIterator __last) -23376: { -23376: pointer __result = this->_M_allocate(__n); -23376: try -23376: { -23376: std::__uninitialized_copy_a(__first, __last, __result, -23376: _M_get_Tp_allocator()); -23376: return __result; -23376: } -23376: catch(...) -23376: { -23376: _M_deallocate(__result, __n); -23376: throw; -23376: } -23376: } -23376: # 1419 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template -23376: void -23376: _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type) -23376: { -23376: this->_M_impl._M_start = _M_allocate(static_cast(__n)); -23376: this->_M_impl._M_end_of_storage = -23376: this->_M_impl._M_start + static_cast(__n); -23376: _M_fill_initialize(static_cast(__n), __value); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { -23376: typedef typename std::iterator_traits<_InputIterator>:: -23376: iterator_category _IterCategory; -23376: _M_range_initialize(__first, __last, _IterCategory()); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_range_initialize(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: try { -23376: for (; __first != __last; ++__first) -23376: -23376: emplace_back(*__first); -23376: -23376: -23376: -23376: } catch(...) { -23376: clear(); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __n = std::distance(__first, __last); -23376: this->_M_impl._M_start = this->_M_allocate(__n); -23376: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_copy_a(__first, __last, -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: void -23376: _M_fill_initialize(size_type __n, const value_type& __value) -23376: { -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, -23376: _M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: void -23376: _M_default_initialize(size_type __n) -23376: { -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_default_n_a(this->_M_impl._M_start, __n, -23376: _M_get_Tp_allocator()); -23376: } -23376: # 1502 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template -23376: void -23376: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) -23376: { _M_fill_assign(__n, __val); } -23376: -23376: -23376: template -23376: void -23376: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } -23376: -23376: -23376: template -23376: void -23376: _M_assign_aux(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag); -23376: -23376: -23376: template -23376: void -23376: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag); -23376: -23376: -23376: -23376: void -23376: _M_fill_assign(size_type __n, const value_type& __val); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, -23376: __true_type) -23376: { _M_fill_insert(__pos, __n, __val); } -23376: -23376: -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, _InputIterator __first, -23376: _InputIterator __last, __false_type) -23376: { -23376: _M_range_insert(__pos, __first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_range_insert(iterator __pos, _InputIterator __first, -23376: _InputIterator __last, std::input_iterator_tag); -23376: -23376: -23376: template -23376: void -23376: _M_range_insert(iterator __pos, _ForwardIterator __first, -23376: _ForwardIterator __last, std::forward_iterator_tag); -23376: -23376: -23376: -23376: void -23376: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); -23376: -23376: -23376: -23376: void -23376: _M_default_append(size_type __n); -23376: -23376: bool -23376: _M_shrink_to_fit(); -23376: # 1589 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: struct _Temporary_value -23376: { -23376: template -23376: explicit -23376: _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) -23376: { -23376: _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: ~_Temporary_value() -23376: { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } -23376: -23376: value_type& -23376: _M_val() { return *reinterpret_cast<_Tp*>(&__buf); } -23376: -23376: private: -23376: pointer -23376: _M_ptr() { return pointer_traits::pointer_to(_M_val()); } -23376: -23376: vector* _M_this; -23376: typename aligned_storage::type __buf; -23376: }; -23376: -23376: -23376: -23376: template -23376: void -23376: _M_insert_aux(iterator __position, _Arg&& __arg); -23376: -23376: template -23376: void -23376: _M_realloc_insert(iterator __position, _Args&&... __args); -23376: -23376: -23376: iterator -23376: _M_insert_rval(const_iterator __position, value_type&& __v); -23376: -23376: -23376: template -23376: iterator -23376: _M_emplace_aux(const_iterator __position, _Args&&... __args); -23376: -23376: -23376: iterator -23376: _M_emplace_aux(const_iterator __position, value_type&& __v) -23376: { return _M_insert_rval(__position, std::move(__v)); } -23376: -23376: -23376: -23376: size_type -23376: _M_check_len(size_type __n, const char* __s) const -23376: { -23376: if (max_size() - size() < __n) -23376: __throw_length_error((__s)); -23376: -23376: const size_type __len = size() + std::max(size(), __n); -23376: return (__len < size() || __len > max_size()) ? max_size() : __len; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: void -23376: _M_erase_at_end(pointer __pos) noexcept -23376: { -23376: if (size_type __n = this->_M_impl._M_finish - __pos) -23376: { -23376: std::_Destroy(__pos, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __pos; -23376: ; -23376: } -23376: } -23376: -23376: iterator -23376: _M_erase(iterator __position); -23376: -23376: iterator -23376: _M_erase(iterator __first, iterator __last); -23376: -23376: -23376: private: -23376: -23376: -23376: -23376: void -23376: _M_move_assign(vector&& __x, std::true_type) noexcept -23376: { -23376: vector __tmp(get_allocator()); -23376: this->_M_impl._M_swap_data(__tmp._M_impl); -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: void -23376: _M_move_assign(vector&& __x, std::false_type) -23376: { -23376: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) -23376: _M_move_assign(std::move(__x), std::true_type()); -23376: else -23376: { -23376: -23376: -23376: this->assign(std::__make_move_if_noexcept_iterator(__x.begin()), -23376: std::__make_move_if_noexcept_iterator(__x.end())); -23376: __x.clear(); -23376: } -23376: } -23376: -23376: -23376: template -23376: _Up* -23376: _M_data_ptr(_Up* __ptr) const noexcept -23376: { return __ptr; } -23376: -23376: -23376: template -23376: typename std::pointer_traits<_Ptr>::element_type* -23376: _M_data_ptr(_Ptr __ptr) const -23376: { return empty() ? nullptr : std::__to_address(__ptr); } -23376: # 1729 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: }; -23376: # 1751 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template -23376: inline bool -23376: operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return (__x.size() == __y.size() -23376: && std::equal(__x.begin(), __x.end(), __y.begin())); } -23376: # 1768 "/usr/include/c++/8/bits/stl_vector.h" 3 -23376: template -23376: inline bool -23376: operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return std::lexicographical_compare(__x.begin(), __x.end(), -23376: __y.begin(), __y.end()); } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: -23376: } -23376: # 65 "/usr/include/c++/8/vector" 2 3 -23376: # 1 "/usr/include/c++/8/bits/stl_bvector.h" 1 3 -23376: # 64 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: typedef unsigned long _Bit_type; -23376: enum { _S_word_bit = int(8 * sizeof(_Bit_type)) }; -23376: -23376: struct _Bit_reference -23376: { -23376: _Bit_type * _M_p; -23376: _Bit_type _M_mask; -23376: -23376: _Bit_reference(_Bit_type * __x, _Bit_type __y) -23376: : _M_p(__x), _M_mask(__y) { } -23376: -23376: _Bit_reference() noexcept : _M_p(0), _M_mask(0) { } -23376: -23376: operator bool() const noexcept -23376: { return !!(*_M_p & _M_mask); } -23376: -23376: _Bit_reference& -23376: operator=(bool __x) noexcept -23376: { -23376: if (__x) -23376: *_M_p |= _M_mask; -23376: else -23376: *_M_p &= ~_M_mask; -23376: return *this; -23376: } -23376: -23376: _Bit_reference& -23376: operator=(const _Bit_reference& __x) noexcept -23376: { return *this = bool(__x); } -23376: -23376: bool -23376: operator==(const _Bit_reference& __x) const -23376: { return bool(*this) == bool(__x); } -23376: -23376: bool -23376: operator<(const _Bit_reference& __x) const -23376: { return !bool(*this) && bool(__x); } -23376: -23376: void -23376: flip() noexcept -23376: { *_M_p ^= _M_mask; } -23376: }; -23376: -23376: -23376: inline void -23376: swap(_Bit_reference __x, _Bit_reference __y) noexcept -23376: { -23376: bool __tmp = __x; -23376: __x = __y; -23376: __y = __tmp; -23376: } -23376: -23376: inline void -23376: swap(_Bit_reference __x, bool& __y) noexcept -23376: { -23376: bool __tmp = __x; -23376: __x = __y; -23376: __y = __tmp; -23376: } -23376: -23376: inline void -23376: swap(bool& __x, _Bit_reference __y) noexcept -23376: { -23376: bool __tmp = __x; -23376: __x = __y; -23376: __y = __tmp; -23376: } -23376: -23376: -23376: struct _Bit_iterator_base -23376: : public std::iterator -23376: { -23376: _Bit_type * _M_p; -23376: unsigned int _M_offset; -23376: -23376: _Bit_iterator_base(_Bit_type * __x, unsigned int __y) -23376: : _M_p(__x), _M_offset(__y) { } -23376: -23376: void -23376: _M_bump_up() -23376: { -23376: if (_M_offset++ == int(_S_word_bit) - 1) -23376: { -23376: _M_offset = 0; -23376: ++_M_p; -23376: } -23376: } -23376: -23376: void -23376: _M_bump_down() -23376: { -23376: if (_M_offset-- == 0) -23376: { -23376: _M_offset = int(_S_word_bit) - 1; -23376: --_M_p; -23376: } -23376: } -23376: -23376: void -23376: _M_incr(ptrdiff_t __i) -23376: { -23376: difference_type __n = __i + _M_offset; -23376: _M_p += __n / int(_S_word_bit); -23376: __n = __n % int(_S_word_bit); -23376: if (__n < 0) -23376: { -23376: __n += int(_S_word_bit); -23376: --_M_p; -23376: } -23376: _M_offset = static_cast(__n); -23376: } -23376: -23376: bool -23376: operator==(const _Bit_iterator_base& __i) const -23376: { return _M_p == __i._M_p && _M_offset == __i._M_offset; } -23376: -23376: bool -23376: operator<(const _Bit_iterator_base& __i) const -23376: { -23376: return _M_p < __i._M_p -23376: || (_M_p == __i._M_p && _M_offset < __i._M_offset); -23376: } -23376: -23376: bool -23376: operator!=(const _Bit_iterator_base& __i) const -23376: { return !(*this == __i); } -23376: -23376: bool -23376: operator>(const _Bit_iterator_base& __i) const -23376: { return __i < *this; } -23376: -23376: bool -23376: operator<=(const _Bit_iterator_base& __i) const -23376: { return !(__i < *this); } -23376: -23376: bool -23376: operator>=(const _Bit_iterator_base& __i) const -23376: { return !(*this < __i); } -23376: }; -23376: -23376: inline ptrdiff_t -23376: operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) -23376: { -23376: return (int(_S_word_bit) * (__x._M_p - __y._M_p) -23376: + __x._M_offset - __y._M_offset); -23376: } -23376: -23376: struct _Bit_iterator : public _Bit_iterator_base -23376: { -23376: typedef _Bit_reference reference; -23376: typedef _Bit_reference* pointer; -23376: typedef _Bit_iterator iterator; -23376: -23376: _Bit_iterator() : _Bit_iterator_base(0, 0) { } -23376: -23376: _Bit_iterator(_Bit_type * __x, unsigned int __y) -23376: : _Bit_iterator_base(__x, __y) { } -23376: -23376: iterator -23376: _M_const_cast() const -23376: { return *this; } -23376: -23376: reference -23376: operator*() const -23376: { return reference(_M_p, 1UL << _M_offset); } -23376: -23376: iterator& -23376: operator++() -23376: { -23376: _M_bump_up(); -23376: return *this; -23376: } -23376: -23376: iterator -23376: operator++(int) -23376: { -23376: iterator __tmp = *this; -23376: _M_bump_up(); -23376: return __tmp; -23376: } -23376: -23376: iterator& -23376: operator--() -23376: { -23376: _M_bump_down(); -23376: return *this; -23376: } -23376: -23376: iterator -23376: operator--(int) -23376: { -23376: iterator __tmp = *this; -23376: _M_bump_down(); -23376: return __tmp; -23376: } -23376: -23376: iterator& -23376: operator+=(difference_type __i) -23376: { -23376: _M_incr(__i); -23376: return *this; -23376: } -23376: -23376: iterator& -23376: operator-=(difference_type __i) -23376: { -23376: *this += -__i; -23376: return *this; -23376: } -23376: -23376: iterator -23376: operator+(difference_type __i) const -23376: { -23376: iterator __tmp = *this; -23376: return __tmp += __i; -23376: } -23376: -23376: iterator -23376: operator-(difference_type __i) const -23376: { -23376: iterator __tmp = *this; -23376: return __tmp -= __i; -23376: } -23376: -23376: reference -23376: operator[](difference_type __i) const -23376: { return *(*this + __i); } -23376: }; -23376: -23376: inline _Bit_iterator -23376: operator+(ptrdiff_t __n, const _Bit_iterator& __x) -23376: { return __x + __n; } -23376: -23376: struct _Bit_const_iterator : public _Bit_iterator_base -23376: { -23376: typedef bool reference; -23376: typedef bool const_reference; -23376: typedef const bool* pointer; -23376: typedef _Bit_const_iterator const_iterator; -23376: -23376: _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } -23376: -23376: _Bit_const_iterator(_Bit_type * __x, unsigned int __y) -23376: : _Bit_iterator_base(__x, __y) { } -23376: -23376: _Bit_const_iterator(const _Bit_iterator& __x) -23376: : _Bit_iterator_base(__x._M_p, __x._M_offset) { } -23376: -23376: _Bit_iterator -23376: _M_const_cast() const -23376: { return _Bit_iterator(_M_p, _M_offset); } -23376: -23376: const_reference -23376: operator*() const -23376: { return _Bit_reference(_M_p, 1UL << _M_offset); } -23376: -23376: const_iterator& -23376: operator++() -23376: { -23376: _M_bump_up(); -23376: return *this; -23376: } -23376: -23376: const_iterator -23376: operator++(int) -23376: { -23376: const_iterator __tmp = *this; -23376: _M_bump_up(); -23376: return __tmp; -23376: } -23376: -23376: const_iterator& -23376: operator--() -23376: { -23376: _M_bump_down(); -23376: return *this; -23376: } -23376: -23376: const_iterator -23376: operator--(int) -23376: { -23376: const_iterator __tmp = *this; -23376: _M_bump_down(); -23376: return __tmp; -23376: } -23376: -23376: const_iterator& -23376: operator+=(difference_type __i) -23376: { -23376: _M_incr(__i); -23376: return *this; -23376: } -23376: -23376: const_iterator& -23376: operator-=(difference_type __i) -23376: { -23376: *this += -__i; -23376: return *this; -23376: } -23376: -23376: const_iterator -23376: operator+(difference_type __i) const -23376: { -23376: const_iterator __tmp = *this; -23376: return __tmp += __i; -23376: } -23376: -23376: const_iterator -23376: operator-(difference_type __i) const -23376: { -23376: const_iterator __tmp = *this; -23376: return __tmp -= __i; -23376: } -23376: -23376: const_reference -23376: operator[](difference_type __i) const -23376: { return *(*this + __i); } -23376: }; -23376: -23376: inline _Bit_const_iterator -23376: operator+(ptrdiff_t __n, const _Bit_const_iterator& __x) -23376: { return __x + __n; } -23376: -23376: inline void -23376: __fill_bvector(_Bit_type * __v, -23376: unsigned int __first, unsigned int __last, bool __x) -23376: { -23376: const _Bit_type __fmask = ~0ul << __first; -23376: const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last); -23376: const _Bit_type __mask = __fmask & __lmask; -23376: -23376: if (__x) -23376: *__v |= __mask; -23376: else -23376: *__v &= ~__mask; -23376: } -23376: -23376: inline void -23376: fill(_Bit_iterator __first, _Bit_iterator __last, const bool& __x) -23376: { -23376: if (__first._M_p != __last._M_p) -23376: { -23376: _Bit_type* __first_p = __first._M_p; -23376: if (__first._M_offset != 0) -23376: __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x); -23376: -23376: __builtin_memset(__first_p, __x ? ~0 : 0, -23376: (__last._M_p - __first_p) * sizeof(_Bit_type)); -23376: -23376: if (__last._M_offset != 0) -23376: __fill_bvector(__last._M_p, 0, __last._M_offset, __x); -23376: } -23376: else if (__first._M_offset != __last._M_offset) -23376: __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x); -23376: } -23376: -23376: template -23376: struct _Bvector_base -23376: { -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Bit_type>::other _Bit_alloc_type; -23376: typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type> -23376: _Bit_alloc_traits; -23376: typedef typename _Bit_alloc_traits::pointer _Bit_pointer; -23376: -23376: struct _Bvector_impl_data -23376: { -23376: _Bit_iterator _M_start; -23376: _Bit_iterator _M_finish; -23376: _Bit_pointer _M_end_of_storage; -23376: -23376: _Bvector_impl_data() noexcept -23376: : _M_start(), _M_finish(), _M_end_of_storage() -23376: { } -23376: -23376: -23376: _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept -23376: : _M_start(__x._M_start), _M_finish(__x._M_finish) -23376: , _M_end_of_storage(__x._M_end_of_storage) -23376: { __x._M_reset(); } -23376: -23376: void -23376: _M_move_data(_Bvector_impl_data&& __x) noexcept -23376: { -23376: this->_M_start = __x._M_start; -23376: this->_M_finish = __x._M_finish; -23376: this->_M_end_of_storage = __x._M_end_of_storage; -23376: __x._M_reset(); -23376: } -23376: -23376: -23376: void -23376: _M_reset() noexcept -23376: { -23376: _M_start = _M_finish = _Bit_iterator(); -23376: _M_end_of_storage = _Bit_pointer(); -23376: } -23376: }; -23376: -23376: struct _Bvector_impl -23376: : public _Bit_alloc_type, public _Bvector_impl_data -23376: { -23376: public: -23376: _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value) -23376: -23376: : _Bit_alloc_type() -23376: { } -23376: -23376: _Bvector_impl(const _Bit_alloc_type& __a) noexcept -23376: : _Bit_alloc_type(__a) -23376: { } -23376: -23376: -23376: _Bvector_impl(_Bvector_impl&&) = default; -23376: -23376: -23376: _Bit_type* -23376: _M_end_addr() const noexcept -23376: { -23376: if (this->_M_end_of_storage) -23376: return std::__addressof(this->_M_end_of_storage[-1]) + 1; -23376: return 0; -23376: } -23376: }; -23376: -23376: public: -23376: typedef _Alloc allocator_type; -23376: -23376: _Bit_alloc_type& -23376: _M_get_Bit_allocator() noexcept -23376: { return this->_M_impl; } -23376: -23376: const _Bit_alloc_type& -23376: _M_get_Bit_allocator() const noexcept -23376: { return this->_M_impl; } -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_get_Bit_allocator()); } -23376: -23376: -23376: _Bvector_base() = default; -23376: -23376: -23376: -23376: -23376: _Bvector_base(const allocator_type& __a) -23376: : _M_impl(__a) { } -23376: -23376: -23376: _Bvector_base(_Bvector_base&&) = default; -23376: -23376: -23376: ~_Bvector_base() -23376: { this->_M_deallocate(); } -23376: -23376: protected: -23376: _Bvector_impl _M_impl; -23376: -23376: _Bit_pointer -23376: _M_allocate(size_t __n) -23376: { return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); } -23376: -23376: void -23376: _M_deallocate() -23376: { -23376: if (_M_impl._M_start._M_p) -23376: { -23376: const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p; -23376: _Bit_alloc_traits::deallocate(_M_impl, -23376: _M_impl._M_end_of_storage - __n, -23376: __n); -23376: _M_impl._M_reset(); -23376: } -23376: } -23376: -23376: -23376: void -23376: _M_move_data(_Bvector_base&& __x) noexcept -23376: { _M_impl._M_move_data(std::move(__x._M_impl)); } -23376: -23376: -23376: static size_t -23376: _S_nword(size_t __n) -23376: { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } -23376: }; -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: # 587 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: template -23376: class vector : protected _Bvector_base<_Alloc> -23376: { -23376: typedef _Bvector_base<_Alloc> _Base; -23376: typedef typename _Base::_Bit_pointer _Bit_pointer; -23376: typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits; -23376: -23376: -23376: friend struct std::hash; -23376: -23376: -23376: public: -23376: typedef bool value_type; -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Bit_reference reference; -23376: typedef bool const_reference; -23376: typedef _Bit_reference* pointer; -23376: typedef const bool* const_pointer; -23376: typedef _Bit_iterator iterator; -23376: typedef _Bit_const_iterator const_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: typedef std::reverse_iterator reverse_iterator; -23376: typedef _Alloc allocator_type; -23376: -23376: allocator_type -23376: get_allocator() const -23376: { return _Base::get_allocator(); } -23376: -23376: protected: -23376: using _Base::_M_allocate; -23376: using _Base::_M_deallocate; -23376: using _Base::_S_nword; -23376: using _Base::_M_get_Bit_allocator; -23376: -23376: public: -23376: -23376: vector() = default; -23376: -23376: -23376: -23376: -23376: explicit -23376: vector(const allocator_type& __a) -23376: : _Base(__a) { } -23376: -23376: -23376: explicit -23376: vector(size_type __n, const allocator_type& __a = allocator_type()) -23376: : vector(__n, false, __a) -23376: { } -23376: -23376: vector(size_type __n, const bool& __value, -23376: const allocator_type& __a = allocator_type()) -23376: -23376: -23376: -23376: -23376: -23376: : _Base(__a) -23376: { -23376: _M_initialize(__n); -23376: _M_initialize_value(__value); -23376: } -23376: -23376: vector(const vector& __x) -23376: : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) -23376: { -23376: _M_initialize(__x.size()); -23376: _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); -23376: } -23376: -23376: -23376: vector(vector&&) = default; -23376: -23376: vector(vector&& __x, const allocator_type& __a) -23376: noexcept(_Bit_alloc_traits::_S_always_equal()) -23376: : _Base(__a) -23376: { -23376: if (__x.get_allocator() == __a) -23376: this->_M_move_data(std::move(__x)); -23376: else -23376: { -23376: _M_initialize(__x.size()); -23376: _M_copy_aligned(__x.begin(), __x.end(), begin()); -23376: __x.clear(); -23376: } -23376: } -23376: -23376: vector(const vector& __x, const allocator_type& __a) -23376: : _Base(__a) -23376: { -23376: _M_initialize(__x.size()); -23376: _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); -23376: } -23376: -23376: vector(initializer_list __l, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { -23376: _M_initialize_range(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: } -23376: -23376: -23376: -23376: template> -23376: vector(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { _M_initialize_dispatch(__first, __last, __false_type()); } -23376: # 710 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: ~vector() noexcept { } -23376: -23376: vector& -23376: operator=(const vector& __x) -23376: { -23376: if (&__x == this) -23376: return *this; -23376: -23376: if (_Bit_alloc_traits::_S_propagate_on_copy_assign()) -23376: { -23376: if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator()) -23376: { -23376: this->_M_deallocate(); -23376: std::__alloc_on_copy(_M_get_Bit_allocator(), -23376: __x._M_get_Bit_allocator()); -23376: _M_initialize(__x.size()); -23376: } -23376: else -23376: std::__alloc_on_copy(_M_get_Bit_allocator(), -23376: __x._M_get_Bit_allocator()); -23376: } -23376: -23376: if (__x.size() > capacity()) -23376: { -23376: this->_M_deallocate(); -23376: _M_initialize(__x.size()); -23376: } -23376: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), -23376: begin()); -23376: return *this; -23376: } -23376: -23376: -23376: vector& -23376: operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move()) -23376: { -23376: if (_Bit_alloc_traits::_S_propagate_on_move_assign() -23376: || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator()) -23376: { -23376: this->_M_deallocate(); -23376: this->_M_move_data(std::move(__x)); -23376: std::__alloc_on_move(_M_get_Bit_allocator(), -23376: __x._M_get_Bit_allocator()); -23376: } -23376: else -23376: { -23376: if (__x.size() > capacity()) -23376: { -23376: this->_M_deallocate(); -23376: _M_initialize(__x.size()); -23376: } -23376: this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), -23376: begin()); -23376: __x.clear(); -23376: } -23376: return *this; -23376: } -23376: -23376: vector& -23376: operator=(initializer_list __l) -23376: { -23376: this->assign (__l.begin(), __l.end()); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: assign(size_type __n, const bool& __x) -23376: { _M_fill_assign(__n, __x); } -23376: -23376: -23376: template> -23376: void -23376: assign(_InputIterator __first, _InputIterator __last) -23376: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } -23376: # 801 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: void -23376: assign(initializer_list __l) -23376: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: iterator -23376: end() noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(end()); } -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(begin()); } -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return const_reverse_iterator(end()); } -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return const_reverse_iterator(begin()); } -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return size_type(end() - begin()); } -23376: -23376: size_type -23376: max_size() const noexcept -23376: { -23376: const size_type __isize = -23376: __gnu_cxx::__numeric_traits::__max -23376: - int(_S_word_bit) + 1; -23376: const size_type __asize -23376: = _Bit_alloc_traits::max_size(_M_get_Bit_allocator()); -23376: return (__asize <= __isize / int(_S_word_bit) -23376: ? __asize * int(_S_word_bit) : __isize); -23376: } -23376: -23376: size_type -23376: capacity() const noexcept -23376: { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) -23376: - begin()); } -23376: -23376: bool -23376: empty() const noexcept -23376: { return begin() == end(); } -23376: -23376: reference -23376: operator[](size_type __n) -23376: { -23376: return *iterator(this->_M_impl._M_start._M_p -23376: + __n / int(_S_word_bit), __n % int(_S_word_bit)); -23376: } -23376: -23376: const_reference -23376: operator[](size_type __n) const -23376: { -23376: return *const_iterator(this->_M_impl._M_start._M_p -23376: + __n / int(_S_word_bit), __n % int(_S_word_bit)); -23376: } -23376: -23376: protected: -23376: void -23376: _M_range_check(size_type __n) const -23376: { -23376: if (__n >= this->size()) -23376: __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") -23376: -23376: , -23376: __n, this->size()); -23376: } -23376: -23376: public: -23376: reference -23376: at(size_type __n) -23376: { _M_range_check(__n); return (*this)[__n]; } -23376: -23376: const_reference -23376: at(size_type __n) const -23376: { _M_range_check(__n); return (*this)[__n]; } -23376: -23376: void -23376: reserve(size_type __n) -23376: { -23376: if (__n > max_size()) -23376: __throw_length_error(("vector::reserve")); -23376: if (capacity() < __n) -23376: _M_reallocate(__n); -23376: } -23376: -23376: reference -23376: front() -23376: { return *begin(); } -23376: -23376: const_reference -23376: front() const -23376: { return *begin(); } -23376: -23376: reference -23376: back() -23376: { return *(end() - 1); } -23376: -23376: const_reference -23376: back() const -23376: { return *(end() - 1); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: data() noexcept { } -23376: -23376: void -23376: push_back(bool __x) -23376: { -23376: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) -23376: *this->_M_impl._M_finish++ = __x; -23376: else -23376: _M_insert_aux(end(), __x); -23376: } -23376: -23376: void -23376: swap(vector& __x) noexcept -23376: { -23376: std::swap(this->_M_impl._M_start, __x._M_impl._M_start); -23376: std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); -23376: std::swap(this->_M_impl._M_end_of_storage, -23376: __x._M_impl._M_end_of_storage); -23376: _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(), -23376: __x._M_get_Bit_allocator()); -23376: } -23376: -23376: -23376: static void -23376: swap(reference __x, reference __y) noexcept -23376: { -23376: bool __tmp = __x; -23376: __x = __y; -23376: __y = __tmp; -23376: } -23376: -23376: iterator -23376: -23376: insert(const_iterator __position, const bool& __x = bool()) -23376: -23376: -23376: -23376: { -23376: const difference_type __n = __position - begin(); -23376: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr() -23376: && __position == end()) -23376: *this->_M_impl._M_finish++ = __x; -23376: else -23376: _M_insert_aux(__position._M_const_cast(), __x); -23376: return begin() + __n; -23376: } -23376: -23376: -23376: template> -23376: iterator -23376: insert(const_iterator __position, -23376: _InputIterator __first, _InputIterator __last) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_insert_dispatch(__position._M_const_cast(), -23376: __first, __last, __false_type()); -23376: return begin() + __offset; -23376: } -23376: # 1017 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: iterator -23376: insert(const_iterator __position, size_type __n, const bool& __x) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_fill_insert(__position._M_const_cast(), __n, __x); -23376: return begin() + __offset; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: insert(const_iterator __p, initializer_list __l) -23376: { return this->insert(__p, __l.begin(), __l.end()); } -23376: -23376: -23376: void -23376: pop_back() -23376: { --this->_M_impl._M_finish; } -23376: -23376: iterator -23376: -23376: erase(const_iterator __position) -23376: -23376: -23376: -23376: { return _M_erase(__position._M_const_cast()); } -23376: -23376: iterator -23376: -23376: erase(const_iterator __first, const_iterator __last) -23376: -23376: -23376: -23376: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } -23376: -23376: void -23376: resize(size_type __new_size, bool __x = bool()) -23376: { -23376: if (__new_size < size()) -23376: _M_erase_at_end(begin() + difference_type(__new_size)); -23376: else -23376: insert(end(), __new_size - size(), __x); -23376: } -23376: -23376: -23376: void -23376: shrink_to_fit() -23376: { _M_shrink_to_fit(); } -23376: -23376: -23376: void -23376: flip() noexcept -23376: { -23376: _Bit_type * const __end = this->_M_impl._M_end_addr(); -23376: for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p) -23376: *__p = ~*__p; -23376: } -23376: -23376: void -23376: clear() noexcept -23376: { _M_erase_at_end(begin()); } -23376: -23376: -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: emplace_back(_Args&&... __args) -23376: { -23376: push_back(bool(__args...)); -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: iterator -23376: emplace(const_iterator __pos, _Args&&... __args) -23376: { return insert(__pos, bool(__args...)); } -23376: -23376: -23376: protected: -23376: -23376: iterator -23376: _M_copy_aligned(const_iterator __first, const_iterator __last, -23376: iterator __result) -23376: { -23376: _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p); -23376: return std::copy(const_iterator(__last._M_p, 0), __last, -23376: iterator(__q, 0)); -23376: } -23376: -23376: void -23376: _M_initialize(size_type __n) -23376: { -23376: if (__n) -23376: { -23376: _Bit_pointer __q = this->_M_allocate(__n); -23376: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); -23376: this->_M_impl._M_start = iterator(std::__addressof(*__q), 0); -23376: } -23376: else -23376: { -23376: this->_M_impl._M_end_of_storage = _Bit_pointer(); -23376: this->_M_impl._M_start = iterator(0, 0); -23376: } -23376: this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n); -23376: -23376: } -23376: -23376: void -23376: _M_initialize_value(bool __x) -23376: { -23376: if (_Bit_type* __p = this->_M_impl._M_start._M_p) -23376: __builtin_memset(__p, __x ? ~0 : 0, -23376: (this->_M_impl._M_end_addr() - __p) -23376: * sizeof(_Bit_type)); -23376: } -23376: -23376: void -23376: _M_reallocate(size_type __n); -23376: -23376: -23376: bool -23376: _M_shrink_to_fit(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) -23376: { -23376: _M_initialize(static_cast(__n)); -23376: _M_initialize_value(__x); -23376: } -23376: -23376: template -23376: void -23376: _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { _M_initialize_range(__first, __last, -23376: std::__iterator_category(__first)); } -23376: -23376: template -23376: void -23376: _M_initialize_range(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: for (; __first != __last; ++__first) -23376: push_back(*__first); -23376: } -23376: -23376: template -23376: void -23376: _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __n = std::distance(__first, __last); -23376: _M_initialize(__n); -23376: std::copy(__first, __last, this->_M_impl._M_start); -23376: } -23376: # 1203 "/usr/include/c++/8/bits/stl_bvector.h" 3 -23376: void -23376: _M_fill_assign(size_t __n, bool __x) -23376: { -23376: if (__n > size()) -23376: { -23376: _M_initialize_value(__x); -23376: insert(end(), __n - size(), __x); -23376: } -23376: else -23376: { -23376: _M_erase_at_end(begin() + __n); -23376: _M_initialize_value(__x); -23376: } -23376: } -23376: -23376: template -23376: void -23376: _M_assign_aux(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: iterator __cur = begin(); -23376: for (; __first != __last && __cur != end(); ++__cur, ++__first) -23376: *__cur = *__first; -23376: if (__first == __last) -23376: _M_erase_at_end(__cur); -23376: else -23376: insert(end(), __first, __last); -23376: } -23376: -23376: template -23376: void -23376: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __len = std::distance(__first, __last); -23376: if (__len < size()) -23376: _M_erase_at_end(std::copy(__first, __last, begin())); -23376: else -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, size()); -23376: std::copy(__first, __mid, begin()); -23376: insert(end(), __mid, __last); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x, -23376: __true_type) -23376: { _M_fill_insert(__pos, __n, __x); } -23376: -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, -23376: _InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { _M_insert_range(__pos, __first, __last, -23376: std::__iterator_category(__first)); } -23376: -23376: void -23376: _M_fill_insert(iterator __position, size_type __n, bool __x); -23376: -23376: template -23376: void -23376: _M_insert_range(iterator __pos, _InputIterator __first, -23376: _InputIterator __last, std::input_iterator_tag) -23376: { -23376: for (; __first != __last; ++__first) -23376: { -23376: __pos = insert(__pos, *__first); -23376: ++__pos; -23376: } -23376: } -23376: -23376: template -23376: void -23376: _M_insert_range(iterator __position, _ForwardIterator __first, -23376: _ForwardIterator __last, std::forward_iterator_tag); -23376: -23376: void -23376: _M_insert_aux(iterator __position, bool __x); -23376: -23376: size_type -23376: _M_check_len(size_type __n, const char* __s) const -23376: { -23376: if (max_size() - size() < __n) -23376: __throw_length_error((__s)); -23376: -23376: const size_type __len = size() + std::max(size(), __n); -23376: return (__len < size() || __len > max_size()) ? max_size() : __len; -23376: } -23376: -23376: void -23376: _M_erase_at_end(iterator __pos) -23376: { this->_M_impl._M_finish = __pos; } -23376: -23376: iterator -23376: _M_erase(iterator __pos); -23376: -23376: iterator -23376: _M_erase(iterator __first, iterator __last); -23376: }; -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: struct hash> -23376: : public __hash_base> -23376: { -23376: size_t -23376: operator()(const std::vector&) const noexcept; -23376: }; -23376: -23376: -23376: } -23376: # 66 "/usr/include/c++/8/vector" 2 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/vector.tcc" 1 3 -23376: # 59 "/usr/include/c++/8/bits/vector.tcc" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: reserve(size_type __n) -23376: { -23376: if (__n > this->max_size()) -23376: __throw_length_error(("vector::reserve")); -23376: if (this->capacity() < __n) -23376: { -23376: const size_type __old_size = size(); -23376: pointer __tmp = _M_allocate_and_copy(__n, -23376: std::__make_move_if_noexcept_iterator(this->_M_impl._M_start), -23376: std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish)); -23376: ; -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __tmp; -23376: this->_M_impl._M_finish = __tmp + __old_size; -23376: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; -23376: } -23376: } -23376: -23376: -23376: template -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: vector<_Tp, _Alloc>:: -23376: emplace_back(_Args&&... __args) -23376: { -23376: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: std::forward<_Args>(__args)...); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: } -23376: else -23376: _M_realloc_insert(end(), std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: template -23376: typename vector<_Tp, _Alloc>::iterator -23376: vector<_Tp, _Alloc>:: -23376: -23376: insert(const_iterator __position, const value_type& __x) -23376: -23376: -23376: -23376: { -23376: const size_type __n = __position - begin(); -23376: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) -23376: if (__position == end()) -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: __x); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: } -23376: else -23376: { -23376: -23376: const auto __pos = begin() + (__position - cbegin()); -23376: -23376: -23376: _Temporary_value __x_copy(this, __x); -23376: _M_insert_aux(__pos, std::move(__x_copy._M_val())); -23376: -23376: -23376: -23376: } -23376: else -23376: -23376: _M_realloc_insert(begin() + (__position - cbegin()), __x); -23376: -23376: -23376: -23376: -23376: return iterator(this->_M_impl._M_start + __n); -23376: } -23376: -23376: template -23376: typename vector<_Tp, _Alloc>::iterator -23376: vector<_Tp, _Alloc>:: -23376: _M_erase(iterator __position) -23376: { -23376: if (__position + 1 != end()) -23376: std::move(__position + 1, end(), __position); -23376: --this->_M_impl._M_finish; -23376: _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); -23376: ; -23376: return __position; -23376: } -23376: -23376: template -23376: typename vector<_Tp, _Alloc>::iterator -23376: vector<_Tp, _Alloc>:: -23376: _M_erase(iterator __first, iterator __last) -23376: { -23376: if (__first != __last) -23376: { -23376: if (__last != end()) -23376: std::move(__last, end(), __first); -23376: _M_erase_at_end(__first.base() + (end() - __last)); -23376: } -23376: return __first; -23376: } -23376: -23376: template -23376: vector<_Tp, _Alloc>& -23376: vector<_Tp, _Alloc>:: -23376: operator=(const vector<_Tp, _Alloc>& __x) -23376: { -23376: if (&__x != this) -23376: { -23376: ; -23376: -23376: if (_Alloc_traits::_S_propagate_on_copy_assign()) -23376: { -23376: if (!_Alloc_traits::_S_always_equal() -23376: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) -23376: { -23376: -23376: this->clear(); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = nullptr; -23376: this->_M_impl._M_finish = nullptr; -23376: this->_M_impl._M_end_of_storage = nullptr; -23376: } -23376: std::__alloc_on_copy(_M_get_Tp_allocator(), -23376: __x._M_get_Tp_allocator()); -23376: } -23376: -23376: const size_type __xlen = __x.size(); -23376: if (__xlen > capacity()) -23376: { -23376: pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), -23376: __x.end()); -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __tmp; -23376: this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; -23376: } -23376: else if (size() >= __xlen) -23376: { -23376: std::_Destroy(std::copy(__x.begin(), __x.end(), begin()), -23376: end(), _M_get_Tp_allocator()); -23376: } -23376: else -23376: { -23376: std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(), -23376: this->_M_impl._M_start); -23376: std::__uninitialized_copy_a(__x._M_impl._M_start + size(), -23376: __x._M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: } -23376: this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_fill_assign(size_t __n, const value_type& __val) -23376: { -23376: if (__n > capacity()) -23376: { -23376: vector __tmp(__n, __val, _M_get_Tp_allocator()); -23376: __tmp._M_impl._M_swap_data(this->_M_impl); -23376: } -23376: else if (__n > size()) -23376: { -23376: std::fill(begin(), end(), __val); -23376: const size_type __add = __n - size(); -23376: ; -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_fill_n_a(this->_M_impl._M_finish, -23376: __add, __val, _M_get_Tp_allocator()); -23376: ; -23376: } -23376: else -23376: _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); -23376: } -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_assign_aux(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: pointer __cur(this->_M_impl._M_start); -23376: for (; __first != __last && __cur != this->_M_impl._M_finish; -23376: ++__cur, ++__first) -23376: *__cur = *__first; -23376: if (__first == __last) -23376: _M_erase_at_end(__cur); -23376: else -23376: _M_range_insert(end(), __first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __len = std::distance(__first, __last); -23376: -23376: if (__len > capacity()) -23376: { -23376: pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); -23376: ; -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __tmp; -23376: this->_M_impl._M_finish = this->_M_impl._M_start + __len; -23376: this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; -23376: } -23376: else if (size() >= __len) -23376: _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); -23376: else -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, size()); -23376: std::copy(__first, __mid, this->_M_impl._M_start); -23376: const size_type __attribute__((__unused__)) __n = __len - size(); -23376: ; -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_copy_a(__mid, __last, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: ; -23376: } -23376: } -23376: -23376: -23376: template -23376: auto -23376: vector<_Tp, _Alloc>:: -23376: _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator -23376: { -23376: const auto __n = __position - cbegin(); -23376: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) -23376: if (__position == cend()) -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: std::move(__v)); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: } -23376: else -23376: _M_insert_aux(begin() + __n, std::move(__v)); -23376: else -23376: _M_realloc_insert(begin() + __n, std::move(__v)); -23376: -23376: return iterator(this->_M_impl._M_start + __n); -23376: } -23376: -23376: template -23376: template -23376: auto -23376: vector<_Tp, _Alloc>:: -23376: _M_emplace_aux(const_iterator __position, _Args&&... __args) -23376: -> iterator -23376: { -23376: const auto __n = __position - cbegin(); -23376: if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) -23376: if (__position == cend()) -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: std::forward<_Args>(__args)...); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: } -23376: else -23376: { -23376: -23376: -23376: -23376: _Temporary_value __tmp(this, std::forward<_Args>(__args)...); -23376: _M_insert_aux(begin() + __n, std::move(__tmp._M_val())); -23376: } -23376: else -23376: _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...); -23376: -23376: return iterator(this->_M_impl._M_start + __n); -23376: } -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_insert_aux(iterator __position, _Arg&& __arg) -23376: -23376: -23376: -23376: -23376: -23376: -23376: { -23376: ; -23376: _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, -23376: std::move(*(this->_M_impl._M_finish - 1))); -23376: ++this->_M_impl._M_finish; -23376: ; -23376: -23376: -23376: -23376: std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1) -23376: -23376: ; -23376: -23376: -23376: -23376: *__position = std::forward<_Arg>(__arg); -23376: -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_realloc_insert(iterator __position, _Args&&... __args) -23376: -23376: -23376: -23376: -23376: -23376: -23376: { -23376: const size_type __len = -23376: _M_check_len(size_type(1), "vector::_M_realloc_insert"); -23376: pointer __old_start = this->_M_impl._M_start; -23376: pointer __old_finish = this->_M_impl._M_finish; -23376: const size_type __elems_before = __position - begin(); -23376: pointer __new_start(this->_M_allocate(__len)); -23376: pointer __new_finish(__new_start); -23376: try -23376: { -23376: -23376: -23376: -23376: -23376: -23376: _Alloc_traits::construct(this->_M_impl, -23376: __new_start + __elems_before, -23376: -23376: std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: __new_finish = pointer(); -23376: -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (__old_start, __position.base(), -23376: __new_start, _M_get_Tp_allocator()); -23376: -23376: ++__new_finish; -23376: -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (__position.base(), __old_finish, -23376: __new_finish, _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: if (!__new_finish) -23376: _Alloc_traits::destroy(this->_M_impl, -23376: __new_start + __elems_before); -23376: else -23376: std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator()); -23376: _M_deallocate(__new_start, __len); -23376: throw; -23376: } -23376: ; -23376: std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); -23376: _M_deallocate(__old_start, -23376: this->_M_impl._M_end_of_storage - __old_start); -23376: this->_M_impl._M_start = __new_start; -23376: this->_M_impl._M_finish = __new_finish; -23376: this->_M_impl._M_end_of_storage = __new_start + __len; -23376: } -23376: -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_fill_insert(iterator __position, size_type __n, const value_type& __x) -23376: { -23376: if (__n != 0) -23376: { -23376: if (size_type(this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_finish) >= __n) -23376: { -23376: -23376: -23376: -23376: _Temporary_value __tmp(this, __x); -23376: value_type& __x_copy = __tmp._M_val(); -23376: -23376: const size_type __elems_after = end() - __position; -23376: pointer __old_finish(this->_M_impl._M_finish); -23376: if (__elems_after > __n) -23376: { -23376: ; -23376: std::__uninitialized_move_a(this->_M_impl._M_finish - __n, -23376: this->_M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish += __n; -23376: ; -23376: std::move_backward(__position.base(), __old_finish - __n, __old_finish) -23376: ; -23376: std::fill(__position.base(), __position.base() + __n, -23376: __x_copy); -23376: } -23376: else -23376: { -23376: ; -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_fill_n_a(this->_M_impl._M_finish, -23376: __n - __elems_after, -23376: __x_copy, -23376: _M_get_Tp_allocator()); -23376: ; -23376: std::__uninitialized_move_a(__position.base(), __old_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish += __elems_after; -23376: ; -23376: std::fill(__position.base(), __old_finish, __x_copy); -23376: } -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(__n, "vector::_M_fill_insert"); -23376: const size_type __elems_before = __position - begin(); -23376: pointer __new_start(this->_M_allocate(__len)); -23376: pointer __new_finish(__new_start); -23376: try -23376: { -23376: -23376: std::__uninitialized_fill_n_a(__new_start + __elems_before, -23376: __n, __x, -23376: _M_get_Tp_allocator()); -23376: __new_finish = pointer(); -23376: -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (this->_M_impl._M_start, __position.base(), -23376: __new_start, _M_get_Tp_allocator()); -23376: -23376: __new_finish += __n; -23376: -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (__position.base(), this->_M_impl._M_finish, -23376: __new_finish, _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: if (!__new_finish) -23376: std::_Destroy(__new_start + __elems_before, -23376: __new_start + __elems_before + __n, -23376: _M_get_Tp_allocator()); -23376: else -23376: std::_Destroy(__new_start, __new_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(__new_start, __len); -23376: throw; -23376: } -23376: ; -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __new_start; -23376: this->_M_impl._M_finish = __new_finish; -23376: this->_M_impl._M_end_of_storage = __new_start + __len; -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_default_append(size_type __n) -23376: { -23376: if (__n != 0) -23376: { -23376: const size_type __size = size(); -23376: size_type __navail = size_type(this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_finish); -23376: -23376: if (__size > max_size() || __navail > max_size() - __size) -23376: __builtin_unreachable(); -23376: -23376: if (__navail >= __n) -23376: { -23376: ; -23376: this->_M_impl._M_finish = -23376: std::__uninitialized_default_n_a(this->_M_impl._M_finish, -23376: __n, _M_get_Tp_allocator()); -23376: ; -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(__n, "vector::_M_default_append"); -23376: pointer __new_start(this->_M_allocate(__len)); -23376: pointer __destroy_from = pointer(); -23376: try -23376: { -23376: std::__uninitialized_default_n_a(__new_start + __size, -23376: __n, _M_get_Tp_allocator()); -23376: __destroy_from = __new_start + __size; -23376: std::__uninitialized_move_if_noexcept_a( -23376: this->_M_impl._M_start, this->_M_impl._M_finish, -23376: __new_start, _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: if (__destroy_from) -23376: std::_Destroy(__destroy_from, __destroy_from + __n, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(__new_start, __len); -23376: throw; -23376: } -23376: ; -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __new_start; -23376: this->_M_impl._M_finish = __new_start + __size + __n; -23376: this->_M_impl._M_end_of_storage = __new_start + __len; -23376: } -23376: } -23376: } -23376: -23376: template -23376: bool -23376: vector<_Tp, _Alloc>:: -23376: _M_shrink_to_fit() -23376: { -23376: if (capacity() == size()) -23376: return false; -23376: ; -23376: return std::__shrink_to_fit_aux::_S_do_it(*this); -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_range_insert(iterator __pos, _InputIterator __first, -23376: _InputIterator __last, std::input_iterator_tag) -23376: { -23376: if (__pos == end()) -23376: { -23376: for (; __first != __last; ++__first) -23376: insert(end(), *__first); -23376: } -23376: else if (__first != __last) -23376: { -23376: vector __tmp(__first, __last, _M_get_Tp_allocator()); -23376: insert(__pos, -23376: std::make_move_iterator(__tmp.begin()), -23376: std::make_move_iterator(__tmp.end())); -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: vector<_Tp, _Alloc>:: -23376: _M_range_insert(iterator __position, _ForwardIterator __first, -23376: _ForwardIterator __last, std::forward_iterator_tag) -23376: { -23376: if (__first != __last) -23376: { -23376: const size_type __n = std::distance(__first, __last); -23376: if (size_type(this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_finish) >= __n) -23376: { -23376: const size_type __elems_after = end() - __position; -23376: pointer __old_finish(this->_M_impl._M_finish); -23376: if (__elems_after > __n) -23376: { -23376: ; -23376: std::__uninitialized_move_a(this->_M_impl._M_finish - __n, -23376: this->_M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish += __n; -23376: ; -23376: std::move_backward(__position.base(), __old_finish - __n, __old_finish) -23376: ; -23376: std::copy(__first, __last, __position); -23376: } -23376: else -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, __elems_after); -23376: ; -23376: std::__uninitialized_copy_a(__mid, __last, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish += __n - __elems_after; -23376: ; -23376: std::__uninitialized_move_a(__position.base(), -23376: __old_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish += __elems_after; -23376: ; -23376: std::copy(__first, __mid, __position); -23376: } -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(__n, "vector::_M_range_insert"); -23376: pointer __new_start(this->_M_allocate(__len)); -23376: pointer __new_finish(__new_start); -23376: try -23376: { -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (this->_M_impl._M_start, __position.base(), -23376: __new_start, _M_get_Tp_allocator()); -23376: __new_finish -23376: = std::__uninitialized_copy_a(__first, __last, -23376: __new_finish, -23376: _M_get_Tp_allocator()); -23376: __new_finish -23376: = std::__uninitialized_move_if_noexcept_a -23376: (__position.base(), this->_M_impl._M_finish, -23376: __new_finish, _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(__new_start, __new_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(__new_start, __len); -23376: throw; -23376: } -23376: ; -23376: std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: _M_deallocate(this->_M_impl._M_start, -23376: this->_M_impl._M_end_of_storage -23376: - this->_M_impl._M_start); -23376: this->_M_impl._M_start = __new_start; -23376: this->_M_impl._M_finish = __new_finish; -23376: this->_M_impl._M_end_of_storage = __new_start + __len; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: vector:: -23376: _M_reallocate(size_type __n) -23376: { -23376: _Bit_pointer __q = this->_M_allocate(__n); -23376: iterator __start(std::__addressof(*__q), 0); -23376: iterator __finish(_M_copy_aligned(begin(), end(), __start)); -23376: this->_M_deallocate(); -23376: this->_M_impl._M_start = __start; -23376: this->_M_impl._M_finish = __finish; -23376: this->_M_impl._M_end_of_storage = __q + _S_nword(__n); -23376: } -23376: -23376: template -23376: void -23376: vector:: -23376: _M_fill_insert(iterator __position, size_type __n, bool __x) -23376: { -23376: if (__n == 0) -23376: return; -23376: if (capacity() - size() >= __n) -23376: { -23376: std::copy_backward(__position, end(), -23376: this->_M_impl._M_finish + difference_type(__n)); -23376: std::fill(__position, __position + difference_type(__n), __x); -23376: this->_M_impl._M_finish += difference_type(__n); -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(__n, "vector::_M_fill_insert"); -23376: _Bit_pointer __q = this->_M_allocate(__len); -23376: iterator __start(std::__addressof(*__q), 0); -23376: iterator __i = _M_copy_aligned(begin(), __position, __start); -23376: std::fill(__i, __i + difference_type(__n), __x); -23376: iterator __finish = std::copy(__position, end(), -23376: __i + difference_type(__n)); -23376: this->_M_deallocate(); -23376: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); -23376: this->_M_impl._M_start = __start; -23376: this->_M_impl._M_finish = __finish; -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: vector:: -23376: _M_insert_range(iterator __position, _ForwardIterator __first, -23376: _ForwardIterator __last, std::forward_iterator_tag) -23376: { -23376: if (__first != __last) -23376: { -23376: size_type __n = std::distance(__first, __last); -23376: if (capacity() - size() >= __n) -23376: { -23376: std::copy_backward(__position, end(), -23376: this->_M_impl._M_finish -23376: + difference_type(__n)); -23376: std::copy(__first, __last, __position); -23376: this->_M_impl._M_finish += difference_type(__n); -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(__n, "vector::_M_insert_range"); -23376: _Bit_pointer __q = this->_M_allocate(__len); -23376: iterator __start(std::__addressof(*__q), 0); -23376: iterator __i = _M_copy_aligned(begin(), __position, __start); -23376: __i = std::copy(__first, __last, __i); -23376: iterator __finish = std::copy(__position, end(), __i); -23376: this->_M_deallocate(); -23376: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); -23376: this->_M_impl._M_start = __start; -23376: this->_M_impl._M_finish = __finish; -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: vector:: -23376: _M_insert_aux(iterator __position, bool __x) -23376: { -23376: if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) -23376: { -23376: std::copy_backward(__position, this->_M_impl._M_finish, -23376: this->_M_impl._M_finish + 1); -23376: *__position = __x; -23376: ++this->_M_impl._M_finish; -23376: } -23376: else -23376: { -23376: const size_type __len = -23376: _M_check_len(size_type(1), "vector::_M_insert_aux"); -23376: _Bit_pointer __q = this->_M_allocate(__len); -23376: iterator __start(std::__addressof(*__q), 0); -23376: iterator __i = _M_copy_aligned(begin(), __position, __start); -23376: *__i++ = __x; -23376: iterator __finish = std::copy(__position, end(), __i); -23376: this->_M_deallocate(); -23376: this->_M_impl._M_end_of_storage = __q + _S_nword(__len); -23376: this->_M_impl._M_start = __start; -23376: this->_M_impl._M_finish = __finish; -23376: } -23376: } -23376: -23376: template -23376: typename vector::iterator -23376: vector:: -23376: _M_erase(iterator __position) -23376: { -23376: if (__position + 1 != end()) -23376: std::copy(__position + 1, end(), __position); -23376: --this->_M_impl._M_finish; -23376: return __position; -23376: } -23376: -23376: template -23376: typename vector::iterator -23376: vector:: -23376: _M_erase(iterator __first, iterator __last) -23376: { -23376: if (__first != __last) -23376: _M_erase_at_end(std::copy(__last, end(), __first)); -23376: return __first; -23376: } -23376: -23376: -23376: template -23376: bool -23376: vector:: -23376: _M_shrink_to_fit() -23376: { -23376: if (capacity() - size() < int(_S_word_bit)) -23376: return false; -23376: try -23376: { -23376: _M_reallocate(size()); -23376: return true; -23376: } -23376: catch(...) -23376: { return false; } -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: size_t -23376: hash>:: -23376: operator()(const std::vector& __b) const noexcept -23376: { -23376: size_t __hash = 0; -23376: using std::_S_word_bit; -23376: using std::_Bit_type; -23376: -23376: const size_t __words = __b.size() / _S_word_bit; -23376: if (__words) -23376: { -23376: const size_t __clength = __words * sizeof(_Bit_type); -23376: __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); -23376: } -23376: -23376: const size_t __extrabits = __b.size() % _S_word_bit; -23376: if (__extrabits) -23376: { -23376: _Bit_type __hiword = *__b._M_impl._M_finish._M_p; -23376: __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); -23376: -23376: const size_t __clength -23376: = (__extrabits + 8 - 1) / 8; -23376: if (__words) -23376: __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); -23376: else -23376: __hash = std::_Hash_impl::hash(&__hiword, __clength); -23376: } -23376: -23376: return __hash; -23376: } -23376: -23376: -23376: } -23376: # 70 "/usr/include/c++/8/vector" 2 3 -23376: # 33 "../../src/Linear_Form_defs.hh" 2 -23376: -23376: -23376: # 34 "../../src/Linear_Form_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: template -23376: void swap(Linear_Form& x, Linear_Form& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Linear_Form& f1, const Linear_Form& f2); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(Variable v, const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Linear_Form& f, Variable v); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const C& n, const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f1, const Linear_Form& f2); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(Variable v, const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f, Variable v); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const C& n, const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator*(const C& n, const Linear_Form& f); -23376: -23376: -23376: -23376: template -23376: Linear_Form -23376: operator*(const Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator+=(Linear_Form& f1, const Linear_Form& f2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator+=(Linear_Form& f, Variable v); -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator+=(Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator-=(Linear_Form& f1, const Linear_Form& f2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator-=(Linear_Form& f, Variable v); -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator-=(Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator*=(Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator/=(Linear_Form& f, const C& n); -23376: -23376: -23376: -23376: template -23376: bool -23376: operator==(const Linear_Form& x, const Linear_Form& y); -23376: -23376: -23376: -23376: template -23376: bool -23376: operator!=(const Linear_Form& x, const Linear_Form& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: template -23376: std::ostream& operator<<(std::ostream& s, const Linear_Form& f); -23376: -23376: } -23376: -23376: } -23376: # 260 "../../src/Linear_Form_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Linear_Form { -23376: public: -23376: -23376: Linear_Form(); -23376: -23376: -23376: Linear_Form(const Linear_Form& f); -23376: -23376: -23376: ~Linear_Form(); -23376: -23376: -23376: explicit Linear_Form(const C& n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Form(Variable v); -23376: -23376: -23376: Linear_Form(const Linear_Expression& e); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: const C& coefficient(Variable v) const; -23376: -23376: -23376: const C& inhomogeneous_term() const; -23376: -23376: -23376: void negate(); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: bool OK() const; -23376: -23376: -23376: void m_swap(Linear_Form& y); -23376: # 336 "../../src/Linear_Form_defs.hh" -23376: bool overflows() const; -23376: # 365 "../../src/Linear_Form_defs.hh" -23376: void relative_error(Floating_Point_Format analyzed_format, -23376: Linear_Form& result) const; -23376: # 398 "../../src/Linear_Form_defs.hh" -23376: template -23376: bool intervalize(const FP_Oracle& oracle, C& result) const; -23376: -23376: private: -23376: -23376: static C zero; -23376: -23376: -23376: typedef std::vector vec_type; -23376: -23376: -23376: vec_type vec; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Form(dimension_type sz, bool); -23376: # 426 "../../src/Linear_Form_defs.hh" -23376: Linear_Form(Variable v, Variable w); -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: void extend(dimension_type sz); -23376: -23376: -23376: C& operator[](dimension_type i); -23376: -23376: -23376: const C& operator[](dimension_type i) const; -23376: -23376: friend Linear_Form -23376: operator+(const Linear_Form& f1, const Linear_Form& f2); -23376: friend Linear_Form -23376: operator+(const C& n, const Linear_Form& f); -23376: friend Linear_Form -23376: operator+(const Linear_Form& f, const C& n); -23376: friend Linear_Form -23376: operator+(Variable v, const Linear_Form& f); -23376: -23376: friend Linear_Form -23376: operator-(const Linear_Form& f); -23376: -23376: friend Linear_Form -23376: operator-(const Linear_Form& f1, const Linear_Form& f2); -23376: friend Linear_Form -23376: operator-(const C& n, const Linear_Form& f); -23376: friend Linear_Form -23376: operator-(const Linear_Form& f, const C& n); -23376: friend Linear_Form -23376: operator-(Variable v, const Linear_Form& f); -23376: friend Linear_Form -23376: operator-(const Linear_Form& f, Variable v); -23376: -23376: friend Linear_Form -23376: operator*(const C& n, const Linear_Form& f); -23376: friend Linear_Form -23376: operator*(const Linear_Form& f, const C& n); -23376: -23376: friend Linear_Form& -23376: operator+=(Linear_Form& f1, const Linear_Form& f2); -23376: friend Linear_Form& -23376: operator+=(Linear_Form& f, Variable v); -23376: friend Linear_Form& -23376: operator+=(Linear_Form& f, const C& n); -23376: -23376: friend Linear_Form& -23376: operator-=(Linear_Form& f1, const Linear_Form& f2); -23376: friend Linear_Form& -23376: operator-=(Linear_Form& f, Variable v); -23376: friend Linear_Form& -23376: operator-=(Linear_Form& f, const C& n); -23376: -23376: friend Linear_Form& -23376: operator*=(Linear_Form& f, const C& n); -23376: -23376: friend Linear_Form& -23376: operator/=(Linear_Form& f, const C& n); -23376: -23376: friend bool -23376: operator==(const Linear_Form& x, const Linear_Form& y); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators -23376: ::operator<<(std::ostream& s, const Linear_Form& f); -23376: }; -23376: -23376: # 1 "../../src/Linear_Form_inlines.hh" 1 -23376: # 28 "../../src/Linear_Form_inlines.hh" -23376: # 1 "/usr/include/c++/8/iostream" 1 3 -23376: # 36 "/usr/include/c++/8/iostream" 3 -23376: -23376: # 37 "/usr/include/c++/8/iostream" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 42 "/usr/include/c++/8/iostream" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 60 "/usr/include/c++/8/iostream" 3 -23376: extern istream cin; -23376: extern ostream cout; -23376: extern ostream cerr; -23376: extern ostream clog; -23376: -23376: -23376: extern wistream wcin; -23376: extern wostream wcout; -23376: extern wostream wcerr; -23376: extern wostream wclog; -23376: -23376: -23376: -23376: -23376: static ios_base::Init __ioinit; -23376: -23376: -23376: } -23376: # 29 "../../src/Linear_Form_inlines.hh" 2 -23376: -23376: -23376: -23376: # 31 "../../src/Linear_Form_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline dimension_type -23376: Linear_Form::max_space_dimension() { -23376: return vec_type().max_size() - 1; -23376: } -23376: -23376: template -23376: inline -23376: Linear_Form::Linear_Form() -23376: : vec(1, zero) { -23376: vec.reserve(compute_capacity(1, vec_type().max_size())); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Form::Linear_Form(dimension_type sz, bool) -23376: : vec(sz, zero) { -23376: vec.reserve(compute_capacity(sz, vec_type().max_size())); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Form::Linear_Form(const Linear_Form& f) -23376: : vec(f.vec) { -23376: } -23376: -23376: template -23376: inline -23376: Linear_Form::~Linear_Form() { -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_Form::size() const { -23376: return vec.size(); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Form::extend(dimension_type sz) { -23376: -23376: # 73 "../../src/Linear_Form_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 73 "../../src/Linear_Form_inlines.hh" -23376: ; -23376: vec.reserve(compute_capacity(sz, vec_type().max_size())); -23376: vec.resize(sz, zero); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Form::Linear_Form(const C& n) -23376: : vec(1, n) { -23376: vec.reserve(compute_capacity(1, vec_type().max_size())); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_Form::space_dimension() const { -23376: return size() - 1; -23376: } -23376: -23376: template -23376: inline const C& -23376: Linear_Form::coefficient(Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: return zero; -23376: } -23376: return vec[v.id()+1]; -23376: } -23376: -23376: template -23376: inline C& -23376: Linear_Form::operator[](dimension_type i) { -23376: -23376: # 103 "../../src/Linear_Form_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 103 "../../src/Linear_Form_inlines.hh" -23376: ; -23376: return vec[i]; -23376: } -23376: -23376: template -23376: inline const C& -23376: Linear_Form::operator[](dimension_type i) const { -23376: -23376: # 110 "../../src/Linear_Form_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 110 "../../src/Linear_Form_inlines.hh" -23376: ; -23376: return vec[i]; -23376: } -23376: -23376: template -23376: inline const C& -23376: Linear_Form::inhomogeneous_term() const { -23376: return vec[0]; -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Linear_Form::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator+(const Linear_Form& f) { -23376: return f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator+(const Linear_Form& f, const C& n) { -23376: return n + f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator+(const Linear_Form& f, const Variable v) { -23376: return v + f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator-(const Linear_Form& f, const C& n) { -23376: return -n + f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator-(const Variable v, const Variable w) { -23376: return Linear_Form(v, w); -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form -23376: operator*(const Linear_Form& f, const C& n) { -23376: return n * f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form& -23376: operator+=(Linear_Form& f, const C& n) { -23376: f[0] += n; -23376: return f; -23376: } -23376: -23376: -23376: template -23376: inline Linear_Form& -23376: operator-=(Linear_Form& f, const C& n) { -23376: f[0] -= n; -23376: return f; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const Linear_Form& x, const Linear_Form& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Form::m_swap(Linear_Form& y) { -23376: using std::swap; -23376: swap(vec, y.vec); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Form::ascii_dump(std::ostream& s) const { -23376: using namespace IO_Operators; -23376: dimension_type space_dim = space_dimension(); -23376: s << space_dim << "\n"; -23376: for (dimension_type i = 0; i <= space_dim; ++i) { -23376: const char separator = ' '; -23376: s << vec[i] << separator; -23376: } -23376: s << "\n"; -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_Form::ascii_load(std::istream& s) { -23376: using namespace IO_Operators; -23376: dimension_type new_dim; -23376: if (!(s >> new_dim)) { -23376: return false; -23376: } -23376: -23376: vec.resize(new_dim + 1, zero); -23376: for (dimension_type i = 0; i <= new_dim; ++i) { -23376: if (!(s >> vec[i])) { -23376: return false; -23376: } -23376: } -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: Linear_Form::overflows() const { -23376: if (!inhomogeneous_term().is_bounded()) { -23376: return true; -23376: } -23376: for (dimension_type i = space_dimension(); i-- > 0; ) { -23376: if (!coefficient(Variable(i)).is_bounded()) { -23376: return true; -23376: } -23376: } -23376: -23376: return false; -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(Linear_Form& x, Linear_Form& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 497 "../../src/Linear_Form_defs.hh" 2 -23376: # 29 "../../src/Float_inlines.hh" 2 -23376: -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 31 "../../src/Float_inlines.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline int -23376: float_ieee754_half::inf_sign() const { -23376: if (word == NEG_INF) { -23376: return -1; -23376: } -23376: if (word == POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_ieee754_half::is_nan() const { -23376: return (word & ~SGN_MASK) > POS_INF; -23376: } -23376: -23376: inline int -23376: float_ieee754_half::zero_sign() const { -23376: if (word == NEG_ZERO) { -23376: return -1; -23376: } -23376: if (word == POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_half::negate() { -23376: word ^= SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_ieee754_half::sign_bit() const { -23376: return (word & SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_half::dec() { -23376: --word; -23376: } -23376: -23376: inline void -23376: float_ieee754_half::inc() { -23376: ++word; -23376: } -23376: -23376: inline void -23376: float_ieee754_half::set_max(bool negative) { -23376: word = WRD_MAX; -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_half::build(bool negative, mpz_t mantissa, int exponent) { -23376: word = static_cast( -23376: # 91 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_get_ui -23376: # 91 "../../src/Float_inlines.hh" -23376: (mantissa) -23376: & ((1UL << MANTISSA_BITS) - 1)); -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: word |= static_cast(exponent_repr) << MANTISSA_BITS; -23376: } -23376: -23376: inline int -23376: float_ieee754_single::inf_sign() const { -23376: if (word == NEG_INF) { -23376: return -1; -23376: } -23376: if (word == POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_ieee754_single::is_nan() const { -23376: return (word & ~SGN_MASK) > POS_INF; -23376: } -23376: -23376: inline int -23376: float_ieee754_single::zero_sign() const { -23376: if (word == NEG_ZERO) { -23376: return -1; -23376: } -23376: if (word == POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_single::negate() { -23376: word ^= SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_ieee754_single::sign_bit() const { -23376: return (word & SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_single::dec() { -23376: --word; -23376: } -23376: -23376: inline void -23376: float_ieee754_single::inc() { -23376: ++word; -23376: } -23376: -23376: inline void -23376: float_ieee754_single::set_max(bool negative) { -23376: word = WRD_MAX; -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_single::build(bool negative, mpz_t mantissa, int exponent) { -23376: word = static_cast( -23376: # 158 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_get_ui -23376: # 158 "../../src/Float_inlines.hh" -23376: (mantissa) -23376: & ((1UL << MANTISSA_BITS) - 1)); -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: word |= static_cast(exponent_repr) << MANTISSA_BITS; -23376: } -23376: -23376: inline int -23376: float_ieee754_double::inf_sign() const { -23376: if (lsp != LSP_INF) { -23376: return 0; -23376: } -23376: if (msp == MSP_NEG_INF) { -23376: return -1; -23376: } -23376: if (msp == MSP_POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_ieee754_double::is_nan() const { -23376: const uint32_t a = msp & ~MSP_SGN_MASK; -23376: return a > MSP_POS_INF || (a == MSP_POS_INF && lsp != LSP_INF); -23376: } -23376: -23376: inline int -23376: float_ieee754_double::zero_sign() const { -23376: if (lsp != LSP_ZERO) { -23376: return 0; -23376: } -23376: if (msp == MSP_NEG_ZERO) { -23376: return -1; -23376: } -23376: if (msp == MSP_POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_double::negate() { -23376: msp ^= MSP_SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_ieee754_double::sign_bit() const { -23376: return (msp & MSP_SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_double::dec() { -23376: if (lsp == 0) { -23376: --msp; -23376: lsp = LSP_MAX; -23376: } -23376: else { -23376: --lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_double::inc() { -23376: if (lsp == LSP_MAX) { -23376: ++msp; -23376: lsp = 0; -23376: } -23376: else { -23376: ++lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_double::set_max(bool negative) { -23376: msp = MSP_MAX; -23376: lsp = LSP_MAX; -23376: if (negative) { -23376: msp |= MSP_SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_double::build(bool negative, mpz_t mantissa, int exponent) { -23376: unsigned long m; -23376: -23376: lsp = -23376: # 247 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_get_ui -23376: # 247 "../../src/Float_inlines.hh" -23376: (mantissa); -23376: -23376: # 248 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_tdiv_q_2exp -23376: # 248 "../../src/Float_inlines.hh" -23376: (mantissa, mantissa, 32); -23376: m = -23376: # 249 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_get_ui -23376: # 249 "../../src/Float_inlines.hh" -23376: (mantissa); -23376: -23376: -23376: -23376: -23376: -23376: msp = static_cast(m & ((1UL << (MANTISSA_BITS - 32)) - 1)); -23376: if (negative) { -23376: msp |= MSP_SGN_MASK; -23376: } -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: msp |= static_cast(exponent_repr) << (MANTISSA_BITS - 32); -23376: } -23376: -23376: inline int -23376: float_ibm_single::inf_sign() const { -23376: if (word == NEG_INF) { -23376: return -1; -23376: } -23376: if (word == POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_ibm_single::is_nan() const { -23376: return (word & ~SGN_MASK) > POS_INF; -23376: } -23376: -23376: inline int -23376: float_ibm_single::zero_sign() const { -23376: if (word == NEG_ZERO) { -23376: return -1; -23376: } -23376: if (word == POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_ibm_single::negate() { -23376: word ^= SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_ibm_single::sign_bit() const { -23376: return (word & SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_ibm_single::dec() { -23376: --word; -23376: } -23376: -23376: inline void -23376: float_ibm_single::inc() { -23376: ++word; -23376: } -23376: -23376: inline void -23376: float_ibm_single::set_max(bool negative) { -23376: word = WRD_MAX; -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_ibm_single::build(bool negative, mpz_t mantissa, int exponent) { -23376: word = static_cast( -23376: # 321 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_get_ui -23376: # 321 "../../src/Float_inlines.hh" -23376: (mantissa) -23376: & ((1UL << MANTISSA_BITS) - 1)); -23376: if (negative) { -23376: word |= SGN_MASK; -23376: } -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: word |= static_cast(exponent_repr) << MANTISSA_BITS; -23376: } -23376: -23376: inline int -23376: float_intel_double_extended::inf_sign() const { -23376: if (lsp != LSP_INF) { -23376: return 0; -23376: } -23376: const uint32_t a = msp & MSP_NEG_INF; -23376: if (a == MSP_NEG_INF) { -23376: return -1; -23376: } -23376: if (a == MSP_POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_intel_double_extended::is_nan() const { -23376: return (msp & MSP_POS_INF) == MSP_POS_INF -23376: && lsp != LSP_INF; -23376: } -23376: -23376: inline int -23376: float_intel_double_extended::zero_sign() const { -23376: if (lsp != LSP_ZERO) { -23376: return 0; -23376: } -23376: const uint32_t a = msp & MSP_NEG_INF; -23376: if (a == MSP_NEG_ZERO) { -23376: return -1; -23376: } -23376: if (a == MSP_POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_intel_double_extended::negate() { -23376: msp ^= MSP_SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_intel_double_extended::sign_bit() const { -23376: return (msp & MSP_SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_intel_double_extended::dec() { -23376: if ((lsp & LSP_DMAX) == 0) { -23376: --msp; -23376: lsp = ((msp & MSP_NEG_INF) == 0) ? LSP_DMAX : LSP_NMAX; -23376: } -23376: else { -23376: --lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_intel_double_extended::inc() { -23376: if ((lsp & LSP_DMAX) == LSP_DMAX) { -23376: ++msp; -23376: lsp = LSP_DMAX + 1; -23376: } -23376: else { -23376: ++lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_intel_double_extended::set_max(bool negative) { -23376: msp = MSP_MAX; -23376: lsp = LSP_NMAX; -23376: if (negative) { -23376: msp |= MSP_SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_intel_double_extended::build(bool negative, -23376: mpz_t mantissa, int exponent) { -23376: -23376: -23376: # 412 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_export -23376: # 412 "../../src/Float_inlines.hh" -23376: (&lsp, 0, -1, sizeof(lsp), 0, 0, mantissa); -23376: -23376: -23376: -23376: msp = (negative ? MSP_SGN_MASK : 0); -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: msp |= static_cast(exponent_repr); -23376: } -23376: -23376: inline int -23376: float_ieee754_quad::inf_sign() const { -23376: if (lsp != LSP_INF) { -23376: return 0; -23376: } -23376: if (msp == MSP_NEG_INF) { -23376: return -1; -23376: } -23376: if (msp == MSP_POS_INF) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline bool -23376: float_ieee754_quad::is_nan() const { -23376: return (msp & ~MSP_SGN_MASK) == MSP_POS_INF -23376: && lsp != LSP_INF; -23376: } -23376: -23376: inline int -23376: float_ieee754_quad::zero_sign() const { -23376: if (lsp != LSP_ZERO) { -23376: return 0; -23376: } -23376: if (msp == MSP_NEG_ZERO) { -23376: return -1; -23376: } -23376: if (msp == MSP_POS_ZERO) { -23376: return 1; -23376: } -23376: return 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_quad::negate() { -23376: msp ^= MSP_SGN_MASK; -23376: } -23376: -23376: inline bool -23376: float_ieee754_quad::sign_bit() const { -23376: return (msp & MSP_SGN_MASK) != 0; -23376: } -23376: -23376: inline void -23376: float_ieee754_quad::dec() { -23376: if (lsp == 0) { -23376: --msp; -23376: lsp = LSP_MAX; -23376: } -23376: else { -23376: --lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_quad::inc() { -23376: if (lsp == LSP_MAX) { -23376: ++msp; -23376: lsp = 0; -23376: } -23376: else { -23376: ++lsp; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_quad::set_max(bool negative) { -23376: msp = MSP_MAX; -23376: lsp = LSP_MAX; -23376: if (negative) { -23376: msp |= MSP_SGN_MASK; -23376: } -23376: } -23376: -23376: inline void -23376: float_ieee754_quad::build(bool negative, mpz_t mantissa, int exponent) { -23376: uint64_t parts[2]; -23376: -23376: # 500 "../../src/Float_inlines.hh" 3 4 -23376: __gmpz_export -23376: # 500 "../../src/Float_inlines.hh" -23376: (parts, 0, -1, sizeof(parts[0]), 0, 0, mantissa); -23376: lsp = parts[0]; -23376: msp = parts[1]; -23376: msp &= ((static_cast(1) << (MANTISSA_BITS - 64)) - 1); -23376: if (negative) { -23376: msp |= MSP_SGN_MASK; -23376: } -23376: const int exponent_repr = exponent + EXPONENT_BIAS; -23376: ((void) 0); -23376: msp |= static_cast(exponent_repr) << (MANTISSA_BITS - 64); -23376: } -23376: -23376: inline bool -23376: is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2) { -23376: return f1 < f2; -23376: } -23376: -23376: inline unsigned int -23376: msb_position(unsigned long long v) { -23376: return static_cast(((sizeof(v)) * static_cast(8))) - 1U - clz(v); -23376: } -23376: -23376: template -23376: inline void -23376: affine_form_image(std::map >& lf_store, -23376: const Variable var, -23376: const Linear_Form& lf) { -23376: -23376: lf_store[var.id()] = lf; -23376: -23376: discard_occurrences(lf_store, var); -23376: } -23376: # 582 "../../src/Float_inlines.hh" -23376: } -23376: # 520 "../../src/Float_defs.hh" 2 -23376: # 1 "../../src/Float_templates.hh" 1 -23376: # 30 "../../src/Float_templates.hh" -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: # 31 "../../src/Float_templates.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: const FP_Interval_Type& compute_absolute_error( -23376: const Floating_Point_Format analyzed_format) { -23376: typedef typename FP_Interval_Type::boundary_type analyzer_format; -23376: -23376: -23376: static const FP_Interval_Type ZERO_INTERVAL = FP_Interval_Type(0); -23376: -23376: static FP_Interval_Type ieee754_half_result = ZERO_INTERVAL; -23376: static FP_Interval_Type ieee754_single_result = ZERO_INTERVAL; -23376: static FP_Interval_Type ieee754_double_result = ZERO_INTERVAL; -23376: static FP_Interval_Type ibm_single_result = ZERO_INTERVAL; -23376: static FP_Interval_Type ieee754_quad_result = ZERO_INTERVAL; -23376: static FP_Interval_Type intel_double_extended_result = ZERO_INTERVAL; -23376: -23376: FP_Interval_Type* to_compute = -23376: # 49 "../../src/Float_templates.hh" 3 4 -23376: __null -23376: # 49 "../../src/Float_templates.hh" -23376: ; -23376: -23376: unsigned int f_base; -23376: int f_exponent_bias; -23376: unsigned int f_mantissa_bits; -23376: switch (analyzed_format) { -23376: case IEEE754_HALF: -23376: if (ieee754_half_result != ZERO_INTERVAL) { -23376: return ieee754_half_result; -23376: } -23376: to_compute = &ieee754_half_result; -23376: f_base = float_ieee754_half::BASE; -23376: f_exponent_bias = float_ieee754_half::EXPONENT_BIAS; -23376: f_mantissa_bits = float_ieee754_half::MANTISSA_BITS; -23376: break; -23376: case IEEE754_SINGLE: -23376: if (ieee754_single_result != ZERO_INTERVAL) { -23376: return ieee754_single_result; -23376: } -23376: -23376: to_compute = &ieee754_single_result; -23376: f_base = float_ieee754_single::BASE; -23376: f_exponent_bias = float_ieee754_single::EXPONENT_BIAS; -23376: f_mantissa_bits = float_ieee754_single::MANTISSA_BITS; -23376: break; -23376: case IEEE754_DOUBLE: -23376: if (ieee754_double_result != ZERO_INTERVAL) { -23376: return ieee754_double_result; -23376: } -23376: -23376: to_compute = &ieee754_double_result; -23376: f_base = float_ieee754_double::BASE; -23376: f_exponent_bias = float_ieee754_double::EXPONENT_BIAS; -23376: f_mantissa_bits = float_ieee754_double::MANTISSA_BITS; -23376: break; -23376: case IBM_SINGLE: -23376: if (ibm_single_result != ZERO_INTERVAL) { -23376: return ibm_single_result; -23376: } -23376: -23376: to_compute = &ibm_single_result; -23376: f_base = float_ibm_single::BASE; -23376: f_exponent_bias = float_ibm_single::EXPONENT_BIAS; -23376: f_mantissa_bits = float_ibm_single::MANTISSA_BITS; -23376: break; -23376: case IEEE754_QUAD: -23376: if (ieee754_quad_result != ZERO_INTERVAL) { -23376: return ieee754_quad_result; -23376: } -23376: -23376: to_compute = &ieee754_quad_result; -23376: f_base = float_ieee754_quad::BASE; -23376: f_exponent_bias = float_ieee754_quad::EXPONENT_BIAS; -23376: f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS; -23376: break; -23376: case INTEL_DOUBLE_EXTENDED: -23376: if (intel_double_extended_result != ZERO_INTERVAL) { -23376: return intel_double_extended_result; -23376: } -23376: -23376: to_compute = &intel_double_extended_result; -23376: f_base = float_intel_double_extended::BASE; -23376: f_exponent_bias = float_intel_double_extended::EXPONENT_BIAS; -23376: f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: analyzer_format omega; -23376: int power = static_cast(msb_position(f_base)) -23376: * ((1 - f_exponent_bias) - static_cast(f_mantissa_bits)); -23376: omega = std::max(static_cast(ldexp(1.0, power)), -23376: std::numeric_limits::denorm_min()); -23376: -23376: to_compute->build(i_constraint(GREATER_OR_EQUAL, -omega), -23376: i_constraint(LESS_OR_EQUAL, omega)); -23376: return *to_compute; -23376: } -23376: -23376: template -23376: void -23376: discard_occurrences(std::map >& lf_store, -23376: Variable var) { -23376: typedef Linear_Form FP_Linear_Form; -23376: typedef typename std::map::iterator Iter; -23376: for (Iter i = lf_store.begin(); i != lf_store.end(); ) { -23376: if ((i->second).coefficient(var) != 0) { -23376: i = lf_store.erase(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: template -23376: void upper_bound_assign(std::map >& ls1, -23376: const std::map >& ls2) { -23376: typedef Linear_Form FP_Linear_Form; -23376: typedef typename std::map::iterator Iter; -23376: typedef typename std::map::const_iterator Const_Iter; -23376: -23376: Const_Iter i2_end = ls2.end(); -23376: for (Iter i1 = ls1.begin(), i1_end = ls1.end(); i1 != i1_end; ) { -23376: Const_Iter i2 = ls2.find(i1->first); -23376: if ((i2 == i2_end) || (i1->second != i2->second)) { -23376: i1 = ls1.erase(i1); -23376: } -23376: else { -23376: ++i1; -23376: } -23376: } -23376: } -23376: -23376: } -23376: # 521 "../../src/Float_defs.hh" 2 -23376: # 32 "../../src/checked_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/cassert" 1 3 -23376: # 41 "/usr/include/c++/8/cassert" 3 -23376: -23376: # 42 "/usr/include/c++/8/cassert" 3 -23376: -23376: -23376: # 1 "/usr/include/assert.h" 1 3 4 -23376: # 44 "/usr/include/c++/8/cassert" 2 3 -23376: # 33 "../../src/checked_defs.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: # 471 "../../src/checked_defs.hh" -23376: template struct copy_function_struct; template inline void copy( Type1& arg1, const Type2& arg2) { return copy_function_struct::function(arg1, arg2); } -23376: -23376: template struct sgn_function_struct; template inline Result_Relation sgn(const From& arg) { return sgn_function_struct::function(arg); } -23376: -23376: template struct cmp_function_struct; template inline Result_Relation cmp(const Type1& arg1, const Type2& arg2) { return cmp_function_struct::function(arg1, arg2); } -23376: -23376: template struct classify_function_struct; template inline Result classify(const Type& arg, bool a1, bool a2, bool a3) { return classify_function_struct::function(arg, a1, a2, a3); } -23376: -23376: template struct is_nan_function_struct; template inline bool is_nan(const Type& arg) { return is_nan_function_struct::function(arg); } -23376: -23376: template struct is_minf_function_struct; template inline bool is_minf(const Type& arg) { return is_minf_function_struct::function(arg); } -23376: -23376: template struct is_pinf_function_struct; template inline bool is_pinf(const Type& arg) { return is_pinf_function_struct::function(arg); } -23376: -23376: template struct is_int_function_struct; template inline bool is_int(const Type& arg) { return is_int_function_struct::function(arg); } -23376: -23376: template struct assign_special_function_struct; template inline Result assign_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_function_struct::function(arg, a1, a2); } -23376: -23376: template struct construct_special_function_struct; template inline Result construct_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return construct_special_function_struct::function(arg, a1, a2); } -23376: -23376: template struct construct_function_struct; template inline Result construct( To& arg1, const From& arg2, Rounding_Dir a1) { return construct_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct assign_function_struct; template inline Result assign( To& arg1, const From& arg2, Rounding_Dir a1) { return assign_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct floor_function_struct; template inline Result floor( To& arg1, const From& arg2, Rounding_Dir a1) { return floor_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct ceil_function_struct; template inline Result ceil( To& arg1, const From& arg2, Rounding_Dir a1) { return ceil_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct trunc_function_struct; template inline Result trunc( To& arg1, const From& arg2, Rounding_Dir a1) { return trunc_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct neg_function_struct; template inline Result neg( To& arg1, const From& arg2, Rounding_Dir a1) { return neg_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct abs_function_struct; template inline Result abs( To& arg1, const From& arg2, Rounding_Dir a1) { return abs_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct sqrt_function_struct; template inline Result sqrt( To& arg1, const From& arg2, Rounding_Dir a1) { return sqrt_function_struct::function(arg1, arg2, a1); } -23376: -23376: template struct add_function_struct; template inline Result add( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct sub_function_struct; template inline Result sub( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct mul_function_struct; template inline Result mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return mul_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct div_function_struct; template inline Result div( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return div_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct rem_function_struct; template inline Result rem( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return rem_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct idiv_function_struct; template inline Result idiv( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return idiv_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct add_2exp_function_struct; template inline Result add_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct sub_2exp_function_struct; template inline Result sub_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct mul_2exp_function_struct; template inline Result mul_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct div_2exp_function_struct; template inline Result div_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct smod_2exp_function_struct; template inline Result smod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct umod_2exp_function_struct; template inline Result umod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_function_struct::function(arg1, arg2, a1, a2); } -23376: -23376: -23376: template struct add_mul_function_struct; template inline Result add_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_mul_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct sub_mul_function_struct; template inline Result sub_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_mul_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct gcd_function_struct; template inline Result gcd( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return gcd_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct gcdext_function_struct; template inline Result gcdext( To1& arg1, To2& arg2, To3& arg3, const From1& arg4, const From2& arg5, Rounding_Dir a1) { return gcdext_function_struct ::function(arg1, arg2, arg3, arg4, arg5, a1); } -23376: -23376: -23376: template struct lcm_function_struct; template inline Result lcm( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return lcm_function_struct ::function(arg1, arg2, arg3, a1); } -23376: -23376: -23376: template struct input_function_struct; template inline Result input( Type& arg, std::istream& a1, Rounding_Dir a2) { return input_function_struct::function(arg, a1, a2); } -23376: -23376: template struct output_function_struct; template inline Result output(std::ostream& b1, const Type& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_function_struct::function(b1, arg, a1, a2); } -23376: # 577 "../../src/checked_defs.hh" -23376: template -23376: Result round(To& to, Result r, Rounding_Dir dir); -23376: -23376: Result input_mpq(mpq_class& to, std::istream& is); -23376: -23376: std::string float_mpq_to_string(mpq_class& q); -23376: -23376: } -23376: -23376: struct Minus_Infinity { -23376: static const Result_Class vclass = VC_MINUS_INFINITY; -23376: }; -23376: struct Plus_Infinity { -23376: static const Result_Class vclass = VC_PLUS_INFINITY; -23376: }; -23376: struct Not_A_Number { -23376: static const Result_Class vclass = VC_NAN; -23376: }; -23376: -23376: template -23376: struct Is_Special : public False { }; -23376: -23376: template <> -23376: struct Is_Special : public True {}; -23376: -23376: template <> -23376: struct Is_Special : public True {}; -23376: -23376: template <> -23376: struct Is_Special : public True {}; -23376: -23376: extern Minus_Infinity MINUS_INFINITY; -23376: extern Plus_Infinity PLUS_INFINITY; -23376: extern Not_A_Number NOT_A_NUMBER; -23376: -23376: -23376: -23376: -23376: template -23376: struct Checked_Number_Transparent_Policy { -23376: -23376: enum const_bool_value_check_overflow { check_overflow = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) }; -23376: -23376: -23376: enum const_bool_value_check_div_zero { check_div_zero = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mod { check_inf_mod = (false) }; -23376: -23376: -23376: enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) }; -23376: -23376: -23376: enum const_bool_value_has_nan { has_nan = (std::numeric_limits::has_quiet_NaN) }; -23376: -23376: -23376: enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits::has_infinity) }; -23376: -23376: -23376: -23376: -23376: -23376: enum const_bool_value_convertible { convertible = (true) }; -23376: -23376: -23376: enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (false) }; -23376: -23376: -23376: enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) }; -23376: -23376: -23376: -23376: -23376: -23376: static const Rounding_Dir ROUND_DEFAULT_CONSTRUCTOR = ROUND_NATIVE; -23376: -23376: -23376: -23376: -23376: -23376: static const Rounding_Dir ROUND_DEFAULT_OPERATOR = ROUND_NATIVE; -23376: -23376: -23376: -23376: -23376: -23376: static const Rounding_Dir ROUND_DEFAULT_INPUT = ROUND_NATIVE; -23376: -23376: -23376: -23376: -23376: -23376: static const Rounding_Dir ROUND_DEFAULT_OUTPUT = ROUND_NATIVE; -23376: -23376: -23376: -23376: -23376: -23376: static const Rounding_Dir ROUND_DEFAULT_FUNCTION = ROUND_NATIVE; -23376: -23376: -23376: -23376: -23376: -23376: static void handle_result(Result r); -23376: }; -23376: -23376: } -23376: -23376: -23376: -23376: # 1 "../../src/checked_inlines.hh" 1 -23376: # 41 "../../src/checked_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: -23376: template -23376: struct Safe_Conversion : public False { -23376: }; -23376: template -23376: struct Safe_Conversion : public True { -23376: }; -23376: # 59 "../../src/checked_inlines.hh" -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: # 104 "../../src/checked_inlines.hh" -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: # 174 "../../src/checked_inlines.hh" -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: template <> struct Safe_Conversion : public True { }; -23376: template <> struct Safe_Conversion : public True { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct construct_function_struct { -23376: static inline Result function(Type& to, const Type& from, Rounding_Dir) { -23376: new(&to) Type(from); -23376: return V_EQ; -23376: } -23376: }; -23376: -23376: template -23376: struct construct_function_struct { -23376: static inline Result function(To& to, const From& from, Rounding_Dir dir) { -23376: new(&to) To(); -23376: return assign(to, from, dir); -23376: } -23376: }; -23376: -23376: template -23376: struct construct_special_function_struct { -23376: static inline Result function(To& to, Result_Class r, Rounding_Dir dir) { -23376: new(&to) To(); -23376: return assign_special(to, r, dir); -23376: } -23376: }; -23376: -23376: template -23376: inline Result -23376: assign_exact(To& to, const From& from, Rounding_Dir) { -23376: to = from; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, void>::type -23376: copy_generic(Type& to, const Type& from) { -23376: to = from; -23376: } -23376: -23376: template -23376: inline Result -23376: abs_generic(To& to, const From& from, Rounding_Dir dir) { -23376: if (from < 0) { -23376: return neg(to, from, dir); -23376: } -23376: else { -23376: return assign(to, from, dir); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: gcd_exact_no_abs(To& to, const From& x, const From& y) { -23376: To w_x = x; -23376: To w_y = y; -23376: To remainder; -23376: while (w_y != 0) { -23376: -23376: -23376: -23376: rem(remainder, w_x, w_y, -23376: ROUND_NOT_NEEDED); -23376: w_x = w_y; -23376: w_y = remainder; -23376: } -23376: to = w_x; -23376: } -23376: -23376: template -23376: inline Result -23376: gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: gcd_exact_no_abs(to, x, y); -23376: return abs(to, to, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: gcdext_exact(To1& to, To2& s, To3& t, const From1& x, const From2& y, -23376: Rounding_Dir dir) { -23376: -23376: -23376: -23376: -23376: if (y == 0) { -23376: if (x == 0) { -23376: s = 0; -23376: t = 1; -23376: return V_EQ; -23376: } -23376: else { -23376: if (x < 0) { -23376: s = -1; -23376: } -23376: else { -23376: s = 1; -23376: } -23376: t = 0; -23376: return abs(to, x, dir); -23376: } -23376: } -23376: -23376: s = 1; -23376: t = 0; -23376: bool negative_x = x < 0; -23376: bool negative_y = y < 0; -23376: -23376: Result r; -23376: r = abs(to, x, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: -23376: From2 a_y; -23376: r = abs(a_y, y, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (to == a_y) { -23376: goto sign_check; -23376: } -23376: -23376: -23376: { -23376: To2 v1 = 0; -23376: To3 v2 = 1; -23376: To1 v3 = static_cast(a_y); -23376: while (true) { -23376: To1 q = to / v3; -23376: -23376: To1 t3 = to - q*v3; -23376: To2 t1 = s - static_cast(q)*v1; -23376: To3 t2 = t - static_cast(q)*v2; -23376: s = v1; -23376: t = v2; -23376: to = v3; -23376: if (t3 == 0) { -23376: break; -23376: } -23376: v1 = t1; -23376: v2 = t2; -23376: v3 = t3; -23376: } -23376: } -23376: -23376: -23376: sign_check: -23376: -23376: if (negative_x) { -23376: r = neg(s, s, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: } -23376: if (negative_y) { -23376: return neg(t, t, dir); -23376: } -23376: return V_EQ; -23376: -23376: } -23376: -23376: template -23376: inline Result -23376: lcm_gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (x == 0 || y == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: To a_x; -23376: To a_y; -23376: Result r; -23376: r = abs(a_x, x, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: r = abs(a_y, y, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: To gcd; -23376: gcd_exact_no_abs(gcd, a_x, a_y); -23376: -23376: -23376: -23376: div(to, a_x, gcd, ROUND_NOT_NEEDED); -23376: return mul(to, to, a_y, dir); -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: sgn_generic(const Type& x) { -23376: if (x > 0) { -23376: return VR_GT; -23376: } -23376: if (x == 0) { -23376: return VR_EQ; -23376: } -23376: return VR_LT; -23376: } -23376: -23376: template -23376: struct Safe_Int_Comparison : public False { -23376: }; -23376: -23376: template -23376: struct Safe_Int_Comparison::value && C_Integer::value)>::type> -23376: : public Bool<(C_Integer::is_signed -23376: ? (C_Integer::is_signed -23376: || sizeof(T2) < sizeof(T1) -23376: || sizeof(T2) < sizeof(int)) -23376: : (!C_Integer::is_signed -23376: || sizeof(T1) < sizeof(T2) -23376: || sizeof(T1) < sizeof(int)))> { -23376: }; -23376: -23376: -23376: template -23376: inline typename Enable_If<(Safe_Int_Comparison::value -23376: || Safe_Conversion::value -23376: || Safe_Conversion::value), bool>::type -23376: lt(const T1& x, const T2& y) { -23376: return x < y; -23376: } -23376: template -23376: inline typename Enable_If<(Safe_Int_Comparison::value -23376: || Safe_Conversion::value -23376: || Safe_Conversion::value), bool>::type -23376: le(const T1& x, const T2& y) { -23376: return x <= y; -23376: } -23376: template -23376: inline typename Enable_If<(Safe_Int_Comparison::value -23376: || Safe_Conversion::value -23376: || Safe_Conversion::value), bool>::type -23376: eq(const T1& x, const T2& y) { -23376: return x == y; -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: lt(const S& x, const U& y) { -23376: return x < 0 || static_cast::other_type>(x) < y; -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: lt(const U& x, const S& y) { -23376: return y >= 0 && x < static_cast::other_type>(y); -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: le(const S& x, const U& y) { -23376: return x < 0 || static_cast::other_type>(x) <= y; -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: le(const U& x, const S& y) { -23376: return y >= 0 && x <= static_cast::other_type>(y); -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: eq(const S& x, const U& y) { -23376: return x >= 0 && static_cast::other_type>(x) == y; -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Int_Comparison::value -23376: && C_Integer::value -23376: && C_Integer::is_signed), bool>::type -23376: eq(const U& x, const S& y) { -23376: return y >= 0 && x == static_cast::other_type>(y); -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Conversion::value -23376: && !Safe_Conversion::value -23376: && (!C_Integer::value || !C_Integer::value)), bool>::type -23376: eq(const T1& x, const T2& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; T1& tmp = holder_tmp.item(); -23376: Result r = assign_r(tmp, y, ROUND_CHECK); -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: return r == V_EQ && x == tmp; -23376: } -23376: -23376: template -23376: inline typename Enable_If<(!Safe_Conversion::value -23376: && !Safe_Conversion::value -23376: && (!C_Integer::value || !C_Integer::value)), bool>::type -23376: lt(const T1& x, const T2& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; T1& tmp = holder_tmp.item(); -23376: Result r = assign_r(tmp, y, ROUND_UP); -23376: if (!result_representable(r)) { -23376: return true; -23376: } -23376: switch (result_relation(r)) { -23376: case VR_EQ: -23376: case VR_LT: -23376: case VR_LE: -23376: return x < tmp; -23376: default: -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: inline typename -23376: Enable_If<(!Safe_Conversion::value -23376: && !Safe_Conversion::value -23376: && (!C_Integer::value || !C_Integer::value)), bool>::type -23376: le(const T1& x, const T2& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; T1& tmp = holder_tmp.item(); -23376: Result r = assign_r(tmp, y, (ROUND_UP | ROUND_STRICT_RELATION)); -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: if (!result_representable(r)) { -23376: return true; -23376: } -23376: switch (result_relation(r)) { -23376: case VR_EQ: -23376: return x <= tmp; -23376: case VR_LT: -23376: return x < tmp; -23376: case VR_LE: -23376: case VR_GE: -23376: case VR_LGE: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: default: -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: lt_p(const Type1& x, const Type2& y) { -23376: return lt(x, y); -23376: } -23376: -23376: template -23376: inline bool -23376: le_p(const Type1& x, const Type2& y) { -23376: return le(x, y); -23376: } -23376: -23376: template -23376: inline bool -23376: eq_p(const Type1& x, const Type2& y) { -23376: return eq(x, y); -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: cmp_generic(const Type1& x, const Type2& y) { -23376: if (lt(y, x)) { -23376: return VR_GT; -23376: } -23376: if (lt(x, y)) { -23376: return VR_LT; -23376: } -23376: return VR_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_nan(Type& to, Result r) { -23376: assign_special(to, VC_NAN, ROUND_IGNORE); -23376: return r; -23376: } -23376: -23376: template -23376: inline Result -23376: input_generic(Type& to, std::istream& is, Rounding_Dir dir) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: Result r = input_mpq(q, is); -23376: Result_Class c = result_class(r); -23376: switch (c) { -23376: case VC_MINUS_INFINITY: -23376: case VC_PLUS_INFINITY: -23376: return assign_special(to, c, dir); -23376: case VC_NAN: -23376: return assign_nan(to, r); -23376: default: -23376: break; -23376: } -23376: ((void) 0); -23376: return assign(to, q, dir); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 701 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/checked_int_inlines.hh" 1 -23376: # 28 "../../src/checked_int_inlines.hh" -23376: # 1 "/usr/include/c++/8/cerrno" 1 3 -23376: # 39 "/usr/include/c++/8/cerrno" 3 -23376: -23376: # 40 "/usr/include/c++/8/cerrno" 3 -23376: # 29 "../../src/checked_int_inlines.hh" 2 -23376: # 1 "/usr/include/c++/8/cstdlib" 1 3 -23376: # 39 "/usr/include/c++/8/cstdlib" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdlib" 3 -23376: # 30 "../../src/checked_int_inlines.hh" 2 -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 31 "../../src/checked_int_inlines.hh" 2 -23376: # 43 "../../src/checked_int_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: # 71 "../../src/checked_int_inlines.hh" -23376: template -23376: struct Extended_Int { -23376: static const Type plus_infinity = C_Integer::max; -23376: static const Type minus_infinity = ((C_Integer::min >= 0) -23376: ? (C_Integer::max - 1) -23376: : C_Integer::min); -23376: static const Type not_a_number -23376: = ((C_Integer::min >= 0) -23376: ? (C_Integer::max - 2 * (Policy::has_infinity ? 1 : 0)) -23376: : (C_Integer::min + (Policy::has_infinity ? 1 : 0))); -23376: static const Type min -23376: = (C_Integer::min -23376: + ((C_Integer::min >= 0) -23376: ? 0 -23376: : ((Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0)))); -23376: static const Type max -23376: = (C_Integer::max -23376: - ((C_Integer::min >= 0) -23376: ? (2 * (Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0)) -23376: : (Policy::has_infinity ? 1 : 0))); -23376: }; -23376: -23376: template -23376: inline Result -23376: set_neg_overflow_int(To& to, Rounding_Dir dir) { -23376: if (round_up(dir)) { -23376: to = Extended_Int::min; -23376: return V_LT_INF; -23376: } -23376: else { -23376: if (Policy::has_infinity) { -23376: to = Extended_Int::minus_infinity; -23376: return V_GT_MINUS_INFINITY; -23376: } -23376: return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: set_pos_overflow_int(To& to, Rounding_Dir dir) { -23376: if (round_down(dir)) { -23376: to = Extended_Int::max; -23376: return V_GT_SUP; -23376: } -23376: else { -23376: if (Policy::has_infinity) { -23376: to = Extended_Int::plus_infinity; -23376: return V_LT_PLUS_INFINITY; -23376: } -23376: return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: round_lt_int_no_overflow(To& to, Rounding_Dir dir) { -23376: if (round_down(dir)) { -23376: --to; -23376: return V_GT; -23376: } -23376: return V_LT; -23376: } -23376: -23376: template -23376: inline Result -23376: round_gt_int_no_overflow(To& to, Rounding_Dir dir) { -23376: if (round_up(dir)) { -23376: ++to; -23376: return V_LT; -23376: } -23376: return V_GT; -23376: } -23376: -23376: template -23376: inline Result -23376: round_lt_int(To& to, Rounding_Dir dir) { -23376: if (round_down(dir)) { -23376: if (to == Extended_Int::min) { -23376: if (Policy::has_infinity) { -23376: to = Extended_Int::minus_infinity; -23376: return V_GT_MINUS_INFINITY; -23376: } -23376: return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE; -23376: } -23376: else { -23376: --to; -23376: return V_GT; -23376: } -23376: } -23376: return V_LT; -23376: } -23376: -23376: template -23376: inline Result -23376: round_gt_int(To& to, Rounding_Dir dir) { -23376: if (round_up(dir)) { -23376: if (to == Extended_Int::max) { -23376: if (Policy::has_infinity) { -23376: to = Extended_Int::plus_infinity; -23376: return V_LT_PLUS_INFINITY; -23376: } -23376: return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE; -23376: } -23376: else { -23376: ++to; -23376: return V_LT; -23376: } -23376: } -23376: return V_GT; -23376: } -23376: -23376: template struct copy_function_struct { static inline void function( char& arg1, const char &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( signed char& arg1, const signed char &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( signed short& arg1, const signed short &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( signed int& arg1, const signed int &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( signed long& arg1, const signed long &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( signed long long& arg1, const signed long long &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( unsigned char& arg1, const unsigned char &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( unsigned short& arg1, const unsigned short &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( unsigned int& arg1, const unsigned int &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( unsigned long& arg1, const unsigned long &arg2) { return copy_generic(arg1, arg2); } }; -23376: template struct copy_function_struct { static inline void function( unsigned long long& arg1, const unsigned long long &arg2) { return copy_generic(arg1, arg2); } }; -23376: -23376: template -23376: inline Result -23376: classify_int(const Type v, bool nan, bool inf, bool sign) { -23376: if (Policy::has_nan -23376: && (nan || sign) -23376: && v == Extended_Int::not_a_number) { -23376: return V_NAN; -23376: } -23376: if (!inf && !sign) { -23376: return V_LGE; -23376: } -23376: if (Policy::has_infinity) { -23376: if (v == Extended_Int::minus_infinity) { -23376: return inf ? V_EQ_MINUS_INFINITY : V_LT; -23376: } -23376: if (v == Extended_Int::plus_infinity) { -23376: return inf ? V_EQ_PLUS_INFINITY : V_GT; -23376: } -23376: } -23376: if (sign) { -23376: if (v < 0) { -23376: return V_LT; -23376: } -23376: if (v > 0) { -23376: return V_GT; -23376: } -23376: return V_EQ; -23376: } -23376: return V_LGE; -23376: } -23376: -23376: template struct classify_function_struct { static inline Result function(const char& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const signed char& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const signed short& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const signed int& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const signed long& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const signed long long& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const unsigned char& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const unsigned short& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const unsigned int& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const unsigned long& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: template struct classify_function_struct { static inline Result function(const unsigned long long& arg, bool a1, bool a2, bool a3) { return classify_int(arg, a1, a2, a3); } }; -23376: -23376: template -23376: inline bool -23376: is_nan_int(const Type v) { -23376: return Policy::has_nan && v == Extended_Int::not_a_number; -23376: } -23376: -23376: template struct is_nan_function_struct { static inline bool function(const char& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const signed char& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const signed short& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const signed int& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const signed long& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const signed long long& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const unsigned char& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const unsigned short& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const unsigned int& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const unsigned long& arg) { return is_nan_int(arg); } }; -23376: template struct is_nan_function_struct { static inline bool function(const unsigned long long& arg) { return is_nan_int(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_minf_int(const Type v) { -23376: return Policy::has_infinity -23376: && v == Extended_Int::minus_infinity; -23376: } -23376: -23376: template struct is_minf_function_struct { static inline bool function(const char& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const signed char& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const signed short& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const signed int& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const signed long& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const signed long long& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const unsigned char& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const unsigned short& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const unsigned int& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const unsigned long& arg) { return is_minf_int(arg); } }; -23376: template struct is_minf_function_struct { static inline bool function(const unsigned long long& arg) { return is_minf_int(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_pinf_int(const Type v) { -23376: return Policy::has_infinity -23376: && v == Extended_Int::plus_infinity; -23376: } -23376: -23376: template struct is_pinf_function_struct { static inline bool function(const char& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const signed char& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const signed short& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const signed int& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const signed long& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const signed long long& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const unsigned char& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const unsigned short& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const unsigned int& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const unsigned long& arg) { return is_pinf_int(arg); } }; -23376: template struct is_pinf_function_struct { static inline bool function(const unsigned long long& arg) { return is_pinf_int(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_int_int(const Type v) { -23376: return !is_nan(v); -23376: } -23376: -23376: template struct is_int_function_struct { static inline bool function(const char& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const signed char& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const signed short& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const signed int& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const signed long& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const signed long long& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const unsigned char& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const unsigned short& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const unsigned int& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const unsigned long& arg) { return is_int_int(arg); } }; -23376: template struct is_int_function_struct { static inline bool function(const unsigned long long& arg) { return is_int_int(arg); } }; -23376: -23376: template -23376: inline Result -23376: assign_special_int(Type& v, Result_Class c, Rounding_Dir dir) { -23376: ((void) 0); -23376: switch (c) { -23376: case VC_NAN: -23376: if (Policy::has_nan) { -23376: v = Extended_Int::not_a_number; -23376: return V_NAN; -23376: } -23376: return V_NAN | V_UNREPRESENTABLE; -23376: case VC_MINUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: v = Extended_Int::minus_infinity; -23376: return V_EQ_MINUS_INFINITY; -23376: } -23376: if (round_up(dir)) { -23376: v = Extended_Int::min; -23376: return V_LT_INF; -23376: } -23376: return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE; -23376: case VC_PLUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: v = Extended_Int::plus_infinity; -23376: return V_EQ_PLUS_INFINITY; -23376: } -23376: if (round_down(dir)) { -23376: v = Extended_Int::max; -23376: return V_GT_SUP; -23376: } -23376: return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN | V_UNREPRESENTABLE; -23376: } -23376: } -23376: -23376: template struct assign_special_function_struct { static inline Result function( char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( signed char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( signed short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( signed int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( signed long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( signed long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( unsigned char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( unsigned short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( unsigned int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( unsigned long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: template struct assign_special_function_struct { static inline Result function( unsigned long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int(arg, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: assign_signed_int_signed_int(To& to, const From from, Rounding_Dir dir) { -23376: if (sizeof(To) < sizeof(From) -23376: || (sizeof(To) == sizeof(From) -23376: && (Extended_Int::min > Extended_Int::min -23376: || Extended_Int::max < Extended_Int::max))) { -23376: if (((To_Policy::check_overflow) ? (((from) < (static_cast(Extended_Int::min)))) : ( -23376: # 368 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 368 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: -23376: ) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? (((from) > (static_cast(Extended_Int::max)))) : ( -23376: # 373 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 373 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: to = static_cast(from); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_signed_int_unsigned_int(To& to, const From from, Rounding_Dir dir) { -23376: if (sizeof(To) <= sizeof(From)) { -23376: if (((To_Policy::check_overflow) ? (from > static_cast(Extended_Int::max)) : ( -23376: # 387 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 387 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: to = static_cast(from); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_unsigned_int_signed_int(To& to, const From from, Rounding_Dir dir) { -23376: if (((To_Policy::check_overflow) ? (from < 0) : ( -23376: # 399 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 399 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (sizeof(To) < sizeof(From)) { -23376: if (((To_Policy::check_overflow) ? (from > static_cast(Extended_Int::max)) : ( -23376: # 403 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 403 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: to = static_cast(from); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_unsigned_int_unsigned_int(To& to, const From from, Rounding_Dir dir) { -23376: if (sizeof(To) < sizeof(From) -23376: || (sizeof(To) == sizeof(From) -23376: && Extended_Int::max < Extended_Int::max)) { -23376: if (((To_Policy::check_overflow) ? (((from) > (static_cast(Extended_Int::max)))) : ( -23376: # 418 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 418 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: to = static_cast(from); -23376: return V_EQ; -23376: } -23376: # 453 "../../src/checked_int_inlines.hh" -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned short& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed short& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed int& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( signed long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int(arg1, arg2, a1); } }; template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_int_float(To& to, const From from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: # 565 "../../src/checked_int_inlines.hh" -23376: if (((To_Policy::check_overflow) ? ((from < Extended_Int::min)) : ( -23376: # 565 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 565 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? ((from > Extended_Int::max)) : ( -23376: # 569 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 569 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: -23376: if (round_not_requested(dir)) { -23376: to = from; -23376: return V_LGE; -23376: } -23376: From i_from = rint(from); -23376: to = i_from; -23376: if (from == i_from) { -23376: return V_EQ; -23376: } -23376: if (round_direct(ROUND_UP)) { -23376: return round_lt_int(to, dir); -23376: } -23376: if (round_direct(ROUND_DOWN)) { -23376: return round_gt_int(to, dir); -23376: } -23376: if (from < i_from) { -23376: return round_lt_int(to, dir); -23376: } -23376: ((void) 0); -23376: return round_gt_int(to, dir); -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float(arg1, arg2, a1); } }; -23376: # 639 "../../src/checked_int_inlines.hh" -23376: template -23376: inline Result -23376: assign_signed_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) { -23376: if (sizeof(To) <= sizeof(signed long)) { -23376: if (!To_Policy::check_overflow) { -23376: to = from.get_si(); -23376: return V_EQ; -23376: } -23376: if (from.fits_slong_p()) { -23376: signed long v = from.get_si(); -23376: if (((v) < ((Extended_Int::min)))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (((v) > ((Extended_Int::max)))) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = v; -23376: return V_EQ; -23376: } -23376: } -23376: else { -23376: mpz_srcptr m = from.get_mpz_t(); -23376: size_t sz = -23376: # 661 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_size -23376: # 661 "../../src/checked_int_inlines.hh" -23376: (m); -23376: if (sz <= sizeof(To) / sizeof(mp_limb_t)) { -23376: if (sz == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: To v; -23376: -23376: # 668 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_export -23376: # 668 "../../src/checked_int_inlines.hh" -23376: (&v, 0, -1, sizeof(To), 0, 0, m); -23376: if (v >= 0) { -23376: if (::sgn(from) < 0) { -23376: return neg(to, v, dir); -23376: } -23376: to = v; -23376: return V_EQ; -23376: } -23376: } -23376: } -23376: return (::sgn(from) < 0) -23376: ? set_neg_overflow_int(to, dir) -23376: : set_pos_overflow_int(to, dir); -23376: } -23376: -23376: -23376: -23376: -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_unsigned_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) { -23376: if (((To_Policy::check_overflow) ? (::sgn(from) < 0) : ( -23376: # 695 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 695 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (sizeof(To) <= sizeof(unsigned long)) { -23376: if (!To_Policy::check_overflow) { -23376: to = static_cast(from.get_ui()); -23376: return V_EQ; -23376: } -23376: if (from.fits_ulong_p()) { -23376: const unsigned long v = from.get_ui(); -23376: if (((v) > ((Extended_Int::max)))) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = static_cast(v); -23376: return V_EQ; -23376: } -23376: } -23376: else { -23376: const mpz_srcptr m = from.get_mpz_t(); -23376: const size_t sz = -23376: # 714 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_size -23376: # 714 "../../src/checked_int_inlines.hh" -23376: (m); -23376: if (sz <= sizeof(To) / sizeof(mp_limb_t)) { -23376: if (sz == 0) { -23376: to = 0; -23376: } -23376: else { -23376: -23376: # 720 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_export -23376: # 720 "../../src/checked_int_inlines.hh" -23376: (&to, 0, -1, sizeof(To), 0, 0, m); -23376: } -23376: return V_EQ; -23376: } -23376: } -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_int_mpq(To& to, const mpq_class& from, Rounding_Dir dir) { -23376: mpz_srcptr n = from.get_num().get_mpz_t(); -23376: mpz_srcptr d = from.get_den().get_mpz_t(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpz_class& q = holder_q.item(); -23376: mpz_ptr q_z = q.get_mpz_t(); -23376: if (round_not_requested(dir)) { -23376: -23376: # 745 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_tdiv_q -23376: # 745 "../../src/checked_int_inlines.hh" -23376: (q_z, n, d); -23376: Result r = assign(to, q, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: return V_LGE; -23376: } -23376: mpz_t rem; -23376: int sign; -23376: -23376: # 754 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_init -23376: # 754 "../../src/checked_int_inlines.hh" -23376: (rem); -23376: -23376: # 755 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_tdiv_qr -23376: # 755 "../../src/checked_int_inlines.hh" -23376: (q_z, rem, n, d); -23376: sign = -23376: # 756 "../../src/checked_int_inlines.hh" 3 4 -23376: (( -23376: # 756 "../../src/checked_int_inlines.hh" -23376: rem -23376: # 756 "../../src/checked_int_inlines.hh" 3 4 -23376: )->_mp_size < 0 ? -1 : ( -23376: # 756 "../../src/checked_int_inlines.hh" -23376: rem -23376: # 756 "../../src/checked_int_inlines.hh" 3 4 -23376: )->_mp_size > 0) -23376: # 756 "../../src/checked_int_inlines.hh" -23376: ; -23376: -23376: # 757 "../../src/checked_int_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 757 "../../src/checked_int_inlines.hh" -23376: (rem); -23376: Result r = assign(to, q, dir); -23376: if (r != V_EQ) { -23376: return r; -23376: } -23376: switch (sign) { -23376: case -1: -23376: return round_lt_int(to, dir); -23376: case 1: -23376: return round_gt_int(to, dir); -23376: default: -23376: return V_EQ; -23376: } -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( signed long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( unsigned long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq(arg1, arg2, a1); } }; -23376: # 821 "../../src/checked_int_inlines.hh" -23376: template -23376: struct Larger; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (true) }; -23376: enum const_bool_value_use_for_add { use_for_add = (true) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (true) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast16_t type_for_neg; -23376: typedef int_fast16_t type_for_add; -23376: typedef int_fast16_t type_for_sub; -23376: typedef int_fast16_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (true) }; -23376: enum const_bool_value_use_for_add { use_for_add = (true) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (true) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast16_t type_for_neg; -23376: typedef int_fast16_t type_for_add; -23376: typedef int_fast16_t type_for_sub; -23376: typedef int_fast16_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (true) }; -23376: enum const_bool_value_use_for_add { use_for_add = (true) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (true) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast16_t type_for_neg; -23376: typedef uint_fast16_t type_for_add; -23376: typedef int_fast16_t type_for_sub; -23376: typedef uint_fast16_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (true) }; -23376: enum const_bool_value_use_for_add { use_for_add = (true) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (true) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast32_t type_for_neg; -23376: typedef int_fast32_t type_for_add; -23376: typedef int_fast32_t type_for_sub; -23376: typedef int_fast32_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (true) }; -23376: enum const_bool_value_use_for_add { use_for_add = (true) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (true) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast32_t type_for_neg; -23376: typedef uint_fast32_t type_for_add; -23376: typedef int_fast32_t type_for_sub; -23376: typedef uint_fast32_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = ((32 == 64)) }; -23376: enum const_bool_value_use_for_add { use_for_add = ((32 == 64)) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = ((32 == 64)) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef int_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef int_fast64_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = ((32 == 64)) }; -23376: enum const_bool_value_use_for_add { use_for_add = ((32 == 64)) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = ((32 == 64)) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (true) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef uint_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef uint_fast64_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (false) }; -23376: enum const_bool_value_use_for_add { use_for_add = (false) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (false) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = ((32 == 32)) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef int_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef int_fast64_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (false) }; -23376: enum const_bool_value_use_for_add { use_for_add = (false) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (false) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = ((32 == 32)) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef uint_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef uint_fast64_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (false) }; -23376: enum const_bool_value_use_for_add { use_for_add = (false) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (false) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (false) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef int_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef int_fast64_t type_for_mul; -23376: }; -23376: -23376: template <> -23376: struct Larger { -23376: enum const_bool_value_use_for_neg { use_for_neg = (false) }; -23376: enum const_bool_value_use_for_add { use_for_add = (false) }; -23376: enum const_bool_value_use_for_sub { use_for_sub = (false) }; -23376: enum const_bool_value_use_for_mul { use_for_mul = (false) }; -23376: typedef int_fast64_t type_for_neg; -23376: typedef uint_fast64_t type_for_add; -23376: typedef int_fast64_t type_for_sub; -23376: typedef uint_fast64_t type_for_mul; -23376: }; -23376: -23376: template -23376: inline Result -23376: neg_int_larger(Type& to, const Type x, Rounding_Dir dir) { -23376: typename Larger::type_for_neg l = x; -23376: l = -l; -23376: return assign(to, l, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: add_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: typename Larger::type_for_add l = x; -23376: l += y; -23376: return assign(to, l, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: typename Larger::type_for_sub l = x; -23376: l -= y; -23376: return assign(to, l, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: mul_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: typename Larger::type_for_mul l = x; -23376: l *= y; -23376: return assign(to, l, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: neg_signed_int(Type& to, const Type from, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_neg) { -23376: return neg_int_larger(to, from, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? ((from < -Extended_Int::max)) : ( -23376: # 1003 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1003 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = -from; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: neg_unsigned_int(Type& to, const Type from, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_neg) { -23376: return neg_int_larger(to, from, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? (from != 0) : ( -23376: # 1017 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1017 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: to = from; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: add_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_add) { -23376: return add_int_larger(to, x, y, dir); -23376: } -23376: if (To_Policy::check_overflow) { -23376: if (y >= 0) { -23376: if (x > Extended_Int::max - y) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: else if (x < Extended_Int::min - y) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: } -23376: to = x + y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: add_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_add) { -23376: return add_int_larger(to, x, y, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? ((x > Extended_Int::max - y)) : ( -23376: # 1052 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1052 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = x + y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: sub_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_sub) { -23376: return sub_int_larger(to, x, y, dir); -23376: } -23376: if (To_Policy::check_overflow) { -23376: if (y >= 0) { -23376: if (x < Extended_Int::min + y) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: } -23376: else if (x > Extended_Int::max + y) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: to = x - y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: sub_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_sub) { -23376: return sub_int_larger(to, x, y, dir); -23376: } -23376: if (((To_Policy::check_overflow) ? ((x < Extended_Int::min + y)) : ( -23376: # 1088 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1088 "../../src/checked_int_inlines.hh" -23376: , false)) -23376: ) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: to = x - y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: mul_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_mul) { -23376: return mul_int_larger(to, x, y, dir); -23376: } -23376: if (!To_Policy::check_overflow) { -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: if (y == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: if (y == -1) { -23376: return neg_signed_int(to, x, dir); -23376: } -23376: if (x >= 0) { -23376: if (y > 0) { -23376: if (x > Extended_Int::max / y) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: else { -23376: if (x > Extended_Int::min / y) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: } -23376: } -23376: else { -23376: if (y < 0) { -23376: if (x < Extended_Int::max / y) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: } -23376: else { -23376: if (x < Extended_Int::min / y) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: } -23376: } -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: mul_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_overflow && Larger::use_for_mul) { -23376: return mul_int_larger(to, x, y, dir); -23376: } -23376: if (!To_Policy::check_overflow) { -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: if (y == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: if (x > Extended_Int::max / y) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: div_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1168 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1168 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: if (To_Policy::check_overflow && y == -1) { -23376: return neg_signed_int(to, x, dir); -23376: } -23376: to = x / y; -23376: if (round_not_requested(dir)) { -23376: return V_LGE; -23376: } -23376: if (y == -1) { -23376: return V_EQ; -23376: } -23376: Type m = x % y; -23376: if (m < 0) { -23376: return round_lt_int_no_overflow(to, dir); -23376: } -23376: else if (m > 0) { -23376: return round_gt_int_no_overflow(to, dir); -23376: } -23376: else { -23376: return V_EQ; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: div_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1197 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1197 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: to = x / y; -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: Type m = x % y; -23376: if (m == 0) { -23376: return V_EQ; -23376: } -23376: return round_gt_int(to, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: idiv_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1215 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1215 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: if (To_Policy::check_overflow && y == -1) { -23376: return neg_signed_int(to, x, dir); -23376: } -23376: to = x / y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: idiv_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1229 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1229 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: to = x / y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: rem_signed_int(Type& to, const Type x, const Type y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1240 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1240 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_MOD_ZERO); -23376: } -23376: to = (y == -1) ? 0 : (x % y); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: rem_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (y == 0) : ( -23376: # 1251 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1251 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_MOD_ZERO); -23376: } -23376: to = x % y; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: div_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: to = 0; -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: if (x == 0) { -23376: return V_EQ; -23376: } -23376: return round_gt_int_no_overflow(to, dir); -23376: } -23376: to = x >> exp; -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: if (x & ((Type(1) << exp) - 1)) { -23376: return round_gt_int_no_overflow(to, dir); -23376: } -23376: else { -23376: return V_EQ; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: div_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (x < 0) { -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: to = 0; -23376: if (round_not_requested(dir)) { -23376: return V_LE; -23376: } -23376: return round_lt_int_no_overflow(to, dir); -23376: } -23376: typedef typename C_Integer::other_type UType; -23376: UType ux = x; -23376: ux = -ux; -23376: to = ~Type(~-(ux >> exp)); -23376: if (round_not_requested(dir)) { -23376: return V_LE; -23376: } -23376: if (ux & ((UType(1) << exp) -1)) { -23376: return round_lt_int_no_overflow(to, dir); -23376: } -23376: return V_EQ; -23376: } -23376: else { -23376: if (exp >= ((sizeof(Type)) * static_cast(8)) - 1) { -23376: to = 0; -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: if (x == 0) { -23376: return V_EQ; -23376: } -23376: return round_gt_int_no_overflow(to, dir); -23376: } -23376: to = x >> exp; -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: if (x & ((Type(1) << exp) - 1)) { -23376: return round_gt_int_no_overflow(to, dir); -23376: } -23376: else { -23376: return V_EQ; -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: add_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (!To_Policy::check_overflow) { -23376: to = x + (Type(1) << exp); -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: Type n = Type(1) << exp; -23376: return add_unsigned_int(to, x, n, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: add_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (!To_Policy::check_overflow) { -23376: to = x + (Type(1) << exp); -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: if (exp == ((sizeof(Type)) * static_cast(8)) - 1) { -23376: Type n = -2 * (Type(1) << (exp - 1)); -23376: return sub_signed_int(to, x, n, dir); -23376: } -23376: else { -23376: Type n = Type(1) << exp; -23376: return add_signed_int(to, x, n, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sub_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (!To_Policy::check_overflow) { -23376: to = x - (Type(1) << exp); -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: Type n = Type(1) << exp; -23376: return sub_unsigned_int(to, x, n, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (!To_Policy::check_overflow) { -23376: to = x - (Type(1) << exp); -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: if (exp == ((sizeof(Type)) * static_cast(8)) - 1) { -23376: Type n = -2 * (Type(1) << (exp - 1)); -23376: return add_signed_int(to, x, n, dir); -23376: } -23376: else { -23376: Type n = Type(1) << exp; -23376: return sub_signed_int(to, x, n, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: mul_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (!To_Policy::check_overflow) { -23376: to = x << exp; -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: if (x == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: if (x > Extended_Int::max >> exp) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = x << exp; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: mul_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (x < 0) { -23376: if (!To_Policy::check_overflow) { -23376: to = x * (Type(1) << exp); -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: typedef typename C_Integer::other_type UType; -23376: UType mask = UType(-1) << (((sizeof(Type)) * static_cast(8)) - exp - 1); -23376: UType ux = x; -23376: if ((ux & mask) != mask) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: ux <<= exp; -23376: Type n = ~(Type(~ux)); -23376: if (((n) < ((Extended_Int::min)))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: to = n; -23376: } -23376: else { -23376: if (!To_Policy::check_overflow) { -23376: to = x << exp; -23376: return V_EQ; -23376: } -23376: if (exp >= ((sizeof(Type)) * static_cast(8)) - 1) { -23376: if (x == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: if (x > Extended_Int::max >> exp) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = x << exp; -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: smod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (exp > ((sizeof(Type)) * static_cast(8))) { -23376: to = x; -23376: } -23376: else { -23376: Type v = (exp == ((sizeof(Type)) * static_cast(8)) ? x : (x & ((Type(1) << exp) - 1))); -23376: if (v >= (Type(1) << (exp - 1))) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: else { -23376: to = v; -23376: } -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: smod_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir) { -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: to = x; -23376: } -23376: else { -23376: Type m = Type(1) << (exp - 1); -23376: to = (x & (m - 1)) - (x & m); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: umod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir) { -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: to = x; -23376: } -23376: else { -23376: to = x & ((Type(1) << exp) - 1); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: umod_2exp_signed_int(Type& to, const Type x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: if (exp >= ((sizeof(Type)) * static_cast(8))) { -23376: if (x < 0) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: to = x; -23376: } -23376: else { -23376: to = x & ((Type(1) << exp) - 1); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline void -23376: isqrt_rem(Type& q, Type& r, const Type from) { -23376: q = 0; -23376: r = from; -23376: Type t(1); -23376: for (t <<= ((sizeof(Type)) * static_cast(8)) - 2; t != 0; t >>= 2) { -23376: Type s = q + t; -23376: if (s <= r) { -23376: r -= s; -23376: q = s + t; -23376: } -23376: q >>= 1; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sqrt_unsigned_int(Type& to, const Type from, Rounding_Dir dir) { -23376: Type rem; -23376: isqrt_rem(to, rem, from); -23376: if (round_not_requested(dir)) { -23376: return V_GE; -23376: } -23376: if (rem == 0) { -23376: return V_EQ; -23376: } -23376: return round_gt_int(to, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sqrt_signed_int(Type& to, const Type from, Rounding_Dir dir) { -23376: if (((To_Policy::check_sqrt_neg) ? (from < 0) : ( -23376: # 1566 "../../src/checked_int_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 1566 "../../src/checked_int_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_SQRT_NEG); -23376: } -23376: return sqrt_unsigned_int(to, from, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: add_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: Type z; -23376: Result r = mul(z, x, y, dir); -23376: switch (result_overflow(r)) { -23376: case 0: -23376: return add(to, to, z, dir); -23376: case -1: -23376: if (to <= 0) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: return assign_nan(to, V_UNKNOWN_NEG_OVERFLOW); -23376: case 1: -23376: if (to >= 0) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: return assign_nan(to, V_UNKNOWN_POS_OVERFLOW); -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sub_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: Type z; -23376: Result r = mul(z, x, y, dir); -23376: switch (result_overflow(r)) { -23376: case 0: -23376: return sub(to, to, z, dir); -23376: case -1: -23376: if (to >= 0) { -23376: return set_pos_overflow_int(to, dir); -23376: } -23376: return assign_nan(to, V_UNKNOWN_NEG_OVERFLOW); -23376: case 1: -23376: if (to <= 0) { -23376: return set_neg_overflow_int(to, dir); -23376: } -23376: return assign_nan(to, V_UNKNOWN_POS_OVERFLOW); -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: output_char(std::ostream& os, Type& from, -23376: const Numeric_Format&, Rounding_Dir) { -23376: os << int(from); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: output_int(std::ostream& os, Type& from, const Numeric_Format&, Rounding_Dir) { -23376: os << from; -23376: return V_EQ; -23376: } -23376: -23376: -23376: -23376: -23376: template struct floor_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct floor_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct floor_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct floor_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct ceil_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct ceil_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct ceil_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct trunc_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct trunc_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct trunc_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct neg_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return neg_signed_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return neg_signed_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return neg_signed_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return neg_signed_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return neg_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct neg_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct neg_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: template struct neg_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return neg_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct add_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct add_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct add_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct sub_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct sub_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct sub_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct mul_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return mul_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return mul_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return mul_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return mul_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return mul_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct mul_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct mul_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct mul_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return mul_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct div_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return div_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return div_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return div_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return div_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return div_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct div_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct div_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct div_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return div_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct idiv_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return idiv_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return idiv_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return idiv_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return idiv_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return idiv_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct idiv_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct idiv_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct idiv_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return idiv_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct rem_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return rem_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return rem_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return rem_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return rem_signed_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return rem_signed_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct rem_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct rem_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: template struct rem_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return rem_unsigned_int(arg1, arg2, arg3, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct add_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct add_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct add_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct add_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct sub_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct sub_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct sub_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct sub_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct mul_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct mul_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct mul_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct mul_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct div_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct div_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct div_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct div_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct smod_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct smod_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct smod_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct smod_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct umod_2exp_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct umod_2exp_function_struct { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: template struct umod_2exp_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: template struct umod_2exp_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int(arg1, arg2, a1, a2); } }; -23376: -23376: -23376: -23376: -23376: template struct sqrt_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return sqrt_signed_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return sqrt_signed_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return sqrt_signed_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return sqrt_signed_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return sqrt_signed_int(arg1, arg2, a1); } }; -23376: -23376: template struct sqrt_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct sqrt_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: template struct sqrt_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct abs_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return abs_generic(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return abs_generic(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return abs_generic(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return abs_generic(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return abs_generic(arg1, arg2, a1); } }; -23376: -23376: template struct abs_function_struct { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct abs_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: template struct abs_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template struct gcd_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct gcd_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return gcd_exact(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct gcdext_function_struct { static inline Result function( char& arg1, char &arg2, char &arg3, const char &arg4, const char &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: template struct gcdext_function_struct { static inline Result function( signed char& arg1, signed char &arg2, signed char &arg3, const signed char &arg4, const signed char &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( signed short& arg1, signed short &arg2, signed short &arg3, const signed short &arg4, const signed short &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( signed int& arg1, signed int &arg2, signed int &arg3, const signed int &arg4, const signed int &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( signed long& arg1, signed long &arg2, signed long &arg3, const signed long &arg4, const signed long &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( signed long long& arg1, signed long long &arg2, signed long long &arg3, const signed long long &arg4, const signed long long &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( unsigned char& arg1, unsigned char &arg2, unsigned char &arg3, const unsigned char &arg4, const unsigned char &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( unsigned short& arg1, unsigned short &arg2, unsigned short &arg3, const unsigned short &arg4, const unsigned short &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( unsigned int& arg1, unsigned int &arg2, unsigned int &arg3, const unsigned int &arg4, const unsigned int &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( unsigned long& arg1, unsigned long &arg2, unsigned long &arg3, const unsigned long &arg4, const unsigned long &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: template struct gcdext_function_struct { static inline Result function( unsigned long long& arg1, unsigned long long &arg2, unsigned long long &arg3, const unsigned long long &arg4, const unsigned long long &arg5, Rounding_Dir a1) { return gcdext_exact(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: -23376: -23376: -23376: template struct lcm_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: template struct lcm_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct sgn_function_struct { static inline Result_Relation function(const char& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const signed char& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const signed short& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const signed int& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const signed long& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const signed long long& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const unsigned char& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const unsigned short& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const unsigned int& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const unsigned long& arg) { return sgn_generic(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const unsigned long long& arg) { return sgn_generic(arg); } }; -23376: -23376: template struct cmp_function_struct { static inline Result_Relation function(const char& arg1, const char &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const signed char& arg1, const signed char &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const signed short& arg1, const signed short &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const signed int& arg1, const signed int &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const signed long& arg1, const signed long &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const signed long long& arg1, const signed long long &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const unsigned char& arg1, const unsigned char &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const unsigned short& arg1, const unsigned short &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const unsigned int& arg1, const unsigned int &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const unsigned long& arg1, const unsigned long &arg2) { return cmp_generic(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const unsigned long long& arg1, const unsigned long long &arg2) { return cmp_generic(arg1, arg2); } }; -23376: -23376: template struct add_mul_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct add_mul_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_mul_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct sub_mul_function_struct { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: template struct sub_mul_function_struct { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_mul_int(arg1, arg2, arg3, a1); } }; -23376: -23376: template struct input_function_struct { static inline Result function( char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( signed char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( signed short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( signed int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( signed long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( signed long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( unsigned char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( unsigned short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( unsigned int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( unsigned long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct input_function_struct { static inline Result function( unsigned long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const signed char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const signed short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const signed int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const signed long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const signed long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const unsigned char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const unsigned short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const unsigned int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const unsigned long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const unsigned long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int(b1, arg, a1, a2); } }; -23376: -23376: } -23376: -23376: } -23376: # 702 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/checked_float_inlines.hh" 1 -23376: # 28 "../../src/checked_float_inlines.hh" -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: # 29 "../../src/checked_float_inlines.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: -23376: inline float -23376: multiply_add(float x, float y, float z) { -23376: -23376: -23376: -23376: -23376: return x*y + z; -23376: -23376: } -23376: -23376: inline double -23376: multiply_add(double x, double y, double z) { -23376: -23376: -23376: -23376: -23376: return x*y + z; -23376: -23376: } -23376: -23376: inline long double -23376: multiply_add(long double x, long double y, long double z) { -23376: -23376: -23376: -23376: -23376: return x*y + z; -23376: -23376: } -23376: -23376: -23376: inline float -23376: round_to_integer(float x) { -23376: return rintf(x); -23376: } -23376: -23376: -23376: inline double -23376: round_to_integer(double x) { -23376: return rint(x); -23376: } -23376: -23376: -23376: inline long double -23376: round_to_integer(long double x) { -23376: return rintl(x); -23376: } -23376: # 99 "../../src/checked_float_inlines.hh" -23376: inline bool -23376: fpu_direct_rounding(Rounding_Dir dir) { -23376: return round_direct(dir) || round_not_requested(dir); -23376: } -23376: -23376: inline bool -23376: fpu_inverse_rounding(Rounding_Dir dir) { -23376: return round_inverse(dir); -23376: } -23376: # 133 "../../src/checked_float_inlines.hh" -23376: inline void -23376: limit_precision(const float& v) { -23376: PPL_CC_FLUSH(v); -23376: } -23376: -23376: inline void -23376: limit_precision(const double& v) { -23376: PPL_CC_FLUSH(v); -23376: } -23376: -23376: inline void -23376: limit_precision(const long double&) { -23376: } -23376: -23376: template -23376: inline Result -23376: classify_float(const T v, bool nan, bool inf, bool sign) { -23376: Float f(v); -23376: if ((nan || sign) && ((Policy::has_nan) ? (f.u.binary.is_nan()) : ( -23376: # 151 "../../src/checked_float_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 151 "../../src/checked_float_inlines.hh" -23376: , false))) { -23376: return V_NAN; -23376: } -23376: if (inf) { -23376: if (Policy::has_infinity) { -23376: int sign_inf = f.u.binary.inf_sign(); -23376: if (sign_inf < 0) { -23376: return V_EQ_MINUS_INFINITY; -23376: } -23376: if (sign_inf > 0) { -23376: return V_EQ_PLUS_INFINITY; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: } -23376: } -23376: if (sign) { -23376: if (v < 0) { -23376: return V_LT; -23376: } -23376: if (v > 0) { -23376: return V_GT; -23376: } -23376: return V_EQ; -23376: } -23376: return V_LGE; -23376: } -23376: -23376: template -23376: inline bool -23376: is_nan_float(const T v) { -23376: Float f(v); -23376: return ((Policy::has_nan) ? (f.u.binary.is_nan()) : ( -23376: # 184 "../../src/checked_float_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 184 "../../src/checked_float_inlines.hh" -23376: , false)); -23376: } -23376: -23376: template -23376: inline bool -23376: is_inf_float(const T v) { -23376: Float f(v); -23376: return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() != 0)) : ( -23376: # 191 "../../src/checked_float_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 191 "../../src/checked_float_inlines.hh" -23376: , false)); -23376: } -23376: template -23376: inline bool -23376: is_minf_float(const T v) { -23376: Float f(v); -23376: return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() < 0)) : ( -23376: # 197 "../../src/checked_float_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 197 "../../src/checked_float_inlines.hh" -23376: , false)); -23376: } -23376: -23376: template -23376: inline bool -23376: is_pinf_float(const T v) { -23376: Float f(v); -23376: return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() > 0)) : ( -23376: # 204 "../../src/checked_float_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 204 "../../src/checked_float_inlines.hh" -23376: , false)); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: is_int_float(const T v) { -23376: return round_to_integer(v) == v; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_special_float(T& v, Result_Class c, Rounding_Dir) { -23376: ((void) 0); -23376: switch (c) { -23376: case VC_MINUS_INFINITY: -23376: v = - -23376: # 220 "../../src/checked_float_inlines.hh" 3 4 -23376: (__builtin_huge_val ()) -23376: # 220 "../../src/checked_float_inlines.hh" -23376: ; -23376: return V_EQ_MINUS_INFINITY; -23376: case VC_PLUS_INFINITY: -23376: v = -23376: # 223 "../../src/checked_float_inlines.hh" 3 4 -23376: (__builtin_huge_val ()) -23376: # 223 "../../src/checked_float_inlines.hh" -23376: ; -23376: return V_EQ_PLUS_INFINITY; -23376: case VC_NAN: -23376: v = -23376: # 226 "../../src/checked_float_inlines.hh" 3 4 -23376: (__builtin_nanf ("")) -23376: # 226 "../../src/checked_float_inlines.hh" -23376: ; -23376: return V_NAN; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN | V_UNREPRESENTABLE; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: pred_float(T& v) { -23376: Float f(v); -23376: ((void) 0); -23376: ((void) 0); -23376: if (f.u.binary.zero_sign() > 0) { -23376: f.u.binary.negate(); -23376: f.u.binary.inc(); -23376: } -23376: else if (f.u.binary.sign_bit()) { -23376: f.u.binary.inc(); -23376: } -23376: else { -23376: f.u.binary.dec(); -23376: } -23376: v = f.value(); -23376: } -23376: -23376: template -23376: inline void -23376: succ_float(T& v) { -23376: Float f(v); -23376: ((void) 0); -23376: ((void) 0); -23376: if (f.u.binary.zero_sign() < 0) { -23376: f.u.binary.negate(); -23376: f.u.binary.inc(); -23376: } -23376: else if (!f.u.binary.sign_bit()) { -23376: f.u.binary.inc(); -23376: } -23376: else { -23376: f.u.binary.dec(); -23376: } -23376: v = f.value(); -23376: } -23376: -23376: template -23376: inline Result -23376: round_lt_float(To& to, Rounding_Dir dir) { -23376: if (round_down(dir)) { -23376: pred_float(to); -23376: return V_GT; -23376: } -23376: return V_LT; -23376: } -23376: -23376: template -23376: inline Result -23376: round_gt_float(To& to, Rounding_Dir dir) { -23376: if (round_up(dir)) { -23376: succ_float(to); -23376: return V_LT; -23376: } -23376: return V_GT; -23376: } -23376: -23376: -23376: template -23376: inline void -23376: prepare_inexact(Rounding_Dir dir) { -23376: if (Policy::fpu_check_inexact -23376: && !round_not_needed(dir) && round_strict_relation(dir)) { -23376: fpu_reset_inexact(); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: result_relation(Rounding_Dir dir) { -23376: if (Policy::fpu_check_inexact -23376: && !round_not_needed(dir) && round_strict_relation(dir)) { -23376: switch (fpu_check_inexact()) { -23376: case 0: -23376: return V_EQ; -23376: case -1: -23376: goto unknown; -23376: case 1: -23376: break; -23376: } -23376: switch (round_dir(dir)) { -23376: case ROUND_DOWN: -23376: return V_GT; -23376: case ROUND_UP: -23376: return V_LT; -23376: default: -23376: return V_NE; -23376: } -23376: } -23376: else { -23376: unknown: -23376: switch (round_dir(dir)) { -23376: case ROUND_DOWN: -23376: return V_GE; -23376: case ROUND_UP: -23376: return V_LE; -23376: default: -23376: return V_LGE; -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_float_exact(To& to, const From from, Rounding_Dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: to = from; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_float_inexact(To& to, const From from, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = from; -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: From tmp = -from; -23376: to = tmp; -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(from); -23376: to = from; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_float(To& to, const From from, Rounding_Dir dir) { -23376: if (sizeof(From) > sizeof(To)) { -23376: return assign_float_float_inexact(to, from, dir); -23376: } -23376: else { -23376: return assign_float_float_exact(to, from, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: floor_float(Type& to, const Type from, Rounding_Dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (fpu_direct_rounding(ROUND_DOWN)) { -23376: to = round_to_integer(from); -23376: } -23376: else if (fpu_inverse_rounding(ROUND_DOWN)) { -23376: to = round_to_integer(-from); -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(ROUND_DOWN)); -23376: limit_precision(from); -23376: to = round_to_integer(from); -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: ceil_float(Type& to, const Type from, Rounding_Dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (fpu_direct_rounding(ROUND_UP)) { -23376: to = round_to_integer(from); -23376: } -23376: else if (fpu_inverse_rounding(ROUND_UP)) { -23376: to = round_to_integer(-from); -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(ROUND_UP)); -23376: limit_precision(from); -23376: to = round_to_integer(from); -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: trunc_float(Type& to, const Type from, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (from >= 0) { -23376: return floor(to, from, dir); -23376: } -23376: else { -23376: return ceil(to, from, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: neg_float(Type& to, const Type from, Rounding_Dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: to = -from; -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: add_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_add_inf -23376: && is_inf_float(x) && x == -y) { -23376: return assign_nan(to, V_INF_ADD_INF); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = x + y; -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = -x - y; -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: to = x + y; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_sub_inf -23376: && is_inf_float(x) && x == y) { -23376: return assign_nan(to, V_INF_SUB_INF); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = x - y; -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = y - x; -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: to = x - y; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_mul_zero -23376: && ((x == 0 && is_inf_float(y)) -23376: || -23376: (y == 0 && is_inf_float(x)))) { -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = x * y; -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = x * -y; -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: to = x * y; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: div_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_div_inf -23376: && is_inf_float(x) && is_inf_float(y)) { -23376: return assign_nan(to, V_INF_DIV_INF); -23376: } -23376: if (To_Policy::check_div_zero && y == 0) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = x / y; -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = x / -y; -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: to = x / y; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: idiv_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: Type temp; -23376: -23376: dir = round_dir(dir); -23376: Result r = div(temp, x, y, dir); -23376: if (result_class(r) != VC_NORMAL) { -23376: to = temp; -23376: return r; -23376: } -23376: Result r1 = trunc(to, temp, ROUND_NOT_NEEDED); -23376: ((void) 0); -23376: if (r == V_EQ || to != temp) { -23376: return r1; -23376: } -23376: -23376: return (dir == ROUND_UP) ? V_LE : V_GE; -23376: } -23376: -23376: template -23376: inline Result -23376: rem_float(Type& to, const Type x, const Type y, Rounding_Dir) { -23376: if (To_Policy::check_inf_mod && is_inf_float(x)) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: if (To_Policy::check_div_zero && y == 0) { -23376: return assign_nan(to, V_MOD_ZERO); -23376: } -23376: to = std::fmod(x, y); -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return V_EQ; -23376: } -23376: -23376: struct Float_2exp { -23376: enum const_bool_value_has_nan { has_nan = (false) }; -23376: enum const_bool_value_has_infinity { has_infinity = (false) }; -23376: }; -23376: -23376: template -23376: inline Result -23376: add_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: ((void) 0); -23376: return -23376: add(to, -23376: x, -23376: Type(1ULL << exp), -23376: dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: ((void) 0); -23376: return -23376: sub(to, -23376: x, -23376: Type(1ULL << exp), -23376: dir); -23376: } -23376: -23376: template -23376: inline Result -23376: mul_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: ((void) 0); -23376: return -23376: mul(to, -23376: x, -23376: Type(1ULL << exp), -23376: dir); -23376: } -23376: -23376: template -23376: inline Result -23376: div_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: ((void) 0); -23376: return -23376: div(to, -23376: x, -23376: Type(1ULL << exp), -23376: dir); -23376: } -23376: -23376: template -23376: inline Result -23376: smod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (To_Policy::check_inf_mod && is_inf_float(x)) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: ((void) 0); -23376: Type m = 1ULL << exp; -23376: rem_float(to, x, m, ROUND_IGNORE); -23376: Type m2 = m / 2; -23376: if (to < -m2) { -23376: return add_float(to, to, m, dir); -23376: } -23376: else if (to >= m2) { -23376: return sub_float(to, to, m, dir); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: umod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (To_Policy::check_inf_mod && is_inf_float(x)) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: ((void) 0); -23376: Type m = 1ULL << exp; -23376: rem_float(to, x, m, ROUND_IGNORE); -23376: if (to < 0) { -23376: return add_float(to, to, m, dir); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: abs_float(Type& to, const Type from, Rounding_Dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: to = std::abs(from); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: sqrt_float(Type& to, const Type from, Rounding_Dir dir) { -23376: if (To_Policy::fpu_check_nan_result && is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (To_Policy::check_sqrt_neg && from < 0) { -23376: return assign_nan(to, V_SQRT_NEG); -23376: } -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = std::sqrt(from); -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(from); -23376: to = std::sqrt(from); -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: sgn_float(const Type x) { -23376: if (x > 0) { -23376: return VR_GT; -23376: } -23376: if (x < 0) { -23376: return VR_LT; -23376: } -23376: if (x == 0) { -23376: return VR_EQ; -23376: } -23376: return VR_EMPTY; -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: cmp_float(const Type x, const Type y) { -23376: if (x > y) { -23376: return VR_GT; -23376: } -23376: if (x < y) { -23376: return VR_LT; -23376: } -23376: if (x == y) { -23376: return VR_EQ; -23376: } -23376: return VR_EMPTY; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_int_inexact(To& to, const From from, Rounding_Dir dir) { -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = from; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: to = from; -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_int(To& to, const From from, Rounding_Dir dir) { -23376: if (((sizeof(From)) * static_cast(8)) > Float::Binary::MANTISSA_BITS) { -23376: return assign_float_int_inexact(to, from, dir); -23376: } -23376: else { -23376: return assign_exact(to, from, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: set_neg_overflow_float(T& to, Rounding_Dir dir) { -23376: switch (round_dir(dir)) { -23376: case ROUND_UP: -23376: { -23376: Float f; -23376: f.u.binary.set_max(true); -23376: to = f.value(); -23376: return V_LT_INF; -23376: } -23376: case ROUND_DOWN: -23376: case ROUND_IGNORE: -23376: to = - -23376: # 836 "../../src/checked_float_inlines.hh" 3 4 -23376: (__builtin_huge_val ()) -23376: # 836 "../../src/checked_float_inlines.hh" -23376: ; -23376: return V_GT_MINUS_INFINITY; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_GT_MINUS_INFINITY; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: set_pos_overflow_float(T& to, Rounding_Dir dir) { -23376: switch (round_dir(dir)) { -23376: case ROUND_DOWN: -23376: { -23376: Float f; -23376: f.u.binary.set_max(false); -23376: to = f.value(); -23376: return V_GT_SUP; -23376: } -23376: case ROUND_UP: -23376: case ROUND_IGNORE: -23376: to = -23376: # 857 "../../src/checked_float_inlines.hh" 3 4 -23376: (__builtin_huge_val ()) -23376: # 857 "../../src/checked_float_inlines.hh" -23376: ; -23376: return V_LT_PLUS_INFINITY; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_LT_PLUS_INFINITY; -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_mpz(T& to, const mpz_class& from, Rounding_Dir dir) { -23376: int sign = sgn(from); -23376: if (sign == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: mpz_srcptr from_z = from.get_mpz_t(); -23376: size_t exponent = -23376: # 874 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_sizeinbase -23376: # 874 "../../src/checked_float_inlines.hh" -23376: (from_z, 2) - 1; -23376: if (exponent > size_t(Float::Binary::EXPONENT_MAX)) { -23376: if (sign < 0) { -23376: return set_neg_overflow_float(to, dir); -23376: } -23376: else { -23376: return set_pos_overflow_float(to, dir); -23376: } -23376: } -23376: unsigned long zeroes = -23376: # 883 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpn_scan1 -23376: # 883 "../../src/checked_float_inlines.hh" -23376: (from_z->_mp_d, 0); -23376: size_t meaningful_bits = exponent - zeroes; -23376: mpz_t mantissa; -23376: -23376: # 886 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_init -23376: # 886 "../../src/checked_float_inlines.hh" -23376: (mantissa); -23376: if (exponent > Float::Binary::MANTISSA_BITS) { -23376: -23376: # 888 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_tdiv_q_2exp -23376: # 888 "../../src/checked_float_inlines.hh" -23376: (mantissa, -23376: from_z, -23376: exponent - Float::Binary::MANTISSA_BITS); -23376: } -23376: else { -23376: -23376: # 893 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 893 "../../src/checked_float_inlines.hh" -23376: (mantissa, from_z, Float::Binary::MANTISSA_BITS - exponent); -23376: } -23376: Float f; -23376: f.u.binary.build(sign < 0, mantissa, static_cast(exponent)); -23376: -23376: # 897 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 897 "../../src/checked_float_inlines.hh" -23376: (mantissa); -23376: to = f.value(); -23376: if (meaningful_bits > Float::Binary::MANTISSA_BITS) { -23376: if (sign < 0) { -23376: return round_lt_float(to, dir); -23376: } -23376: else { -23376: return round_gt_float(to, dir); -23376: } -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: assign_float_mpq(T& to, const mpq_class& from, Rounding_Dir dir) { -23376: const mpz_class& numer = from.get_num(); -23376: const mpz_class& denom = from.get_den(); -23376: if (denom == 1) { -23376: return assign_float_mpz(to, numer, dir); -23376: } -23376: mpz_srcptr numer_z = numer.get_mpz_t(); -23376: mpz_srcptr denom_z = denom.get_mpz_t(); -23376: int sign = sgn(numer); -23376: long exponent = static_cast( -23376: # 921 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_sizeinbase -23376: # 921 "../../src/checked_float_inlines.hh" -23376: (numer_z, 2)) -23376: - static_cast( -23376: # 922 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_sizeinbase -23376: # 922 "../../src/checked_float_inlines.hh" -23376: (denom_z, 2)); -23376: if (exponent < Float::Binary::EXPONENT_MIN_DENORM) { -23376: to = 0; -23376: inexact: -23376: if (sign < 0) { -23376: return round_lt_float(to, dir); -23376: } -23376: else { -23376: return round_gt_float(to, dir); -23376: } -23376: } -23376: if (exponent > Float::Binary::EXPONENT_MAX + 1) { -23376: overflow: -23376: if (sign < 0) { -23376: return set_neg_overflow_float(to, dir); -23376: } -23376: else { -23376: return set_pos_overflow_float(to, dir); -23376: } -23376: } -23376: unsigned int needed_bits = Float::Binary::MANTISSA_BITS + 1; -23376: if (exponent < Float::Binary::EXPONENT_MIN) { -23376: long diff = Float::Binary::EXPONENT_MIN - exponent; -23376: needed_bits -= static_cast(diff); -23376: } -23376: mpz_t mantissa; -23376: -23376: # 948 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_init -23376: # 948 "../../src/checked_float_inlines.hh" -23376: (mantissa); -23376: { -23376: long shift = static_cast(needed_bits) - exponent; -23376: if (shift > 0) { -23376: -23376: # 952 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 952 "../../src/checked_float_inlines.hh" -23376: (mantissa, numer_z, static_cast(shift)); -23376: numer_z = mantissa; -23376: } -23376: else if (shift < 0) { -23376: shift = -shift; -23376: -23376: # 957 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 957 "../../src/checked_float_inlines.hh" -23376: (mantissa, denom_z, static_cast(shift)); -23376: denom_z = mantissa; -23376: } -23376: } -23376: mpz_t r; -23376: -23376: # 962 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_init -23376: # 962 "../../src/checked_float_inlines.hh" -23376: (r); -23376: -23376: # 963 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_tdiv_qr -23376: # 963 "../../src/checked_float_inlines.hh" -23376: (mantissa, r, numer_z, denom_z); -23376: size_t bits = -23376: # 964 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_sizeinbase -23376: # 964 "../../src/checked_float_inlines.hh" -23376: (mantissa, 2); -23376: bool inexact = ( -23376: # 965 "../../src/checked_float_inlines.hh" 3 4 -23376: (( -23376: # 965 "../../src/checked_float_inlines.hh" -23376: r -23376: # 965 "../../src/checked_float_inlines.hh" 3 4 -23376: )->_mp_size < 0 ? -1 : ( -23376: # 965 "../../src/checked_float_inlines.hh" -23376: r -23376: # 965 "../../src/checked_float_inlines.hh" 3 4 -23376: )->_mp_size > 0) -23376: # 965 "../../src/checked_float_inlines.hh" -23376: != 0); -23376: -23376: # 966 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 966 "../../src/checked_float_inlines.hh" -23376: (r); -23376: if (bits == needed_bits + 1) { -23376: inexact = (inexact || -23376: # 968 "../../src/checked_float_inlines.hh" 3 4 -23376: ((( -23376: # 968 "../../src/checked_float_inlines.hh" -23376: mantissa -23376: # 968 "../../src/checked_float_inlines.hh" 3 4 -23376: )->_mp_size != 0) & (static_cast (( -23376: # 968 "../../src/checked_float_inlines.hh" -23376: mantissa -23376: # 968 "../../src/checked_float_inlines.hh" 3 4 -23376: )->_mp_d[0]))) -23376: # 968 "../../src/checked_float_inlines.hh" -23376: ); -23376: -23376: # 969 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_tdiv_q_2exp -23376: # 969 "../../src/checked_float_inlines.hh" -23376: (mantissa, mantissa, 1); -23376: } -23376: else { -23376: --exponent; -23376: } -23376: if (exponent > Float::Binary::EXPONENT_MAX) { -23376: -23376: # 975 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 975 "../../src/checked_float_inlines.hh" -23376: (mantissa); -23376: goto overflow; -23376: } -23376: else if (exponent < Float::Binary::EXPONENT_MIN - 1) { -23376: -23376: exponent = Float::Binary::EXPONENT_MIN - 1; -23376: } -23376: Float f; -23376: f.u.binary.build(sign < 0, mantissa, exponent); -23376: -23376: # 984 "../../src/checked_float_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 984 "../../src/checked_float_inlines.hh" -23376: (mantissa); -23376: to = f.value(); -23376: if (inexact) { -23376: goto inexact; -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: add_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_mul_zero -23376: && ((x == 0 && is_inf_float(y)) -23376: || -23376: (y == 0 && is_inf_float(x)))) { -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = multiply_add(x, y, to); -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = multiply_add(-x, y, -to); -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: limit_precision(to); -23376: to = multiply_add(x, y, to); -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) { -23376: if (To_Policy::check_inf_mul_zero -23376: && ((x == 0 && is_inf_float(y)) -23376: || -23376: (y == 0 && is_inf_float(x)))) { -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: -23376: prepare_inexact(dir); -23376: if (fpu_direct_rounding(dir)) { -23376: to = multiply_add(x, -y, to); -23376: } -23376: else if (fpu_inverse_rounding(dir)) { -23376: to = multiply_add(x, y, -to); -23376: limit_precision(to); -23376: to = -to; -23376: } -23376: else { -23376: fpu_rounding_control_word_type old -23376: = fpu_save_rounding_direction(round_fpu_dir(dir)); -23376: limit_precision(x); -23376: limit_precision(y); -23376: limit_precision(to); -23376: to = multiply_add(x, -y, to); -23376: limit_precision(to); -23376: fpu_restore_rounding_direction(old); -23376: } -23376: if (To_Policy::fpu_check_nan_result && is_nan(to)) { -23376: return V_NAN; -23376: } -23376: return result_relation(dir); -23376: } -23376: -23376: template -23376: inline void -23376: assign_mpq_numeric_float(mpq_class& to, const From from) { -23376: to = from; -23376: } -23376: -23376: template <> -23376: inline void -23376: assign_mpq_numeric_float(mpq_class& to, const long double from) { -23376: to = 0; -23376: if (from == 0.0L) { -23376: return; -23376: } -23376: mpz_class& num = to.get_num(); -23376: mpz_class& den = to.get_den(); -23376: int exp; -23376: long double n = std::frexp(from, &exp); -23376: bool neg = false; -23376: if (n < 0.0L) { -23376: neg = true; -23376: n = -n; -23376: } -23376: const long double mult = static_cast( -23376: # 1085 "../../src/checked_float_inlines.hh" 3 4 -23376: (0x7fffffffL * 2UL + 1UL) -23376: # 1085 "../../src/checked_float_inlines.hh" -23376: ) + 1.0L; -23376: const unsigned int bits = sizeof(unsigned long) * 8; -23376: while (true) { -23376: n *= mult; -23376: exp -= bits; -23376: const long double intpart = std::floor(n); -23376: num += static_cast(intpart); -23376: n -= intpart; -23376: if (n == 0.0L) { -23376: break; -23376: } -23376: num <<= bits; -23376: } -23376: if (exp < 0) { -23376: den <<= -exp; -23376: } -23376: else { -23376: num <<= exp; -23376: } -23376: if (neg) { -23376: to = -to; -23376: } -23376: to.canonicalize(); -23376: } -23376: -23376: template -23376: inline Result -23376: output_float(std::ostream& os, const Type from, const Numeric_Format&, -23376: Rounding_Dir) { -23376: if (from == 0) { -23376: os << "0"; -23376: } -23376: else if (is_minf(from)) { -23376: os << "-inf"; -23376: } -23376: else if (is_pinf(from)) { -23376: os << "+inf"; -23376: } -23376: else if (is_nan(from)) { -23376: os << "nan"; -23376: } -23376: else { -23376: mpq_class q; -23376: assign_mpq_numeric_float(q, from); -23376: std::string s = float_mpq_to_string(q); -23376: os << s; -23376: } -23376: return V_EQ; -23376: } -23376: # 1307 "../../src/checked_float_inlines.hh" -23376: } -23376: -23376: } -23376: # 703 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/checked_mpz_inlines.hh" 1 -23376: # 27 "../../src/checked_mpz_inlines.hh" -23376: # 1 "/usr/include/c++/8/sstream" 1 3 -23376: # 36 "/usr/include/c++/8/sstream" 3 -23376: -23376: # 37 "/usr/include/c++/8/sstream" 3 -23376: -23376: -23376: -23376: -23376: -23376: # 41 "/usr/include/c++/8/sstream" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: namespace __cxx11 { -23376: # 64 "/usr/include/c++/8/sstream" 3 -23376: template -23376: class basic_stringbuf : public basic_streambuf<_CharT, _Traits> -23376: { -23376: struct __xfer_bufptrs; -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef _Alloc allocator_type; -23376: typedef typename traits_type::int_type int_type; -23376: typedef typename traits_type::pos_type pos_type; -23376: typedef typename traits_type::off_type off_type; -23376: -23376: typedef basic_streambuf __streambuf_type; -23376: typedef basic_string __string_type; -23376: typedef typename __string_type::size_type __size_type; -23376: -23376: protected: -23376: -23376: ios_base::openmode _M_mode; -23376: -23376: -23376: __string_type _M_string; -23376: -23376: public: -23376: # 99 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out) -23376: : __streambuf_type(), _M_mode(__mode), _M_string() -23376: { } -23376: # 112 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_stringbuf(const __string_type& __str, -23376: ios_base::openmode __mode = ios_base::in | ios_base::out) -23376: : __streambuf_type(), _M_mode(), -23376: _M_string(__str.data(), __str.size(), __str.get_allocator()) -23376: { _M_stringbuf_init(__mode); } -23376: -23376: -23376: basic_stringbuf(const basic_stringbuf&) = delete; -23376: -23376: basic_stringbuf(basic_stringbuf&& __rhs) -23376: : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this)) -23376: { __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); } -23376: -23376: -23376: -23376: basic_stringbuf& -23376: operator=(const basic_stringbuf&) = delete; -23376: -23376: basic_stringbuf& -23376: operator=(basic_stringbuf&& __rhs) -23376: { -23376: __xfer_bufptrs __st{__rhs, this}; -23376: const __streambuf_type& __base = __rhs; -23376: __streambuf_type::operator=(__base); -23376: this->pubimbue(__rhs.getloc()); -23376: _M_mode = __rhs._M_mode; -23376: _M_string = std::move(__rhs._M_string); -23376: __rhs._M_sync(const_cast(__rhs._M_string.data()), 0, 0); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_stringbuf& __rhs) -23376: { -23376: __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)}; -23376: __xfer_bufptrs __r_st{__rhs, this}; -23376: __streambuf_type& __base = __rhs; -23376: __streambuf_type::swap(__base); -23376: __rhs.pubimbue(this->pubimbue(__rhs.getloc())); -23376: std::swap(_M_mode, __rhs._M_mode); -23376: std::swap(_M_string, __rhs._M_string); -23376: } -23376: # 166 "/usr/include/c++/8/sstream" 3 -23376: __string_type -23376: str() const -23376: { -23376: __string_type __ret(_M_string.get_allocator()); -23376: if (this->pptr()) -23376: { -23376: -23376: if (this->pptr() > this->egptr()) -23376: __ret.assign(this->pbase(), this->pptr()); -23376: else -23376: __ret.assign(this->pbase(), this->egptr()); -23376: } -23376: else -23376: __ret = _M_string; -23376: return __ret; -23376: } -23376: # 190 "/usr/include/c++/8/sstream" 3 -23376: void -23376: str(const __string_type& __s) -23376: { -23376: -23376: -23376: _M_string.assign(__s.data(), __s.size()); -23376: _M_stringbuf_init(_M_mode); -23376: } -23376: -23376: protected: -23376: -23376: void -23376: _M_stringbuf_init(ios_base::openmode __mode) -23376: { -23376: _M_mode = __mode; -23376: __size_type __len = 0; -23376: if (_M_mode & (ios_base::ate | ios_base::app)) -23376: __len = _M_string.size(); -23376: _M_sync(const_cast(_M_string.data()), 0, __len); -23376: } -23376: -23376: virtual streamsize -23376: showmanyc() -23376: { -23376: streamsize __ret = -1; -23376: if (_M_mode & ios_base::in) -23376: { -23376: _M_update_egptr(); -23376: __ret = this->egptr() - this->gptr(); -23376: } -23376: return __ret; -23376: } -23376: -23376: virtual int_type -23376: underflow(); -23376: -23376: virtual int_type -23376: pbackfail(int_type __c = traits_type::eof()); -23376: -23376: virtual int_type -23376: overflow(int_type __c = traits_type::eof()); -23376: # 243 "/usr/include/c++/8/sstream" 3 -23376: virtual __streambuf_type* -23376: setbuf(char_type* __s, streamsize __n) -23376: { -23376: if (__s && __n >= 0) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: _M_string.clear(); -23376: -23376: -23376: _M_sync(__s, __n, 0); -23376: } -23376: return this; -23376: } -23376: -23376: virtual pos_type -23376: seekoff(off_type __off, ios_base::seekdir __way, -23376: ios_base::openmode __mode = ios_base::in | ios_base::out); -23376: -23376: virtual pos_type -23376: seekpos(pos_type __sp, -23376: ios_base::openmode __mode = ios_base::in | ios_base::out); -23376: -23376: -23376: -23376: -23376: void -23376: _M_sync(char_type* __base, __size_type __i, __size_type __o); -23376: -23376: -23376: -23376: void -23376: _M_update_egptr() -23376: { -23376: const bool __testin = _M_mode & ios_base::in; -23376: if (this->pptr() && this->pptr() > this->egptr()) -23376: { -23376: if (__testin) -23376: this->setg(this->eback(), this->gptr(), this->pptr()); -23376: else -23376: this->setg(this->pptr(), this->pptr(), this->pptr()); -23376: } -23376: } -23376: -23376: -23376: -23376: void -23376: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off); -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: struct __xfer_bufptrs -23376: { -23376: __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to) -23376: : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1} -23376: { -23376: const _CharT* const __str = __from._M_string.data(); -23376: const _CharT* __end = nullptr; -23376: if (__from.eback()) -23376: { -23376: _M_goff[0] = __from.eback() - __str; -23376: _M_goff[1] = __from.gptr() - __str; -23376: _M_goff[2] = __from.egptr() - __str; -23376: __end = __from.egptr(); -23376: } -23376: if (__from.pbase()) -23376: { -23376: _M_poff[0] = __from.pbase() - __str; -23376: _M_poff[1] = __from.pptr() - __from.pbase(); -23376: _M_poff[2] = __from.epptr() - __str; -23376: if (__from.pptr() > __end) -23376: __end = __from.pptr(); -23376: } -23376: -23376: -23376: if (__end) -23376: { -23376: -23376: -23376: auto& __mut_from = const_cast(__from); -23376: __mut_from._M_string._M_length(__end - __str); -23376: } -23376: } -23376: -23376: ~__xfer_bufptrs() -23376: { -23376: char_type* __str = const_cast(_M_to->_M_string.data()); -23376: if (_M_goff[0] != -1) -23376: _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]); -23376: if (_M_poff[0] != -1) -23376: _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]); -23376: } -23376: -23376: basic_stringbuf* _M_to; -23376: off_type _M_goff[3]; -23376: off_type _M_poff[3]; -23376: }; -23376: # 357 "/usr/include/c++/8/sstream" 3 -23376: basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&) -23376: : __streambuf_type(static_cast(__rhs)), -23376: _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string)) -23376: { } -23376: -23376: }; -23376: # 380 "/usr/include/c++/8/sstream" 3 -23376: template -23376: class basic_istringstream : public basic_istream<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef _Alloc allocator_type; -23376: typedef typename traits_type::int_type int_type; -23376: typedef typename traits_type::pos_type pos_type; -23376: typedef typename traits_type::off_type off_type; -23376: -23376: -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; -23376: typedef basic_istream __istream_type; -23376: -23376: private: -23376: __stringbuf_type _M_stringbuf; -23376: -23376: public: -23376: # 416 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_istringstream(ios_base::openmode __mode = ios_base::in) -23376: : __istream_type(), _M_stringbuf(__mode | ios_base::in) -23376: { this->init(&_M_stringbuf); } -23376: # 434 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_istringstream(const __string_type& __str, -23376: ios_base::openmode __mode = ios_base::in) -23376: : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in) -23376: { this->init(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~basic_istringstream() -23376: { } -23376: -23376: -23376: basic_istringstream(const basic_istringstream&) = delete; -23376: -23376: basic_istringstream(basic_istringstream&& __rhs) -23376: : __istream_type(std::move(__rhs)), -23376: _M_stringbuf(std::move(__rhs._M_stringbuf)) -23376: { __istream_type::set_rdbuf(&_M_stringbuf); } -23376: -23376: -23376: -23376: basic_istringstream& -23376: operator=(const basic_istringstream&) = delete; -23376: -23376: basic_istringstream& -23376: operator=(basic_istringstream&& __rhs) -23376: { -23376: __istream_type::operator=(std::move(__rhs)); -23376: _M_stringbuf = std::move(__rhs._M_stringbuf); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_istringstream& __rhs) -23376: { -23376: __istream_type::swap(__rhs); -23376: _M_stringbuf.swap(__rhs._M_stringbuf); -23376: } -23376: # 485 "/usr/include/c++/8/sstream" 3 -23376: __stringbuf_type* -23376: rdbuf() const -23376: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: __string_type -23376: str() const -23376: { return _M_stringbuf.str(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: str(const __string_type& __s) -23376: { _M_stringbuf.str(__s); } -23376: }; -23376: # 524 "/usr/include/c++/8/sstream" 3 -23376: template -23376: class basic_ostringstream : public basic_ostream<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef _Alloc allocator_type; -23376: typedef typename traits_type::int_type int_type; -23376: typedef typename traits_type::pos_type pos_type; -23376: typedef typename traits_type::off_type off_type; -23376: -23376: -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; -23376: typedef basic_ostream __ostream_type; -23376: -23376: private: -23376: __stringbuf_type _M_stringbuf; -23376: -23376: public: -23376: # 560 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_ostringstream(ios_base::openmode __mode = ios_base::out) -23376: : __ostream_type(), _M_stringbuf(__mode | ios_base::out) -23376: { this->init(&_M_stringbuf); } -23376: # 578 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_ostringstream(const __string_type& __str, -23376: ios_base::openmode __mode = ios_base::out) -23376: : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out) -23376: { this->init(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~basic_ostringstream() -23376: { } -23376: -23376: -23376: basic_ostringstream(const basic_ostringstream&) = delete; -23376: -23376: basic_ostringstream(basic_ostringstream&& __rhs) -23376: : __ostream_type(std::move(__rhs)), -23376: _M_stringbuf(std::move(__rhs._M_stringbuf)) -23376: { __ostream_type::set_rdbuf(&_M_stringbuf); } -23376: -23376: -23376: -23376: basic_ostringstream& -23376: operator=(const basic_ostringstream&) = delete; -23376: -23376: basic_ostringstream& -23376: operator=(basic_ostringstream&& __rhs) -23376: { -23376: __ostream_type::operator=(std::move(__rhs)); -23376: _M_stringbuf = std::move(__rhs._M_stringbuf); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_ostringstream& __rhs) -23376: { -23376: __ostream_type::swap(__rhs); -23376: _M_stringbuf.swap(__rhs._M_stringbuf); -23376: } -23376: # 629 "/usr/include/c++/8/sstream" 3 -23376: __stringbuf_type* -23376: rdbuf() const -23376: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: __string_type -23376: str() const -23376: { return _M_stringbuf.str(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: str(const __string_type& __s) -23376: { _M_stringbuf.str(__s); } -23376: }; -23376: # 668 "/usr/include/c++/8/sstream" 3 -23376: template -23376: class basic_stringstream : public basic_iostream<_CharT, _Traits> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: -23376: -23376: typedef _Alloc allocator_type; -23376: typedef typename traits_type::int_type int_type; -23376: typedef typename traits_type::pos_type pos_type; -23376: typedef typename traits_type::off_type off_type; -23376: -23376: -23376: typedef basic_string<_CharT, _Traits, _Alloc> __string_type; -23376: typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type; -23376: typedef basic_iostream __iostream_type; -23376: -23376: private: -23376: __stringbuf_type _M_stringbuf; -23376: -23376: public: -23376: # 703 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in) -23376: : __iostream_type(), _M_stringbuf(__m) -23376: { this->init(&_M_stringbuf); } -23376: # 719 "/usr/include/c++/8/sstream" 3 -23376: explicit -23376: basic_stringstream(const __string_type& __str, -23376: ios_base::openmode __m = ios_base::out | ios_base::in) -23376: : __iostream_type(), _M_stringbuf(__str, __m) -23376: { this->init(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~basic_stringstream() -23376: { } -23376: -23376: -23376: basic_stringstream(const basic_stringstream&) = delete; -23376: -23376: basic_stringstream(basic_stringstream&& __rhs) -23376: : __iostream_type(std::move(__rhs)), -23376: _M_stringbuf(std::move(__rhs._M_stringbuf)) -23376: { __iostream_type::set_rdbuf(&_M_stringbuf); } -23376: -23376: -23376: -23376: basic_stringstream& -23376: operator=(const basic_stringstream&) = delete; -23376: -23376: basic_stringstream& -23376: operator=(basic_stringstream&& __rhs) -23376: { -23376: __iostream_type::operator=(std::move(__rhs)); -23376: _M_stringbuf = std::move(__rhs._M_stringbuf); -23376: return *this; -23376: } -23376: -23376: void -23376: swap(basic_stringstream& __rhs) -23376: { -23376: __iostream_type::swap(__rhs); -23376: _M_stringbuf.swap(__rhs._M_stringbuf); -23376: } -23376: # 770 "/usr/include/c++/8/sstream" 3 -23376: __stringbuf_type* -23376: rdbuf() const -23376: { return const_cast<__stringbuf_type*>(&_M_stringbuf); } -23376: -23376: -23376: -23376: -23376: -23376: __string_type -23376: str() const -23376: { return _M_stringbuf.str(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: str(const __string_type& __s) -23376: { _M_stringbuf.str(__s); } -23376: }; -23376: -23376: -23376: -23376: template -23376: inline void -23376: swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x, -23376: basic_stringbuf<_CharT, _Traits, _Allocator>& __y) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x, -23376: basic_istringstream<_CharT, _Traits, _Allocator>& __y) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x, -23376: basic_ostringstream<_CharT, _Traits, _Allocator>& __y) -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x, -23376: basic_stringstream<_CharT, _Traits, _Allocator>& __y) -23376: { __x.swap(__y); } -23376: -23376: -23376: } -23376: -23376: } -23376: -23376: # 1 "/usr/include/c++/8/bits/sstream.tcc" 1 3 -23376: # 37 "/usr/include/c++/8/bits/sstream.tcc" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/sstream.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: pbackfail(int_type __c) -23376: { -23376: int_type __ret = traits_type::eof(); -23376: if (this->eback() < this->gptr()) -23376: { -23376: -23376: -23376: const bool __testeof = traits_type::eq_int_type(__c, __ret); -23376: if (!__testeof) -23376: { -23376: const bool __testeq = traits_type::eq(traits_type:: -23376: to_char_type(__c), -23376: this->gptr()[-1]); -23376: const bool __testout = this->_M_mode & ios_base::out; -23376: if (__testeq || __testout) -23376: { -23376: this->gbump(-1); -23376: if (!__testeq) -23376: *this->gptr() = traits_type::to_char_type(__c); -23376: __ret = __c; -23376: } -23376: } -23376: else -23376: { -23376: this->gbump(-1); -23376: __ret = traits_type::not_eof(__c); -23376: } -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: overflow(int_type __c) -23376: { -23376: const bool __testout = this->_M_mode & ios_base::out; -23376: if (__builtin_expect(!__testout, false)) -23376: return traits_type::eof(); -23376: -23376: const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof()); -23376: if (__builtin_expect(__testeof, false)) -23376: return traits_type::not_eof(__c); -23376: -23376: const __size_type __capacity = _M_string.capacity(); -23376: -23376: -23376: if ((this->epptr() - this->pbase()) < __capacity) -23376: { -23376: -23376: char_type* __base = const_cast(_M_string.data()); -23376: _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase()); -23376: if (_M_mode & ios_base::in) -23376: { -23376: const __size_type __nget = this->gptr() - this->eback(); -23376: const __size_type __eget = this->egptr() - this->eback(); -23376: this->setg(__base, __base + __nget, __base + __eget + 1); -23376: } -23376: *this->pptr() = traits_type::to_char_type(__c); -23376: this->pbump(1); -23376: return __c; -23376: } -23376: -23376: -23376: const __size_type __max_size = _M_string.max_size(); -23376: const bool __testput = this->pptr() < this->epptr(); -23376: if (__builtin_expect(!__testput && __capacity == __max_size, false)) -23376: return traits_type::eof(); -23376: -23376: -23376: -23376: const char_type __conv = traits_type::to_char_type(__c); -23376: if (!__testput) -23376: { -23376: # 129 "/usr/include/c++/8/bits/sstream.tcc" 3 -23376: const __size_type __opt_len = std::max(__size_type(2 * __capacity), -23376: __size_type(512)); -23376: const __size_type __len = std::min(__opt_len, __max_size); -23376: __string_type __tmp(_M_string.get_allocator()); -23376: __tmp.reserve(__len); -23376: if (this->pbase()) -23376: __tmp.assign(this->pbase(), this->epptr() - this->pbase()); -23376: __tmp.push_back(__conv); -23376: _M_string.swap(__tmp); -23376: _M_sync(const_cast(_M_string.data()), -23376: this->gptr() - this->eback(), this->pptr() - this->pbase()); -23376: } -23376: else -23376: *this->pptr() = __conv; -23376: this->pbump(1); -23376: return __c; -23376: } -23376: -23376: template -23376: typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: underflow() -23376: { -23376: int_type __ret = traits_type::eof(); -23376: const bool __testin = this->_M_mode & ios_base::in; -23376: if (__testin) -23376: { -23376: -23376: _M_update_egptr(); -23376: -23376: if (this->gptr() < this->egptr()) -23376: __ret = traits_type::to_int_type(*this->gptr()); -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode) -23376: { -23376: pos_type __ret = pos_type(off_type(-1)); -23376: bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; -23376: bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; -23376: const bool __testboth = __testin && __testout && __way != ios_base::cur; -23376: __testin &= !(__mode & ios_base::out); -23376: __testout &= !(__mode & ios_base::in); -23376: -23376: -23376: -23376: const char_type* __beg = __testin ? this->eback() : this->pbase(); -23376: if ((__beg || !__off) && (__testin || __testout || __testboth)) -23376: { -23376: _M_update_egptr(); -23376: -23376: off_type __newoffi = __off; -23376: off_type __newoffo = __newoffi; -23376: if (__way == ios_base::cur) -23376: { -23376: __newoffi += this->gptr() - __beg; -23376: __newoffo += this->pptr() - __beg; -23376: } -23376: else if (__way == ios_base::end) -23376: __newoffo = __newoffi += this->egptr() - __beg; -23376: -23376: if ((__testin || __testboth) -23376: && __newoffi >= 0 -23376: && this->egptr() - __beg >= __newoffi) -23376: { -23376: this->setg(this->eback(), this->eback() + __newoffi, -23376: this->egptr()); -23376: __ret = pos_type(__newoffi); -23376: } -23376: if ((__testout || __testboth) -23376: && __newoffo >= 0 -23376: && this->egptr() - __beg >= __newoffo) -23376: { -23376: _M_pbump(this->pbase(), this->epptr(), __newoffo); -23376: __ret = pos_type(__newoffo); -23376: } -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: seekpos(pos_type __sp, ios_base::openmode __mode) -23376: { -23376: pos_type __ret = pos_type(off_type(-1)); -23376: const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0; -23376: const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0; -23376: -23376: const char_type* __beg = __testin ? this->eback() : this->pbase(); -23376: if ((__beg || !off_type(__sp)) && (__testin || __testout)) -23376: { -23376: _M_update_egptr(); -23376: -23376: const off_type __pos(__sp); -23376: const bool __testpos = (0 <= __pos -23376: && __pos <= this->egptr() - __beg); -23376: if (__testpos) -23376: { -23376: if (__testin) -23376: this->setg(this->eback(), this->eback() + __pos, -23376: this->egptr()); -23376: if (__testout) -23376: _M_pbump(this->pbase(), this->epptr(), __pos); -23376: __ret = __sp; -23376: } -23376: } -23376: return __ret; -23376: } -23376: -23376: template -23376: void -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: _M_sync(char_type* __base, __size_type __i, __size_type __o) -23376: { -23376: const bool __testin = _M_mode & ios_base::in; -23376: const bool __testout = _M_mode & ios_base::out; -23376: char_type* __endg = __base + _M_string.size(); -23376: char_type* __endp = __base + _M_string.capacity(); -23376: -23376: if (__base != _M_string.data()) -23376: { -23376: -23376: __endg += __i; -23376: __i = 0; -23376: __endp = __endg; -23376: } -23376: -23376: if (__testin) -23376: this->setg(__base, __base + __i, __endg); -23376: if (__testout) -23376: { -23376: _M_pbump(__base, __endp, __o); -23376: -23376: -23376: -23376: if (!__testin) -23376: this->setg(__endg, __endg, __endg); -23376: } -23376: } -23376: -23376: template -23376: void -23376: basic_stringbuf<_CharT, _Traits, _Alloc>:: -23376: _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off) -23376: { -23376: this->setp(__pbeg, __pend); -23376: while (__off > __gnu_cxx::__numeric_traits::__max) -23376: { -23376: this->pbump(__gnu_cxx::__numeric_traits::__max); -23376: __off -= __gnu_cxx::__numeric_traits::__max; -23376: } -23376: this->pbump(__off); -23376: } -23376: -23376: -23376: -23376: -23376: extern template class basic_stringbuf; -23376: extern template class basic_istringstream; -23376: extern template class basic_ostringstream; -23376: extern template class basic_stringstream; -23376: -23376: -23376: extern template class basic_stringbuf; -23376: extern template class basic_istringstream; -23376: extern template class basic_ostringstream; -23376: extern template class basic_stringstream; -23376: -23376: -23376: -23376: -23376: } -23376: # 828 "/usr/include/c++/8/sstream" 2 3 -23376: # 28 "../../src/checked_mpz_inlines.hh" 2 -23376: -23376: -23376: # 29 "../../src/checked_mpz_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: -23376: template -23376: inline Result -23376: round_lt_mpz(mpz_class& to, Rounding_Dir dir) { -23376: if (round_down(dir)) { -23376: --to; -23376: return V_GT; -23376: } -23376: return V_LT; -23376: } -23376: -23376: template -23376: inline Result -23376: round_gt_mpz(mpz_class& to, Rounding_Dir dir) { -23376: if (round_up(dir)) { -23376: ++to; -23376: return V_LT; -23376: } -23376: return V_GT; -23376: } -23376: -23376: -23376: -23376: typedef decltype(__mpz_struct()._mp_size) mp_size_field_t; -23376: # 64 "../../src/checked_mpz_inlines.hh" -23376: inline mp_size_field_t -23376: get_mp_size(const mpz_class &v) { -23376: return v.get_mpz_t()->_mp_size; -23376: } -23376: -23376: inline void -23376: set_mp_size(mpz_class &v, mp_size_field_t size) { -23376: v.get_mpz_t()->_mp_size = size; -23376: } -23376: -23376: template -23376: inline Result -23376: classify_mpz(const mpz_class& v, bool nan, bool inf, bool sign) { -23376: if (Policy::has_nan || Policy::has_infinity) { -23376: mp_size_field_t s = get_mp_size(v); -23376: if (Policy::has_nan -23376: && (nan || sign) -23376: && s == C_Integer::min + 1) { -23376: return V_NAN; -23376: } -23376: if (!inf && !sign) { -23376: return V_LGE; -23376: } -23376: if (Policy::has_infinity) { -23376: if (s == C_Integer::min) { -23376: return inf ? V_EQ_MINUS_INFINITY : V_LT; -23376: } -23376: if (s == C_Integer::max) { -23376: return inf ? V_EQ_PLUS_INFINITY : V_GT; -23376: } -23376: } -23376: } -23376: if (sign) { -23376: return static_cast(sgn(v)); -23376: } -23376: return V_LGE; -23376: } -23376: -23376: template struct classify_function_struct { static inline Result function(const mpz_class& arg, bool a1, bool a2, bool a3) { return classify_mpz(arg, a1, a2, a3); } }; -23376: -23376: template -23376: inline bool -23376: is_nan_mpz(const mpz_class& v) { -23376: return Policy::has_nan -23376: && get_mp_size(v) == C_Integer::min + 1; -23376: } -23376: -23376: template struct is_nan_function_struct { static inline bool function(const mpz_class& arg) { return is_nan_mpz(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_minf_mpz(const mpz_class& v) { -23376: return Policy::has_infinity -23376: && get_mp_size(v) == C_Integer::min; -23376: } -23376: -23376: template struct is_minf_function_struct { static inline bool function(const mpz_class& arg) { return is_minf_mpz(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_pinf_mpz(const mpz_class& v) { -23376: return Policy::has_infinity -23376: && get_mp_size(v) == C_Integer::max; -23376: } -23376: -23376: template struct is_pinf_function_struct { static inline bool function(const mpz_class& arg) { return is_pinf_mpz(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_int_mpz(const mpz_class& v) { -23376: return !is_nan(v); -23376: } -23376: -23376: template struct is_int_function_struct { static inline bool function(const mpz_class& arg) { return is_int_mpz(arg); } }; -23376: -23376: template -23376: inline Result -23376: assign_special_mpz(mpz_class& v, Result_Class c, Rounding_Dir) { -23376: switch (c) { -23376: case VC_NAN: -23376: if (Policy::has_nan) { -23376: set_mp_size(v, C_Integer::min + 1); -23376: } -23376: return V_NAN; -23376: case VC_MINUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: set_mp_size(v, C_Integer::min); -23376: return V_EQ_MINUS_INFINITY; -23376: } -23376: return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE; -23376: case VC_PLUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: set_mp_size(v, C_Integer::max); -23376: return V_EQ_PLUS_INFINITY; -23376: } -23376: return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: } -23376: -23376: template struct assign_special_function_struct { static inline Result function( mpz_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpz(arg, a1, a2); } }; -23376: -23376: template -23376: inline void -23376: copy_mpz(mpz_class& to, const mpz_class& from) { -23376: if (is_nan_mpz(from)) { -23376: ((void) 0); -23376: } -23376: else if (is_minf_mpz(from) || is_pinf_mpz(from)) { -23376: ((void) 0); -23376: } -23376: else { -23376: to = from; -23376: return; -23376: } -23376: set_mp_size(to, get_mp_size(from)); -23376: } -23376: -23376: template struct copy_function_struct { static inline void function( mpz_class& arg1, const mpz_class &arg2) { return copy_mpz(arg1, arg2); } }; -23376: -23376: template -23376: inline Result -23376: construct_mpz_base(mpz_class& to, const From from, Rounding_Dir) { -23376: new(&to) mpz_class(from); -23376: return V_EQ; -23376: } -23376: -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpz_base(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: construct_mpz_float(mpz_class& to, const From& from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return construct_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return construct_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return construct_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: if (round_not_requested(dir)) { -23376: new(&to) mpz_class(from); -23376: return V_LGE; -23376: } -23376: From n = rint(from); -23376: new(&to) mpz_class(n); -23376: if (from == n) { -23376: return V_EQ; -23376: } -23376: if (from < 0) { -23376: return round_lt_mpz(to, dir); -23376: } -23376: else { -23376: return round_gt_mpz(to, dir); -23376: } -23376: } -23376: -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpz_float(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpz_float(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpz_signed_int(mpz_class& to, const From from, Rounding_Dir) { -23376: if (sizeof(From) <= sizeof(signed long)) { -23376: to = static_cast(from); -23376: } -23376: else { -23376: mpz_ptr m = to.get_mpz_t(); -23376: if (from >= 0) { -23376: -23376: # 255 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 255 "../../src/checked_mpz_inlines.hh" -23376: (m, 1, 1, sizeof(From), 0, 0, &from); -23376: } -23376: else { -23376: From n = -from; -23376: -23376: # 259 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 259 "../../src/checked_mpz_inlines.hh" -23376: (m, 1, 1, sizeof(From), 0, 0, &n); -23376: -23376: # 260 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_neg -23376: # 260 "../../src/checked_mpz_inlines.hh" -23376: (m, m); -23376: } -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpz_signed_int(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpz_unsigned_int(mpz_class& to, const From from, Rounding_Dir) { -23376: if (sizeof(From) <= sizeof(unsigned long)) { -23376: to = static_cast(from); -23376: } -23376: else { -23376: -23376: # 275 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 275 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpz_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpz_float(mpz_class& to, const From from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: if (round_not_requested(dir)) { -23376: to = from; -23376: return V_LGE; -23376: } -23376: From i_from = rint(from); -23376: to = i_from; -23376: if (from == i_from) { -23376: return V_EQ; -23376: } -23376: if (round_direct(ROUND_UP)) { -23376: return round_lt_mpz(to, dir); -23376: } -23376: if (round_direct(ROUND_DOWN)) { -23376: return round_gt_mpz(to, dir); -23376: } -23376: if (from < i_from) { -23376: return round_lt_mpz(to, dir); -23376: } -23376: if (from > i_from) { -23376: return round_gt_mpz(to, dir); -23376: } -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpz_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpz_float(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpz_long_double(mpz_class& to, const From& from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: -23376: std::stringstream ss; -23376: output(ss, from, Numeric_Format(), dir); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; mpq_class& tmp = holder_tmp.item(); -23376: -23376: -23376: -23376: input_mpq(tmp, ss); -23376: ((void) 0); -23376: return assign(to, tmp, dir); -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpz_long_double(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpz_mpq(mpz_class& to, const mpq_class& from, Rounding_Dir dir) { -23376: if (round_not_needed(dir)) { -23376: to = from.get_num(); -23376: return V_LGE; -23376: } -23376: if (round_ignore(dir)) { -23376: to = from; -23376: return V_LGE; -23376: } -23376: const mpz_srcptr n = from.get_num().get_mpz_t(); -23376: const mpz_srcptr d = from.get_den().get_mpz_t(); -23376: if (round_down(dir)) { -23376: -23376: # 362 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_fdiv_q -23376: # 362 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 364 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_p -23376: # 364 "../../src/checked_mpz_inlines.hh" -23376: (n, d) != 0) ? V_EQ : V_GT; -23376: } -23376: return V_GE; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: # 370 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_cdiv_q -23376: # 370 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 372 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_p -23376: # 372 "../../src/checked_mpz_inlines.hh" -23376: (n, d) != 0) ? V_EQ : V_LT; -23376: } -23376: return V_LE; -23376: } -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpz_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_mpz_mpq(arg1, arg2, a1); } }; -23376: -23376: template struct floor_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct ceil_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct trunc_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: neg_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) { -23376: -23376: # 387 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_neg -23376: # 387 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), from.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct neg_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return neg_mpz(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: to = x + y; -23376: return V_EQ; -23376: } -23376: -23376: template struct add_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: sub_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: to = x - y; -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: -23376: template struct mul_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return mul_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: div_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, -23376: Rounding_Dir dir) { -23376: if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : ( -23376: # 424 "../../src/checked_mpz_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 424 "../../src/checked_mpz_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: const mpz_srcptr n = x.get_mpz_t(); -23376: const mpz_srcptr d = y.get_mpz_t(); -23376: if (round_not_needed(dir)) { -23376: -23376: # 430 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divexact -23376: # 430 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: return V_LGE; -23376: } -23376: if (round_ignore(dir)) { -23376: -23376: # 434 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_cdiv_q -23376: # 434 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: return V_LE; -23376: } -23376: if (round_down(dir)) { -23376: -23376: # 438 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_fdiv_q -23376: # 438 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 440 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_p -23376: # 440 "../../src/checked_mpz_inlines.hh" -23376: (n, d) != 0) ? V_EQ : V_GT; -23376: } -23376: return V_GE; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: # 446 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_cdiv_q -23376: # 446 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 448 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_p -23376: # 448 "../../src/checked_mpz_inlines.hh" -23376: (n, d) != 0) ? V_EQ : V_LT; -23376: } -23376: return V_LE; -23376: } -23376: } -23376: -23376: template struct div_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return div_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: idiv_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, -23376: Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : ( -23376: # 460 "../../src/checked_mpz_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 460 "../../src/checked_mpz_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: mpz_srcptr n = x.get_mpz_t(); -23376: mpz_srcptr d = y.get_mpz_t(); -23376: -23376: # 465 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_tdiv_q -23376: # 465 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, d); -23376: return V_EQ; -23376: } -23376: -23376: template struct idiv_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return idiv_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: rem_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : ( -23376: # 474 "../../src/checked_mpz_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 474 "../../src/checked_mpz_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_MOD_ZERO); -23376: } -23376: to = x % y; -23376: return V_EQ; -23376: } -23376: -23376: template struct rem_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return rem_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; mpz_class& v = holder_v.item(); -23376: v = 1; -23376: -23376: # 489 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 489 "../../src/checked_mpz_inlines.hh" -23376: (v.get_mpz_t(), v.get_mpz_t(), exp); -23376: to = x + v; -23376: return V_EQ; -23376: } -23376: -23376: template struct add_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: sub_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; mpz_class& v = holder_v.item(); -23376: v = 1; -23376: -23376: # 502 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 502 "../../src/checked_mpz_inlines.hh" -23376: (v.get_mpz_t(), v.get_mpz_t(), exp); -23376: to = x - v; -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: mul_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: -23376: # 513 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 513 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), exp); -23376: return V_EQ; -23376: } -23376: -23376: template struct mul_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: div_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir dir) { -23376: const mpz_srcptr n = x.get_mpz_t(); -23376: if (round_not_requested(dir)) { -23376: -23376: # 525 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_tdiv_q_2exp -23376: # 525 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), exp); -23376: return V_LGE; -23376: } -23376: if (round_down(dir)) { -23376: -23376: # 529 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_fdiv_q_2exp -23376: # 529 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, exp); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 531 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_2exp_p -23376: # 531 "../../src/checked_mpz_inlines.hh" -23376: (n, exp) != 0) ? V_EQ : V_GT; -23376: } -23376: return V_GE; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: # 537 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_cdiv_q_2exp -23376: # 537 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), n, exp); -23376: if (round_strict_relation(dir)) { -23376: return ( -23376: # 539 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_divisible_2exp_p -23376: # 539 "../../src/checked_mpz_inlines.hh" -23376: (n, exp) != 0) ? V_EQ : V_LT; -23376: } -23376: return V_LE; -23376: } -23376: } -23376: -23376: template struct div_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: smod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: if ( -23376: # 551 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_tstbit -23376: # 551 "../../src/checked_mpz_inlines.hh" -23376: (x.get_mpz_t(), exp - 1) != 0) { -23376: -23376: # 552 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_cdiv_r_2exp -23376: # 552 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), exp); -23376: } -23376: else { -23376: -23376: # 555 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_fdiv_r_2exp -23376: # 555 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), exp); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template struct smod_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: umod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: -23376: # 566 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_fdiv_r_2exp -23376: # 566 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), exp); -23376: return V_EQ; -23376: } -23376: -23376: template struct umod_2exp_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpz(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: abs_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) { -23376: to = abs(from); -23376: return V_EQ; -23376: } -23376: -23376: template struct abs_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return abs_mpz(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, -23376: Rounding_Dir) { -23376: -23376: # 585 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_addmul -23376: # 585 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct add_mul_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mul_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: sub_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, -23376: Rounding_Dir) { -23376: -23376: # 595 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_submul -23376: # 595 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_mul_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mul_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: gcd_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: -23376: # 604 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_gcd -23376: # 604 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct gcd_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return gcd_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: gcdext_mpz(mpz_class& to, mpz_class& s, mpz_class& t, -23376: const mpz_class& x, const mpz_class& y, -23376: Rounding_Dir) { -23376: -23376: # 615 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_gcdext -23376: # 615 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), s.get_mpz_t(), t.get_mpz_t(), -23376: x.get_mpz_t(), y.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct gcdext_function_struct { static inline Result function( mpz_class& arg1, mpz_class &arg2, mpz_class &arg3, const mpz_class &arg4, const mpz_class &arg5, Rounding_Dir a1) { return gcdext_mpz(arg1, arg2, arg3, arg4, arg5, a1); } }; -23376: -23376: template -23376: inline Result -23376: lcm_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) { -23376: -23376: # 625 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_lcm -23376: # 625 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct lcm_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return lcm_mpz(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: sqrt_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir dir) { -23376: if (((To_Policy::check_sqrt_neg) ? (from < 0) : ( -23376: # 634 "../../src/checked_mpz_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 634 "../../src/checked_mpz_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_SQRT_NEG); -23376: } -23376: if (round_not_requested(dir)) { -23376: to = sqrt(from); -23376: return V_GE; -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_r; mpz_class& r = holder_r.item(); -23376: -23376: # 642 "../../src/checked_mpz_inlines.hh" 3 4 -23376: __gmpz_sqrtrem -23376: # 642 "../../src/checked_mpz_inlines.hh" -23376: (to.get_mpz_t(), r.get_mpz_t(), from.get_mpz_t()); -23376: if (r == 0) { -23376: return V_EQ; -23376: } -23376: return round_gt_mpz(to, dir); -23376: } -23376: -23376: template struct sqrt_function_struct { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return sqrt_mpz(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result_Relation -23376: sgn_mp(const Type& x) { -23376: const int sign = ::sgn(x); -23376: return (sign > 0) ? VR_GT : ((sign < 0) ? VR_LT : VR_EQ); -23376: } -23376: -23376: template struct sgn_function_struct { static inline Result_Relation function(const mpz_class& arg) { return sgn_mp(arg); } }; -23376: template struct sgn_function_struct { static inline Result_Relation function(const mpq_class& arg) { return sgn_mp(arg); } }; -23376: -23376: template -23376: inline Result_Relation -23376: cmp_mp(const Type& x, const Type& y) { -23376: int i = ::cmp(x, y); -23376: return (i > 0) ? VR_GT : ((i < 0) ? VR_LT : VR_EQ); -23376: } -23376: -23376: template struct cmp_function_struct { static inline Result_Relation function(const mpz_class& arg1, const mpz_class &arg2) { return cmp_mp(arg1, arg2); } }; -23376: template struct cmp_function_struct { static inline Result_Relation function(const mpq_class& arg1, const mpq_class &arg2) { return cmp_mp(arg1, arg2); } }; -23376: -23376: template -23376: inline Result -23376: output_mpz(std::ostream& os, const mpz_class& from, const Numeric_Format&, -23376: Rounding_Dir) { -23376: os << from; -23376: return V_EQ; -23376: } -23376: -23376: template struct input_function_struct { static inline Result function( mpz_class& arg, std::istream& a1, Rounding_Dir a2) { return input_generic(arg, a1, a2); } }; -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const mpz_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpz(b1, arg, a1, a2); } }; -23376: -23376: } -23376: -23376: } -23376: # 704 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/checked_mpq_inlines.hh" 1 -23376: # 28 "../../src/checked_mpq_inlines.hh" -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 29 "../../src/checked_mpq_inlines.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Checked { -23376: -23376: template -23376: inline Result -23376: classify_mpq(const mpq_class& v, bool nan, bool inf, bool sign) { -23376: if ((Policy::has_nan || Policy::has_infinity) -23376: && ::sgn(v.get_den()) == 0) { -23376: int s = ::sgn(v.get_num()); -23376: if (Policy::has_nan && (nan || sign) && s == 0) { -23376: return V_NAN; -23376: } -23376: if (!inf && !sign) { -23376: return V_LGE; -23376: } -23376: if (Policy::has_infinity) { -23376: if (s < 0) { -23376: return inf ? V_EQ_MINUS_INFINITY : V_LT; -23376: } -23376: if (s > 0) { -23376: return inf ? V_EQ_PLUS_INFINITY : V_GT; -23376: } -23376: } -23376: } -23376: if (sign) { -23376: return static_cast(sgn(v)); -23376: } -23376: return V_LGE; -23376: } -23376: -23376: template struct classify_function_struct { static inline Result function(const mpq_class& arg, bool a1, bool a2, bool a3) { return classify_mpq(arg, a1, a2, a3); } }; -23376: -23376: template -23376: inline bool -23376: is_nan_mpq(const mpq_class& v) { -23376: return Policy::has_nan -23376: && ::sgn(v.get_den()) == 0 -23376: && ::sgn(v.get_num()) == 0; -23376: } -23376: -23376: template struct is_nan_function_struct { static inline bool function(const mpq_class& arg) { return is_nan_mpq(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_minf_mpq(const mpq_class& v) { -23376: return Policy::has_infinity -23376: && ::sgn(v.get_den()) == 0 -23376: && ::sgn(v.get_num()) < 0; -23376: } -23376: -23376: template struct is_minf_function_struct { static inline bool function(const mpq_class& arg) { return is_minf_mpq(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_pinf_mpq(const mpq_class& v) { -23376: return Policy::has_infinity -23376: && ::sgn(v.get_den()) == 0 -23376: && ::sgn(v.get_num()) > 0; -23376: } -23376: -23376: template struct is_pinf_function_struct { static inline bool function(const mpq_class& arg) { return is_pinf_mpq(arg); } }; -23376: -23376: template -23376: inline bool -23376: is_int_mpq(const mpq_class& v) { -23376: if ((Policy::has_infinity || Policy::has_nan) -23376: && ::sgn(v.get_den()) == 0) { -23376: return !(Policy::has_nan && ::sgn(v.get_num()) == 0); -23376: } -23376: else { -23376: return v.get_den() == 1; -23376: } -23376: } -23376: -23376: template struct is_int_function_struct { static inline bool function(const mpq_class& arg) { return is_int_mpq(arg); } }; -23376: -23376: template -23376: inline Result -23376: assign_special_mpq(mpq_class& v, Result_Class c, Rounding_Dir) { -23376: switch (c) { -23376: case VC_NAN: -23376: if (Policy::has_nan) { -23376: v.get_num() = 0; -23376: v.get_den() = 0; -23376: return V_NAN | V_UNREPRESENTABLE; -23376: } -23376: return V_NAN; -23376: case VC_MINUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: v.get_num() = -1; -23376: v.get_den() = 0; -23376: return V_EQ_MINUS_INFINITY; -23376: } -23376: return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE; -23376: case VC_PLUS_INFINITY: -23376: if (Policy::has_infinity) { -23376: v.get_num() = 1; -23376: v.get_den() = 0; -23376: return V_EQ_PLUS_INFINITY; -23376: } -23376: return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN | V_UNREPRESENTABLE; -23376: } -23376: } -23376: -23376: template struct assign_special_function_struct { static inline Result function( mpq_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpq(arg, a1, a2); } }; -23376: -23376: template struct copy_function_struct { static inline void function( mpq_class& arg1, const mpq_class &arg2) { return copy_generic(arg1, arg2); } }; -23376: -23376: template -23376: inline Result -23376: construct_mpq_base(mpq_class& to, const From& from, Rounding_Dir) { -23376: new(&to) mpq_class(from); -23376: return V_EQ; -23376: } -23376: -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpq_base(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: construct_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return construct_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return construct_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return construct_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: new(&to) mpq_class(from); -23376: return V_EQ; -23376: } -23376: -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpq_float(arg1, arg2, a1); } }; -23376: template struct construct_function_struct { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpq_float(arg1, arg2, a1); } }; -23376: -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) { -23376: if (is_nan(from)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(from)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(from)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: assign_mpq_numeric_float(to, from); -23376: return V_EQ; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpq_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpq_float(arg1, arg2, a1); } }; -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpq_float(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpq_signed_int(mpq_class& to, const From from, Rounding_Dir) { -23376: if (sizeof(From) <= sizeof(signed long)) { -23376: to = static_cast(from); -23376: } -23376: else { -23376: mpz_ptr m = to.get_num().get_mpz_t(); -23376: if (from >= 0) { -23376: -23376: # 221 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 221 "../../src/checked_mpq_inlines.hh" -23376: (m, 1, 1, sizeof(From), 0, 0, &from); -23376: } -23376: else { -23376: From n = -from; -23376: -23376: # 225 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 225 "../../src/checked_mpq_inlines.hh" -23376: (m, 1, 1, sizeof(From), 0, 0, &n); -23376: -23376: # 226 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_neg -23376: # 226 "../../src/checked_mpq_inlines.hh" -23376: (m, m); -23376: } -23376: to.get_den() = 1; -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpq_signed_int(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: assign_mpq_unsigned_int(mpq_class& to, const From from, Rounding_Dir) { -23376: if (sizeof(From) <= sizeof(unsigned long)) { -23376: to = static_cast(from); -23376: } -23376: else { -23376: -23376: # 242 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_import -23376: # 242 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from); -23376: to.get_den() = 1; -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template struct assign_function_struct { static inline Result function( mpq_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpq_unsigned_int(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: floor_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) { -23376: -23376: # 253 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_fdiv_q -23376: # 253 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), -23376: from.get_num().get_mpz_t(), from.get_den().get_mpz_t()); -23376: to.get_den() = 1; -23376: return V_EQ; -23376: } -23376: -23376: template struct floor_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return floor_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: ceil_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) { -23376: -23376: # 264 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_cdiv_q -23376: # 264 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), -23376: from.get_num().get_mpz_t(), from.get_den().get_mpz_t()); -23376: to.get_den() = 1; -23376: return V_EQ; -23376: } -23376: -23376: template struct ceil_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return ceil_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: trunc_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) { -23376: -23376: # 275 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_tdiv_q -23376: # 275 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), -23376: from.get_num().get_mpz_t(), from.get_den().get_mpz_t()); -23376: to.get_den() = 1; -23376: return V_EQ; -23376: } -23376: -23376: template struct trunc_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return trunc_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: neg_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) { -23376: -23376: # 286 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpq_neg -23376: # 286 "../../src/checked_mpq_inlines.hh" -23376: (to.get_mpq_t(), from.get_mpq_t()); -23376: return V_EQ; -23376: } -23376: -23376: template struct neg_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return neg_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) { -23376: to = x + y; -23376: return V_EQ; -23376: } -23376: -23376: template struct add_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: sub_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) { -23376: to = x - y; -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) { -23376: to = x * y; -23376: return V_EQ; -23376: } -23376: -23376: template struct mul_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return mul_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: div_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : ( -23376: # 322 "../../src/checked_mpq_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 322 "../../src/checked_mpq_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: to = x / y; -23376: return V_EQ; -23376: } -23376: -23376: template struct div_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return div_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: idiv_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir dir) { -23376: if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : ( -23376: # 334 "../../src/checked_mpq_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 334 "../../src/checked_mpq_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: to = x / y; -23376: return trunc(to, to, dir); -23376: } -23376: -23376: template struct idiv_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return idiv_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: rem_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) { -23376: if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : ( -23376: # 346 "../../src/checked_mpq_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 346 "../../src/checked_mpq_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_MOD_ZERO); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; mpq_class& tmp = holder_tmp.item(); -23376: tmp = x / y; -23376: tmp.get_num() %= tmp.get_den(); -23376: to = tmp * y; -23376: return V_EQ; -23376: } -23376: -23376: template struct rem_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return rem_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; mpz_class& v = holder_v.item(); -23376: v = 1; -23376: -23376: # 364 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 364 "../../src/checked_mpq_inlines.hh" -23376: (v.get_mpz_t(), v.get_mpz_t(), exp); -23376: to = x + v; -23376: return V_EQ; -23376: } -23376: -23376: template struct add_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: sub_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; mpz_class& v = holder_v.item(); -23376: v = 1; -23376: -23376: # 377 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 377 "../../src/checked_mpq_inlines.hh" -23376: (v.get_mpz_t(), v.get_mpz_t(), exp); -23376: to = x - v; -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: mul_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: -23376: # 388 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 388 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), exp); -23376: to.get_den() = x.get_den(); -23376: to.canonicalize(); -23376: return V_EQ; -23376: } -23376: -23376: template struct mul_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: div_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: to.get_num() = x.get_num(); -23376: -23376: # 401 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 401 "../../src/checked_mpq_inlines.hh" -23376: (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp); -23376: to.canonicalize(); -23376: return V_EQ; -23376: } -23376: -23376: template struct div_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: smod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: -23376: # 412 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 412 "../../src/checked_mpq_inlines.hh" -23376: (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp); -23376: -23376: # 413 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_fdiv_r -23376: # 413 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t()); -23376: -23376: # 414 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_fdiv_q_2exp -23376: # 414 "../../src/checked_mpq_inlines.hh" -23376: (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1); -23376: bool neg = to.get_num() >= to.get_den(); -23376: -23376: # 416 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 416 "../../src/checked_mpq_inlines.hh" -23376: (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1); -23376: if (neg) { -23376: to.get_num() -= to.get_den(); -23376: } -23376: -23376: # 420 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 420 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp); -23376: to.canonicalize(); -23376: return V_EQ; -23376: } -23376: -23376: template struct smod_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: umod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp, -23376: Rounding_Dir) { -23376: -23376: # 431 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 431 "../../src/checked_mpq_inlines.hh" -23376: (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp); -23376: -23376: # 432 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_fdiv_r -23376: # 432 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t()); -23376: -23376: # 433 "../../src/checked_mpq_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 433 "../../src/checked_mpq_inlines.hh" -23376: (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp); -23376: to.canonicalize(); -23376: return V_EQ; -23376: } -23376: -23376: template struct umod_2exp_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpq(arg1, arg2, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: abs_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) { -23376: to = abs(from); -23376: return V_EQ; -23376: } -23376: -23376: template struct abs_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return abs_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: add_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, -23376: Rounding_Dir) { -23376: to += x * y; -23376: return V_EQ; -23376: } -23376: -23376: template struct add_mul_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mul_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: template -23376: inline Result -23376: sub_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, -23376: Rounding_Dir) { -23376: to -= x * y; -23376: return V_EQ; -23376: } -23376: -23376: template struct sub_mul_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mul_mpq(arg1, arg2, arg3, a1); } }; -23376: -23376: extern unsigned irrational_precision; -23376: -23376: template -23376: inline Result -23376: sqrt_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir dir) { -23376: if (((To_Policy::check_sqrt_neg) ? (from < 0) : ( -23376: # 474 "../../src/checked_mpq_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 474 "../../src/checked_mpq_inlines.hh" -23376: , false))) { -23376: return assign_nan(to, V_SQRT_NEG); -23376: } -23376: if (from == 0) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: bool gt1 = from.get_num() > from.get_den(); -23376: const mpz_class& from_a = gt1 ? from.get_num() : from.get_den(); -23376: const mpz_class& from_b = gt1 ? from.get_den() : from.get_num(); -23376: mpz_class& to_a = gt1 ? to.get_num() : to.get_den(); -23376: mpz_class& to_b = gt1 ? to.get_den() : to.get_num(); -23376: Rounding_Dir rdir = gt1 ? dir : inverse(dir); -23376: mul_2exp(to_a, from_a, -23376: 2*irrational_precision, ROUND_IGNORE); -23376: Result r_div -23376: = div(to_a, to_a, from_b, rdir); -23376: Result r_sqrt = sqrt(to_a, to_a, rdir); -23376: to_b = 1; -23376: mul_2exp(to_b, to_b, -23376: irrational_precision, ROUND_IGNORE); -23376: to.canonicalize(); -23376: return (r_div != V_EQ) ? r_div : r_sqrt; -23376: } -23376: -23376: template struct sqrt_function_struct { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return sqrt_mpq(arg1, arg2, a1); } }; -23376: -23376: template -23376: inline Result -23376: input_mpq(mpq_class& to, std::istream& is, Rounding_Dir dir) { -23376: Result r = input_mpq(to, is); -23376: Result_Class c = result_class(r); -23376: switch (c) { -23376: case VC_MINUS_INFINITY: -23376: case VC_PLUS_INFINITY: -23376: return assign_special(to, c, dir); -23376: case VC_NAN: -23376: return assign_nan(to, r); -23376: default: -23376: return r; -23376: } -23376: } -23376: -23376: template struct input_function_struct { static inline Result function( mpq_class& arg, std::istream& a1, Rounding_Dir a2) { return input_mpq(arg, a1, a2); } }; -23376: -23376: template -23376: inline Result -23376: output_mpq(std::ostream& os, -23376: const mpq_class& from, -23376: const Numeric_Format&, -23376: Rounding_Dir) { -23376: os << from; -23376: return V_EQ; -23376: } -23376: -23376: template struct output_function_struct { static inline Result function(std::ostream& b1, const mpq_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpq(b1, arg, a1, a2); } }; -23376: -23376: } -23376: -23376: -23376: inline unsigned -23376: irrational_precision() { -23376: return Checked::irrational_precision; -23376: } -23376: # 548 "../../src/checked_mpq_inlines.hh" -23376: inline void -23376: set_irrational_precision(const unsigned p) { -23376: if (p <= 0x7fffffff) { -23376: Checked::irrational_precision = p; -23376: } -23376: else { -23376: throw std::invalid_argument("PPL::set_irrational_precision(p)" -23376: " with p > INT_MAX"); -23376: } -23376: } -23376: -23376: } -23376: # 705 "../../src/checked_defs.hh" 2 -23376: # 1 "../../src/checked_ext_inlines.hh" 1 -23376: # 27 "../../src/checked_ext_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template struct FPU_Related : public False {}; -23376: template <> struct FPU_Related : public True {}; -23376: template <> struct FPU_Related : public True {}; -23376: template <> struct FPU_Related : public True {}; -23376: -23376: namespace Checked { -23376: -23376: template -23376: inline bool -23376: handle_ext_natively(const T&) { -23376: return FPU_Related::value; -23376: } -23376: -23376: template -23376: inline bool -23376: ext_to_handle(const Type& x) { -23376: return !handle_ext_natively(x) -23376: && (Policy::has_infinity || Policy::has_nan); -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: sgn_ext(const Type& x) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return VR_EMPTY; -23376: } -23376: else if (is_minf(x)) { -23376: return VR_LT; -23376: } -23376: else if (is_pinf(x)) { -23376: return VR_GT; -23376: } -23376: else { -23376: native: -23376: return sgn(x); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: construct_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return construct_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return construct_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return construct_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return construct(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: assign_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return assign(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: neg_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return neg(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: floor_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return floor(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: ceil_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return ceil(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: trunc_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return trunc(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: abs_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x) || is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return abs(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: add_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: if (((To_Policy::check_inf_add_inf) ? (is_pinf(y)) : ( -23376: # 232 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 232 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: goto inf_add_inf; -23376: } -23376: else { -23376: goto minf; -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: if (((To_Policy::check_inf_add_inf) ? (is_minf(y)) : ( -23376: # 240 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 240 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: inf_add_inf: -23376: return assign_nan(to, V_INF_ADD_INF); -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: } -23376: else { -23376: if (is_minf(y)) { -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(y)) { -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return add(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sub_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: if (((To_Policy::check_inf_sub_inf) ? (is_minf(y)) : ( -23376: # 275 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 275 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: goto inf_sub_inf; -23376: } -23376: else { -23376: goto minf; -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: if (((To_Policy::check_inf_sub_inf) ? (is_pinf(y)) : ( -23376: # 283 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 283 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: inf_sub_inf: -23376: return assign_nan(to, V_INF_SUB_INF); -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: } -23376: else { -23376: if (is_pinf(y)) { -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_minf(y)) { -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return sub(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (is_minf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto pinf; -23376: case VR_GT: -23376: goto minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto minf; -23376: case VR_GT: -23376: goto pinf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else { -23376: if (is_minf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: goto pinf; -23376: case VR_GT: -23376: goto minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: case VR_GT: -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: default: -23376: inf_mul_zero: -23376: ((void) 0); -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: } -23376: else { -23376: native: -23376: return mul(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: inline Result -23376: add_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(to) -23376: && !ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(to) -23376: || is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (is_minf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto a_pinf; -23376: case VR_GT: -23376: goto a_minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto a_minf; -23376: case VR_GT: -23376: goto a_pinf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else { -23376: if (is_minf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: goto a_pinf; -23376: case VR_GT: -23376: goto a_minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: a_minf: -23376: if (((To_Policy::check_inf_add_inf) ? (is_pinf(to)) : ( -23376: # 417 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 417 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: goto inf_add_inf; -23376: } -23376: else { -23376: goto minf; -23376: } -23376: case VR_GT: -23376: a_pinf: -23376: if (((To_Policy::check_inf_add_inf) ? (is_minf(to)) : ( -23376: # 425 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 425 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: inf_add_inf: -23376: return assign_nan(to, V_INF_ADD_INF); -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: default: -23376: inf_mul_zero: -23376: ((void) 0); -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: } -23376: else { -23376: if (is_minf(to)) { -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: if (is_pinf(to)) { -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: native: -23376: return add_mul(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sub_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(to) -23376: && !ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(to) -23376: || is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (is_minf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto a_pinf; -23376: case VR_GT: -23376: goto a_minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: switch (sgn_ext(y)) { -23376: case VR_LT: -23376: goto a_minf; -23376: case VR_GT: -23376: goto a_pinf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else { -23376: if (is_minf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: goto a_pinf; -23376: case VR_GT: -23376: goto a_minf; -23376: default: -23376: goto inf_mul_zero; -23376: } -23376: } -23376: else if (is_pinf(y)) { -23376: switch (sgn(x)) { -23376: case VR_LT: -23376: a_minf: -23376: if (((To_Policy::check_inf_sub_inf) ? (is_minf(to)) : ( -23376: # 500 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 500 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: goto inf_sub_inf; -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: case VR_GT: -23376: a_pinf: -23376: if (((To_Policy::check_inf_sub_inf) ? (is_pinf(to)) : ( -23376: # 508 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 508 "../../src/checked_ext_inlines.hh" -23376: , false))) { -23376: inf_sub_inf: -23376: return assign_nan(to, V_INF_SUB_INF); -23376: } -23376: else { -23376: goto minf; -23376: } -23376: default: -23376: inf_mul_zero: -23376: ((void) 0); -23376: return assign_nan(to, V_INF_MUL_ZERO); -23376: } -23376: } -23376: else { -23376: if (is_minf(to)) { -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: if (is_pinf(to)) { -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: native: -23376: return sub_mul(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: div_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (is_minf(x)) { -23376: if (((To_Policy::check_inf_div_inf) ? (is_minf(y) || is_pinf(y)) : ( -23376: # 547 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 547 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: goto inf_div_inf; -23376: } -23376: else { -23376: switch (sgn(y)) { -23376: case VR_LT: -23376: goto pinf; -23376: case VR_GT: -23376: goto minf; -23376: default: -23376: goto div_zero; -23376: } -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: if (((To_Policy::check_inf_div_inf) ? (is_minf(y) || is_pinf(y)) : ( -23376: # 563 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 563 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: inf_div_inf: -23376: return assign_nan(to, V_INF_DIV_INF); -23376: } -23376: else { -23376: switch (sgn(y)) { -23376: case VR_LT: -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: case VR_GT: -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: default: -23376: div_zero: -23376: ((void) 0); -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: } -23376: } -23376: else { -23376: if (is_minf(y) || is_pinf(y)) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: else { -23376: native: -23376: return div(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: inline Result -23376: idiv_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: if (is_minf(x)) { -23376: if (((To_Policy::check_inf_div_inf) ? (is_minf(y) || is_pinf(y)) : ( -23376: # 607 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 607 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: goto inf_div_inf; -23376: } -23376: else { -23376: switch (sgn(y)) { -23376: case VR_LT: -23376: goto pinf; -23376: case VR_GT: -23376: goto minf; -23376: default: -23376: goto div_zero; -23376: } -23376: } -23376: } -23376: else if (is_pinf(x)) { -23376: if (((To_Policy::check_inf_div_inf) ? (is_minf(y) || is_pinf(y)) : ( -23376: # 623 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 623 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: inf_div_inf: -23376: return assign_nan(to, V_INF_DIV_INF); -23376: } -23376: else { -23376: switch (sgn(y)) { -23376: case VR_LT: -23376: minf: -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: case VR_GT: -23376: pinf: -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: default: -23376: div_zero: -23376: ((void) 0); -23376: return assign_nan(to, V_DIV_ZERO); -23376: } -23376: } -23376: } -23376: else { -23376: if (is_minf(y) || is_pinf(y)) { -23376: to = 0; -23376: return V_EQ; -23376: } -23376: else { -23376: native: -23376: return idiv(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: inline Result -23376: rem_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (((To_Policy::check_inf_mod) ? (is_minf(x) || is_pinf(x)) : ( -23376: # 666 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 666 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: else { -23376: if (is_minf(y) || is_pinf(y)) { -23376: to = x; -23376: return V_EQ; -23376: } -23376: else { -23376: native: -23376: return rem(to, x, y, dir); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: add_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return add_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sub_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return sub_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: mul_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return mul_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: div_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_special(to, VC_MINUS_INFINITY, dir); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return div_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: smod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (((To_Policy::check_inf_mod) ? (is_minf(x) || is_pinf(x)) : ( -23376: # 780 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 780 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: else { -23376: native: -23376: return smod_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: umod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (((To_Policy::check_inf_mod) ? (is_minf(x) || is_pinf(x)) : ( -23376: # 800 "../../src/checked_ext_inlines.hh" 3 4 -23376: (static_cast (0)) -23376: # 800 "../../src/checked_ext_inlines.hh" -23376: , false)) -23376: ) { -23376: return assign_nan(to, V_INF_MOD); -23376: } -23376: else { -23376: native: -23376: return umod_2exp(to, x, exp, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: sqrt_ext(To& to, const From& x, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x)) { -23376: return assign_nan(to, V_SQRT_NEG); -23376: } -23376: else if (is_pinf(x)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: native: -23376: return sqrt(to, x, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: gcd_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x) || is_pinf(x)) { -23376: return abs_ext(to, y, dir); -23376: } -23376: else if (is_minf(y) || is_pinf(y)) { -23376: return abs_ext(to, x, dir); -23376: } -23376: else { -23376: return gcd(to, x, y, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: gcdext_ext(To1& to, To2& s, To3& t, const From1& x, const From2& y, -23376: Rounding_Dir dir) { -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x) || is_pinf(x)) { -23376: s = 0; -23376: t = y > 0 ? -1 : 1; -23376: return abs_ext(to, y, dir); -23376: } -23376: else if (is_minf(y) || is_pinf(y)) { -23376: s = x > 0 ? -1 : 1; -23376: t = 0; -23376: return abs_ext(to, x, dir); -23376: } -23376: else { -23376: return gcdext(to, s, t, x, y, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: lcm_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) { -23376: if (is_nan(x) || is_nan(y)) { -23376: return assign_special(to, VC_NAN, ROUND_IGNORE); -23376: } -23376: else if (is_minf(x) || is_pinf(x) -23376: || is_minf(y) || is_pinf(y)) { -23376: return assign_special(to, VC_PLUS_INFINITY, dir); -23376: } -23376: else { -23376: return lcm(to, x, y, dir); -23376: } -23376: } -23376: -23376: template -23376: inline Result_Relation -23376: cmp_ext(const Type1& x, const Type2& y) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return VR_EMPTY; -23376: } -23376: else if (is_minf(x)) { -23376: return is_minf(y) ? VR_EQ : VR_LT; -23376: } -23376: else if (is_pinf(x)) { -23376: return is_pinf(y) ? VR_EQ : VR_GT; -23376: } -23376: else { -23376: if (is_minf(y)) { -23376: return VR_GT; -23376: } -23376: if (is_pinf(y)) { -23376: return VR_LT; -23376: } -23376: native: -23376: return cmp(x, y); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: lt_ext(const Type1& x, const Type2& y) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return false; -23376: } -23376: if (is_pinf(x) || is_minf(y)) { -23376: return false; -23376: } -23376: if (is_minf(x) || is_pinf(y)) { -23376: return true; -23376: } -23376: native: -23376: return lt_p(x, y); -23376: } -23376: -23376: template -23376: inline bool -23376: gt_ext(const Type1& x, const Type2& y) { -23376: return lt_ext(y, x); -23376: } -23376: -23376: template -23376: inline bool -23376: le_ext(const Type1& x, const Type2& y) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return false; -23376: } -23376: if (is_minf(x) || is_pinf(y)) { -23376: return true; -23376: } -23376: if (is_pinf(x) || is_minf(y)) { -23376: return false; -23376: } -23376: native: -23376: return le_p(x, y); -23376: } -23376: -23376: template -23376: inline bool -23376: ge_ext(const Type1& x, const Type2& y) { -23376: return le_ext(y, x); -23376: } -23376: -23376: template -23376: inline bool -23376: eq_ext(const Type1& x, const Type2& y) { -23376: if (!ext_to_handle(x) && !ext_to_handle(y)) { -23376: goto native; -23376: } -23376: if (is_nan(x) || is_nan(y)) { -23376: return false; -23376: } -23376: if (is_minf(x)) { -23376: return is_minf(y); -23376: } -23376: if (is_pinf(x)) { -23376: return is_pinf(y); -23376: } -23376: else if (is_minf(y) || is_pinf(y)) { -23376: return false; -23376: } -23376: native: -23376: return eq_p(x, y); -23376: } -23376: -23376: template -23376: inline bool -23376: ne_ext(const Type1& x, const Type2& y) { -23376: return !eq_ext(x, y); -23376: } -23376: -23376: template -23376: inline Result -23376: output_ext(std::ostream& os, const Type& x, -23376: const Numeric_Format& format, Rounding_Dir dir) { -23376: if (!ext_to_handle(x)) { -23376: goto native; -23376: } -23376: if (is_nan(x)) { -23376: os << "nan"; -23376: return V_NAN; -23376: } -23376: if (is_minf(x)) { -23376: os << "-inf"; -23376: return V_EQ; -23376: } -23376: if (is_pinf(x)) { -23376: os << "+inf"; -23376: return V_EQ; -23376: } -23376: native: -23376: return output(os, x, format, dir); -23376: } -23376: -23376: template -23376: inline Result -23376: input_ext(To& to, std::istream& is, Rounding_Dir dir) { -23376: return input(to, is, dir); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 706 "../../src/checked_defs.hh" 2 -23376: # 29 "../../src/Checked_Number_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: struct Extended_Number_Policy { -23376: enum const_bool_value_check_overflow { check_overflow = (true) }; -23376: enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) }; -23376: enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) }; -23376: enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) }; -23376: enum const_bool_value_check_div_zero { check_div_zero = (false) }; -23376: enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) }; -23376: enum const_bool_value_check_inf_mod { check_inf_mod = (false) }; -23376: enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) }; -23376: enum const_bool_value_has_nan { has_nan = (true) }; -23376: enum const_bool_value_has_infinity { has_infinity = (true) }; -23376: -23376: -23376: -23376: -23376: enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) }; -23376: enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void handle_result(Result r); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Check_Overflow_Policy { -23376: enum const_bool_value_check_overflow { check_overflow = (true) }; -23376: enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) }; -23376: enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) }; -23376: enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) }; -23376: enum const_bool_value_check_div_zero { check_div_zero = (false) }; -23376: enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) }; -23376: enum const_bool_value_check_inf_mod { check_inf_mod = (false) }; -23376: enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) }; -23376: enum const_bool_value_has_nan { has_nan = (std::numeric_limits::has_quiet_NaN) }; -23376: enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits::has_infinity) }; -23376: enum const_bool_value_convertible { convertible = (true) }; -23376: enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) }; -23376: enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) }; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_From_Wrapper; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_From_Wrapper::value>::type> { -23376: typedef Checked_Number_Transparent_Policy Policy; -23376: static const T& raw_value(const T& v) { -23376: return v; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_From_Wrapper > { -23376: typedef P Policy; -23376: static const T& raw_value(const Checked_Number& v) { -23376: return v.raw_value(); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_To_Wrapper; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_To_Wrapper::value>::type> { -23376: typedef Check_Overflow_Policy Policy; -23376: static T& raw_value(T& v) { -23376: return v; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Native_Checked_To_Wrapper > { -23376: typedef P Policy; -23376: static T& raw_value(Checked_Number& v) { -23376: return v.raw_value(); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Is_Checked : public False { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Is_Checked > : public True { }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Is_Native_Or_Checked -23376: : public Bool::value || Is_Checked::value> { }; -23376: # 169 "../../src/Checked_Number_defs.hh" -23376: template -23376: class Checked_Number { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: Checked_Number(); -23376: -23376: -23376: Checked_Number(const Checked_Number& y); -23376: -23376: -23376: template -23376: Checked_Number(const Checked_Number& y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(char y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(signed char y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(signed short y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(signed int y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(signed long y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(signed long long y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(unsigned char y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(unsigned short y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(unsigned int y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(unsigned long y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(unsigned long long y, Rounding_Dir dir); -23376: # 235 "../../src/Checked_Number_defs.hh" -23376: Checked_Number(const mpq_class& y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(const mpz_class& y, Rounding_Dir dir); -23376: -23376: -23376: Checked_Number(const char* y, Rounding_Dir dir); -23376: -23376: -23376: template -23376: Checked_Number(const From&, Rounding_Dir dir, -23376: typename Enable_If::value, bool>::type -23376: ignored = false); -23376: -23376: -23376: template -23376: explicit Checked_Number(const Checked_Number& y); -23376: -23376: -23376: Checked_Number(char y); -23376: -23376: -23376: Checked_Number(signed char y); -23376: -23376: -23376: Checked_Number(signed short y); -23376: -23376: -23376: Checked_Number(signed int y); -23376: -23376: -23376: Checked_Number(signed long y); -23376: -23376: -23376: Checked_Number(signed long long y); -23376: -23376: -23376: Checked_Number(unsigned char y); -23376: -23376: -23376: Checked_Number(unsigned short y); -23376: -23376: -23376: Checked_Number(unsigned int y); -23376: -23376: -23376: Checked_Number(unsigned long y); -23376: -23376: -23376: Checked_Number(unsigned long long y); -23376: -23376: -23376: Checked_Number(float y); -23376: -23376: -23376: Checked_Number(double y); -23376: -23376: -23376: Checked_Number(long double y); -23376: -23376: -23376: Checked_Number(const mpq_class& y); -23376: -23376: -23376: Checked_Number(const mpz_class& y); -23376: -23376: -23376: Checked_Number(const char* y); -23376: -23376: -23376: template -23376: Checked_Number(const From&, typename Enable_If::value, bool>::type ignored = false); -23376: # 315 "../../src/Checked_Number_defs.hh" -23376: operator T() const; -23376: -23376: -23376: T& raw_value(); -23376: -23376: -23376: const T& raw_value() const; -23376: -23376: -23376: -23376: -23376: bool OK() const; -23376: # 338 "../../src/Checked_Number_defs.hh" -23376: Result classify(bool nan = true, bool inf = true, bool sign = true) const; -23376: -23376: -23376: -23376: -23376: -23376: Checked_Number& operator=(const Checked_Number& y); -23376: -23376: -23376: template -23376: Checked_Number& operator=(const From& y); -23376: -23376: -23376: template -23376: Checked_Number& operator+=(const Checked_Number& y); -23376: -23376: -23376: Checked_Number& operator+=(const T& y); -23376: -23376: -23376: template -23376: typename Enable_If::value, -23376: Checked_Number&>::type -23376: operator+=(const From& y); -23376: -23376: -23376: template -23376: Checked_Number& operator-=(const Checked_Number& y); -23376: -23376: -23376: Checked_Number& operator-=(const T& y); -23376: -23376: -23376: template -23376: typename Enable_If::value, -23376: Checked_Number&>::type -23376: operator-=(const From& y); -23376: -23376: -23376: template -23376: Checked_Number& operator*=(const Checked_Number& y); -23376: -23376: -23376: Checked_Number& operator*=(const T& y); -23376: -23376: -23376: template -23376: typename Enable_If::value, -23376: Checked_Number&>::type -23376: operator*=(const From& y); -23376: -23376: -23376: template -23376: Checked_Number& operator/=(const Checked_Number& y); -23376: -23376: -23376: Checked_Number& operator/=(const T& y); -23376: -23376: -23376: template -23376: typename Enable_If::value, -23376: Checked_Number&>::type -23376: operator/=(const From& y); -23376: -23376: -23376: template -23376: Checked_Number& operator%=(const Checked_Number& y); -23376: -23376: -23376: Checked_Number& operator%=(const T& y); -23376: -23376: -23376: template -23376: typename Enable_If::value, -23376: Checked_Number& >::type -23376: operator%=(const From& y); -23376: # 422 "../../src/Checked_Number_defs.hh" -23376: Checked_Number& operator++(); -23376: -23376: -23376: Checked_Number operator++(int); -23376: -23376: -23376: Checked_Number& operator--(); -23376: -23376: -23376: Checked_Number operator--(int); -23376: -23376: -23376: -23376: private: -23376: -23376: T v; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct Slow_Copy > : public Bool::value> {}; -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_not_a_number(const T& x); -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_minus_infinity(const T& x); -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_plus_infinity(const T& x); -23376: -23376: -23376: template -23376: typename Enable_If::value, int>::type -23376: infinity_sign(const T& x); -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_integer(const T& x); -23376: -23376: -23376: template -23376: typename Enable_If::value && Is_Special::value, Result>::type -23376: construct(To& to, const From& x, Rounding_Dir dir); -23376: -23376: -23376: template -23376: typename Enable_If::value && Is_Special::value, Result>::type -23376: assign_r(To& to, const From& x, Rounding_Dir dir); -23376: -23376: -23376: template -23376: typename Enable_If::value, Result>::type -23376: assign_r(To& to, const char* x, Rounding_Dir dir); -23376: -23376: -23376: template -23376: typename Enable_If::value, Result>::type -23376: assign_r(To& to, char* x, Rounding_Dir dir); -23376: # 498 "../../src/Checked_Number_defs.hh" -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir); -23376: # 515 "../../src/Checked_Number_defs.hh" -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir); -23376: # 532 "../../src/Checked_Number_defs.hh" -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir); -23376: # 558 "../../src/Checked_Number_defs.hh" -23376: template typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir); -23376: # 572 "../../src/Checked_Number_defs.hh" -23376: template -23376: memory_size_type -23376: total_memory_in_bytes(const Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: memory_size_type -23376: external_memory_in_bytes(const Checked_Number& x); -23376: # 589 "../../src/Checked_Number_defs.hh" -23376: template -23376: Checked_Number -23376: operator+(const Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: Checked_Number -23376: operator-(const Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: floor_assign(Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: floor_assign(Checked_Number& x, const Checked_Number& y); -23376: -23376: -23376: -23376: template -23376: void -23376: ceil_assign(Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: ceil_assign(Checked_Number& x, const Checked_Number& y); -23376: -23376: -23376: -23376: template -23376: void -23376: trunc_assign(Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: trunc_assign(Checked_Number& x, const Checked_Number& y); -23376: -23376: -23376: -23376: template -23376: void -23376: neg_assign(Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: neg_assign(Checked_Number& x, const Checked_Number& y); -23376: -23376: -23376: -23376: template -23376: void -23376: abs_assign(Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: void -23376: abs_assign(Checked_Number& x, const Checked_Number& y); -23376: -23376: -23376: -23376: template -23376: void -23376: add_mul_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: template -23376: void -23376: sub_mul_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: template -23376: void -23376: gcd_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: gcdext_assign(Checked_Number& x, -23376: Checked_Number& s, -23376: Checked_Number& t, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: template -23376: void -23376: lcm_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: template -23376: void -23376: mul_2exp_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: unsigned int exp); -23376: -23376: -23376: -23376: template -23376: void -23376: div_2exp_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: unsigned int exp); -23376: # 727 "../../src/Checked_Number_defs.hh" -23376: template -23376: void -23376: exact_div_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z); -23376: -23376: -23376: -23376: template -23376: void sqrt_assign(Checked_Number& x, -23376: const Checked_Number& y); -23376: # 747 "../../src/Checked_Number_defs.hh" -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator==(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: equal(const T1& x, const T2& y); -23376: -23376: -23376: -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator!=(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: not_equal(const T1& x, const T2& y); -23376: -23376: -23376: -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator>=(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: greater_or_equal(const T1& x, const T2& y); -23376: -23376: -23376: -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator>(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: greater_than(const T1& x, const T2& y); -23376: -23376: -23376: -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator<=(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: less_or_equal(const T1& x, const T2& y); -23376: -23376: -23376: -23376: template -23376: inline -23376: typename Enable_If::value -23376: && Is_Native_Or_Checked::value -23376: && (Is_Checked::value || Is_Checked::value), -23376: bool>::type -23376: operator<(const T1& x, const T2& y); -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: bool>::type -23376: less_than(const T1& x, const T2& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value, int>::type -23376: sgn(const From& x); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: int>::type -23376: cmp(const From1& x, const From2& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, Result>::type -23376: output(std::ostream& os, -23376: const T& x, -23376: const Numeric_Format& format, -23376: Rounding_Dir dir); -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& os, const Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: ascii_dump(std::ostream& s, const T& t); -23376: # 1019 "../../src/Checked_Number_defs.hh" -23376: template -23376: typename Enable_If::value, Result>::type -23376: input(T& x, std::istream& is, Rounding_Dir dir); -23376: -23376: -23376: -23376: template -23376: std::istream& -23376: operator>>(std::istream& is, Checked_Number& x); -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: ascii_load(std::ostream& s, T& t); -23376: -23376: -23376: -23376: void throw_result_exception(Result r); -23376: -23376: template -23376: T -23376: plus_infinity(); -23376: -23376: template -23376: T -23376: minus_infinity(); -23376: -23376: template -23376: T -23376: not_a_number(); -23376: -23376: -23376: -23376: template -23376: void swap(Checked_Number& x, Checked_Number& y); -23376: -23376: template -23376: struct FPU_Related > : public FPU_Related {}; -23376: -23376: template -23376: void maybe_reset_fpu_inexact(); -23376: -23376: template -23376: int maybe_check_fpu_inexact(); -23376: -23376: } -23376: -23376: # 1 "../../src/Checked_Number_inlines.hh" 1 -23376: # 31 "../../src/Checked_Number_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: inline Rounding_Dir -23376: rounding_dir(Rounding_Dir dir) { -23376: if (dir == ROUND_NOT_NEEDED) { -23376: -23376: -23376: -23376: } -23376: return dir; -23376: } -23376: -23376: inline Result -23376: check_result(Result r, Rounding_Dir dir) { -23376: if (dir == ROUND_NOT_NEEDED) { -23376: -23376: -23376: -23376: return r; -23376: } -23376: return r; -23376: } -23376: -23376: -23376: template -23376: inline void -23376: Checked_Number_Transparent_Policy::handle_result(Result) { -23376: } -23376: -23376: inline void -23376: Extended_Number_Policy::handle_result(Result r) { -23376: if (result_class(r) == VC_NAN) { -23376: throw_result_exception(r); -23376: } -23376: } -23376: -23376: template -23376: inline -23376: Checked_Number::Checked_Number() -23376: : v(0) { -23376: } -23376: -23376: template -23376: inline -23376: Checked_Number::Checked_Number(const Checked_Number& y) { -23376: -23376: Checked::copy(v, y.raw_value()); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Checked_Number -23376: ::Checked_Number(const Checked_Number& y, -23376: Rounding_Dir dir) { -23376: -23376: Policy::handle_result(check_result(Checked::assign_ext -23376: (v, -23376: y.raw_value(), -23376: rounding_dir(dir)), -23376: dir) -23376: ); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Checked_Number -23376: ::Checked_Number(const Checked_Number& y) { -23376: -23376: Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; -23376: Policy::handle_result(check_result(Checked::assign_ext -23376: (v, -23376: y.raw_value(), -23376: rounding_dir(dir)), -23376: dir)); -23376: } -23376: # 133 "../../src/Checked_Number_inlines.hh" -23376: template inline Checked_Number::Checked_Number(const char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const signed char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const signed char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const signed short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const signed short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const signed int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const signed int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const signed long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const signed long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const signed long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const signed long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const unsigned char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const unsigned char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const unsigned short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const unsigned short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const unsigned int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const unsigned int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const unsigned long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const unsigned long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const unsigned long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const unsigned long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: # 153 "../../src/Checked_Number_inlines.hh" -23376: template inline Checked_Number::Checked_Number(const mpq_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const mpq_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: template inline Checked_Number::Checked_Number(const mpz_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } template inline Checked_Number::Checked_Number(const mpz_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext > (v, y, rounding_dir(dir)), dir)); } -23376: -23376: -23376: -23376: -23376: template -23376: inline -23376: Checked_Number::Checked_Number(const char* y, Rounding_Dir dir) { -23376: std::istringstream s(y); -23376: Policy::handle_result(check_result(Checked::input(v, -23376: s, -23376: rounding_dir(dir)), -23376: dir)); -23376: } -23376: -23376: template -23376: inline -23376: Checked_Number::Checked_Number(const char* y) { -23376: std::istringstream s(y); -23376: Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; -23376: Policy::handle_result(check_result(Checked::input(v, -23376: s, -23376: rounding_dir(dir)), -23376: dir)); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Checked_Number -23376: ::Checked_Number(const From&, -23376: Rounding_Dir dir, -23376: typename Enable_If::value, bool>::type) { -23376: Policy::handle_result(check_result(Checked::assign_special(v, -23376: From::vclass, -23376: rounding_dir(dir)), -23376: dir)); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Checked_Number::Checked_Number(const From&, typename Enable_If::value, bool>::type) { -23376: Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; -23376: Policy::handle_result(check_result(Checked::assign_special(v, -23376: From::vclass, -23376: rounding_dir(dir)), -23376: dir)); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Special::value, Result>::type -23376: assign_r(To& to, const From&, Rounding_Dir dir) { -23376: return check_result(Checked::assign_special -23376: ::Policy>(Native_Checked_To_Wrapper::raw_value(to), -23376: From::vclass, -23376: rounding_dir(dir)), -23376: dir); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value && Is_Special::value, Result>::type -23376: construct(To& to, const From&, Rounding_Dir dir) { -23376: return check_result(Checked::construct_special -23376: ::Policy>(Native_Checked_To_Wrapper::raw_value(to), -23376: From::vclass, -23376: rounding_dir(dir)), -23376: dir); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_minus_infinity(const T& x) { -23376: return Checked::is_minf -23376: ::Policy>(Native_Checked_From_Wrapper::raw_value(x)); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_plus_infinity(const T& x) { -23376: return Checked::is_pinf -23376: ::Policy>(Native_Checked_From_Wrapper::raw_value(x)); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, int>::type -23376: infinity_sign(const T& x) { -23376: return is_minus_infinity(x) ? -1 : (is_plus_infinity(x) ? 1 : 0); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_not_a_number(const T& x) { -23376: return Checked::is_nan -23376: ::Policy>(Native_Checked_From_Wrapper::raw_value(x)); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_integer(const T& x) { -23376: return Checked::is_int -23376: ::Policy>(Native_Checked_From_Wrapper::raw_value(x)); -23376: } -23376: -23376: template -23376: inline -23376: Checked_Number::operator T() const { -23376: if (Policy::convertible) { -23376: return v; -23376: } -23376: } -23376: -23376: template -23376: inline T& -23376: Checked_Number::raw_value() { -23376: return v; -23376: } -23376: -23376: template -23376: inline const T& -23376: Checked_Number::raw_value() const { -23376: return v; -23376: } -23376: -23376: -23376: template -23376: inline const T& -23376: raw_value(const Checked_Number& x) { -23376: return x.raw_value(); -23376: } -23376: -23376: -23376: template -23376: inline T& -23376: raw_value(Checked_Number& x) { -23376: return x.raw_value(); -23376: } -23376: -23376: template -23376: inline bool -23376: Checked_Number::OK() const { -23376: return true; -23376: } -23376: -23376: template -23376: inline Result -23376: Checked_Number::classify(bool nan, bool inf, bool sign) const { -23376: return Checked::classify(v, nan, inf, sign); -23376: } -23376: -23376: template -23376: inline bool -23376: is_not_a_number(const Checked_Number& x) { -23376: return Checked::is_nan(x.raw_value()); -23376: } -23376: -23376: template -23376: inline bool -23376: is_minus_infinity(const Checked_Number& x) { -23376: return Checked::is_minf(x.raw_value()); -23376: } -23376: -23376: template -23376: inline bool -23376: is_plus_infinity(const Checked_Number& x) { -23376: return Checked::is_pinf(x.raw_value()); -23376: } -23376: -23376: -23376: template -23376: inline memory_size_type -23376: total_memory_in_bytes(const Checked_Number& x) { -23376: return total_memory_in_bytes(x.raw_value()); -23376: } -23376: -23376: -23376: template -23376: inline memory_size_type -23376: external_memory_in_bytes(const Checked_Number& x) { -23376: return external_memory_in_bytes(x.raw_value()); -23376: } -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value, Result>::type -23376: assign_r(To& to, const char* x, Rounding_Dir dir) { -23376: std::istringstream s(x); -23376: return check_result(Checked::input -23376: ::Policy>(Native_Checked_To_Wrapper::raw_value(to), -23376: s, -23376: rounding_dir(dir)), -23376: dir); -23376: } -23376: # 365 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type construct(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::construct_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::assign_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::floor_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::ceil_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::trunc_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::neg_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::abs_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::sqrt_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), rounding_dir(dir)), dir); } -23376: # 393 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::add_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::sub_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::mul_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::div_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::smod_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::umod_2exp_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), exp, rounding_dir(dir)), dir); } -23376: # 422 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::mul_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::div_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::idiv_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::rem_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcd_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::lcm_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_mul_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_mul_ext ::Policy, typename Native_Checked_From_Wrapper ::Policy, typename Native_Checked_From_Wrapper ::Policy>(Native_Checked_To_Wrapper::raw_value(to), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: # 464 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value && Is_Native_Or_Checked::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcdext_ext::Policy, typename Native_Checked_To_Wrapper::Policy, typename Native_Checked_To_Wrapper::Policy, typename Native_Checked_From_Wrapper::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_To_Wrapper::raw_value(to), Native_Checked_To_Wrapper::raw_value(s), Native_Checked_To_Wrapper::raw_value(t), Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y), rounding_dir(dir)), dir); } -23376: # 485 "../../src/Checked_Number_inlines.hh" -23376: template inline Checked_Number& Checked_Number::operator ++() { Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number Checked_Number::operator ++(int) { T r = v; Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;} -23376: template inline Checked_Number& Checked_Number::operator --() { Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number Checked_Number::operator --(int) { T r = v; Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;} -23376: -23376: -23376: -23376: template -23376: inline Checked_Number& -23376: Checked_Number::operator=(const Checked_Number& y) { -23376: Checked::copy(v, y.raw_value()); -23376: return *this; -23376: } -23376: template -23376: template -23376: inline Checked_Number& -23376: Checked_Number::operator=(const From& y) { -23376: Policy::handle_result(assign_r(*this, y, Policy::ROUND_DEFAULT_OPERATOR)); -23376: return *this; -23376: } -23376: # 531 "../../src/Checked_Number_inlines.hh" -23376: template template inline Checked_Number& Checked_Number::operator +=(const Checked_Number& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number& Checked_Number::operator +=(const T& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template template inline typename Enable_If::value, Checked_Number& >::type Checked_Number::operator +=(const From& y) { Checked_Number cy(y); Policy::handle_result((add_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } -23376: template template inline Checked_Number& Checked_Number::operator -=(const Checked_Number& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number& Checked_Number::operator -=(const T& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template template inline typename Enable_If::value, Checked_Number& >::type Checked_Number::operator -=(const From& y) { Checked_Number cy(y); Policy::handle_result((sub_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } -23376: template template inline Checked_Number& Checked_Number::operator *=(const Checked_Number& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number& Checked_Number::operator *=(const T& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template template inline typename Enable_If::value, Checked_Number& >::type Checked_Number::operator *=(const From& y) { Checked_Number cy(y); Policy::handle_result((mul_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } -23376: template template inline Checked_Number& Checked_Number::operator /=(const Checked_Number& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number& Checked_Number::operator /=(const T& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template template inline typename Enable_If::value, Checked_Number& >::type Checked_Number::operator /=(const From& y) { Checked_Number cy(y); Policy::handle_result((div_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } -23376: template template inline Checked_Number& Checked_Number::operator %=(const Checked_Number& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template inline Checked_Number& Checked_Number::operator %=(const T& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template template inline typename Enable_If::value, Checked_Number& >::type Checked_Number::operator %=(const From& y) { Checked_Number cy(y); Policy::handle_result((rem_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } -23376: # 565 "../../src/Checked_Number_inlines.hh" -23376: template inline Checked_Number operator +(const Checked_Number& x, const Checked_Number& y) { Checked_Number r; Policy::handle_result((add_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator +(const Type& x, const Checked_Number& y) { Checked_Number r(x); Policy::handle_result((add_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator +(const Checked_Number& x, const Type& y) { Checked_Number r(y); Policy::handle_result((add_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; } -23376: template inline Checked_Number operator -(const Checked_Number& x, const Checked_Number& y) { Checked_Number r; Policy::handle_result((sub_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator -(const Type& x, const Checked_Number& y) { Checked_Number r(x); Policy::handle_result((sub_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator -(const Checked_Number& x, const Type& y) { Checked_Number r(y); Policy::handle_result((sub_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; } -23376: template inline Checked_Number operator *(const Checked_Number& x, const Checked_Number& y) { Checked_Number r; Policy::handle_result((mul_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator *(const Type& x, const Checked_Number& y) { Checked_Number r(x); Policy::handle_result((mul_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator *(const Checked_Number& x, const Type& y) { Checked_Number r(y); Policy::handle_result((mul_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; } -23376: template inline Checked_Number operator /(const Checked_Number& x, const Checked_Number& y) { Checked_Number r; Policy::handle_result((div_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator /(const Type& x, const Checked_Number& y) { Checked_Number r(x); Policy::handle_result((div_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator /(const Checked_Number& x, const Type& y) { Checked_Number r(y); Policy::handle_result((div_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; } -23376: template inline Checked_Number operator %(const Checked_Number& x, const Checked_Number& y) { Checked_Number r; Policy::handle_result((rem_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator %(const Type& x, const Checked_Number& y) { Checked_Number r(x); Policy::handle_result((rem_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template inline typename Enable_If::value, Checked_Number >::type operator %(const Checked_Number& x, const Type& y) { Checked_Number r(y); Policy::handle_result((rem_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; } -23376: # 587 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator ==(const T1& x, const T2& y) { return Checked::eq_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator !=(const T1& x, const T2& y) { return Checked::ne_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator >=(const T1& x, const T2& y) { return Checked::ge_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator >(const T1& x, const T2& y) { return Checked::gt_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator <=(const T1& x, const T2& y) { return Checked::le_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value && (Is_Checked::value || Is_Checked::value), bool>::type operator <(const T1& x, const T2& y) { return Checked::lt_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: # 608 "../../src/Checked_Number_inlines.hh" -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type equal(const T1& x, const T2& y) { return Checked::eq_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type not_equal(const T1& x, const T2& y) { return Checked::ne_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type greater_or_equal(const T1& x, const T2& y) { return Checked::ge_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type greater_than(const T1& x, const T2& y) { return Checked::gt_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type less_or_equal(const T1& x, const T2& y) { return Checked::le_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: template inline typename Enable_If::value && Is_Native_Or_Checked::value, bool>::type less_than(const T1& x, const T2& y) { return Checked::lt_ext::Policy, typename Native_Checked_From_Wrapper::Policy> (Native_Checked_From_Wrapper::raw_value(x), Native_Checked_From_Wrapper::raw_value(y)); } -23376: -23376: -23376: -23376: -23376: template -23376: inline Checked_Number -23376: operator+(const Checked_Number& x) { -23376: return x; -23376: } -23376: -23376: -23376: template -23376: inline Checked_Number -23376: operator-(const Checked_Number& x) { -23376: Checked_Number r; -23376: Policy::handle_result(neg_assign_r(r, x, Policy::ROUND_DEFAULT_OPERATOR)); -23376: return r; -23376: } -23376: # 665 "../../src/Checked_Number_inlines.hh" -23376: template inline void sqrt_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((sqrt_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void floor_assign(Checked_Number& x) { Policy::handle_result((floor_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void floor_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((floor_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void ceil_assign(Checked_Number& x) { Policy::handle_result((ceil_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void ceil_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((ceil_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void trunc_assign(Checked_Number& x) { Policy::handle_result((trunc_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void trunc_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((trunc_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void neg_assign(Checked_Number& x) { Policy::handle_result((neg_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void neg_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((neg_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void abs_assign(Checked_Number& x) { Policy::handle_result((abs_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void abs_assign(Checked_Number& x, const Checked_Number& y) { Policy::handle_result((abs_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void add_mul_assign(Checked_Number& x, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((add_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void sub_mul_assign(Checked_Number& x, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((sub_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void rem_assign(Checked_Number& x, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((rem_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void gcd_assign(Checked_Number& x, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((gcd_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void gcdext_assign(Checked_Number& x, Checked_Number& s, Checked_Number& t, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((gcdext_assign_r)(x, s, t, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template inline void lcm_assign(Checked_Number& x, const Checked_Number& y, const Checked_Number& z) { Policy::handle_result((lcm_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: # 708 "../../src/Checked_Number_inlines.hh" -23376: template inline void mul_2exp_assign(Checked_Number& x, const Checked_Number& y, unsigned int exp) { Policy::handle_result((mul_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: template inline void div_2exp_assign(Checked_Number& x, const Checked_Number& y, unsigned int exp) { Policy::handle_result((div_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); } -23376: -23376: template -23376: inline void -23376: exact_div_assign(Checked_Number& x, -23376: const Checked_Number& y, -23376: const Checked_Number& z) { -23376: Policy::handle_result(div_assign_r(x, y, z, ROUND_NOT_NEEDED)); -23376: } -23376: -23376: -23376: template -23376: inline typename Enable_If::value, int>::type -23376: sgn(const From& x) { -23376: Result_Relation r -23376: = Checked::sgn_ext::Policy> -23376: (Native_Checked_From_Wrapper::raw_value(x)); -23376: switch (r) { -23376: case VR_LT: -23376: return -1; -23376: case VR_EQ: -23376: return 0; -23376: case VR_GT: -23376: return 1; -23376: default: -23376: throw(0); -23376: } -23376: } -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Is_Native_Or_Checked::value, -23376: int>::type -23376: cmp(const From1& x, const From2& y) { -23376: Result_Relation r -23376: = Checked::cmp_ext::Policy, -23376: typename Native_Checked_From_Wrapper::Policy> -23376: (Native_Checked_From_Wrapper::raw_value(x), -23376: Native_Checked_From_Wrapper::raw_value(y)); -23376: switch (r) { -23376: case VR_LT: -23376: return -1; -23376: case VR_EQ: -23376: return 0; -23376: case VR_GT: -23376: return 1; -23376: default: -23376: throw(0); -23376: } -23376: } -23376: -23376: -23376: template -23376: typename Enable_If::value, Result>::type -23376: output(std::ostream& os, const T& x, -23376: const Numeric_Format& format, Rounding_Dir dir) { -23376: return check_result(Checked::output_ext::Policy> -23376: (os, -23376: Native_Checked_From_Wrapper::raw_value(x), -23376: format, -23376: rounding_dir(dir)), -23376: dir); -23376: } -23376: -23376: -23376: template -23376: inline std::ostream& -23376: operator<<(std::ostream& os, const Checked_Number& x) { -23376: Policy::handle_result(output(os, x, Numeric_Format(), ROUND_IGNORE)); -23376: return os; -23376: } -23376: -23376: -23376: template -23376: typename Enable_If::value, Result>::type -23376: input(T& x, std::istream& is, Rounding_Dir dir) { -23376: return check_result(Checked::input_ext::Policy> -23376: (Native_Checked_To_Wrapper::raw_value(x), -23376: is, -23376: rounding_dir(dir)), -23376: dir); -23376: } -23376: -23376: -23376: template -23376: inline std::istream& operator>>(std::istream& is, -23376: Checked_Number& x) { -23376: Result r = input(x, is, Policy::ROUND_DEFAULT_INPUT); -23376: if (r == V_CVT_STR_UNK) { -23376: is.setstate(std::ios::failbit); -23376: } -23376: else { -23376: Policy::handle_result(r); -23376: } -23376: return is; -23376: } -23376: -23376: template -23376: inline T -23376: plus_infinity() { -23376: return PLUS_INFINITY; -23376: } -23376: -23376: template -23376: inline T -23376: minus_infinity() { -23376: return MINUS_INFINITY; -23376: } -23376: -23376: template -23376: inline T -23376: not_a_number() { -23376: return NOT_A_NUMBER; -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(Checked_Number& x, Checked_Number& y) { -23376: using std::swap; -23376: swap(x.raw_value(), y.raw_value()); -23376: } -23376: -23376: template -23376: inline void -23376: maybe_reset_fpu_inexact() { -23376: if (FPU_Related::value) { -23376: return fpu_reset_inexact(); -23376: } -23376: } -23376: -23376: template -23376: inline int -23376: maybe_check_fpu_inexact() { -23376: if (FPU_Related::value) { -23376: return fpu_check_inexact(); -23376: } -23376: else { -23376: return 0; -23376: } -23376: } -23376: -23376: } -23376: # 1068 "../../src/Checked_Number_defs.hh" 2 -23376: # 1 "../../src/Checked_Number_templates.hh" 1 -23376: # 28 "../../src/Checked_Number_templates.hh" -23376: # 1 "/usr/include/c++/8/iomanip" 1 3 -23376: # 36 "/usr/include/c++/8/iomanip" 3 -23376: -23376: # 37 "/usr/include/c++/8/iomanip" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/locale" 1 3 -23376: # 36 "/usr/include/c++/8/locale" 3 -23376: -23376: # 37 "/usr/include/c++/8/locale" 3 -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.h" 1 3 -23376: # 37 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: -23376: # 38 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: -23376: # 1 "/usr/include/c++/8/ctime" 1 3 -23376: # 39 "/usr/include/c++/8/ctime" 3 -23376: -23376: # 40 "/usr/include/c++/8/ctime" 3 -23376: # 58 "/usr/include/c++/8/ctime" 3 -23376: -23376: # 58 "/usr/include/c++/8/ctime" 3 -23376: namespace std -23376: { -23376: using ::clock_t; -23376: using ::time_t; -23376: using ::tm; -23376: -23376: using ::clock; -23376: using ::difftime; -23376: using ::mktime; -23376: using ::time; -23376: using ::asctime; -23376: using ::ctime; -23376: using ::gmtime; -23376: using ::localtime; -23376: using ::strftime; -23376: } -23376: # 40 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 52 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: class time_base -23376: { -23376: public: -23376: enum dateorder { no_order, dmy, mdy, ymd, ydm }; -23376: }; -23376: -23376: template -23376: struct __timepunct_cache : public locale::facet -23376: { -23376: -23376: static const _CharT* _S_timezones[14]; -23376: -23376: const _CharT* _M_date_format; -23376: const _CharT* _M_date_era_format; -23376: const _CharT* _M_time_format; -23376: const _CharT* _M_time_era_format; -23376: const _CharT* _M_date_time_format; -23376: const _CharT* _M_date_time_era_format; -23376: const _CharT* _M_am; -23376: const _CharT* _M_pm; -23376: const _CharT* _M_am_pm_format; -23376: -23376: -23376: const _CharT* _M_day1; -23376: const _CharT* _M_day2; -23376: const _CharT* _M_day3; -23376: const _CharT* _M_day4; -23376: const _CharT* _M_day5; -23376: const _CharT* _M_day6; -23376: const _CharT* _M_day7; -23376: -23376: -23376: const _CharT* _M_aday1; -23376: const _CharT* _M_aday2; -23376: const _CharT* _M_aday3; -23376: const _CharT* _M_aday4; -23376: const _CharT* _M_aday5; -23376: const _CharT* _M_aday6; -23376: const _CharT* _M_aday7; -23376: -23376: -23376: const _CharT* _M_month01; -23376: const _CharT* _M_month02; -23376: const _CharT* _M_month03; -23376: const _CharT* _M_month04; -23376: const _CharT* _M_month05; -23376: const _CharT* _M_month06; -23376: const _CharT* _M_month07; -23376: const _CharT* _M_month08; -23376: const _CharT* _M_month09; -23376: const _CharT* _M_month10; -23376: const _CharT* _M_month11; -23376: const _CharT* _M_month12; -23376: -23376: -23376: const _CharT* _M_amonth01; -23376: const _CharT* _M_amonth02; -23376: const _CharT* _M_amonth03; -23376: const _CharT* _M_amonth04; -23376: const _CharT* _M_amonth05; -23376: const _CharT* _M_amonth06; -23376: const _CharT* _M_amonth07; -23376: const _CharT* _M_amonth08; -23376: const _CharT* _M_amonth09; -23376: const _CharT* _M_amonth10; -23376: const _CharT* _M_amonth11; -23376: const _CharT* _M_amonth12; -23376: -23376: bool _M_allocated; -23376: -23376: __timepunct_cache(size_t __refs = 0) : facet(__refs), -23376: _M_date_format(0), _M_date_era_format(0), _M_time_format(0), -23376: _M_time_era_format(0), _M_date_time_format(0), -23376: _M_date_time_era_format(0), _M_am(0), _M_pm(0), -23376: _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0), -23376: _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0), -23376: _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0), -23376: _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0), -23376: _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0), -23376: _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0), -23376: _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0), -23376: _M_amonth02(0), _M_amonth03(0), _M_amonth04(0), -23376: _M_amonth05(0), _M_amonth06(0), _M_amonth07(0), -23376: _M_amonth08(0), _M_amonth09(0), _M_amonth10(0), -23376: _M_amonth11(0), _M_amonth12(0), _M_allocated(false) -23376: { } -23376: -23376: ~__timepunct_cache(); -23376: -23376: private: -23376: __timepunct_cache& -23376: operator=(const __timepunct_cache&); -23376: -23376: explicit -23376: __timepunct_cache(const __timepunct_cache&); -23376: }; -23376: -23376: template -23376: __timepunct_cache<_CharT>::~__timepunct_cache() -23376: { -23376: if (_M_allocated) -23376: { -23376: -23376: } -23376: } -23376: -23376: -23376: template<> -23376: const char* -23376: __timepunct_cache::_S_timezones[14]; -23376: -23376: -23376: template<> -23376: const wchar_t* -23376: __timepunct_cache::_S_timezones[14]; -23376: -23376: -23376: -23376: template -23376: const _CharT* __timepunct_cache<_CharT>::_S_timezones[14]; -23376: -23376: template -23376: class __timepunct : public locale::facet -23376: { -23376: public: -23376: -23376: typedef _CharT __char_type; -23376: typedef __timepunct_cache<_CharT> __cache_type; -23376: -23376: protected: -23376: __cache_type* _M_data; -23376: __c_locale _M_c_locale_timepunct; -23376: const char* _M_name_timepunct; -23376: -23376: public: -23376: -23376: static locale::id id; -23376: -23376: explicit -23376: __timepunct(size_t __refs = 0); -23376: -23376: explicit -23376: __timepunct(__cache_type* __cache, size_t __refs = 0); -23376: # 206 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0); -23376: -23376: -23376: -23376: void -23376: _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format, -23376: const tm* __tm) const throw (); -23376: -23376: void -23376: _M_date_formats(const _CharT** __date) const -23376: { -23376: -23376: __date[0] = _M_data->_M_date_format; -23376: __date[1] = _M_data->_M_date_era_format; -23376: } -23376: -23376: void -23376: _M_time_formats(const _CharT** __time) const -23376: { -23376: -23376: __time[0] = _M_data->_M_time_format; -23376: __time[1] = _M_data->_M_time_era_format; -23376: } -23376: -23376: void -23376: _M_date_time_formats(const _CharT** __dt) const -23376: { -23376: -23376: __dt[0] = _M_data->_M_date_time_format; -23376: __dt[1] = _M_data->_M_date_time_era_format; -23376: } -23376: -23376: -23376: void -23376: _M_am_pm_format(const _CharT*) const -23376: { } -23376: -23376: -23376: void -23376: _M_am_pm(const _CharT** __ampm) const -23376: { -23376: __ampm[0] = _M_data->_M_am; -23376: __ampm[1] = _M_data->_M_pm; -23376: } -23376: -23376: void -23376: _M_days(const _CharT** __days) const -23376: { -23376: __days[0] = _M_data->_M_day1; -23376: __days[1] = _M_data->_M_day2; -23376: __days[2] = _M_data->_M_day3; -23376: __days[3] = _M_data->_M_day4; -23376: __days[4] = _M_data->_M_day5; -23376: __days[5] = _M_data->_M_day6; -23376: __days[6] = _M_data->_M_day7; -23376: } -23376: -23376: void -23376: _M_days_abbreviated(const _CharT** __days) const -23376: { -23376: __days[0] = _M_data->_M_aday1; -23376: __days[1] = _M_data->_M_aday2; -23376: __days[2] = _M_data->_M_aday3; -23376: __days[3] = _M_data->_M_aday4; -23376: __days[4] = _M_data->_M_aday5; -23376: __days[5] = _M_data->_M_aday6; -23376: __days[6] = _M_data->_M_aday7; -23376: } -23376: -23376: void -23376: _M_months(const _CharT** __months) const -23376: { -23376: __months[0] = _M_data->_M_month01; -23376: __months[1] = _M_data->_M_month02; -23376: __months[2] = _M_data->_M_month03; -23376: __months[3] = _M_data->_M_month04; -23376: __months[4] = _M_data->_M_month05; -23376: __months[5] = _M_data->_M_month06; -23376: __months[6] = _M_data->_M_month07; -23376: __months[7] = _M_data->_M_month08; -23376: __months[8] = _M_data->_M_month09; -23376: __months[9] = _M_data->_M_month10; -23376: __months[10] = _M_data->_M_month11; -23376: __months[11] = _M_data->_M_month12; -23376: } -23376: -23376: void -23376: _M_months_abbreviated(const _CharT** __months) const -23376: { -23376: __months[0] = _M_data->_M_amonth01; -23376: __months[1] = _M_data->_M_amonth02; -23376: __months[2] = _M_data->_M_amonth03; -23376: __months[3] = _M_data->_M_amonth04; -23376: __months[4] = _M_data->_M_amonth05; -23376: __months[5] = _M_data->_M_amonth06; -23376: __months[6] = _M_data->_M_amonth07; -23376: __months[7] = _M_data->_M_amonth08; -23376: __months[8] = _M_data->_M_amonth09; -23376: __months[9] = _M_data->_M_amonth10; -23376: __months[10] = _M_data->_M_amonth11; -23376: __months[11] = _M_data->_M_amonth12; -23376: } -23376: -23376: protected: -23376: virtual -23376: ~__timepunct(); -23376: -23376: -23376: void -23376: _M_initialize_timepunct(__c_locale __cloc = 0); -23376: }; -23376: -23376: template -23376: locale::id __timepunct<_CharT>::id; -23376: -23376: -23376: template<> -23376: void -23376: __timepunct::_M_initialize_timepunct(__c_locale __cloc); -23376: -23376: template<> -23376: void -23376: __timepunct::_M_put(char*, size_t, const char*, const tm*) const throw (); -23376: -23376: -23376: template<> -23376: void -23376: __timepunct::_M_initialize_timepunct(__c_locale __cloc); -23376: -23376: template<> -23376: void -23376: __timepunct::_M_put(wchar_t*, size_t, const wchar_t*, -23376: const tm*) const throw (); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/time_members.h" 1 3 -23376: # 37 "/usr/include/arm-linux-gnueabihf/c++/8/bits/time_members.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: __timepunct<_CharT>::__timepunct(size_t __refs) -23376: : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), -23376: _M_name_timepunct(_S_get_c_name()) -23376: { _M_initialize_timepunct(); } -23376: -23376: template -23376: __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs) -23376: : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0), -23376: _M_name_timepunct(_S_get_c_name()) -23376: { _M_initialize_timepunct(); } -23376: -23376: template -23376: __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s, -23376: size_t __refs) -23376: : facet(__refs), _M_data(0), _M_c_locale_timepunct(0), -23376: _M_name_timepunct(0) -23376: { -23376: if (__builtin_strcmp(__s, _S_get_c_name()) != 0) -23376: { -23376: const size_t __len = __builtin_strlen(__s) + 1; -23376: char* __tmp = new char[__len]; -23376: __builtin_memcpy(__tmp, __s, __len); -23376: _M_name_timepunct = __tmp; -23376: } -23376: else -23376: _M_name_timepunct = _S_get_c_name(); -23376: -23376: try -23376: { _M_initialize_timepunct(__cloc); } -23376: catch(...) -23376: { -23376: if (_M_name_timepunct != _S_get_c_name()) -23376: delete [] _M_name_timepunct; -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: __timepunct<_CharT>::~__timepunct() -23376: { -23376: if (_M_name_timepunct != _S_get_c_name()) -23376: delete [] _M_name_timepunct; -23376: delete _M_data; -23376: _S_destroy_c_locale(_M_c_locale_timepunct); -23376: } -23376: -23376: -23376: } -23376: # 347 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: namespace __cxx11 { -23376: # 367 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class time_get : public locale::facet, public time_base -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _InIter iter_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 388 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: time_get(size_t __refs = 0) -23376: : facet (__refs) { } -23376: # 405 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: dateorder -23376: date_order() const -23376: { return this->do_date_order(); } -23376: # 429 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get_time(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { return this->do_get_time(__beg, __end, __io, __err, __tm); } -23376: # 454 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get_date(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { return this->do_get_date(__beg, __end, __io, __err, __tm); } -23376: # 482 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get_weekday(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { return this->do_get_weekday(__beg, __end, __io, __err, __tm); } -23376: # 511 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get_monthname(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { return this->do_get_monthname(__beg, __end, __io, __err, __tm); } -23376: # 537 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get_year(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { return this->do_get_year(__beg, __end, __io, __err, __tm); } -23376: # 558 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: inline -23376: iter_type get(iter_type __s, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, char __format, -23376: char __modifier = 0) const -23376: { -23376: return this->do_get(__s, __end, __io, __err, __tm, __format, -23376: __modifier); -23376: } -23376: # 585 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type get(iter_type __s, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, const char_type* __fmt, -23376: const char_type* __fmtend) const; -23376: -23376: -23376: protected: -23376: -23376: virtual -23376: ~time_get() { } -23376: # 605 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual dateorder -23376: do_date_order() const; -23376: # 623 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get_time(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const; -23376: # 642 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get_date(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const; -23376: # 661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get_weekday(iter_type __beg, iter_type __end, ios_base&, -23376: ios_base::iostate& __err, tm* __tm) const; -23376: # 680 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get_monthname(iter_type __beg, iter_type __end, ios_base&, -23376: ios_base::iostate& __err, tm* __tm) const; -23376: # 699 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get_year(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const; -23376: # 722 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual -23376: -23376: iter_type -23376: do_get(iter_type __s, iter_type __end, ios_base& __f, -23376: ios_base::iostate& __err, tm* __tm, -23376: char __format, char __modifier) const; -23376: -23376: -23376: -23376: iter_type -23376: _M_extract_num(iter_type __beg, iter_type __end, int& __member, -23376: int __min, int __max, size_t __len, -23376: ios_base& __io, ios_base::iostate& __err) const; -23376: -23376: -23376: iter_type -23376: _M_extract_name(iter_type __beg, iter_type __end, int& __member, -23376: const _CharT** __names, size_t __indexlen, -23376: ios_base& __io, ios_base::iostate& __err) const; -23376: -23376: -23376: iter_type -23376: _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, -23376: const _CharT** __names, size_t __indexlen, -23376: ios_base& __io, ios_base::iostate& __err) const; -23376: -23376: -23376: iter_type -23376: _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, -23376: const _CharT* __format) const; -23376: }; -23376: -23376: template -23376: locale::id time_get<_CharT, _InIter>::id; -23376: -23376: -23376: template -23376: class time_get_byname : public time_get<_CharT, _InIter> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _InIter iter_type; -23376: -23376: explicit -23376: time_get_byname(const char*, size_t __refs = 0) -23376: : time_get<_CharT, _InIter>(__refs) { } -23376: -23376: -23376: explicit -23376: time_get_byname(const string& __s, size_t __refs = 0) -23376: : time_get_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~time_get_byname() { } -23376: }; -23376: -23376: } -23376: # 796 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class time_put : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _OutIter iter_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 817 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: time_put(size_t __refs = 0) -23376: : facet(__refs) { } -23376: # 836 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, -23376: const _CharT* __beg, const _CharT* __end) const; -23376: # 856 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: put(iter_type __s, ios_base& __io, char_type __fill, -23376: const tm* __tm, char __format, char __mod = 0) const -23376: { return this->do_put(__s, __io, __fill, __tm, __format, __mod); } -23376: -23376: protected: -23376: -23376: virtual -23376: ~time_put() -23376: { } -23376: # 883 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, -23376: char __format, char __mod) const; -23376: }; -23376: -23376: template -23376: locale::id time_put<_CharT, _OutIter>::id; -23376: -23376: -23376: template -23376: class time_put_byname : public time_put<_CharT, _OutIter> -23376: { -23376: public: -23376: -23376: typedef _CharT char_type; -23376: typedef _OutIter iter_type; -23376: -23376: explicit -23376: time_put_byname(const char*, size_t __refs = 0) -23376: : time_put<_CharT, _OutIter>(__refs) -23376: { } -23376: -23376: -23376: explicit -23376: time_put_byname(const string& __s, size_t __refs = 0) -23376: : time_put_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~time_put_byname() { } -23376: }; -23376: # 928 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: class money_base -23376: { -23376: public: -23376: enum part { none, space, symbol, sign, value }; -23376: struct pattern { char field[4]; }; -23376: -23376: static const pattern _S_default_pattern; -23376: -23376: enum -23376: { -23376: _S_minus, -23376: _S_zero, -23376: _S_end = 11 -23376: }; -23376: -23376: -23376: -23376: static const char* _S_atoms; -23376: -23376: -23376: -23376: __attribute__ ((__const__)) static pattern -23376: _S_construct_pattern(char __precedes, char __space, char __posn) throw (); -23376: }; -23376: -23376: template -23376: struct __moneypunct_cache : public locale::facet -23376: { -23376: const char* _M_grouping; -23376: size_t _M_grouping_size; -23376: bool _M_use_grouping; -23376: _CharT _M_decimal_point; -23376: _CharT _M_thousands_sep; -23376: const _CharT* _M_curr_symbol; -23376: size_t _M_curr_symbol_size; -23376: const _CharT* _M_positive_sign; -23376: size_t _M_positive_sign_size; -23376: const _CharT* _M_negative_sign; -23376: size_t _M_negative_sign_size; -23376: int _M_frac_digits; -23376: money_base::pattern _M_pos_format; -23376: money_base::pattern _M_neg_format; -23376: -23376: -23376: -23376: -23376: _CharT _M_atoms[money_base::_S_end]; -23376: -23376: bool _M_allocated; -23376: -23376: __moneypunct_cache(size_t __refs = 0) : facet(__refs), -23376: _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false), -23376: _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()), -23376: _M_curr_symbol(0), _M_curr_symbol_size(0), -23376: _M_positive_sign(0), _M_positive_sign_size(0), -23376: _M_negative_sign(0), _M_negative_sign_size(0), -23376: _M_frac_digits(0), -23376: _M_pos_format(money_base::pattern()), -23376: _M_neg_format(money_base::pattern()), _M_allocated(false) -23376: { } -23376: -23376: ~__moneypunct_cache(); -23376: -23376: void -23376: _M_cache(const locale& __loc); -23376: -23376: private: -23376: __moneypunct_cache& -23376: operator=(const __moneypunct_cache&); -23376: -23376: explicit -23376: __moneypunct_cache(const __moneypunct_cache&); -23376: }; -23376: -23376: template -23376: __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache() -23376: { -23376: if (_M_allocated) -23376: { -23376: delete [] _M_grouping; -23376: delete [] _M_curr_symbol; -23376: delete [] _M_positive_sign; -23376: delete [] _M_negative_sign; -23376: } -23376: } -23376: -23376: namespace __cxx11 { -23376: # 1023 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class moneypunct : public locale::facet, public money_base -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: typedef __moneypunct_cache<_CharT, _Intl> __cache_type; -23376: -23376: private: -23376: __cache_type* _M_data; -23376: -23376: public: -23376: -23376: -23376: static const bool intl = _Intl; -23376: -23376: static locale::id id; -23376: # 1052 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: moneypunct(size_t __refs = 0) -23376: : facet(__refs), _M_data(0) -23376: { _M_initialize_moneypunct(); } -23376: # 1065 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: moneypunct(__cache_type* __cache, size_t __refs = 0) -23376: : facet(__refs), _M_data(__cache) -23376: { _M_initialize_moneypunct(); } -23376: # 1080 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0) -23376: : facet(__refs), _M_data(0) -23376: { _M_initialize_moneypunct(__cloc, __s); } -23376: # 1094 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: char_type -23376: decimal_point() const -23376: { return this->do_decimal_point(); } -23376: # 1107 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: char_type -23376: thousands_sep() const -23376: { return this->do_thousands_sep(); } -23376: # 1137 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: string -23376: grouping() const -23376: { return this->do_grouping(); } -23376: # 1150 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: string_type -23376: curr_symbol() const -23376: { return this->do_curr_symbol(); } -23376: # 1167 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: string_type -23376: positive_sign() const -23376: { return this->do_positive_sign(); } -23376: # 1184 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: string_type -23376: negative_sign() const -23376: { return this->do_negative_sign(); } -23376: # 1200 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: int -23376: frac_digits() const -23376: { return this->do_frac_digits(); } -23376: # 1236 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: pattern -23376: pos_format() const -23376: { return this->do_pos_format(); } -23376: -23376: pattern -23376: neg_format() const -23376: { return this->do_neg_format(); } -23376: -23376: -23376: protected: -23376: -23376: virtual -23376: ~moneypunct(); -23376: # 1258 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual char_type -23376: do_decimal_point() const -23376: { return _M_data->_M_decimal_point; } -23376: # 1270 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual char_type -23376: do_thousands_sep() const -23376: { return _M_data->_M_thousands_sep; } -23376: # 1283 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual string -23376: do_grouping() const -23376: { return _M_data->_M_grouping; } -23376: # 1296 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual string_type -23376: do_curr_symbol() const -23376: { return _M_data->_M_curr_symbol; } -23376: # 1309 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual string_type -23376: do_positive_sign() const -23376: { return _M_data->_M_positive_sign; } -23376: # 1322 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual string_type -23376: do_negative_sign() const -23376: { return _M_data->_M_negative_sign; } -23376: # 1336 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual int -23376: do_frac_digits() const -23376: { return _M_data->_M_frac_digits; } -23376: # 1350 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual pattern -23376: do_pos_format() const -23376: { return _M_data->_M_pos_format; } -23376: # 1364 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual pattern -23376: do_neg_format() const -23376: { return _M_data->_M_neg_format; } -23376: -23376: -23376: void -23376: _M_initialize_moneypunct(__c_locale __cloc = 0, -23376: const char* __name = 0); -23376: }; -23376: -23376: template -23376: locale::id moneypunct<_CharT, _Intl>::id; -23376: -23376: template -23376: const bool moneypunct<_CharT, _Intl>::intl; -23376: -23376: template<> -23376: moneypunct::~moneypunct(); -23376: -23376: template<> -23376: moneypunct::~moneypunct(); -23376: -23376: template<> -23376: void -23376: moneypunct::_M_initialize_moneypunct(__c_locale, const char*); -23376: -23376: template<> -23376: void -23376: moneypunct::_M_initialize_moneypunct(__c_locale, const char*); -23376: -23376: -23376: template<> -23376: moneypunct::~moneypunct(); -23376: -23376: template<> -23376: moneypunct::~moneypunct(); -23376: -23376: template<> -23376: void -23376: moneypunct::_M_initialize_moneypunct(__c_locale, -23376: const char*); -23376: -23376: template<> -23376: void -23376: moneypunct::_M_initialize_moneypunct(__c_locale, -23376: const char*); -23376: -23376: -23376: -23376: template -23376: class moneypunct_byname : public moneypunct<_CharT, _Intl> -23376: { -23376: public: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: static const bool intl = _Intl; -23376: -23376: explicit -23376: moneypunct_byname(const char* __s, size_t __refs = 0) -23376: : moneypunct<_CharT, _Intl>(__refs) -23376: { -23376: if (__builtin_strcmp(__s, "C") != 0 -23376: && __builtin_strcmp(__s, "POSIX") != 0) -23376: { -23376: __c_locale __tmp; -23376: this->_S_create_c_locale(__tmp, __s); -23376: this->_M_initialize_moneypunct(__tmp); -23376: this->_S_destroy_c_locale(__tmp); -23376: } -23376: } -23376: -23376: -23376: explicit -23376: moneypunct_byname(const string& __s, size_t __refs = 0) -23376: : moneypunct_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~moneypunct_byname() { } -23376: }; -23376: -23376: template -23376: const bool moneypunct_byname<_CharT, _Intl>::intl; -23376: -23376: } -23376: -23376: namespace __cxx11 { -23376: # 1467 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class money_get : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _InIter iter_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 1489 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: money_get(size_t __refs = 0) : facet(__refs) { } -23376: # 1519 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, long double& __units) const -23376: { return this->do_get(__s, __end, __intl, __io, __err, __units); } -23376: # 1550 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, string_type& __digits) const -23376: { return this->do_get(__s, __end, __intl, __io, __err, __digits); } -23376: -23376: protected: -23376: -23376: virtual -23376: ~money_get() { } -23376: # 1574 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, long double& __units) const; -23376: # 1586 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, string_type& __digits) const; -23376: # 1598 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: iter_type -23376: _M_extract(iter_type __s, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, string& __digits) const; -23376: }; -23376: -23376: template -23376: locale::id money_get<_CharT, _InIter>::id; -23376: # 1620 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class money_put : public locale::facet -23376: { -23376: public: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _OutIter iter_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: -23376: -23376: static locale::id id; -23376: # 1641 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: money_put(size_t __refs = 0) : facet(__refs) { } -23376: # 1661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: put(iter_type __s, bool __intl, ios_base& __io, -23376: char_type __fill, long double __units) const -23376: { return this->do_put(__s, __intl, __io, __fill, __units); } -23376: # 1684 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: iter_type -23376: put(iter_type __s, bool __intl, ios_base& __io, -23376: char_type __fill, const string_type& __digits) const -23376: { return this->do_put(__s, __intl, __io, __fill, __digits); } -23376: -23376: protected: -23376: -23376: virtual -23376: ~money_put() { } -23376: # 1719 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, -23376: long double __units) const; -23376: # 1743 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual iter_type -23376: do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, -23376: const string_type& __digits) const; -23376: # 1755 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: iter_type -23376: _M_insert(iter_type __s, ios_base& __io, char_type __fill, -23376: const string_type& __digits) const; -23376: }; -23376: -23376: template -23376: locale::id money_put<_CharT, _OutIter>::id; -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: struct messages_base -23376: { -23376: typedef int catalog; -23376: }; -23376: -23376: namespace __cxx11 { -23376: # 1798 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: template -23376: class messages : public locale::facet, public messages_base -23376: { -23376: public: -23376: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: -23376: protected: -23376: -23376: -23376: __c_locale _M_c_locale_messages; -23376: const char* _M_name_messages; -23376: -23376: public: -23376: -23376: static locale::id id; -23376: # 1826 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: messages(size_t __refs = 0); -23376: # 1840 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: explicit -23376: messages(__c_locale __cloc, const char* __s, size_t __refs = 0); -23376: # 1853 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: catalog -23376: open(const basic_string& __s, const locale& __loc) const -23376: { return this->do_open(__s, __loc); } -23376: # 1871 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: catalog -23376: open(const basic_string&, const locale&, const char*) const; -23376: # 1889 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: string_type -23376: get(catalog __c, int __set, int __msgid, const string_type& __s) const -23376: { return this->do_get(__c, __set, __msgid, __s); } -23376: # 1900 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: void -23376: close(catalog __c) const -23376: { return this->do_close(__c); } -23376: -23376: protected: -23376: -23376: virtual -23376: ~messages(); -23376: # 1920 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual catalog -23376: do_open(const basic_string&, const locale&) const; -23376: # 1939 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3 -23376: virtual string_type -23376: do_get(catalog, int, int, const string_type& __dfault) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void -23376: do_close(catalog) const; -23376: -23376: -23376: char* -23376: _M_convert_to_char(const string_type& __msg) const -23376: { -23376: -23376: return reinterpret_cast(const_cast<_CharT*>(__msg.c_str())); -23376: } -23376: -23376: -23376: string_type -23376: _M_convert_from_char(char*) const -23376: { -23376: -23376: return string_type(); -23376: } -23376: }; -23376: -23376: template -23376: locale::id messages<_CharT>::id; -23376: -23376: -23376: template<> -23376: string -23376: messages::do_get(catalog, int, int, const string&) const; -23376: -23376: -23376: template<> -23376: wstring -23376: messages::do_get(catalog, int, int, const wstring&) const; -23376: -23376: -23376: -23376: template -23376: class messages_byname : public messages<_CharT> -23376: { -23376: public: -23376: typedef _CharT char_type; -23376: typedef basic_string<_CharT> string_type; -23376: -23376: explicit -23376: messages_byname(const char* __s, size_t __refs = 0); -23376: -23376: -23376: explicit -23376: messages_byname(const string& __s, size_t __refs = 0) -23376: : messages_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~messages_byname() -23376: { } -23376: }; -23376: -23376: } -23376: -23376: -23376: } -23376: -23376: -23376: # 1 "/usr/include/arm-linux-gnueabihf/c++/8/bits/messages_members.h" 1 3 -23376: # 36 "/usr/include/arm-linux-gnueabihf/c++/8/bits/messages_members.h" 3 -23376: # 1 "/usr/include/libintl.h" 1 3 4 -23376: # 34 "/usr/include/libintl.h" 3 4 -23376: extern "C" { -23376: -23376: -23376: -23376: -23376: extern char *gettext (const char *__msgid) -23376: throw () __attribute__ ((__format_arg__ (1))); -23376: -23376: -23376: -23376: extern char *dgettext (const char *__domainname, const char *__msgid) -23376: throw () __attribute__ ((__format_arg__ (2))); -23376: extern char *__dgettext (const char *__domainname, const char *__msgid) -23376: throw () __attribute__ ((__format_arg__ (2))); -23376: -23376: -23376: -23376: extern char *dcgettext (const char *__domainname, -23376: const char *__msgid, int __category) -23376: throw () __attribute__ ((__format_arg__ (2))); -23376: extern char *__dcgettext (const char *__domainname, -23376: const char *__msgid, int __category) -23376: throw () __attribute__ ((__format_arg__ (2))); -23376: -23376: -23376: -23376: -23376: extern char *ngettext (const char *__msgid1, const char *__msgid2, -23376: unsigned long int __n) -23376: throw () __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2))); -23376: -23376: -23376: -23376: extern char *dngettext (const char *__domainname, const char *__msgid1, -23376: const char *__msgid2, unsigned long int __n) -23376: throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); -23376: -23376: -23376: -23376: extern char *dcngettext (const char *__domainname, const char *__msgid1, -23376: const char *__msgid2, unsigned long int __n, -23376: int __category) -23376: throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3))); -23376: -23376: -23376: -23376: -23376: -23376: extern char *textdomain (const char *__domainname) throw (); -23376: -23376: -23376: -23376: extern char *bindtextdomain (const char *__domainname, -23376: const char *__dirname) throw (); -23376: -23376: -23376: -23376: extern char *bind_textdomain_codeset (const char *__domainname, -23376: const char *__codeset) throw (); -23376: # 121 "/usr/include/libintl.h" 3 4 -23376: } -23376: # 37 "/usr/include/arm-linux-gnueabihf/c++/8/bits/messages_members.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: messages<_CharT>::messages(size_t __refs) -23376: : facet(__refs), _M_c_locale_messages(_S_get_c_locale()), -23376: _M_name_messages(_S_get_c_name()) -23376: { } -23376: -23376: template -23376: messages<_CharT>::messages(__c_locale __cloc, const char* __s, -23376: size_t __refs) -23376: : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0) -23376: { -23376: if (__builtin_strcmp(__s, _S_get_c_name()) != 0) -23376: { -23376: const size_t __len = __builtin_strlen(__s) + 1; -23376: char* __tmp = new char[__len]; -23376: __builtin_memcpy(__tmp, __s, __len); -23376: _M_name_messages = __tmp; -23376: } -23376: else -23376: _M_name_messages = _S_get_c_name(); -23376: -23376: -23376: _M_c_locale_messages = _S_clone_c_locale(__cloc); -23376: } -23376: -23376: template -23376: typename messages<_CharT>::catalog -23376: messages<_CharT>::open(const basic_string& __s, const locale& __loc, -23376: const char* __dir) const -23376: { -23376: bindtextdomain(__s.c_str(), __dir); -23376: return this->do_open(__s, __loc); -23376: } -23376: -23376: -23376: template -23376: messages<_CharT>::~messages() -23376: { -23376: if (_M_name_messages != _S_get_c_name()) -23376: delete [] _M_name_messages; -23376: _S_destroy_c_locale(_M_c_locale_messages); -23376: } -23376: -23376: template -23376: typename messages<_CharT>::catalog -23376: messages<_CharT>::do_open(const basic_string& __s, -23376: const locale&) const -23376: { -23376: -23376: -23376: textdomain(__s.c_str()); -23376: return 0; -23376: } -23376: -23376: template -23376: void -23376: messages<_CharT>::do_close(catalog) const -23376: { } -23376: -23376: -23376: template -23376: messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs) -23376: : messages<_CharT>(__refs) -23376: { -23376: if (this->_M_name_messages != locale::facet::_S_get_c_name()) -23376: { -23376: delete [] this->_M_name_messages; -23376: if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0) -23376: { -23376: const size_t __len = __builtin_strlen(__s) + 1; -23376: char* __tmp = new char[__len]; -23376: __builtin_memcpy(__tmp, __s, __len); -23376: this->_M_name_messages = __tmp; -23376: } -23376: else -23376: this->_M_name_messages = locale::facet::_S_get_c_name(); -23376: } -23376: -23376: if (__builtin_strcmp(__s, "C") != 0 -23376: && __builtin_strcmp(__s, "POSIX") != 0) -23376: { -23376: this->_S_destroy_c_locale(this->_M_c_locale_messages); -23376: this->_S_create_c_locale(this->_M_c_locale_messages, __s); -23376: } -23376: } -23376: -23376: -23376: template<> -23376: typename messages::catalog -23376: messages::do_open(const basic_string&, -23376: const locale&) const; -23376: -23376: template<> -23376: void -23376: messages::do_close(catalog) const; -23376: -23376: -23376: template<> -23376: typename messages::catalog -23376: messages::do_open(const basic_string&, -23376: const locale&) const; -23376: -23376: template<> -23376: void -23376: messages::do_close(catalog) const; -23376: -23376: -23376: -23376: } -23376: # 2011 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3 -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/codecvt.h" 1 3 -23376: # 39 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: -23376: # 40 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: class codecvt_base -23376: { -23376: public: -23376: enum result -23376: { -23376: ok, -23376: partial, -23376: error, -23376: noconv -23376: }; -23376: }; -23376: # 67 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: template -23376: class __codecvt_abstract_base -23376: : public locale::facet, public codecvt_base -23376: { -23376: public: -23376: -23376: typedef codecvt_base::result result; -23376: typedef _InternT intern_type; -23376: typedef _ExternT extern_type; -23376: typedef _StateT state_type; -23376: # 115 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: result -23376: out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const -23376: { -23376: return this->do_out(__state, __from, __from_end, __from_next, -23376: __to, __to_end, __to_next); -23376: } -23376: # 154 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: result -23376: unshift(state_type& __state, extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const -23376: { return this->do_unshift(__state, __to,__to_end,__to_next); } -23376: # 195 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: result -23376: in(state_type& __state, const extern_type* __from, -23376: const extern_type* __from_end, const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const -23376: { -23376: return this->do_in(__state, __from, __from_end, __from_next, -23376: __to, __to_end, __to_next); -23376: } -23376: -23376: int -23376: encoding() const throw() -23376: { return this->do_encoding(); } -23376: -23376: bool -23376: always_noconv() const throw() -23376: { return this->do_always_noconv(); } -23376: -23376: int -23376: length(state_type& __state, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const -23376: { return this->do_length(__state, __from, __end, __max); } -23376: -23376: int -23376: max_length() const throw() -23376: { return this->do_max_length(); } -23376: -23376: protected: -23376: explicit -23376: __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { } -23376: -23376: virtual -23376: ~__codecvt_abstract_base() { } -23376: # 236 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const = 0; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, extern_type* __to, -23376: extern_type* __to_end, extern_type*& __to_next) const = 0; -23376: -23376: virtual result -23376: do_in(state_type& __state, const extern_type* __from, -23376: const extern_type* __from_end, const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const = 0; -23376: -23376: virtual int -23376: do_encoding() const throw() = 0; -23376: -23376: virtual bool -23376: do_always_noconv() const throw() = 0; -23376: -23376: virtual int -23376: do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const = 0; -23376: -23376: virtual int -23376: do_max_length() const throw() = 0; -23376: }; -23376: # 273 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: template -23376: class codecvt -23376: : public __codecvt_abstract_base<_InternT, _ExternT, _StateT> -23376: { -23376: public: -23376: -23376: typedef codecvt_base::result result; -23376: typedef _InternT intern_type; -23376: typedef _ExternT extern_type; -23376: typedef _StateT state_type; -23376: -23376: protected: -23376: __c_locale _M_c_locale_codecvt; -23376: -23376: public: -23376: static locale::id id; -23376: -23376: explicit -23376: codecvt(size_t __refs = 0) -23376: : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs), -23376: _M_c_locale_codecvt(0) -23376: { } -23376: -23376: explicit -23376: codecvt(__c_locale __cloc, size_t __refs = 0); -23376: -23376: protected: -23376: virtual -23376: ~codecvt() { } -23376: -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, extern_type* __to, -23376: extern_type* __to_end, extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_in(state_type& __state, const extern_type* __from, -23376: const extern_type* __from_end, const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const; -23376: -23376: virtual int -23376: do_encoding() const throw(); -23376: -23376: virtual bool -23376: do_always_noconv() const throw(); -23376: -23376: virtual int -23376: do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const; -23376: -23376: virtual int -23376: do_max_length() const throw(); -23376: }; -23376: -23376: template -23376: locale::id codecvt<_InternT, _ExternT, _StateT>::id; -23376: -23376: -23376: template<> -23376: class codecvt -23376: : public __codecvt_abstract_base -23376: { -23376: friend class messages; -23376: -23376: public: -23376: -23376: typedef char intern_type; -23376: typedef char extern_type; -23376: typedef mbstate_t state_type; -23376: -23376: protected: -23376: __c_locale _M_c_locale_codecvt; -23376: -23376: public: -23376: static locale::id id; -23376: -23376: explicit -23376: codecvt(size_t __refs = 0); -23376: -23376: explicit -23376: codecvt(__c_locale __cloc, size_t __refs = 0); -23376: -23376: protected: -23376: virtual -23376: ~codecvt(); -23376: -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, extern_type* __to, -23376: extern_type* __to_end, extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_in(state_type& __state, const extern_type* __from, -23376: const extern_type* __from_end, const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const; -23376: -23376: virtual int -23376: do_encoding() const throw(); -23376: -23376: virtual bool -23376: do_always_noconv() const throw(); -23376: -23376: virtual int -23376: do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const; -23376: -23376: virtual int -23376: do_max_length() const throw(); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: class codecvt -23376: : public __codecvt_abstract_base -23376: { -23376: friend class messages; -23376: -23376: public: -23376: -23376: typedef wchar_t intern_type; -23376: typedef char extern_type; -23376: typedef mbstate_t state_type; -23376: -23376: protected: -23376: __c_locale _M_c_locale_codecvt; -23376: -23376: public: -23376: static locale::id id; -23376: -23376: explicit -23376: codecvt(size_t __refs = 0); -23376: -23376: explicit -23376: codecvt(__c_locale __cloc, size_t __refs = 0); -23376: -23376: protected: -23376: virtual -23376: ~codecvt(); -23376: -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_in(state_type& __state, -23376: const extern_type* __from, const extern_type* __from_end, -23376: const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const; -23376: -23376: virtual -23376: int do_encoding() const throw(); -23376: -23376: virtual -23376: bool do_always_noconv() const throw(); -23376: -23376: virtual -23376: int do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const; -23376: -23376: virtual int -23376: do_max_length() const throw(); -23376: }; -23376: # 467 "/usr/include/c++/8/bits/codecvt.h" 3 -23376: template<> -23376: class codecvt -23376: : public __codecvt_abstract_base -23376: { -23376: public: -23376: -23376: typedef char16_t intern_type; -23376: typedef char extern_type; -23376: typedef mbstate_t state_type; -23376: -23376: public: -23376: static locale::id id; -23376: -23376: explicit -23376: codecvt(size_t __refs = 0) -23376: : __codecvt_abstract_base(__refs) { } -23376: -23376: protected: -23376: virtual -23376: ~codecvt(); -23376: -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_in(state_type& __state, -23376: const extern_type* __from, const extern_type* __from_end, -23376: const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const; -23376: -23376: virtual -23376: int do_encoding() const throw(); -23376: -23376: virtual -23376: bool do_always_noconv() const throw(); -23376: -23376: virtual -23376: int do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const; -23376: -23376: virtual int -23376: do_max_length() const throw(); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template<> -23376: class codecvt -23376: : public __codecvt_abstract_base -23376: { -23376: public: -23376: -23376: typedef char32_t intern_type; -23376: typedef char extern_type; -23376: typedef mbstate_t state_type; -23376: -23376: public: -23376: static locale::id id; -23376: -23376: explicit -23376: codecvt(size_t __refs = 0) -23376: : __codecvt_abstract_base(__refs) { } -23376: -23376: protected: -23376: virtual -23376: ~codecvt(); -23376: -23376: virtual result -23376: do_out(state_type& __state, const intern_type* __from, -23376: const intern_type* __from_end, const intern_type*& __from_next, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_unshift(state_type& __state, -23376: extern_type* __to, extern_type* __to_end, -23376: extern_type*& __to_next) const; -23376: -23376: virtual result -23376: do_in(state_type& __state, -23376: const extern_type* __from, const extern_type* __from_end, -23376: const extern_type*& __from_next, -23376: intern_type* __to, intern_type* __to_end, -23376: intern_type*& __to_next) const; -23376: -23376: virtual -23376: int do_encoding() const throw(); -23376: -23376: virtual -23376: bool do_always_noconv() const throw(); -23376: -23376: virtual -23376: int do_length(state_type&, const extern_type* __from, -23376: const extern_type* __end, size_t __max) const; -23376: -23376: virtual int -23376: do_max_length() const throw(); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> -23376: { -23376: public: -23376: explicit -23376: codecvt_byname(const char* __s, size_t __refs = 0) -23376: : codecvt<_InternT, _ExternT, _StateT>(__refs) -23376: { -23376: if (__builtin_strcmp(__s, "C") != 0 -23376: && __builtin_strcmp(__s, "POSIX") != 0) -23376: { -23376: this->_S_destroy_c_locale(this->_M_c_locale_codecvt); -23376: this->_S_create_c_locale(this->_M_c_locale_codecvt, __s); -23376: } -23376: } -23376: -23376: -23376: explicit -23376: codecvt_byname(const string& __s, size_t __refs = 0) -23376: : codecvt_byname(__s.c_str(), __refs) { } -23376: -23376: -23376: protected: -23376: virtual -23376: ~codecvt_byname() { } -23376: }; -23376: -23376: -23376: template<> -23376: class codecvt_byname -23376: : public codecvt -23376: { -23376: public: -23376: explicit -23376: codecvt_byname(const char*, size_t __refs = 0) -23376: : codecvt(__refs) { } -23376: -23376: explicit -23376: codecvt_byname(const string& __s, size_t __refs = 0) -23376: : codecvt_byname(__s.c_str(), __refs) { } -23376: -23376: protected: -23376: virtual -23376: ~codecvt_byname() { } -23376: }; -23376: -23376: template<> -23376: class codecvt_byname -23376: : public codecvt -23376: { -23376: public: -23376: explicit -23376: codecvt_byname(const char*, size_t __refs = 0) -23376: : codecvt(__refs) { } -23376: -23376: explicit -23376: codecvt_byname(const string& __s, size_t __refs = 0) -23376: : codecvt_byname(__s.c_str(), __refs) { } -23376: -23376: protected: -23376: virtual -23376: ~codecvt_byname() { } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: extern template class codecvt_byname; -23376: -23376: extern template -23376: const codecvt& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: extern template class codecvt_byname; -23376: -23376: extern template -23376: const codecvt& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: -23376: extern template class codecvt_byname; -23376: extern template class codecvt_byname; -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 2014 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 1 3 -23376: # 33 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: template -23376: struct __use_cache<__moneypunct_cache<_CharT, _Intl> > -23376: { -23376: const __moneypunct_cache<_CharT, _Intl>* -23376: operator() (const locale& __loc) const -23376: { -23376: const size_t __i = moneypunct<_CharT, _Intl>::id._M_id(); -23376: const locale::facet** __caches = __loc._M_impl->_M_caches; -23376: if (!__caches[__i]) -23376: { -23376: __moneypunct_cache<_CharT, _Intl>* __tmp = 0; -23376: try -23376: { -23376: __tmp = new __moneypunct_cache<_CharT, _Intl>; -23376: __tmp->_M_cache(__loc); -23376: } -23376: catch(...) -23376: { -23376: delete __tmp; -23376: throw; -23376: } -23376: __loc._M_impl->_M_install_cache(__tmp, __i); -23376: } -23376: return static_cast< -23376: const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]); -23376: } -23376: }; -23376: -23376: template -23376: void -23376: __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc) -23376: { -23376: const moneypunct<_CharT, _Intl>& __mp = -23376: use_facet >(__loc); -23376: -23376: _M_decimal_point = __mp.decimal_point(); -23376: _M_thousands_sep = __mp.thousands_sep(); -23376: _M_frac_digits = __mp.frac_digits(); -23376: -23376: char* __grouping = 0; -23376: _CharT* __curr_symbol = 0; -23376: _CharT* __positive_sign = 0; -23376: _CharT* __negative_sign = 0; -23376: try -23376: { -23376: const string& __g = __mp.grouping(); -23376: _M_grouping_size = __g.size(); -23376: __grouping = new char[_M_grouping_size]; -23376: __g.copy(__grouping, _M_grouping_size); -23376: _M_use_grouping = (_M_grouping_size -23376: && static_cast(__grouping[0]) > 0 -23376: && (__grouping[0] -23376: != __gnu_cxx::__numeric_traits::__max)); -23376: -23376: const basic_string<_CharT>& __cs = __mp.curr_symbol(); -23376: _M_curr_symbol_size = __cs.size(); -23376: __curr_symbol = new _CharT[_M_curr_symbol_size]; -23376: __cs.copy(__curr_symbol, _M_curr_symbol_size); -23376: -23376: const basic_string<_CharT>& __ps = __mp.positive_sign(); -23376: _M_positive_sign_size = __ps.size(); -23376: __positive_sign = new _CharT[_M_positive_sign_size]; -23376: __ps.copy(__positive_sign, _M_positive_sign_size); -23376: -23376: const basic_string<_CharT>& __ns = __mp.negative_sign(); -23376: _M_negative_sign_size = __ns.size(); -23376: __negative_sign = new _CharT[_M_negative_sign_size]; -23376: __ns.copy(__negative_sign, _M_negative_sign_size); -23376: -23376: _M_pos_format = __mp.pos_format(); -23376: _M_neg_format = __mp.neg_format(); -23376: -23376: const ctype<_CharT>& __ct = use_facet >(__loc); -23376: __ct.widen(money_base::_S_atoms, -23376: money_base::_S_atoms + money_base::_S_end, _M_atoms); -23376: -23376: _M_grouping = __grouping; -23376: _M_curr_symbol = __curr_symbol; -23376: _M_positive_sign = __positive_sign; -23376: _M_negative_sign = __negative_sign; -23376: _M_allocated = true; -23376: } -23376: catch(...) -23376: { -23376: delete [] __grouping; -23376: delete [] __curr_symbol; -23376: delete [] __positive_sign; -23376: delete [] __negative_sign; -23376: throw; -23376: } -23376: } -23376: -23376: namespace __cxx11 { -23376: -23376: template -23376: template -23376: _InIter -23376: money_get<_CharT, _InIter>:: -23376: _M_extract(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, string& __units) const -23376: { -23376: typedef char_traits<_CharT> __traits_type; -23376: typedef typename string_type::size_type size_type; -23376: typedef money_base::part part; -23376: typedef __moneypunct_cache<_CharT, _Intl> __cache_type; -23376: -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: __use_cache<__cache_type> __uc; -23376: const __cache_type* __lc = __uc(__loc); -23376: const char_type* __lit = __lc->_M_atoms; -23376: -23376: -23376: bool __negative = false; -23376: -23376: size_type __sign_size = 0; -23376: -23376: const bool __mandatory_sign = (__lc->_M_positive_sign_size -23376: && __lc->_M_negative_sign_size); -23376: -23376: string __grouping_tmp; -23376: if (__lc->_M_use_grouping) -23376: __grouping_tmp.reserve(32); -23376: -23376: int __last_pos = 0; -23376: -23376: int __n = 0; -23376: -23376: bool __testvalid = true; -23376: -23376: bool __testdecfound = false; -23376: -23376: -23376: string __res; -23376: __res.reserve(32); -23376: -23376: const char_type* __lit_zero = __lit + money_base::_S_zero; -23376: const money_base::pattern __p = __lc->_M_neg_format; -23376: for (int __i = 0; __i < 4 && __testvalid; ++__i) -23376: { -23376: const part __which = static_cast(__p.field[__i]); -23376: switch (__which) -23376: { -23376: case money_base::symbol: -23376: -23376: -23376: -23376: -23376: if (__io.flags() & ios_base::showbase || __sign_size > 1 -23376: || __i == 0 -23376: || (__i == 1 && (__mandatory_sign -23376: || (static_cast(__p.field[0]) -23376: == money_base::sign) -23376: || (static_cast(__p.field[2]) -23376: == money_base::space))) -23376: || (__i == 2 && ((static_cast(__p.field[3]) -23376: == money_base::value) -23376: || (__mandatory_sign -23376: && (static_cast(__p.field[3]) -23376: == money_base::sign))))) -23376: { -23376: const size_type __len = __lc->_M_curr_symbol_size; -23376: size_type __j = 0; -23376: for (; __beg != __end && __j < __len -23376: && *__beg == __lc->_M_curr_symbol[__j]; -23376: ++__beg, (void)++__j); -23376: if (__j != __len -23376: && (__j || __io.flags() & ios_base::showbase)) -23376: __testvalid = false; -23376: } -23376: break; -23376: case money_base::sign: -23376: -23376: if (__lc->_M_positive_sign_size && __beg != __end -23376: && *__beg == __lc->_M_positive_sign[0]) -23376: { -23376: __sign_size = __lc->_M_positive_sign_size; -23376: ++__beg; -23376: } -23376: else if (__lc->_M_negative_sign_size && __beg != __end -23376: && *__beg == __lc->_M_negative_sign[0]) -23376: { -23376: __negative = true; -23376: __sign_size = __lc->_M_negative_sign_size; -23376: ++__beg; -23376: } -23376: else if (__lc->_M_positive_sign_size -23376: && !__lc->_M_negative_sign_size) -23376: -23376: -23376: __negative = true; -23376: else if (__mandatory_sign) -23376: __testvalid = false; -23376: break; -23376: case money_base::value: -23376: -23376: -23376: for (; __beg != __end; ++__beg) -23376: { -23376: const char_type __c = *__beg; -23376: const char_type* __q = __traits_type::find(__lit_zero, -23376: 10, __c); -23376: if (__q != 0) -23376: { -23376: __res += money_base::_S_atoms[__q - __lit]; -23376: ++__n; -23376: } -23376: else if (__c == __lc->_M_decimal_point -23376: && !__testdecfound) -23376: { -23376: if (__lc->_M_frac_digits <= 0) -23376: break; -23376: -23376: __last_pos = __n; -23376: __n = 0; -23376: __testdecfound = true; -23376: } -23376: else if (__lc->_M_use_grouping -23376: && __c == __lc->_M_thousands_sep -23376: && !__testdecfound) -23376: { -23376: if (__n) -23376: { -23376: -23376: __grouping_tmp += static_cast(__n); -23376: __n = 0; -23376: } -23376: else -23376: { -23376: __testvalid = false; -23376: break; -23376: } -23376: } -23376: else -23376: break; -23376: } -23376: if (__res.empty()) -23376: __testvalid = false; -23376: break; -23376: case money_base::space: -23376: -23376: if (__beg != __end && __ctype.is(ctype_base::space, *__beg)) -23376: ++__beg; -23376: else -23376: __testvalid = false; -23376: -23376: case money_base::none: -23376: -23376: if (__i != 3) -23376: for (; __beg != __end -23376: && __ctype.is(ctype_base::space, *__beg); ++__beg); -23376: break; -23376: } -23376: } -23376: -23376: -23376: if (__sign_size > 1 && __testvalid) -23376: { -23376: const char_type* __sign = __negative ? __lc->_M_negative_sign -23376: : __lc->_M_positive_sign; -23376: size_type __i = 1; -23376: for (; __beg != __end && __i < __sign_size -23376: && *__beg == __sign[__i]; ++__beg, (void)++__i); -23376: -23376: if (__i != __sign_size) -23376: __testvalid = false; -23376: } -23376: -23376: if (__testvalid) -23376: { -23376: -23376: if (__res.size() > 1) -23376: { -23376: const size_type __first = __res.find_first_not_of('0'); -23376: const bool __only_zeros = __first == string::npos; -23376: if (__first) -23376: __res.erase(0, __only_zeros ? __res.size() - 1 : __first); -23376: } -23376: -23376: -23376: if (__negative && __res[0] != '0') -23376: __res.insert(__res.begin(), '-'); -23376: -23376: -23376: if (__grouping_tmp.size()) -23376: { -23376: -23376: __grouping_tmp += static_cast(__testdecfound ? __last_pos -23376: : __n); -23376: if (!std::__verify_grouping(__lc->_M_grouping, -23376: __lc->_M_grouping_size, -23376: __grouping_tmp)) -23376: __err |= ios_base::failbit; -23376: } -23376: -23376: -23376: if (__testdecfound && __n != __lc->_M_frac_digits) -23376: __testvalid = false; -23376: } -23376: -23376: -23376: if (!__testvalid) -23376: __err |= ios_base::failbit; -23376: else -23376: __units.swap(__res); -23376: -23376: -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: # 368 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3 -23376: template -23376: _InIter -23376: money_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, long double& __units) const -23376: { -23376: string __str; -23376: __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) -23376: : _M_extract(__beg, __end, __io, __err, __str); -23376: std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: money_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, -23376: ios_base::iostate& __err, string_type& __digits) const -23376: { -23376: typedef typename string::size_type size_type; -23376: -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: string __str; -23376: __beg = __intl ? _M_extract(__beg, __end, __io, __err, __str) -23376: : _M_extract(__beg, __end, __io, __err, __str); -23376: const size_type __len = __str.size(); -23376: if (__len) -23376: { -23376: __digits.resize(__len); -23376: __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]); -23376: } -23376: return __beg; -23376: } -23376: -23376: template -23376: template -23376: _OutIter -23376: money_put<_CharT, _OutIter>:: -23376: _M_insert(iter_type __s, ios_base& __io, char_type __fill, -23376: const string_type& __digits) const -23376: { -23376: typedef typename string_type::size_type size_type; -23376: typedef money_base::part part; -23376: typedef __moneypunct_cache<_CharT, _Intl> __cache_type; -23376: -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: __use_cache<__cache_type> __uc; -23376: const __cache_type* __lc = __uc(__loc); -23376: const char_type* __lit = __lc->_M_atoms; -23376: -23376: -23376: -23376: const char_type* __beg = __digits.data(); -23376: -23376: money_base::pattern __p; -23376: const char_type* __sign; -23376: size_type __sign_size; -23376: if (!(*__beg == __lit[money_base::_S_minus])) -23376: { -23376: __p = __lc->_M_pos_format; -23376: __sign = __lc->_M_positive_sign; -23376: __sign_size = __lc->_M_positive_sign_size; -23376: } -23376: else -23376: { -23376: __p = __lc->_M_neg_format; -23376: __sign = __lc->_M_negative_sign; -23376: __sign_size = __lc->_M_negative_sign_size; -23376: if (__digits.size()) -23376: ++__beg; -23376: } -23376: -23376: -23376: size_type __len = __ctype.scan_not(ctype_base::digit, __beg, -23376: __beg + __digits.size()) - __beg; -23376: if (__len) -23376: { -23376: -23376: -23376: -23376: string_type __value; -23376: __value.reserve(2 * __len); -23376: -23376: -23376: -23376: long __paddec = __len - __lc->_M_frac_digits; -23376: if (__paddec > 0) -23376: { -23376: if (__lc->_M_frac_digits < 0) -23376: __paddec = __len; -23376: if (__lc->_M_grouping_size) -23376: { -23376: __value.assign(2 * __paddec, char_type()); -23376: _CharT* __vend = -23376: std::__add_grouping(&__value[0], __lc->_M_thousands_sep, -23376: __lc->_M_grouping, -23376: __lc->_M_grouping_size, -23376: __beg, __beg + __paddec); -23376: __value.erase(__vend - &__value[0]); -23376: } -23376: else -23376: __value.assign(__beg, __paddec); -23376: } -23376: -23376: -23376: if (__lc->_M_frac_digits > 0) -23376: { -23376: __value += __lc->_M_decimal_point; -23376: if (__paddec >= 0) -23376: __value.append(__beg + __paddec, __lc->_M_frac_digits); -23376: else -23376: { -23376: -23376: __value.append(-__paddec, __lit[money_base::_S_zero]); -23376: __value.append(__beg, __len); -23376: } -23376: } -23376: -23376: -23376: const ios_base::fmtflags __f = __io.flags() -23376: & ios_base::adjustfield; -23376: __len = __value.size() + __sign_size; -23376: __len += ((__io.flags() & ios_base::showbase) -23376: ? __lc->_M_curr_symbol_size : 0); -23376: -23376: string_type __res; -23376: __res.reserve(2 * __len); -23376: -23376: const size_type __width = static_cast(__io.width()); -23376: const bool __testipad = (__f == ios_base::internal -23376: && __len < __width); -23376: -23376: for (int __i = 0; __i < 4; ++__i) -23376: { -23376: const part __which = static_cast(__p.field[__i]); -23376: switch (__which) -23376: { -23376: case money_base::symbol: -23376: if (__io.flags() & ios_base::showbase) -23376: __res.append(__lc->_M_curr_symbol, -23376: __lc->_M_curr_symbol_size); -23376: break; -23376: case money_base::sign: -23376: -23376: -23376: -23376: if (__sign_size) -23376: __res += __sign[0]; -23376: break; -23376: case money_base::value: -23376: __res += __value; -23376: break; -23376: case money_base::space: -23376: -23376: -23376: -23376: if (__testipad) -23376: __res.append(__width - __len, __fill); -23376: else -23376: __res += __fill; -23376: break; -23376: case money_base::none: -23376: if (__testipad) -23376: __res.append(__width - __len, __fill); -23376: break; -23376: } -23376: } -23376: -23376: -23376: if (__sign_size > 1) -23376: __res.append(__sign + 1, __sign_size - 1); -23376: -23376: -23376: __len = __res.size(); -23376: if (__width > __len) -23376: { -23376: if (__f == ios_base::left) -23376: -23376: __res.append(__width - __len, __fill); -23376: else -23376: -23376: __res.insert(0, __width - __len, __fill); -23376: __len = __width; -23376: } -23376: -23376: -23376: __s = std::__write(__s, __res.data(), __len); -23376: } -23376: __io.width(0); -23376: return __s; -23376: } -23376: # 574 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3 -23376: template -23376: _OutIter -23376: money_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, -23376: long double __units) const -23376: { -23376: const locale __loc = __io.getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: -23376: int __cs_size = 64; -23376: char* __cs = static_cast(__builtin_alloca(__cs_size)); -23376: -23376: -23376: int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: "%.*Lf", 0, __units); -23376: -23376: if (__len >= __cs_size) -23376: { -23376: __cs_size = __len + 1; -23376: __cs = static_cast(__builtin_alloca(__cs_size)); -23376: __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size, -23376: "%.*Lf", 0, __units); -23376: } -23376: # 606 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3 -23376: string_type __digits(__len, char_type()); -23376: __ctype.widen(__cs, __cs + __len, &__digits[0]); -23376: return __intl ? _M_insert(__s, __io, __fill, __digits) -23376: : _M_insert(__s, __io, __fill, __digits); -23376: } -23376: -23376: template -23376: _OutIter -23376: money_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, -23376: const string_type& __digits) const -23376: { return __intl ? _M_insert(__s, __io, __fill, __digits) -23376: : _M_insert(__s, __io, __fill, __digits); } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: time_base::dateorder -23376: time_get<_CharT, _InIter>::do_date_order() const -23376: { return time_base::no_order; } -23376: -23376: -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, -23376: const _CharT* __format) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: const size_t __len = char_traits<_CharT>::length(__format); -23376: -23376: ios_base::iostate __tmperr = ios_base::goodbit; -23376: size_t __i = 0; -23376: for (; __beg != __end && __i < __len && !__tmperr; ++__i) -23376: { -23376: if (__ctype.narrow(__format[__i], 0) == '%') -23376: { -23376: -23376: char __c = __ctype.narrow(__format[++__i], 0); -23376: int __mem = 0; -23376: if (__c == 'E' || __c == 'O') -23376: __c = __ctype.narrow(__format[++__i], 0); -23376: switch (__c) -23376: { -23376: const char* __cs; -23376: _CharT __wcs[10]; -23376: case 'a': -23376: -23376: const char_type* __days1[7]; -23376: __tp._M_days_abbreviated(__days1); -23376: __beg = _M_extract_name(__beg, __end, __mem, __days1, -23376: 7, __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_wday = __mem; -23376: break; -23376: case 'A': -23376: -23376: const char_type* __days2[7]; -23376: __tp._M_days(__days2); -23376: __beg = _M_extract_name(__beg, __end, __mem, __days2, -23376: 7, __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_wday = __mem; -23376: break; -23376: case 'h': -23376: case 'b': -23376: -23376: const char_type* __months1[12]; -23376: __tp._M_months_abbreviated(__months1); -23376: __beg = _M_extract_name(__beg, __end, __mem, -23376: __months1, 12, __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mon = __mem; -23376: break; -23376: case 'B': -23376: -23376: const char_type* __months2[12]; -23376: __tp._M_months(__months2); -23376: __beg = _M_extract_name(__beg, __end, __mem, -23376: __months2, 12, __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mon = __mem; -23376: break; -23376: case 'c': -23376: -23376: const char_type* __dt[2]; -23376: __tp._M_date_time_formats(__dt); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __dt[0]); -23376: break; -23376: case 'd': -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 1, 31, 2, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mday = __mem; -23376: break; -23376: case 'e': -23376: -23376: -23376: if (__ctype.is(ctype_base::space, *__beg)) -23376: __beg = _M_extract_num(++__beg, __end, __mem, 1, 9, -23376: 1, __io, __tmperr); -23376: else -23376: __beg = _M_extract_num(__beg, __end, __mem, 10, 31, -23376: 2, __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mday = __mem; -23376: break; -23376: case 'D': -23376: -23376: __cs = "%m/%d/%y"; -23376: __ctype.widen(__cs, __cs + 9, __wcs); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __wcs); -23376: break; -23376: case 'H': -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 0, 23, 2, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_hour = __mem; -23376: break; -23376: case 'I': -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_hour = __mem; -23376: break; -23376: case 'm': -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mon = __mem - 1; -23376: break; -23376: case 'M': -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 0, 59, 2, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_min = __mem; -23376: break; -23376: case 'n': -23376: if (__ctype.narrow(*__beg, 0) == '\n') -23376: ++__beg; -23376: else -23376: __tmperr |= ios_base::failbit; -23376: break; -23376: case 'R': -23376: -23376: __cs = "%H:%M"; -23376: __ctype.widen(__cs, __cs + 6, __wcs); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __wcs); -23376: break; -23376: case 'S': -23376: -23376: -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 0, 60, 2, -23376: -23376: -23376: -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_sec = __mem; -23376: break; -23376: case 't': -23376: if (__ctype.narrow(*__beg, 0) == '\t') -23376: ++__beg; -23376: else -23376: __tmperr |= ios_base::failbit; -23376: break; -23376: case 'T': -23376: -23376: __cs = "%H:%M:%S"; -23376: __ctype.widen(__cs, __cs + 9, __wcs); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __wcs); -23376: break; -23376: case 'x': -23376: -23376: const char_type* __dates[2]; -23376: __tp._M_date_formats(__dates); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __dates[0]); -23376: break; -23376: case 'X': -23376: -23376: const char_type* __times[2]; -23376: __tp._M_time_formats(__times); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __tmperr, -23376: __tm, __times[0]); -23376: break; -23376: case 'y': -23376: case 'C': -23376: -23376: case 'Y': -23376: -23376: -23376: -23376: -23376: __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900; -23376: break; -23376: case 'Z': -23376: -23376: if (__ctype.is(ctype_base::upper, *__beg)) -23376: { -23376: int __tmp; -23376: __beg = _M_extract_name(__beg, __end, __tmp, -23376: __timepunct_cache<_CharT>::_S_timezones, -23376: 14, __io, __tmperr); -23376: -23376: -23376: if (__beg != __end && !__tmperr && __tmp == 0 -23376: && (*__beg == __ctype.widen('-') -23376: || *__beg == __ctype.widen('+'))) -23376: { -23376: __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2, -23376: __io, __tmperr); -23376: __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2, -23376: __io, __tmperr); -23376: } -23376: } -23376: else -23376: __tmperr |= ios_base::failbit; -23376: break; -23376: default: -23376: -23376: __tmperr |= ios_base::failbit; -23376: } -23376: } -23376: else -23376: { -23376: -23376: if (__format[__i] == *__beg) -23376: ++__beg; -23376: else -23376: __tmperr |= ios_base::failbit; -23376: } -23376: } -23376: -23376: if (__tmperr || __i != __len) -23376: __err |= ios_base::failbit; -23376: -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: _M_extract_num(iter_type __beg, iter_type __end, int& __member, -23376: int __min, int __max, size_t __len, -23376: ios_base& __io, ios_base::iostate& __err) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: -23376: int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1); -23376: -23376: ++__min; -23376: size_t __i = 0; -23376: int __value = 0; -23376: for (; __beg != __end && __i < __len; ++__beg, (void)++__i) -23376: { -23376: const char __c = __ctype.narrow(*__beg, '*'); -23376: if (__c >= '0' && __c <= '9') -23376: { -23376: __value = __value * 10 + (__c - '0'); -23376: const int __valuec = __value * __mult; -23376: if (__valuec > __max || __valuec + __mult < __min) -23376: break; -23376: __mult /= 10; -23376: } -23376: else -23376: break; -23376: } -23376: if (__i == __len) -23376: __member = __value; -23376: -23376: else if (__len == 4 && __i == 2) -23376: __member = __value - 100; -23376: else -23376: __err |= ios_base::failbit; -23376: -23376: return __beg; -23376: } -23376: -23376: -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: _M_extract_name(iter_type __beg, iter_type __end, int& __member, -23376: const _CharT** __names, size_t __indexlen, -23376: ios_base& __io, ios_base::iostate& __err) const -23376: { -23376: typedef char_traits<_CharT> __traits_type; -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: int* __matches = static_cast(__builtin_alloca(sizeof(int) -23376: * __indexlen)); -23376: size_t __nmatches = 0; -23376: size_t __pos = 0; -23376: bool __testvalid = true; -23376: const char_type* __name; -23376: -23376: -23376: -23376: -23376: -23376: if (__beg != __end) -23376: { -23376: const char_type __c = *__beg; -23376: for (size_t __i1 = 0; __i1 < __indexlen; ++__i1) -23376: if (__c == __names[__i1][0] -23376: || __c == __ctype.toupper(__names[__i1][0])) -23376: __matches[__nmatches++] = __i1; -23376: } -23376: -23376: while (__nmatches > 1) -23376: { -23376: -23376: size_t __minlen = __traits_type::length(__names[__matches[0]]); -23376: for (size_t __i2 = 1; __i2 < __nmatches; ++__i2) -23376: __minlen = std::min(__minlen, -23376: __traits_type::length(__names[__matches[__i2]])); -23376: ++__beg; -23376: ++__pos; -23376: if (__pos < __minlen && __beg != __end) -23376: for (size_t __i3 = 0; __i3 < __nmatches;) -23376: { -23376: __name = __names[__matches[__i3]]; -23376: if (!(__name[__pos] == *__beg)) -23376: __matches[__i3] = __matches[--__nmatches]; -23376: else -23376: ++__i3; -23376: } -23376: else -23376: break; -23376: } -23376: -23376: if (__nmatches == 1) -23376: { -23376: -23376: ++__beg; -23376: ++__pos; -23376: __name = __names[__matches[0]]; -23376: const size_t __len = __traits_type::length(__name); -23376: while (__pos < __len && __beg != __end && __name[__pos] == *__beg) -23376: ++__beg, (void)++__pos; -23376: -23376: if (__len == __pos) -23376: __member = __matches[0]; -23376: else -23376: __testvalid = false; -23376: } -23376: else -23376: __testvalid = false; -23376: if (!__testvalid) -23376: __err |= ios_base::failbit; -23376: -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member, -23376: const _CharT** __names, size_t __indexlen, -23376: ios_base& __io, ios_base::iostate& __err) const -23376: { -23376: typedef char_traits<_CharT> __traits_type; -23376: const locale& __loc = __io._M_getloc(); -23376: const ctype<_CharT>& __ctype = use_facet >(__loc); -23376: -23376: int* __matches = static_cast(__builtin_alloca(2 * sizeof(int) -23376: * __indexlen)); -23376: size_t __nmatches = 0; -23376: size_t* __matches_lengths = 0; -23376: size_t __pos = 0; -23376: -23376: if (__beg != __end) -23376: { -23376: const char_type __c = *__beg; -23376: for (size_t __i = 0; __i < 2 * __indexlen; ++__i) -23376: if (__c == __names[__i][0] -23376: || __c == __ctype.toupper(__names[__i][0])) -23376: __matches[__nmatches++] = __i; -23376: } -23376: -23376: if (__nmatches) -23376: { -23376: ++__beg; -23376: ++__pos; -23376: -23376: __matches_lengths -23376: = static_cast(__builtin_alloca(sizeof(size_t) -23376: * __nmatches)); -23376: for (size_t __i = 0; __i < __nmatches; ++__i) -23376: __matches_lengths[__i] -23376: = __traits_type::length(__names[__matches[__i]]); -23376: } -23376: -23376: for (; __beg != __end; ++__beg, (void)++__pos) -23376: { -23376: size_t __nskipped = 0; -23376: const char_type __c = *__beg; -23376: for (size_t __i = 0; __i < __nmatches;) -23376: { -23376: const char_type* __name = __names[__matches[__i]]; -23376: if (__pos >= __matches_lengths[__i]) -23376: ++__nskipped, ++__i; -23376: else if (!(__name[__pos] == __c)) -23376: { -23376: --__nmatches; -23376: __matches[__i] = __matches[__nmatches]; -23376: __matches_lengths[__i] = __matches_lengths[__nmatches]; -23376: } -23376: else -23376: ++__i; -23376: } -23376: if (__nskipped == __nmatches) -23376: break; -23376: } -23376: -23376: if ((__nmatches == 1 && __matches_lengths[0] == __pos) -23376: || (__nmatches == 2 && (__matches_lengths[0] == __pos -23376: || __matches_lengths[1] == __pos))) -23376: __member = (__matches[0] >= __indexlen -23376: ? __matches[0] - __indexlen : __matches[0]); -23376: else -23376: __err |= ios_base::failbit; -23376: -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get_time(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: const char_type* __times[2]; -23376: __tp._M_time_formats(__times); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __err, -23376: __tm, __times[0]); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get_date(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: const char_type* __dates[2]; -23376: __tp._M_date_formats(__dates); -23376: __beg = _M_extract_via_format(__beg, __end, __io, __err, -23376: __tm, __dates[0]); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: const char_type* __days[14]; -23376: __tp._M_days_abbreviated(__days); -23376: __tp._M_days(__days + 7); -23376: int __tmpwday; -23376: ios_base::iostate __tmperr = ios_base::goodbit; -23376: -23376: __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_wday = __tmpwday; -23376: else -23376: __err |= ios_base::failbit; -23376: -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get_monthname(iter_type __beg, iter_type __end, -23376: ios_base& __io, ios_base::iostate& __err, tm* __tm) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: const char_type* __months[24]; -23376: __tp._M_months_abbreviated(__months); -23376: __tp._M_months(__months + 12); -23376: int __tmpmon; -23376: ios_base::iostate __tmperr = ios_base::goodbit; -23376: -23376: __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_mon = __tmpmon; -23376: else -23376: __err |= ios_base::failbit; -23376: -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: template -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get_year(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm) const -23376: { -23376: int __tmpyear; -23376: ios_base::iostate __tmperr = ios_base::goodbit; -23376: -23376: __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4, -23376: __io, __tmperr); -23376: if (!__tmperr) -23376: __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900; -23376: else -23376: __err |= ios_base::failbit; -23376: -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: -23376: template -23376: inline -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: get(iter_type __s, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, const char_type* __fmt, -23376: const char_type* __fmtend) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: ctype<_CharT> const& __ctype = use_facet >(__loc); -23376: __err = ios_base::goodbit; -23376: while (__fmt != __fmtend && -23376: __err == ios_base::goodbit) -23376: { -23376: if (__s == __end) -23376: { -23376: __err = ios_base::eofbit | ios_base::failbit; -23376: break; -23376: } -23376: else if (__ctype.narrow(*__fmt, 0) == '%') -23376: { -23376: char __format; -23376: char __mod = 0; -23376: if (++__fmt == __fmtend) -23376: { -23376: __err = ios_base::failbit; -23376: break; -23376: } -23376: const char __c = __ctype.narrow(*__fmt, 0); -23376: if (__c != 'E' && __c != 'O') -23376: __format = __c; -23376: else if (++__fmt != __fmtend) -23376: { -23376: __mod = __c; -23376: __format = __ctype.narrow(*__fmt, 0); -23376: } -23376: else -23376: { -23376: __err = ios_base::failbit; -23376: break; -23376: } -23376: __s = this->do_get(__s, __end, __io, __err, __tm, __format, -23376: __mod); -23376: ++__fmt; -23376: } -23376: else if (__ctype.is(ctype_base::space, *__fmt)) -23376: { -23376: ++__fmt; -23376: while (__fmt != __fmtend && -23376: __ctype.is(ctype_base::space, *__fmt)) -23376: ++__fmt; -23376: -23376: while (__s != __end && -23376: __ctype.is(ctype_base::space, *__s)) -23376: ++__s; -23376: } -23376: -23376: else if (__ctype.tolower(*__s) == __ctype.tolower(*__fmt) || -23376: __ctype.toupper(*__s) == __ctype.toupper(*__fmt)) -23376: { -23376: ++__s; -23376: ++__fmt; -23376: } -23376: else -23376: { -23376: __err = ios_base::failbit; -23376: break; -23376: } -23376: } -23376: return __s; -23376: } -23376: -23376: template -23376: inline -23376: _InIter -23376: time_get<_CharT, _InIter>:: -23376: do_get(iter_type __beg, iter_type __end, ios_base& __io, -23376: ios_base::iostate& __err, tm* __tm, -23376: char __format, char __mod) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: ctype<_CharT> const& __ctype = use_facet >(__loc); -23376: __err = ios_base::goodbit; -23376: -23376: char_type __fmt[4]; -23376: __fmt[0] = __ctype.widen('%'); -23376: if (!__mod) -23376: { -23376: __fmt[1] = __format; -23376: __fmt[2] = char_type(); -23376: } -23376: else -23376: { -23376: __fmt[1] = __mod; -23376: __fmt[2] = __format; -23376: __fmt[3] = char_type(); -23376: } -23376: -23376: __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __fmt); -23376: if (__beg == __end) -23376: __err |= ios_base::eofbit; -23376: return __beg; -23376: } -23376: -23376: -23376: -23376: template -23376: _OutIter -23376: time_put<_CharT, _OutIter>:: -23376: put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm, -23376: const _CharT* __beg, const _CharT* __end) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: ctype<_CharT> const& __ctype = use_facet >(__loc); -23376: for (; __beg != __end; ++__beg) -23376: if (__ctype.narrow(*__beg, 0) != '%') -23376: { -23376: *__s = *__beg; -23376: ++__s; -23376: } -23376: else if (++__beg != __end) -23376: { -23376: char __format; -23376: char __mod = 0; -23376: const char __c = __ctype.narrow(*__beg, 0); -23376: if (__c != 'E' && __c != 'O') -23376: __format = __c; -23376: else if (++__beg != __end) -23376: { -23376: __mod = __c; -23376: __format = __ctype.narrow(*__beg, 0); -23376: } -23376: else -23376: break; -23376: __s = this->do_put(__s, __io, __fill, __tm, __format, __mod); -23376: } -23376: else -23376: break; -23376: return __s; -23376: } -23376: -23376: template -23376: _OutIter -23376: time_put<_CharT, _OutIter>:: -23376: do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm, -23376: char __format, char __mod) const -23376: { -23376: const locale& __loc = __io._M_getloc(); -23376: ctype<_CharT> const& __ctype = use_facet >(__loc); -23376: __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc); -23376: -23376: -23376: -23376: const size_t __maxlen = 128; -23376: char_type __res[__maxlen]; -23376: -23376: -23376: -23376: -23376: -23376: -23376: char_type __fmt[4]; -23376: __fmt[0] = __ctype.widen('%'); -23376: if (!__mod) -23376: { -23376: __fmt[1] = __format; -23376: __fmt[2] = char_type(); -23376: } -23376: else -23376: { -23376: __fmt[1] = __mod; -23376: __fmt[2] = __format; -23376: __fmt[3] = char_type(); -23376: } -23376: -23376: __tp._M_put(__res, __maxlen, __fmt, __tm); -23376: -23376: -23376: return std::__write(__s, __res, char_traits::length(__res)); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: extern template class moneypunct; -23376: extern template class moneypunct; -23376: extern template class moneypunct_byname; -23376: extern template class moneypunct_byname; -23376: extern template class __cxx11:: money_get; -23376: extern template class __cxx11:: money_put; -23376: extern template class __timepunct; -23376: extern template class time_put; -23376: extern template class time_put_byname; -23376: extern template class time_get; -23376: extern template class time_get_byname; -23376: extern template class messages; -23376: extern template class messages_byname; -23376: -23376: extern template -23376: const moneypunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const moneypunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const money_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const money_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const __timepunct& -23376: use_facet<__timepunct >(const locale&); -23376: -23376: extern template -23376: const time_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const time_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const messages& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet<__timepunct >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: extern template class moneypunct; -23376: extern template class moneypunct; -23376: extern template class moneypunct_byname; -23376: extern template class moneypunct_byname; -23376: extern template class __cxx11:: money_get; -23376: extern template class __cxx11:: money_put; -23376: extern template class __timepunct; -23376: extern template class time_put; -23376: extern template class time_put_byname; -23376: extern template class time_get; -23376: extern template class time_get_byname; -23376: extern template class messages; -23376: extern template class messages_byname; -23376: -23376: extern template -23376: const moneypunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const moneypunct& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const money_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const money_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const __timepunct& -23376: use_facet<__timepunct >(const locale&); -23376: -23376: extern template -23376: const time_put& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const time_get& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: const messages& -23376: use_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet<__timepunct >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: extern template -23376: bool -23376: has_facet >(const locale&); -23376: -23376: -23376: -23376: -23376: } -23376: # 2016 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3 -23376: # 42 "/usr/include/c++/8/locale" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/locale_conv.h" 1 3 -23376: # 41 "/usr/include/c++/8/bits/locale_conv.h" 3 -23376: # 1 "/usr/include/c++/8/bits/unique_ptr.h" 1 3 -23376: # 41 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: template class auto_ptr; -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: -23376: template -23376: struct default_delete -23376: { -23376: -23376: constexpr default_delete() noexcept = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template::value>::type> -23376: default_delete(const default_delete<_Up>&) noexcept { } -23376: -23376: -23376: void -23376: operator()(_Tp* __ptr) const -23376: { -23376: static_assert(!is_void<_Tp>::value, -23376: "can't delete pointer to incomplete type"); -23376: static_assert(sizeof(_Tp)>0, -23376: "can't delete pointer to incomplete type"); -23376: delete __ptr; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: struct default_delete<_Tp[]> -23376: { -23376: public: -23376: -23376: constexpr default_delete() noexcept = default; -23376: # 104 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template::value>::type> -23376: default_delete(const default_delete<_Up[]>&) noexcept { } -23376: -23376: -23376: template -23376: typename enable_if::value>::type -23376: operator()(_Up* __ptr) const -23376: { -23376: static_assert(sizeof(_Tp)>0, -23376: "can't delete pointer to incomplete type"); -23376: delete [] __ptr; -23376: } -23376: }; -23376: -23376: template -23376: class __uniq_ptr_impl -23376: { -23376: template -23376: struct _Ptr -23376: { -23376: using type = _Up*; -23376: }; -23376: -23376: template -23376: struct -23376: _Ptr<_Up, _Ep, __void_t::type::pointer>> -23376: { -23376: using type = typename remove_reference<_Ep>::type::pointer; -23376: }; -23376: -23376: public: -23376: using _DeleterConstraint = enable_if< -23376: __and_<__not_>, -23376: is_default_constructible<_Dp>>::value>; -23376: -23376: using pointer = typename _Ptr<_Tp, _Dp>::type; -23376: -23376: __uniq_ptr_impl() = default; -23376: __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } -23376: -23376: template -23376: __uniq_ptr_impl(pointer __p, _Del&& __d) -23376: : _M_t(__p, std::forward<_Del>(__d)) { } -23376: -23376: pointer& _M_ptr() { return std::get<0>(_M_t); } -23376: pointer _M_ptr() const { return std::get<0>(_M_t); } -23376: _Dp& _M_deleter() { return std::get<1>(_M_t); } -23376: const _Dp& _M_deleter() const { return std::get<1>(_M_t); } -23376: -23376: private: -23376: tuple _M_t; -23376: }; -23376: -23376: -23376: template > -23376: class unique_ptr -23376: { -23376: template -23376: using _DeleterConstraint = -23376: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; -23376: -23376: __uniq_ptr_impl<_Tp, _Dp> _M_t; -23376: -23376: public: -23376: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; -23376: using element_type = _Tp; -23376: using deleter_type = _Dp; -23376: -23376: -23376: -23376: template -23376: using __safe_conversion_up = __and_< -23376: is_convertible::pointer, pointer>, -23376: __not_>, -23376: __or_<__and_, -23376: is_same>, -23376: __and_<__not_>, -23376: is_convertible<_Ep, deleter_type>> -23376: > -23376: >; -23376: -23376: -23376: -23376: -23376: template > -23376: constexpr unique_ptr() noexcept -23376: : _M_t() -23376: { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template > -23376: explicit -23376: unique_ptr(pointer __p) noexcept -23376: : _M_t(__p) -23376: { } -23376: # 215 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: unique_ptr(pointer __p, -23376: typename conditional::value, -23376: deleter_type, const deleter_type&>::type __d) noexcept -23376: : _M_t(__p, __d) { } -23376: # 227 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: unique_ptr(pointer __p, -23376: typename remove_reference::type&& __d) noexcept -23376: : _M_t(std::move(__p), std::move(__d)) -23376: { static_assert(!std::is_reference::value, -23376: "rvalue deleter bound to reference"); } -23376: -23376: -23376: template > -23376: constexpr unique_ptr(nullptr_t) noexcept : _M_t() { } -23376: -23376: -23376: -23376: -23376: unique_ptr(unique_ptr&& __u) noexcept -23376: : _M_t(__u.release(), std::forward(__u.get_deleter())) { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template, -23376: typename conditional::value, -23376: is_same<_Ep, _Dp>, -23376: is_convertible<_Ep, _Dp>>::type>> -23376: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept -23376: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) -23376: { } -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: -23376: template, is_same<_Dp, default_delete<_Tp>>>> -23376: unique_ptr(auto_ptr<_Up>&& __u) noexcept; -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: -23376: ~unique_ptr() noexcept -23376: { -23376: auto& __ptr = _M_t._M_ptr(); -23376: if (__ptr != nullptr) -23376: get_deleter()(__ptr); -23376: __ptr = pointer(); -23376: } -23376: # 286 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: unique_ptr& -23376: operator=(unique_ptr&& __u) noexcept -23376: { -23376: reset(__u.release()); -23376: get_deleter() = std::forward(__u.get_deleter()); -23376: return *this; -23376: } -23376: # 301 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template -23376: typename enable_if< __and_< -23376: __safe_conversion_up<_Up, _Ep>, -23376: is_assignable -23376: >::value, -23376: unique_ptr&>::type -23376: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept -23376: { -23376: reset(__u.release()); -23376: get_deleter() = std::forward<_Ep>(__u.get_deleter()); -23376: return *this; -23376: } -23376: -23376: -23376: unique_ptr& -23376: operator=(nullptr_t) noexcept -23376: { -23376: reset(); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: typename add_lvalue_reference::type -23376: operator*() const -23376: { -23376: ; -23376: return *get(); -23376: } -23376: -23376: -23376: pointer -23376: operator->() const noexcept -23376: { -23376: ; -23376: return get(); -23376: } -23376: -23376: -23376: pointer -23376: get() const noexcept -23376: { return _M_t._M_ptr(); } -23376: -23376: -23376: deleter_type& -23376: get_deleter() noexcept -23376: { return _M_t._M_deleter(); } -23376: -23376: -23376: const deleter_type& -23376: get_deleter() const noexcept -23376: { return _M_t._M_deleter(); } -23376: -23376: -23376: explicit operator bool() const noexcept -23376: { return get() == pointer() ? false : true; } -23376: -23376: -23376: -23376: -23376: pointer -23376: release() noexcept -23376: { -23376: pointer __p = get(); -23376: _M_t._M_ptr() = pointer(); -23376: return __p; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: reset(pointer __p = pointer()) noexcept -23376: { -23376: using std::swap; -23376: swap(_M_t._M_ptr(), __p); -23376: if (__p != pointer()) -23376: get_deleter()(__p); -23376: } -23376: -23376: -23376: void -23376: swap(unique_ptr& __u) noexcept -23376: { -23376: using std::swap; -23376: swap(_M_t, __u._M_t); -23376: } -23376: -23376: -23376: unique_ptr(const unique_ptr&) = delete; -23376: unique_ptr& operator=(const unique_ptr&) = delete; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class unique_ptr<_Tp[], _Dp> -23376: { -23376: template -23376: using _DeleterConstraint = -23376: typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; -23376: -23376: __uniq_ptr_impl<_Tp, _Dp> _M_t; -23376: -23376: template -23376: using __remove_cv = typename remove_cv<_Up>::type; -23376: -23376: -23376: template -23376: using __is_derived_Tp -23376: = __and_< is_base_of<_Tp, _Up>, -23376: __not_, __remove_cv<_Up>>> >; -23376: -23376: public: -23376: using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; -23376: using element_type = _Tp; -23376: using deleter_type = _Dp; -23376: -23376: -23376: -23376: template, -23376: typename _Up_element_type = typename _Up_up::element_type> -23376: using __safe_conversion_up = __and_< -23376: is_array<_Up>, -23376: is_same, -23376: is_same, -23376: is_convertible<_Up_element_type(*)[], element_type(*)[]>, -23376: __or_<__and_, is_same>, -23376: __and_<__not_>, -23376: is_convertible<_Ep, deleter_type>>> -23376: >; -23376: -23376: -23376: template -23376: using __safe_conversion_raw = __and_< -23376: __or_<__or_, -23376: is_same<_Up, nullptr_t>>, -23376: __and_, -23376: is_same, -23376: is_convertible< -23376: typename remove_pointer<_Up>::type(*)[], -23376: element_type(*)[]> -23376: > -23376: > -23376: >; -23376: -23376: -23376: -23376: -23376: template > -23376: constexpr unique_ptr() noexcept -23376: : _M_t() -23376: { } -23376: # 470 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template, -23376: typename = typename enable_if< -23376: __safe_conversion_raw<_Up>::value, bool>::type> -23376: explicit -23376: unique_ptr(_Up __p) noexcept -23376: : _M_t(__p) -23376: { } -23376: # 488 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template::value, bool>::type> -23376: unique_ptr(_Up __p, -23376: typename conditional::value, -23376: deleter_type, const deleter_type&>::type __d) noexcept -23376: : _M_t(__p, __d) { } -23376: # 504 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template::value, bool>::type> -23376: unique_ptr(_Up __p, typename -23376: remove_reference::type&& __d) noexcept -23376: : _M_t(std::move(__p), std::move(__d)) -23376: { static_assert(!is_reference::value, -23376: "rvalue deleter bound to reference"); } -23376: -23376: -23376: unique_ptr(unique_ptr&& __u) noexcept -23376: : _M_t(__u.release(), std::forward(__u.get_deleter())) { } -23376: -23376: -23376: template > -23376: constexpr unique_ptr(nullptr_t) noexcept : _M_t() { } -23376: -23376: template>> -23376: unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept -23376: : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) -23376: { } -23376: -23376: -23376: ~unique_ptr() -23376: { -23376: auto& __ptr = _M_t._M_ptr(); -23376: if (__ptr != nullptr) -23376: get_deleter()(__ptr); -23376: __ptr = pointer(); -23376: } -23376: # 545 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: unique_ptr& -23376: operator=(unique_ptr&& __u) noexcept -23376: { -23376: reset(__u.release()); -23376: get_deleter() = std::forward(__u.get_deleter()); -23376: return *this; -23376: } -23376: # 560 "/usr/include/c++/8/bits/unique_ptr.h" 3 -23376: template -23376: typename -23376: enable_if<__and_<__safe_conversion_up<_Up, _Ep>, -23376: is_assignable -23376: >::value, -23376: unique_ptr&>::type -23376: operator=(unique_ptr<_Up, _Ep>&& __u) noexcept -23376: { -23376: reset(__u.release()); -23376: get_deleter() = std::forward<_Ep>(__u.get_deleter()); -23376: return *this; -23376: } -23376: -23376: -23376: unique_ptr& -23376: operator=(nullptr_t) noexcept -23376: { -23376: reset(); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: typename std::add_lvalue_reference::type -23376: operator[](size_t __i) const -23376: { -23376: ; -23376: return get()[__i]; -23376: } -23376: -23376: -23376: pointer -23376: get() const noexcept -23376: { return _M_t._M_ptr(); } -23376: -23376: -23376: deleter_type& -23376: get_deleter() noexcept -23376: { return _M_t._M_deleter(); } -23376: -23376: -23376: const deleter_type& -23376: get_deleter() const noexcept -23376: { return _M_t._M_deleter(); } -23376: -23376: -23376: explicit operator bool() const noexcept -23376: { return get() == pointer() ? false : true; } -23376: -23376: -23376: -23376: -23376: pointer -23376: release() noexcept -23376: { -23376: pointer __p = get(); -23376: _M_t._M_ptr() = pointer(); -23376: return __p; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template , -23376: __and_, -23376: is_pointer<_Up>, -23376: is_convertible< -23376: typename remove_pointer<_Up>::type(*)[], -23376: element_type(*)[] -23376: > -23376: > -23376: > -23376: >> -23376: void -23376: reset(_Up __p) noexcept -23376: { -23376: pointer __ptr = __p; -23376: using std::swap; -23376: swap(_M_t._M_ptr(), __ptr); -23376: if (__ptr != nullptr) -23376: get_deleter()(__ptr); -23376: } -23376: -23376: void reset(nullptr_t = nullptr) noexcept -23376: { -23376: reset(pointer()); -23376: } -23376: -23376: -23376: void -23376: swap(unique_ptr& __u) noexcept -23376: { -23376: using std::swap; -23376: swap(_M_t, __u._M_t); -23376: } -23376: -23376: -23376: unique_ptr(const unique_ptr&) = delete; -23376: unique_ptr& operator=(const unique_ptr&) = delete; -23376: }; -23376: -23376: template -23376: inline -23376: -23376: -23376: typename enable_if<__is_swappable<_Dp>::value>::type -23376: -23376: -23376: -23376: swap(unique_ptr<_Tp, _Dp>& __x, -23376: unique_ptr<_Tp, _Dp>& __y) noexcept -23376: { __x.swap(__y); } -23376: -23376: -23376: template -23376: typename enable_if::value>::type -23376: swap(unique_ptr<_Tp, _Dp>&, -23376: unique_ptr<_Tp, _Dp>&) = delete; -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { return __x.get() == __y.get(); } -23376: -23376: template -23376: inline bool -23376: operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept -23376: { return !__x; } -23376: -23376: template -23376: inline bool -23376: operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept -23376: { return !__x; } -23376: -23376: template -23376: inline bool -23376: operator!=(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { return __x.get() != __y.get(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept -23376: { return (bool)__x; } -23376: -23376: template -23376: inline bool -23376: operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept -23376: { return (bool)__x; } -23376: -23376: template -23376: inline bool -23376: operator<(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { -23376: typedef typename -23376: std::common_type::pointer, -23376: typename unique_ptr<_Up, _Ep>::pointer>::type _CT; -23376: return std::less<_CT>()(__x.get(), __y.get()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) -23376: { return std::less::pointer>()(__x.get(), -23376: nullptr); } -23376: -23376: template -23376: inline bool -23376: operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) -23376: { return std::less::pointer>()(nullptr, -23376: __x.get()); } -23376: -23376: template -23376: inline bool -23376: operator<=(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) -23376: { return !(nullptr < __x); } -23376: -23376: template -23376: inline bool -23376: operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) -23376: { return !(__x < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { return (__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) -23376: { return std::less::pointer>()(nullptr, -23376: __x.get()); } -23376: -23376: template -23376: inline bool -23376: operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) -23376: { return std::less::pointer>()(__x.get(), -23376: nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>=(const unique_ptr<_Tp, _Dp>& __x, -23376: const unique_ptr<_Up, _Ep>& __y) -23376: { return !(__x < __y); } -23376: -23376: template -23376: inline bool -23376: operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) -23376: { return !(__x < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) -23376: { return !(nullptr < __x); } -23376: -23376: -23376: template -23376: struct hash> -23376: : public __hash_base>, -23376: private __poison_hash::pointer> -23376: { -23376: size_t -23376: operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept -23376: { -23376: typedef unique_ptr<_Tp, _Dp> _UP; -23376: return std::hash()(__u.get()); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _MakeUniq -23376: { typedef unique_ptr<_Tp> __single_object; }; -23376: -23376: template -23376: struct _MakeUniq<_Tp[]> -23376: { typedef unique_ptr<_Tp[]> __array; }; -23376: -23376: template -23376: struct _MakeUniq<_Tp[_Bound]> -23376: { struct __invalid_type { }; }; -23376: -23376: -23376: template -23376: inline typename _MakeUniq<_Tp>::__single_object -23376: make_unique(_Args&&... __args) -23376: { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } -23376: -23376: -23376: template -23376: inline typename _MakeUniq<_Tp>::__array -23376: make_unique(size_t __num) -23376: { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } -23376: -23376: -23376: template -23376: inline typename _MakeUniq<_Tp>::__invalid_type -23376: make_unique(_Args&&...) = delete; -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 42 "/usr/include/c++/8/bits/locale_conv.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: __do_str_codecvt(const _InChar* __first, const _InChar* __last, -23376: _OutStr& __outstr, const _Codecvt& __cvt, _State& __state, -23376: size_t& __count, _Fn __fn) -23376: { -23376: if (__first == __last) -23376: { -23376: __outstr.clear(); -23376: __count = 0; -23376: return true; -23376: } -23376: -23376: size_t __outchars = 0; -23376: auto __next = __first; -23376: const auto __maxlen = __cvt.max_length() + 1; -23376: -23376: codecvt_base::result __result; -23376: do -23376: { -23376: __outstr.resize(__outstr.size() + (__last - __next) * __maxlen); -23376: auto __outnext = &__outstr.front() + __outchars; -23376: auto const __outlast = &__outstr.back() + 1; -23376: __result = (__cvt.*__fn)(__state, __next, __last, __next, -23376: __outnext, __outlast, __outnext); -23376: __outchars = __outnext - &__outstr.front(); -23376: } -23376: while (__result == codecvt_base::partial && __next != __last -23376: && (__outstr.size() - __outchars) < __maxlen); -23376: -23376: if (__result == codecvt_base::error) -23376: { -23376: __count = __next - __first; -23376: return false; -23376: } -23376: -23376: if (__result == codecvt_base::noconv) -23376: { -23376: __outstr.assign(__first, __last); -23376: __count = __last - __first; -23376: } -23376: else -23376: { -23376: __outstr.resize(__outchars); -23376: __count = __next - __first; -23376: } -23376: -23376: return true; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: __str_codecvt_in(const char* __first, const char* __last, -23376: basic_string<_CharT, _Traits, _Alloc>& __outstr, -23376: const codecvt<_CharT, char, _State>& __cvt, -23376: _State& __state, size_t& __count) -23376: { -23376: using _Codecvt = codecvt<_CharT, char, _State>; -23376: using _ConvFn -23376: = codecvt_base::result -23376: (_Codecvt::*)(_State&, const char*, const char*, const char*&, -23376: _CharT*, _CharT*, _CharT*&) const; -23376: _ConvFn __fn = &codecvt<_CharT, char, _State>::in; -23376: return __do_str_codecvt(__first, __last, __outstr, __cvt, __state, -23376: __count, __fn); -23376: } -23376: -23376: template -23376: inline bool -23376: __str_codecvt_in(const char* __first, const char* __last, -23376: basic_string<_CharT, _Traits, _Alloc>& __outstr, -23376: const codecvt<_CharT, char, _State>& __cvt) -23376: { -23376: _State __state = {}; -23376: size_t __n; -23376: return __str_codecvt_in(__first, __last, __outstr, __cvt, __state, __n); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: __str_codecvt_out(const _CharT* __first, const _CharT* __last, -23376: basic_string& __outstr, -23376: const codecvt<_CharT, char, _State>& __cvt, -23376: _State& __state, size_t& __count) -23376: { -23376: using _Codecvt = codecvt<_CharT, char, _State>; -23376: using _ConvFn -23376: = codecvt_base::result -23376: (_Codecvt::*)(_State&, const _CharT*, const _CharT*, const _CharT*&, -23376: char*, char*, char*&) const; -23376: _ConvFn __fn = &codecvt<_CharT, char, _State>::out; -23376: return __do_str_codecvt(__first, __last, __outstr, __cvt, __state, -23376: __count, __fn); -23376: } -23376: -23376: template -23376: inline bool -23376: __str_codecvt_out(const _CharT* __first, const _CharT* __last, -23376: basic_string& __outstr, -23376: const codecvt<_CharT, char, _State>& __cvt) -23376: { -23376: _State __state = {}; -23376: size_t __n; -23376: return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n); -23376: } -23376: -23376: -23376: -23376: namespace __cxx11 { -23376: -23376: -23376: template, -23376: typename _Byte_alloc = allocator> -23376: class wstring_convert -23376: { -23376: public: -23376: typedef basic_string, _Byte_alloc> byte_string; -23376: typedef basic_string<_Elem, char_traits<_Elem>, _Wide_alloc> wide_string; -23376: typedef typename _Codecvt::state_type state_type; -23376: typedef typename wide_string::traits_type::int_type int_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: wstring_convert(_Codecvt* __pcvt = new _Codecvt()) : _M_cvt(__pcvt) -23376: { -23376: if (!_M_cvt) -23376: __throw_logic_error("wstring_convert"); -23376: } -23376: # 198 "/usr/include/c++/8/bits/locale_conv.h" 3 -23376: wstring_convert(_Codecvt* __pcvt, state_type __state) -23376: : _M_cvt(__pcvt), _M_state(__state), _M_with_cvtstate(true) -23376: { -23376: if (!_M_cvt) -23376: __throw_logic_error("wstring_convert"); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: wstring_convert(const byte_string& __byte_err, -23376: const wide_string& __wide_err = wide_string()) -23376: : _M_cvt(new _Codecvt), -23376: _M_byte_err_string(__byte_err), _M_wide_err_string(__wide_err), -23376: _M_with_strings(true) -23376: { -23376: if (!_M_cvt) -23376: __throw_logic_error("wstring_convert"); -23376: } -23376: -23376: ~wstring_convert() = default; -23376: -23376: -23376: -23376: wstring_convert(const wstring_convert&) = delete; -23376: wstring_convert& operator=(const wstring_convert&) = delete; -23376: -23376: -23376: wide_string -23376: from_bytes(char __byte) -23376: { -23376: char __bytes[2] = { __byte }; -23376: return from_bytes(__bytes, __bytes+1); -23376: } -23376: -23376: wide_string -23376: from_bytes(const char* __ptr) -23376: { return from_bytes(__ptr, __ptr+char_traits::length(__ptr)); } -23376: -23376: wide_string -23376: from_bytes(const byte_string& __str) -23376: { -23376: auto __ptr = __str.data(); -23376: return from_bytes(__ptr, __ptr + __str.size()); -23376: } -23376: -23376: wide_string -23376: from_bytes(const char* __first, const char* __last) -23376: { -23376: if (!_M_with_cvtstate) -23376: _M_state = state_type(); -23376: wide_string __out{ _M_wide_err_string.get_allocator() }; -23376: if (__str_codecvt_in(__first, __last, __out, *_M_cvt, _M_state, -23376: _M_count)) -23376: return __out; -23376: if (_M_with_strings) -23376: return _M_wide_err_string; -23376: __throw_range_error("wstring_convert::from_bytes"); -23376: } -23376: -23376: -23376: -23376: byte_string -23376: to_bytes(_Elem __wchar) -23376: { -23376: _Elem __wchars[2] = { __wchar }; -23376: return to_bytes(__wchars, __wchars+1); -23376: } -23376: -23376: byte_string -23376: to_bytes(const _Elem* __ptr) -23376: { -23376: return to_bytes(__ptr, __ptr+wide_string::traits_type::length(__ptr)); -23376: } -23376: -23376: byte_string -23376: to_bytes(const wide_string& __wstr) -23376: { -23376: auto __ptr = __wstr.data(); -23376: return to_bytes(__ptr, __ptr + __wstr.size()); -23376: } -23376: -23376: byte_string -23376: to_bytes(const _Elem* __first, const _Elem* __last) -23376: { -23376: if (!_M_with_cvtstate) -23376: _M_state = state_type(); -23376: byte_string __out{ _M_byte_err_string.get_allocator() }; -23376: if (__str_codecvt_out(__first, __last, __out, *_M_cvt, _M_state, -23376: _M_count)) -23376: return __out; -23376: if (_M_with_strings) -23376: return _M_byte_err_string; -23376: __throw_range_error("wstring_convert::to_bytes"); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: size_t converted() const noexcept { return _M_count; } -23376: -23376: -23376: state_type state() const { return _M_state; } -23376: -23376: private: -23376: unique_ptr<_Codecvt> _M_cvt; -23376: byte_string _M_byte_err_string; -23376: wide_string _M_wide_err_string; -23376: state_type _M_state = state_type(); -23376: size_t _M_count = 0; -23376: bool _M_with_cvtstate = false; -23376: bool _M_with_strings = false; -23376: }; -23376: -23376: } -23376: -23376: -23376: template> -23376: class wbuffer_convert : public basic_streambuf<_Elem, _Tr> -23376: { -23376: typedef basic_streambuf<_Elem, _Tr> _Wide_streambuf; -23376: -23376: public: -23376: typedef typename _Codecvt::state_type state_type; -23376: # 336 "/usr/include/c++/8/bits/locale_conv.h" 3 -23376: explicit -23376: wbuffer_convert(streambuf* __bytebuf = 0, _Codecvt* __pcvt = new _Codecvt, -23376: state_type __state = state_type()) -23376: : _M_buf(__bytebuf), _M_cvt(__pcvt), _M_state(__state) -23376: { -23376: if (!_M_cvt) -23376: __throw_logic_error("wbuffer_convert"); -23376: -23376: _M_always_noconv = _M_cvt->always_noconv(); -23376: -23376: if (_M_buf) -23376: { -23376: this->setp(_M_put_area, _M_put_area + _S_buffer_length); -23376: this->setg(_M_get_area + _S_putback_length, -23376: _M_get_area + _S_putback_length, -23376: _M_get_area + _S_putback_length); -23376: } -23376: } -23376: -23376: ~wbuffer_convert() = default; -23376: -23376: -23376: -23376: wbuffer_convert(const wbuffer_convert&) = delete; -23376: wbuffer_convert& operator=(const wbuffer_convert&) = delete; -23376: -23376: streambuf* rdbuf() const noexcept { return _M_buf; } -23376: -23376: streambuf* -23376: rdbuf(streambuf *__bytebuf) noexcept -23376: { -23376: auto __prev = _M_buf; -23376: _M_buf = __bytebuf; -23376: return __prev; -23376: } -23376: -23376: -23376: state_type state() const noexcept { return _M_state; } -23376: -23376: protected: -23376: int -23376: sync() -23376: { return _M_buf && _M_conv_put() && !_M_buf->pubsync() ? 0 : -1; } -23376: -23376: typename _Wide_streambuf::int_type -23376: overflow(typename _Wide_streambuf::int_type __out) -23376: { -23376: if (!_M_buf || !_M_conv_put()) -23376: return _Tr::eof(); -23376: else if (!_Tr::eq_int_type(__out, _Tr::eof())) -23376: return this->sputc(__out); -23376: return _Tr::not_eof(__out); -23376: } -23376: -23376: typename _Wide_streambuf::int_type -23376: underflow() -23376: { -23376: if (!_M_buf) -23376: return _Tr::eof(); -23376: -23376: if (this->gptr() < this->egptr() || (_M_buf && _M_conv_get())) -23376: return _Tr::to_int_type(*this->gptr()); -23376: else -23376: return _Tr::eof(); -23376: } -23376: -23376: streamsize -23376: xsputn(const typename _Wide_streambuf::char_type* __s, streamsize __n) -23376: { -23376: if (!_M_buf || __n == 0) -23376: return 0; -23376: streamsize __done = 0; -23376: do -23376: { -23376: auto __nn = std::min(this->epptr() - this->pptr(), -23376: __n - __done); -23376: _Tr::copy(this->pptr(), __s + __done, __nn); -23376: this->pbump(__nn); -23376: __done += __nn; -23376: } while (__done < __n && _M_conv_put()); -23376: return __done; -23376: } -23376: -23376: private: -23376: -23376: bool -23376: _M_conv_get() -23376: { -23376: const streamsize __pb1 = this->gptr() - this->eback(); -23376: const streamsize __pb2 = _S_putback_length; -23376: const streamsize __npb = std::min(__pb1, __pb2); -23376: -23376: _Tr::move(_M_get_area + _S_putback_length - __npb, -23376: this->gptr() - __npb, __npb); -23376: -23376: streamsize __nbytes = sizeof(_M_get_buf) - _M_unconv; -23376: __nbytes = std::min(__nbytes, _M_buf->in_avail()); -23376: if (__nbytes < 1) -23376: __nbytes = 1; -23376: __nbytes = _M_buf->sgetn(_M_get_buf + _M_unconv, __nbytes); -23376: if (__nbytes < 1) -23376: return false; -23376: __nbytes += _M_unconv; -23376: -23376: -23376: -23376: _Elem* __outbuf = _M_get_area + _S_putback_length; -23376: _Elem* __outnext = __outbuf; -23376: const char* __bnext = _M_get_buf; -23376: -23376: codecvt_base::result __result; -23376: if (_M_always_noconv) -23376: __result = codecvt_base::noconv; -23376: else -23376: { -23376: _Elem* __outend = _M_get_area + _S_buffer_length; -23376: -23376: __result = _M_cvt->in(_M_state, -23376: __bnext, __bnext + __nbytes, __bnext, -23376: __outbuf, __outend, __outnext); -23376: } -23376: -23376: if (__result == codecvt_base::noconv) -23376: { -23376: -23376: auto __get_buf = reinterpret_cast(_M_get_buf); -23376: _Tr::copy(__outbuf, __get_buf, __nbytes); -23376: _M_unconv = 0; -23376: return true; -23376: } -23376: -23376: if ((_M_unconv = _M_get_buf + __nbytes - __bnext)) -23376: char_traits::move(_M_get_buf, __bnext, _M_unconv); -23376: -23376: this->setg(__outbuf, __outbuf, __outnext); -23376: -23376: return __result != codecvt_base::error; -23376: } -23376: -23376: -23376: bool -23376: _M_put(...) -23376: { return false; } -23376: -23376: bool -23376: _M_put(const char* __p, streamsize __n) -23376: { -23376: if (_M_buf->sputn(__p, __n) < __n) -23376: return false; -23376: return true; -23376: } -23376: -23376: -23376: bool -23376: _M_conv_put() -23376: { -23376: _Elem* const __first = this->pbase(); -23376: const _Elem* const __last = this->pptr(); -23376: const streamsize __pending = __last - __first; -23376: -23376: if (_M_always_noconv) -23376: return _M_put(__first, __pending); -23376: -23376: char __outbuf[2 * _S_buffer_length]; -23376: -23376: const _Elem* __next = __first; -23376: const _Elem* __start; -23376: do -23376: { -23376: __start = __next; -23376: char* __outnext = __outbuf; -23376: char* const __outlast = __outbuf + sizeof(__outbuf); -23376: auto __result = _M_cvt->out(_M_state, __next, __last, __next, -23376: __outnext, __outlast, __outnext); -23376: if (__result == codecvt_base::error) -23376: return false; -23376: else if (__result == codecvt_base::noconv) -23376: return _M_put(__next, __pending); -23376: -23376: if (!_M_put(__outbuf, __outnext - __outbuf)) -23376: return false; -23376: } -23376: while (__next != __last && __next != __start); -23376: -23376: if (__next != __last) -23376: _Tr::move(__first, __next, __last - __next); -23376: -23376: this->pbump(__first - __next); -23376: return __next != __first; -23376: } -23376: -23376: streambuf* _M_buf; -23376: unique_ptr<_Codecvt> _M_cvt; -23376: state_type _M_state; -23376: -23376: static const streamsize _S_buffer_length = 32; -23376: static const streamsize _S_putback_length = 3; -23376: _Elem _M_put_area[_S_buffer_length]; -23376: _Elem _M_get_area[_S_buffer_length]; -23376: streamsize _M_unconv = 0; -23376: char _M_get_buf[_S_buffer_length-_S_putback_length]; -23376: bool _M_always_noconv; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 44 "/usr/include/c++/8/locale" 2 3 -23376: # 44 "/usr/include/c++/8/iomanip" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/quoted_string.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/quoted_string.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/quoted_string.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: namespace __detail { -23376: -23376: -23376: -23376: template -23376: struct _Quoted_string -23376: { -23376: static_assert(is_reference<_String>::value -23376: || is_pointer<_String>::value, -23376: "String type must be pointer or reference"); -23376: -23376: _Quoted_string(_String __str, _CharT __del, _CharT __esc) -23376: : _M_string(__str), _M_delim{__del}, _M_escape{__esc} -23376: { } -23376: -23376: _Quoted_string& -23376: operator=(_Quoted_string&) = delete; -23376: -23376: _String _M_string; -23376: _CharT _M_delim; -23376: _CharT _M_escape; -23376: }; -23376: # 91 "/usr/include/c++/8/bits/quoted_string.h" 3 -23376: template -23376: std::basic_ostream<_CharT, _Traits>& -23376: operator<<(std::basic_ostream<_CharT, _Traits>& __os, -23376: const _Quoted_string& __str) -23376: { -23376: std::basic_ostringstream<_CharT, _Traits> __ostr; -23376: __ostr << __str._M_delim; -23376: for (const _CharT* __c = __str._M_string; *__c; ++__c) -23376: { -23376: if (*__c == __str._M_delim || *__c == __str._M_escape) -23376: __ostr << __str._M_escape; -23376: __ostr << *__c; -23376: } -23376: __ostr << __str._M_delim; -23376: -23376: return __os << __ostr.str(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: std::basic_ostream<_CharT, _Traits>& -23376: operator<<(std::basic_ostream<_CharT, _Traits>& __os, -23376: const _Quoted_string<_String, _CharT>& __str) -23376: { -23376: std::basic_ostringstream<_CharT, _Traits> __ostr; -23376: __ostr << __str._M_delim; -23376: for (auto __c : __str._M_string) -23376: { -23376: if (__c == __str._M_delim || __c == __str._M_escape) -23376: __ostr << __str._M_escape; -23376: __ostr << __c; -23376: } -23376: __ostr << __str._M_delim; -23376: -23376: return __os << __ostr.str(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: std::basic_istream<_CharT, _Traits>& -23376: operator>>(std::basic_istream<_CharT, _Traits>& __is, -23376: const _Quoted_string&, -23376: _CharT>& __str) -23376: { -23376: _CharT __c; -23376: __is >> __c; -23376: if (!__is.good()) -23376: return __is; -23376: if (__c != __str._M_delim) -23376: { -23376: __is.unget(); -23376: __is >> __str._M_string; -23376: return __is; -23376: } -23376: __str._M_string.clear(); -23376: std::ios_base::fmtflags __flags -23376: = __is.flags(__is.flags() & ~std::ios_base::skipws); -23376: do -23376: { -23376: __is >> __c; -23376: if (!__is.good()) -23376: break; -23376: if (__c == __str._M_escape) -23376: { -23376: __is >> __c; -23376: if (!__is.good()) -23376: break; -23376: } -23376: else if (__c == __str._M_delim) -23376: break; -23376: __str._M_string += __c; -23376: } -23376: while (true); -23376: __is.setf(__flags); -23376: -23376: return __is; -23376: } -23376: } -23376: -23376: -23376: } -23376: # 46 "/usr/include/c++/8/iomanip" 2 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: struct _Resetiosflags { ios_base::fmtflags _M_mask; }; -23376: # 65 "/usr/include/c++/8/iomanip" 3 -23376: inline _Resetiosflags -23376: resetiosflags(ios_base::fmtflags __mask) -23376: { return { __mask }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f) -23376: { -23376: __is.setf(ios_base::fmtflags(0), __f._M_mask); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f) -23376: { -23376: __os.setf(ios_base::fmtflags(0), __f._M_mask); -23376: return __os; -23376: } -23376: -23376: -23376: struct _Setiosflags { ios_base::fmtflags _M_mask; }; -23376: # 95 "/usr/include/c++/8/iomanip" 3 -23376: inline _Setiosflags -23376: setiosflags(ios_base::fmtflags __mask) -23376: { return { __mask }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f) -23376: { -23376: __is.setf(__f._M_mask); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f) -23376: { -23376: __os.setf(__f._M_mask); -23376: return __os; -23376: } -23376: -23376: -23376: struct _Setbase { int _M_base; }; -23376: # 126 "/usr/include/c++/8/iomanip" 3 -23376: inline _Setbase -23376: setbase(int __base) -23376: { return { __base }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f) -23376: { -23376: __is.setf(__f._M_base == 8 ? ios_base::oct : -23376: __f._M_base == 10 ? ios_base::dec : -23376: __f._M_base == 16 ? ios_base::hex : -23376: ios_base::fmtflags(0), ios_base::basefield); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f) -23376: { -23376: __os.setf(__f._M_base == 8 ? ios_base::oct : -23376: __f._M_base == 10 ? ios_base::dec : -23376: __f._M_base == 16 ? ios_base::hex : -23376: ios_base::fmtflags(0), ios_base::basefield); -23376: return __os; -23376: } -23376: -23376: -23376: template -23376: struct _Setfill { _CharT _M_c; }; -23376: # 163 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline _Setfill<_CharT> -23376: setfill(_CharT __c) -23376: { return { __c }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f) -23376: { -23376: __is.fill(__f._M_c); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f) -23376: { -23376: __os.fill(__f._M_c); -23376: return __os; -23376: } -23376: -23376: -23376: struct _Setprecision { int _M_n; }; -23376: # 194 "/usr/include/c++/8/iomanip" 3 -23376: inline _Setprecision -23376: setprecision(int __n) -23376: { return { __n }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f) -23376: { -23376: __is.precision(__f._M_n); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f) -23376: { -23376: __os.precision(__f._M_n); -23376: return __os; -23376: } -23376: -23376: -23376: struct _Setw { int _M_n; }; -23376: # 224 "/usr/include/c++/8/iomanip" 3 -23376: inline _Setw -23376: setw(int __n) -23376: { return { __n }; } -23376: -23376: template -23376: inline basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f) -23376: { -23376: __is.width(__f._M_n); -23376: return __is; -23376: } -23376: -23376: template -23376: inline basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f) -23376: { -23376: __os.width(__f._M_n); -23376: return __os; -23376: } -23376: -23376: -23376: -23376: template -23376: struct _Get_money { _MoneyT& _M_mon; bool _M_intl; }; -23376: # 257 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline _Get_money<_MoneyT> -23376: get_money(_MoneyT& __mon, bool __intl = false) -23376: { return { __mon, __intl }; } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f) -23376: { -23376: typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: typedef istreambuf_iterator<_CharT, _Traits> _Iter; -23376: typedef money_get<_CharT, _Iter> _MoneyGet; -23376: -23376: const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc()); -23376: __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl, -23376: __is, __err, __f._M_mon); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __is._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __is._M_setstate(ios_base::badbit); } -23376: if (__err) -23376: __is.setstate(__err); -23376: } -23376: return __is; -23376: } -23376: -23376: -23376: template -23376: struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; }; -23376: # 304 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline _Put_money<_MoneyT> -23376: put_money(const _MoneyT& __mon, bool __intl = false) -23376: { return { __mon, __intl }; } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f) -23376: { -23376: typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: typedef ostreambuf_iterator<_CharT, _Traits> _Iter; -23376: typedef money_put<_CharT, _Iter> _MoneyPut; -23376: -23376: const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc()); -23376: if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os, -23376: __os.fill(), __f._M_mon).failed()) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __os._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __os._M_setstate(ios_base::badbit); } -23376: if (__err) -23376: __os.setstate(__err); -23376: } -23376: return __os; -23376: } -23376: -23376: template -23376: struct _Put_time -23376: { -23376: const std::tm* _M_tmb; -23376: const _CharT* _M_fmt; -23376: }; -23376: # 356 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline _Put_time<_CharT> -23376: put_time(const std::tm* __tmb, const _CharT* __fmt) -23376: { return { __tmb, __fmt }; } -23376: -23376: template -23376: basic_ostream<_CharT, _Traits>& -23376: operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_time<_CharT> __f) -23376: { -23376: typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: typedef ostreambuf_iterator<_CharT, _Traits> _Iter; -23376: typedef time_put<_CharT, _Iter> _TimePut; -23376: -23376: const _CharT* const __fmt_end = __f._M_fmt + -23376: _Traits::length(__f._M_fmt); -23376: -23376: const _TimePut& __mp = use_facet<_TimePut>(__os.getloc()); -23376: if (__mp.put(_Iter(__os.rdbuf()), __os, __os.fill(), -23376: __f._M_tmb, __f._M_fmt, __fmt_end).failed()) -23376: __err |= ios_base::badbit; -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __os._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __os._M_setstate(ios_base::badbit); } -23376: if (__err) -23376: __os.setstate(__err); -23376: } -23376: return __os; -23376: } -23376: -23376: template -23376: struct _Get_time -23376: { -23376: std::tm* _M_tmb; -23376: const _CharT* _M_fmt; -23376: }; -23376: # 411 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline _Get_time<_CharT> -23376: get_time(std::tm* __tmb, const _CharT* __fmt) -23376: { return { __tmb, __fmt }; } -23376: -23376: template -23376: basic_istream<_CharT, _Traits>& -23376: operator>>(basic_istream<_CharT, _Traits>& __is, _Get_time<_CharT> __f) -23376: { -23376: typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false); -23376: if (__cerb) -23376: { -23376: ios_base::iostate __err = ios_base::goodbit; -23376: try -23376: { -23376: typedef istreambuf_iterator<_CharT, _Traits> _Iter; -23376: typedef time_get<_CharT, _Iter> _TimeGet; -23376: -23376: const _CharT* const __fmt_end = __f._M_fmt + -23376: _Traits::length(__f._M_fmt); -23376: -23376: const _TimeGet& __mg = use_facet<_TimeGet>(__is.getloc()); -23376: __mg.get(_Iter(__is.rdbuf()), _Iter(), __is, -23376: __err, __f._M_tmb, __f._M_fmt, __fmt_end); -23376: } -23376: catch(__cxxabiv1::__forced_unwind&) -23376: { -23376: __is._M_setstate(ios_base::badbit); -23376: throw; -23376: } -23376: catch(...) -23376: { __is._M_setstate(ios_base::badbit); } -23376: if (__err) -23376: __is.setstate(__err); -23376: } -23376: return __is; -23376: } -23376: # 459 "/usr/include/c++/8/iomanip" 3 -23376: template -23376: inline auto -23376: quoted(const _CharT* __string, -23376: _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) -23376: { -23376: return __detail::_Quoted_string(__string, __delim, -23376: __escape); -23376: } -23376: -23376: template -23376: inline auto -23376: quoted(const basic_string<_CharT, _Traits, _Alloc>& __string, -23376: _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) -23376: { -23376: return __detail::_Quoted_string< -23376: const basic_string<_CharT, _Traits, _Alloc>&, _CharT>( -23376: __string, __delim, __escape); -23376: } -23376: -23376: template -23376: inline auto -23376: quoted(basic_string<_CharT, _Traits, _Alloc>& __string, -23376: _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\')) -23376: { -23376: return __detail::_Quoted_string< -23376: basic_string<_CharT, _Traits, _Alloc>&, _CharT>( -23376: __string, __delim, __escape); -23376: } -23376: # 508 "/usr/include/c++/8/iomanip" 3 -23376: extern template ostream& operator<<(ostream&, _Setfill); -23376: extern template ostream& operator<<(ostream&, _Setiosflags); -23376: extern template ostream& operator<<(ostream&, _Resetiosflags); -23376: extern template ostream& operator<<(ostream&, _Setbase); -23376: extern template ostream& operator<<(ostream&, _Setprecision); -23376: extern template ostream& operator<<(ostream&, _Setw); -23376: extern template istream& operator>>(istream&, _Setfill); -23376: extern template istream& operator>>(istream&, _Setiosflags); -23376: extern template istream& operator>>(istream&, _Resetiosflags); -23376: extern template istream& operator>>(istream&, _Setbase); -23376: extern template istream& operator>>(istream&, _Setprecision); -23376: extern template istream& operator>>(istream&, _Setw); -23376: -23376: -23376: extern template wostream& operator<<(wostream&, _Setfill); -23376: extern template wostream& operator<<(wostream&, _Setiosflags); -23376: extern template wostream& operator<<(wostream&, _Resetiosflags); -23376: extern template wostream& operator<<(wostream&, _Setbase); -23376: extern template wostream& operator<<(wostream&, _Setprecision); -23376: extern template wostream& operator<<(wostream&, _Setw); -23376: extern template wistream& operator>>(wistream&, _Setfill); -23376: extern template wistream& operator>>(wistream&, _Setiosflags); -23376: extern template wistream& operator>>(wistream&, _Resetiosflags); -23376: extern template wistream& operator>>(wistream&, _Setbase); -23376: extern template wistream& operator>>(wistream&, _Setprecision); -23376: extern template wistream& operator>>(wistream&, _Setw); -23376: -23376: -23376: -23376: -23376: } -23376: # 29 "../../src/Checked_Number_templates.hh" 2 -23376: -23376: -23376: -23376: # 31 "../../src/Checked_Number_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: ascii_dump(std::ostream& s, const T& t) { -23376: if (std::numeric_limits::is_exact) { -23376: -23376: s << t; -23376: } -23376: else { -23376: -23376: -23376: const std::ios::fmtflags old_flags = s.setf(std::ios::hex, -23376: std::ios::basefield); -23376: const unsigned char* p = reinterpret_cast(&t); -23376: for (unsigned i = 0; i < sizeof(T); ++i) { -23376: s << std::setw(2) << std::setfill('0') << static_cast(p[i]); -23376: } -23376: s.flags(old_flags); -23376: -23376: s << " (" << t << ")"; -23376: } -23376: } -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: ascii_load(std::istream& s, T& t) { -23376: if (std::numeric_limits::is_exact) { -23376: -23376: s >> t; -23376: return !s.fail(); -23376: } -23376: else { -23376: -23376: -23376: std::string str; -23376: if (!(s >> str) || str.size() != 2*sizeof(T)) { -23376: return false; -23376: } -23376: unsigned char* p = reinterpret_cast(&t); -23376: -23376: for (unsigned i = 0; i < sizeof(T); ++i) { -23376: unsigned byte_value = 0; -23376: for (unsigned j = 0; j < 2; ++j) { -23376: byte_value <<= 4; -23376: unsigned half_byte_value; -23376: -23376: switch (str[2*i + j]) { -23376: case '0': -23376: half_byte_value = 0; -23376: break; -23376: case '1': -23376: half_byte_value = 1; -23376: break; -23376: case '2': -23376: half_byte_value = 2; -23376: break; -23376: case '3': -23376: half_byte_value = 3; -23376: break; -23376: case '4': -23376: half_byte_value = 4; -23376: break; -23376: case '5': -23376: half_byte_value = 5; -23376: break; -23376: case '6': -23376: half_byte_value = 6; -23376: break; -23376: case '7': -23376: half_byte_value = 7; -23376: break; -23376: case '8': -23376: half_byte_value = 8; -23376: break; -23376: case '9': -23376: half_byte_value = 9; -23376: break; -23376: case 'A': -23376: case 'a': -23376: half_byte_value = 10; -23376: break; -23376: case 'B': -23376: case 'b': -23376: half_byte_value = 11; -23376: break; -23376: case 'C': -23376: case 'c': -23376: half_byte_value = 12; -23376: break; -23376: case 'D': -23376: case 'd': -23376: half_byte_value = 13; -23376: break; -23376: case 'E': -23376: case 'e': -23376: half_byte_value = 14; -23376: break; -23376: case 'F': -23376: case 'f': -23376: half_byte_value = 15; -23376: break; -23376: default: -23376: return false; -23376: } -23376: byte_value += half_byte_value; -23376: } -23376: ((void) 0); -23376: p[i] = static_cast(byte_value); -23376: } -23376: -23376: if (!(s >> str)) { -23376: return false; -23376: } -23376: const std::string::size_type sz = str.size(); -23376: return sz > 2 && str[0] == '(' && str[sz-1] == ')'; -23376: } -23376: } -23376: -23376: } -23376: # 1069 "../../src/Checked_Number_defs.hh" 2 -23376: # 28 "../../src/checked_numeric_limits.hh" 2 -23376: -23376: -23376: -23376: namespace std { -23376: -23376: using namespace Parma_Polyhedra_Library; -23376: # 74 "../../src/checked_numeric_limits.hh" -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: template class numeric_limits > : public numeric_limits { private: typedef Checked_Number Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int::max; return v; } static Type infinity() { Type v; Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } }; -23376: # 112 "../../src/checked_numeric_limits.hh" -23376: template -23376: class -23376: numeric_limits > -23376: : public numeric_limits { -23376: private: -23376: typedef Checked_Number Type; -23376: -23376: public: -23376: static const bool has_infinity = Policy::has_infinity; -23376: static const bool has_quiet_NaN = Policy::has_nan; -23376: -23376: static Type infinity() { -23376: Type v; -23376: Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, -23376: ROUND_IGNORE); -23376: return v; -23376: } -23376: -23376: static Type quiet_NaN() { -23376: Type v; -23376: Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); -23376: return v; -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class -23376: numeric_limits > -23376: : public numeric_limits { -23376: private: -23376: typedef Checked_Number Type; -23376: -23376: public: -23376: static const bool has_infinity = Policy::has_infinity; -23376: static const bool has_quiet_NaN = Policy::has_nan; -23376: -23376: static Type infinity() { -23376: Type v; -23376: Checked::assign_special(v.raw_value(), VC_PLUS_INFINITY, -23376: ROUND_IGNORE); -23376: return v; -23376: } -23376: -23376: static Type quiet_NaN() { -23376: Type v; -23376: Checked::assign_special(v.raw_value(), VC_NAN, ROUND_IGNORE); -23376: return v; -23376: } -23376: }; -23376: -23376: } -23376: # 4 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/stdiobuf_defs.hh" 1 -23376: # 27 "../../src/stdiobuf_defs.hh" -23376: # 1 "../../src/stdiobuf_types.hh" 1 -23376: # 16 "../../src/stdiobuf_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class stdiobuf; -23376: -23376: } -23376: # 28 "../../src/stdiobuf_defs.hh" 2 -23376: # 1 "/usr/include/c++/8/cstdio" 1 3 -23376: # 39 "/usr/include/c++/8/cstdio" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdio" 3 -23376: # 29 "../../src/stdiobuf_defs.hh" 2 -23376: -23376: -23376: class Parma_Polyhedra_Library::stdiobuf -23376: : public std::basic_streambuf > { -23376: public: -23376: -23376: stdiobuf(FILE* file); -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type underflow(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type uflow(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual std::streamsize xsgetn(char_type* s, std::streamsize n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type pbackfail(int_type c = traits_type::eof()); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual std::streamsize xsputn(const char_type* s, std::streamsize n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type overflow(int_type c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int sync(); -23376: -23376: private: -23376: -23376: typedef char char_type; -23376: -23376: -23376: typedef std::char_traits traits_type; -23376: -23376: -23376: typedef traits_type::int_type int_type; -23376: -23376: -23376: FILE* fp; -23376: -23376: -23376: int_type unget_char_buf; -23376: }; -23376: -23376: # 1 "../../src/stdiobuf_inlines.hh" 1 -23376: # 27 "../../src/stdiobuf_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: stdiobuf::stdiobuf(FILE* file) -23376: : fp(file), unget_char_buf(traits_type::eof()) { -23376: } -23376: -23376: } -23376: # 110 "../../src/stdiobuf_defs.hh" 2 -23376: # 5 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/c_streambuf_defs.hh" 1 -23376: # 27 "../../src/c_streambuf_defs.hh" -23376: # 1 "../../src/c_streambuf_types.hh" 1 -23376: # 16 "../../src/c_streambuf_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class c_streambuf; -23376: -23376: } -23376: # 28 "../../src/c_streambuf_defs.hh" 2 -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::c_streambuf -23376: : public std::basic_streambuf > { -23376: public: -23376: -23376: c_streambuf(); -23376: -23376: -23376: virtual ~c_streambuf(); -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type underflow(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type uflow(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual std::streamsize xsgetn(char_type* s, std::streamsize n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type pbackfail(int_type c = traits_type::eof()); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual std::streamsize xsputn(const char_type* s, std::streamsize n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int_type overflow(int_type c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int sync(); -23376: -23376: private: -23376: -23376: typedef char char_type; -23376: -23376: -23376: typedef std::char_traits traits_type; -23376: -23376: -23376: typedef traits_type::int_type int_type; -23376: -23376: -23376: int_type unget_char_buf; -23376: -23376: -23376: int_type next_char_buf; -23376: -23376: virtual size_t cb_read(char *, size_t) { -23376: return 0; -23376: } -23376: virtual size_t cb_write(const char *, size_t) { -23376: return 0; -23376: } -23376: virtual int cb_sync() { -23376: return 0; -23376: } -23376: virtual int cb_flush() { -23376: return 0; -23376: } -23376: }; -23376: -23376: # 1 "../../src/c_streambuf_inlines.hh" 1 -23376: # 27 "../../src/c_streambuf_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: c_streambuf::c_streambuf() -23376: : unget_char_buf(traits_type::eof()), next_char_buf(traits_type::eof()) { -23376: } -23376: -23376: } -23376: # 126 "../../src/c_streambuf_defs.hh" 2 -23376: # 6 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/Integer_Interval.hh" 1 -23376: # 27 "../../src/Integer_Interval.hh" -23376: # 1 "../../src/Interval_defs.hh" 1 -23376: # 27 "../../src/Interval_defs.hh" -23376: # 1 "../../src/Interval_types.hh" 1 -23376: # 16 "../../src/Interval_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Interval; -23376: -23376: } -23376: # 28 "../../src/Interval_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/assign_or_swap.hh" 1 -23376: # 28 "../../src/assign_or_swap.hh" -23376: # 1 "../../src/Has_Assign_Or_Swap.hh" 1 -23376: # 29 "../../src/Has_Assign_Or_Swap.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Has_Assign_Or_Swap : public False { -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct Has_Assign_Or_Swap::type> -23376: : public True { -23376: }; -23376: -23376: } -23376: # 29 "../../src/assign_or_swap.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value, void>::type -23376: assign_or_swap(T& to, T& from) { -23376: to.assign_or_swap(from); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && !Slow_Copy::value, void>::type -23376: assign_or_swap(T& to, T& from) { -23376: to = from; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename Enable_If::value -23376: && Slow_Copy::value, void>::type -23376: assign_or_swap(T& to, T& from) { -23376: using std::swap; -23376: swap(to, from); -23376: } -23376: -23376: } -23376: # 31 "../../src/Interval_defs.hh" 2 -23376: # 1 "../../src/intervals_defs.hh" 1 -23376: # 29 "../../src/intervals_defs.hh" -23376: # 1 "/usr/include/c++/8/cstdlib" 1 3 -23376: # 39 "/usr/include/c++/8/cstdlib" 3 -23376: -23376: # 40 "/usr/include/c++/8/cstdlib" 3 -23376: # 30 "../../src/intervals_defs.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: enum I_Result { -23376: -23376: -23376: -23376: I_EMPTY = 1U, -23376: -23376: -23376: -23376: I_SINGLETON = 2U, -23376: -23376: -23376: -23376: -23376: -23376: I_SOME = 4U, -23376: -23376: -23376: -23376: I_UNIVERSE = 8U, -23376: -23376: -23376: -23376: I_NOT_EMPTY = I_SINGLETON | I_SOME | I_UNIVERSE, -23376: -23376: -23376: -23376: I_ANY = I_EMPTY | I_NOT_EMPTY, -23376: -23376: -23376: -23376: I_NOT_UNIVERSE = I_EMPTY | I_SINGLETON | I_SOME, -23376: -23376: -23376: -23376: I_NOT_DEGENERATE = I_SINGLETON | I_SOME, -23376: -23376: -23376: -23376: I_EXACT = 16, -23376: -23376: -23376: -23376: I_INEXACT = 32, -23376: -23376: -23376: -23376: I_CHANGED = 64, -23376: -23376: -23376: -23376: I_UNCHANGED = 128, -23376: -23376: -23376: -23376: I_SINGULARITIES = 256 -23376: }; -23376: -23376: inline I_Result -23376: operator|(I_Result a, I_Result b) { -23376: return static_cast(static_cast(a) -23376: | static_cast(b)); -23376: } -23376: -23376: inline I_Result -23376: operator&(I_Result a, I_Result b) { -23376: return static_cast(static_cast(a) -23376: & static_cast(b)); -23376: } -23376: -23376: inline I_Result -23376: operator-(I_Result a, I_Result b) { -23376: return static_cast(static_cast(a) -23376: & ~static_cast(b)); -23376: } -23376: -23376: template -23376: struct Use_By_Ref; -23376: -23376: struct Use_Slow_Copy; -23376: template -23376: struct Use_By_Ref -23376: : public Bool::value> { -23376: }; -23376: -23376: struct By_Value; -23376: template -23376: struct Use_By_Ref -23376: : public False { -23376: }; -23376: -23376: struct By_Ref; -23376: template -23376: struct Use_By_Ref -23376: : public True { -23376: }; -23376: -23376: template -23376: class Val_Or_Ref; -23376: -23376: template -23376: class Val_Or_Ref::value>::type> { -23376: T value; -23376: public: -23376: typedef T Arg_Type; -23376: typedef T Return_Type; -23376: Val_Or_Ref() -23376: : value() { -23376: } -23376: explicit Val_Or_Ref(Arg_Type v, bool = false) -23376: : value(v) { -23376: } -23376: Val_Or_Ref& operator=(Arg_Type v) { -23376: value = v; -23376: return *this; -23376: } -23376: void set(Arg_Type v, bool = false) { -23376: value = v; -23376: } -23376: Return_Type get() const { -23376: return value; -23376: } -23376: operator Return_Type() const { -23376: return get(); -23376: } -23376: }; -23376: -23376: template -23376: class Val_Or_Ref::value>::type> { -23376: const T* ptr; -23376: public: -23376: typedef T& Arg_Type; -23376: typedef const T& Return_Type; -23376: Val_Or_Ref() -23376: : ptr(0) { -23376: } -23376: explicit Val_Or_Ref(Arg_Type v) -23376: : ptr(&v) { -23376: } -23376: Val_Or_Ref(const T& v, bool) -23376: : ptr(&v) { -23376: } -23376: Val_Or_Ref& operator=(Arg_Type v) { -23376: ptr = &v; -23376: return *this; -23376: } -23376: void set(Arg_Type v) { -23376: ptr = &v; -23376: } -23376: void set(const T& v, bool) { -23376: ptr = &v; -23376: } -23376: Return_Type get() const { -23376: return *ptr; -23376: } -23376: operator Return_Type() const { -23376: return get(); -23376: } -23376: }; -23376: -23376: class I_Constraint_Base { -23376: }; -23376: -23376: template -23376: class I_Constraint_Common : public I_Constraint_Base { -23376: public: -23376: template -23376: Result convert_real(T& to) const { -23376: const Derived& c = static_cast(*this); -23376: Result r = c.rel(); -23376: switch (r) { -23376: case V_EMPTY: -23376: case V_LGE: -23376: return r; -23376: case V_LE: -23376: r = assign_r(to, c.value(), (ROUND_UP | ROUND_STRICT_RELATION)); -23376: r = result_relation_class(r); -23376: if (r == V_EQ) { -23376: return V_LE; -23376: } -23376: goto lt; -23376: case V_LT: -23376: r = assign_r(to, c.value(), ROUND_UP); -23376: r = result_relation_class(r); -23376: lt: -23376: switch (r) { -23376: case V_EMPTY: -23376: case V_LT_PLUS_INFINITY: -23376: case V_EQ_MINUS_INFINITY: -23376: return r; -23376: case V_LT: -23376: case V_LE: -23376: case V_EQ: -23376: return V_LT; -23376: default: -23376: break; -23376: } -23376: break; -23376: case V_GE: -23376: r = assign_r(to, c.value(), (ROUND_DOWN | ROUND_STRICT_RELATION)); -23376: r = result_relation_class(r); -23376: if (r == V_EQ) { -23376: return V_GE; -23376: } -23376: goto gt; -23376: case V_GT: -23376: r = assign_r(to, c.value(), ROUND_DOWN); -23376: r = result_relation_class(r); -23376: gt: -23376: switch (r) { -23376: case V_EMPTY: -23376: case V_GT_MINUS_INFINITY: -23376: case V_EQ_PLUS_INFINITY: -23376: return r; -23376: case V_LT: -23376: case V_LE: -23376: case V_EQ: -23376: return V_GT; -23376: default: -23376: break; -23376: } -23376: break; -23376: case V_EQ: -23376: r = assign_r(to, c.value(), ROUND_CHECK); -23376: r = result_relation_class(r); -23376: ((void) 0); -23376: if (r == V_EQ) { -23376: return V_EQ; -23376: } -23376: else { -23376: return V_EMPTY; -23376: } -23376: case V_NE: -23376: r = assign_r(to, c.value(), ROUND_CHECK); -23376: r = result_relation_class(r); -23376: if (r == V_EQ) { -23376: return V_NE; -23376: } -23376: else { -23376: return V_LGE; -23376: } -23376: default: -23376: break; -23376: } -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_EMPTY; -23376: } -23376: template -23376: Result convert_real(T& to1, Result& rel2, T& to2) const { -23376: const Derived& c = static_cast(*this); -23376: Result rel1; -23376: if (c.rel() != V_EQ) { -23376: rel2 = convert(to2); -23376: return V_LGE; -23376: } -23376: rel2 = assign_r(to2, c.value(), ROUND_UP); -23376: rel2 = result_relation_class(rel2); -23376: switch (rel2) { -23376: case V_EMPTY: -23376: case V_EQ_MINUS_INFINITY: -23376: case V_EQ: -23376: return V_LGE; -23376: default: -23376: break; -23376: } -23376: rel1 = assign_r(to1, c.value(), ROUND_DOWN); -23376: rel1 = result_relation_class(rel1); -23376: switch (rel1) { -23376: case V_EQ: -23376: ((void) 0); -23376: goto eq; -23376: case V_EQ_PLUS_INFINITY: -23376: case V_EMPTY: -23376: rel2 = rel1; -23376: return V_LGE; -23376: case V_GE: -23376: if (rel2 == V_LE && to1 == to2) { -23376: eq: -23376: rel2 = V_EQ; -23376: return V_LGE; -23376: } -23376: -23376: case V_GT: -23376: case V_GT_MINUS_INFINITY: -23376: return rel1; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_EMPTY; -23376: } -23376: switch (rel2) { -23376: case V_LE: -23376: case V_LT: -23376: case V_LT_PLUS_INFINITY: -23376: return rel1; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_EMPTY; -23376: } -23376: } -23376: template -23376: Result convert_integer(T& to) const { -23376: Result rel = convert_real(to); -23376: switch (rel) { -23376: case V_LT: -23376: if (is_integer(to)) { -23376: rel = sub_assign_r(to, to, T(1), (ROUND_UP | ROUND_STRICT_RELATION)); -23376: rel = result_relation_class(rel); -23376: return (rel == V_EQ) ? V_LE : rel; -23376: } -23376: -23376: case V_LE: -23376: rel = floor_assign_r(to, to, ROUND_UP); -23376: rel = result_relation_class(rel); -23376: ((void) 0); -23376: return V_LE; -23376: case V_GT: -23376: if (is_integer(to)) { -23376: rel = add_assign_r(to, to, T(1), (ROUND_DOWN | ROUND_STRICT_RELATION)); -23376: rel = result_relation_class(rel); -23376: return (rel == V_EQ) ? V_GE : rel; -23376: } -23376: -23376: case V_GE: -23376: rel = ceil_assign_r(to, to, ROUND_DOWN); -23376: rel = result_relation_class(rel); -23376: ((void) 0); -23376: return V_GE; -23376: case V_EQ: -23376: if (is_integer(to)) { -23376: return V_EQ; -23376: } -23376: return V_EMPTY; -23376: case V_NE: -23376: if (is_integer(to)) { -23376: return V_NE; -23376: } -23376: return V_LGE; -23376: default: -23376: return rel; -23376: } -23376: } -23376: }; -23376: -23376: struct I_Constraint_Rel { -23376: Result rel; -23376: I_Constraint_Rel(Result r) -23376: : rel(r) { -23376: ((void) 0); -23376: } -23376: I_Constraint_Rel(Relation_Symbol r) -23376: : rel(static_cast(r)) { -23376: } -23376: operator Result() const { -23376: return rel; -23376: } -23376: }; -23376: -23376: template -23376: class I_Constraint -23376: : public I_Constraint_Common > { -23376: typedef Val_Or_Ref Val_Ref; -23376: typedef typename Val_Ref::Arg_Type Arg_Type; -23376: typedef typename Val_Ref::Return_Type Return_Type; -23376: Result rel_; -23376: Val_Ref value_; -23376: public: -23376: typedef T value_type; -23376: explicit I_Constraint() -23376: : rel_(V_LGE) { -23376: } -23376: I_Constraint(I_Constraint_Rel r, Arg_Type v) -23376: : rel_(r), value_(v) { -23376: } -23376: I_Constraint(I_Constraint_Rel r, const T& v, bool force) -23376: : rel_(r), value_(v, force) { -23376: } -23376: template -23376: I_Constraint(I_Constraint_Rel r, const U& v) -23376: : rel_(r), value_(v) { -23376: } -23376: void set(I_Constraint_Rel r, Arg_Type v) { -23376: rel_ = r; -23376: value_.set(v); -23376: } -23376: void set(I_Constraint_Rel r, const T& v, bool force) { -23376: rel_ = r; -23376: value_.set(v, force); -23376: } -23376: template -23376: void set(I_Constraint_Rel r, const U& v) { -23376: rel_ = r; -23376: value_.set(v); -23376: } -23376: Return_Type value() const { -23376: return value_; -23376: } -23376: Result rel() const { -23376: return rel_; -23376: } -23376: }; -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, const T& v) { -23376: return I_Constraint(rel, v); -23376: } -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, const T& v, bool force) { -23376: return I_Constraint(rel, v, force); -23376: } -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, T& v) { -23376: return I_Constraint(rel, v); -23376: } -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, const T& v, const Val_Or_Ref_Criteria&) { -23376: return I_Constraint(rel, v); -23376: } -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, const T& v, bool force, -23376: const Val_Or_Ref_Criteria&) { -23376: return I_Constraint(rel, v, force); -23376: } -23376: -23376: template -23376: inline I_Constraint -23376: i_constraint(I_Constraint_Rel rel, T& v, const Val_Or_Ref_Criteria&) { -23376: return I_Constraint(rel, v); -23376: } -23376: -23376: } -23376: # 32 "../../src/Interval_defs.hh" 2 -23376: # 1 "../../src/Interval_Info_defs.hh" 1 -23376: # 27 "../../src/Interval_Info_defs.hh" -23376: # 1 "../../src/Boundary_defs.hh" 1 -23376: # 29 "../../src/Boundary_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Boundary_NS { -23376: -23376: struct Property { -23376: enum Type { -23376: SPECIAL_, -23376: OPEN_ -23376: }; -23376: typedef bool Value; -23376: static const Value default_value = true; -23376: static const Value unsupported_value = false; -23376: Property(Type t) -23376: : type(t) { -23376: } -23376: Type type; -23376: }; -23376: -23376: static const Property SPECIAL(Property::SPECIAL_); -23376: static const Property OPEN(Property::OPEN_); -23376: -23376: enum Boundary_Type { -23376: LOWER = ROUND_DOWN, -23376: UPPER = ROUND_UP -23376: }; -23376: -23376: inline Rounding_Dir -23376: round_dir_check(Boundary_Type t, bool check = false) { -23376: if (check) { -23376: return static_cast(t) | ROUND_STRICT_RELATION; -23376: } -23376: else { -23376: return static_cast(t); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: special_set_boundary_infinity(Boundary_Type type, T&, Info& info) { -23376: ((void) 0); -23376: info.set_boundary_property(type, SPECIAL); -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline bool -23376: special_is_open(Boundary_Type, const T&, const Info&) { -23376: return !Info::may_contain_infinity; -23376: } -23376: -23376: template -23376: inline bool -23376: normal_is_open(Boundary_Type type, const T& x, const Info& info) { -23376: if (Info::store_open) { -23376: return info.get_boundary_property(type, OPEN); -23376: } -23376: else { -23376: return !Info::store_special && !Info::may_contain_infinity -23376: && normal_is_boundary_infinity(type, x, info); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_open(Boundary_Type type, const T& x, const Info& info) { -23376: if (Info::store_open) { -23376: return info.get_boundary_property(type, OPEN); -23376: } -23376: else { -23376: return !Info::may_contain_infinity -23376: && is_boundary_infinity(type, x, info); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: set_unbounded(Boundary_Type type, T& x, Info& info) { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_109 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(Info::store_special || std::numeric_limits::is_bounded || std::numeric_limits::has_infinity)>) } -23376: -23376: -23376: ; -23376: Result r; -23376: if (Info::store_special) { -23376: r = special_set_boundary_infinity(type, x, info); -23376: } -23376: else if (type == LOWER) { -23376: r = assign_r(x, MINUS_INFINITY, ROUND_UP); -23376: } -23376: else { -23376: r = assign_r(x, PLUS_INFINITY, ROUND_DOWN); -23376: } -23376: if (result_relation(r) == VR_EQ && !Info::may_contain_infinity) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: } -23376: -23376: template -23376: inline Result -23376: set_minus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) { -23376: if (open) { -23376: ((void) 0); -23376: } -23376: else { -23376: ((void) 0); -23376: } -23376: Result r; -23376: if (Info::store_special) { -23376: ((void) 0); -23376: r = special_set_boundary_infinity(type, x, info); -23376: } -23376: else { -23376: r = assign_r(x, MINUS_INFINITY, round_dir_check(type)); -23376: ((void) 0); -23376: } -23376: if (open || result_relation(r) != VR_EQ) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: } -23376: -23376: template -23376: inline Result -23376: set_plus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) { -23376: if (open) { -23376: ((void) 0); -23376: } -23376: else { -23376: ((void) 0); -23376: } -23376: Result r; -23376: if (Info::store_special) { -23376: ((void) 0); -23376: r = special_set_boundary_infinity(type, x, info); -23376: } -23376: else { -23376: r = assign_r(x, PLUS_INFINITY, round_dir_check(type)); -23376: ((void) 0); -23376: } -23376: if (open || result_relation(r) != VR_EQ) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: } -23376: -23376: template -23376: inline Result -23376: set_boundary_infinity(Boundary_Type type, T& x, Info& info, bool open = false) { -23376: ((void) 0); -23376: Result r; -23376: if (Info::store_special) { -23376: r = special_set_boundary_infinity(type, x, info); -23376: } -23376: else if (type == LOWER) { -23376: r = assign_r(x, MINUS_INFINITY, round_dir_check(type)); -23376: } -23376: else { -23376: r = assign_r(x, PLUS_INFINITY, round_dir_check(type)); -23376: } -23376: ((void) 0); -23376: if (open) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: } -23376: -23376: template -23376: inline bool -23376: is_domain_inf(Boundary_Type type, const T& x, const Info& info) { -23376: if (Info::store_special && type == LOWER) { -23376: return info.get_boundary_property(type, SPECIAL); -23376: } -23376: else if (std::numeric_limits::has_infinity) { -23376: return Parma_Polyhedra_Library::is_minus_infinity(x); -23376: } -23376: else if (std::numeric_limits::is_bounded) { -23376: return x == std::numeric_limits::min(); -23376: } -23376: else { -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_domain_sup(Boundary_Type type, const T& x, const Info& info) { -23376: if (Info::store_special && type == UPPER) { -23376: return info.get_boundary_property(type, SPECIAL); -23376: } -23376: else if (std::numeric_limits::has_infinity) { -23376: return Parma_Polyhedra_Library::is_plus_infinity(x); -23376: } -23376: else if (std::numeric_limits::is_bounded) { -23376: return x == std::numeric_limits::max(); -23376: } -23376: else { -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: normal_is_boundary_infinity(Boundary_Type type, const T& x, const Info&) { -23376: if (!std::numeric_limits::has_infinity) { -23376: return false; -23376: } -23376: if (type == LOWER) { -23376: return Parma_Polyhedra_Library::is_minus_infinity(x); -23376: } -23376: else { -23376: return Parma_Polyhedra_Library::is_plus_infinity(x); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_boundary_infinity(Boundary_Type type, const T& x, const Info& info) { -23376: if (Info::store_special) { -23376: return info.get_boundary_property(type, SPECIAL); -23376: } -23376: else { -23376: return normal_is_boundary_infinity(type, x, info); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: normal_is_reverse_infinity(Boundary_Type type, const T& x, const Info&) { -23376: if (!Info::may_contain_infinity) { -23376: return false; -23376: } -23376: else if (type == LOWER) { -23376: return Parma_Polyhedra_Library::is_plus_infinity(x); -23376: } -23376: else { -23376: return Parma_Polyhedra_Library::is_minus_infinity(x); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_minus_infinity(Boundary_Type type, const T& x, const Info& info) { -23376: if (type == LOWER) { -23376: if (Info::store_special) { -23376: return info.get_boundary_property(type, SPECIAL); -23376: } -23376: else { -23376: return normal_is_boundary_infinity(type, x, info); -23376: } -23376: } -23376: else { -23376: return !Info::store_special && normal_is_reverse_infinity(type, x, info); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_plus_infinity(Boundary_Type type, const T& x, const Info& info) { -23376: if (type == UPPER) { -23376: if (Info::store_special) { -23376: return info.get_boundary_property(type, SPECIAL); -23376: } -23376: else { -23376: return normal_is_boundary_infinity(type, x, info); -23376: } -23376: } -23376: else { -23376: return !Info::store_special && normal_is_reverse_infinity(type, x, info); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_reverse_infinity(Boundary_Type type, const T& x, const Info& info) { -23376: return normal_is_reverse_infinity(type, x, info); -23376: } -23376: -23376: template -23376: inline int -23376: infinity_sign(Boundary_Type type, const T& x, const Info& info) { -23376: if (is_boundary_infinity(type, x, info)) { -23376: return (type == LOWER) ? -1 : 1; -23376: } -23376: else if (is_reverse_infinity(type, x, info)) { -23376: return (type == UPPER) ? -1 : 1; -23376: } -23376: else { -23376: return 0; -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: is_boundary_infinity_closed(Boundary_Type type, const T& x, const Info& info) { -23376: return Info::may_contain_infinity -23376: && !info.get_boundary_property(type, OPEN) -23376: && is_boundary_infinity(type, x, info); -23376: } -23376: -23376: template -23376: inline bool -23376: boundary_infinity_is_open(Boundary_Type type, const Info& info) { -23376: return !Info::may_contain_infinity -23376: || info.get_boundary_property(type, OPEN); -23376: } -23376: -23376: template -23376: inline int -23376: sgn_b(Boundary_Type type, const T& x, const Info& info) { -23376: if (info.get_boundary_property(type, SPECIAL)) { -23376: return (type == LOWER) ? -1 : 1; -23376: } -23376: else { -23376: -23376: -23376: return Parma_Polyhedra_Library::sgn(x); -23376: } -23376: } -23376: -23376: template -23376: inline int -23376: sgn(Boundary_Type type, const T& x, const Info& info) { -23376: int sign = sgn_b(type, x, info); -23376: if (x == 0 && info.get_boundary_property(type, OPEN)) { -23376: return (type == LOWER) ? -1 : 1; -23376: } -23376: else { -23376: return sign; -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: eq(Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: if (type1 == type2) { -23376: if (is_open(type1, x1, info1) -23376: != is_open(type2, x2, info2)) { -23376: return false; -23376: } -23376: } -23376: else if (is_open(type1, x1, info1) -23376: || is_open(type2, x2, info2)) { -23376: return false; -23376: } -23376: if (is_minus_infinity(type1, x1, info1)) { -23376: return is_minus_infinity(type2, x2, info2); -23376: } -23376: else if (is_plus_infinity(type1, x1, info1)) { -23376: return is_plus_infinity(type2, x2, info2); -23376: } -23376: else if (is_minus_infinity(type2, x2, info2) -23376: || is_plus_infinity(type2, x2, info2)) { -23376: return false; -23376: } -23376: else { -23376: return equal(x1, x2); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: lt(Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: if (is_open(type1, x1, info1)) { -23376: if (type1 == UPPER -23376: && (type2 == LOWER -23376: || !is_open(type2, x2, info2))) { -23376: goto le; -23376: } -23376: } -23376: else if (type2 == LOWER -23376: && is_open(type2, x2, info2)) { -23376: le: -23376: if (is_minus_infinity(type1, x1, info1) -23376: || is_plus_infinity(type2, x2, info2)) { -23376: return true; -23376: } -23376: if (is_plus_infinity(type1, x1, info1) -23376: || is_minus_infinity(type2, x2, info2)) { -23376: return false; -23376: } -23376: else { -23376: return less_or_equal(x1, x2); -23376: } -23376: } -23376: if (is_plus_infinity(type1, x1, info1) -23376: || is_minus_infinity(type2, x2, info2)) { -23376: return false; -23376: } -23376: if (is_minus_infinity(type1, x1, info1) -23376: || is_plus_infinity(type2, x2, info2)) { -23376: return true; -23376: } -23376: else { -23376: return less_than(x1, x2); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: gt(Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: return lt(type2, x2, info2, type1, x1, info1); -23376: } -23376: -23376: template -23376: inline bool -23376: le(Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: return !gt(type1, x1, info1, type2, x2, info2); -23376: } -23376: -23376: template -23376: inline bool -23376: ge(Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: return !lt(type1, x1, info1, type2, x2, info2); -23376: } -23376: -23376: template -23376: inline Result -23376: adjust_boundary(Boundary_Type type, T& x, Info& info, -23376: bool open, Result r) { -23376: r = result_relation_class(r); -23376: if (type == LOWER) { -23376: switch (r) { -23376: case V_GT_MINUS_INFINITY: -23376: open = true; -23376: -23376: case V_EQ_MINUS_INFINITY: -23376: if (!Info::store_special) { -23376: return r; -23376: } -23376: if (open) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return special_set_boundary_infinity(type, x, info); -23376: case V_GT: -23376: open = true; -23376: -23376: case V_GE: -23376: case V_EQ: -23376: if (open) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: } -23376: else { -23376: switch (r) { -23376: case V_LT_PLUS_INFINITY: -23376: open = true; -23376: -23376: case V_EQ_PLUS_INFINITY: -23376: if (!Info::store_special) { -23376: return r; -23376: } -23376: if (open) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return special_set_boundary_infinity(type, x, info); -23376: case V_LT: -23376: open = true; -23376: -23376: case V_LE: -23376: case V_EQ: -23376: if (open) { -23376: info.set_boundary_property(type, OPEN); -23376: } -23376: return r; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return V_NAN; -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: complement(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (info.get_boundary_property(type, SPECIAL)) { -23376: should_shrink = !special_is_open(type, x, info); -23376: if (type == LOWER) { -23376: return set_minus_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: else { -23376: return set_plus_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: } -23376: should_shrink = !normal_is_open(type, x, info); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: Result r = assign_r(to, x, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info, -23376: bool should_shrink = false) { -23376: ((void) 0); -23376: if (info.get_boundary_property(type, SPECIAL)) { -23376: should_shrink = (should_shrink || special_is_open(type, x, info)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = (should_shrink || normal_is_open(type, x, info)); -23376: const bool check -23376: = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: const Result r = assign_r(to, x, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: min_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info) { -23376: if (lt(type, x, info, to_type, to, to_info)) { -23376: to_info.clear_boundary_properties(to_type); -23376: return assign(to_type, to, to_info, type, x, info); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: min_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: if (lt(type1, x1, info1, type2, x2, info2)) { -23376: return assign(to_type, to, to_info, type1, x1, info1); -23376: } -23376: else { -23376: return assign(to_type, to, to_info, type2, x2, info2); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: max_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info) { -23376: if (gt(type, x, info, to_type, to, to_info)) { -23376: to_info.clear_boundary_properties(to_type); -23376: return assign(to_type, to, to_info, type, x, info); -23376: } -23376: return V_EQ; -23376: } -23376: -23376: template -23376: inline Result -23376: max_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: if (gt(type1, x1, info1, type2, x2, info2)) { -23376: return assign(to_type, to, to_info, type1, x1, info1); -23376: } -23376: else { -23376: return assign(to_type, to, to_info, type2, x2, info2); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: neg_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (info.get_boundary_property(type, SPECIAL)) { -23376: should_shrink = special_is_open(type, x, info); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = normal_is_open(type, x, info); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: Result r = neg_assign_r(to, x, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: add_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (is_boundary_infinity(type1, x1, info1)) { -23376: should_shrink = (boundary_infinity_is_open(type1, info1) -23376: && !is_boundary_infinity_closed(type2, x2, info2)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: else if (is_boundary_infinity(type2, x2, info2)) { -23376: should_shrink = (boundary_infinity_is_open(type2, info2) -23376: && !is_boundary_infinity_closed(type1, x1, info1)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = (normal_is_open(type1, x1, info1) -23376: || normal_is_open(type2, x2, info2)); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: -23376: Result r = add_assign_r(to, x1, x2, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: sub_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (is_boundary_infinity(type1, x1, info1)) { -23376: should_shrink = (boundary_infinity_is_open(type1, info1) -23376: && !is_boundary_infinity_closed(type2, x2, info2)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: else if (is_boundary_infinity(type2, x2, info2)) { -23376: should_shrink = (boundary_infinity_is_open(type2, info2) -23376: && !is_boundary_infinity_closed(type1, x1, info1)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = (normal_is_open(type1, x1, info1) -23376: || normal_is_open(type2, x2, info2)); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: -23376: Result r = sub_assign_r(to, x1, x2, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: mul_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: bool should_shrink; -23376: if (is_boundary_infinity(type1, x1, info1)) { -23376: should_shrink = (boundary_infinity_is_open(type1, info1) -23376: && !is_boundary_infinity_closed(type2, x2, info2)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: else if (is_boundary_infinity(type2, x2, info2)) { -23376: should_shrink = (boundary_infinity_is_open(type2, info2) -23376: && !is_boundary_infinity_closed(type1, x1, info1)); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = (normal_is_open(type1, x1, info1) -23376: || normal_is_open(type2, x2, info2)); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: ((void) 0); -23376: -23376: Result r = mul_assign_r(to, x1, x2, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: set_zero(Boundary_Type to_type, To& to, To_Info& to_info, bool should_shrink) { -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: Result r = assign_r(to, Constant<0>::value, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: mul_assign_z(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, int x1s, -23376: Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) { -23376: bool should_shrink; -23376: if (x1s != 0) { -23376: if (x2s != 0) { -23376: return mul_assign(to_type, to, to_info, -23376: type1, x1, info1, -23376: type2, x2, info2); -23376: } -23376: else { -23376: should_shrink = info2.get_boundary_property(type2, OPEN); -23376: } -23376: } -23376: else { -23376: should_shrink = (info1.get_boundary_property(type1, OPEN) -23376: && (x2s != 0 || info2.get_boundary_property(type2, OPEN))); -23376: } -23376: return set_zero(to_type, to, to_info, should_shrink); -23376: } -23376: -23376: template -23376: inline Result -23376: div_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, -23376: Boundary_Type type2, const T2& x2, const Info2& info2) { -23376: bool should_shrink; -23376: if (is_boundary_infinity(type1, x1, info1)) { -23376: should_shrink = boundary_infinity_is_open(type1, info1); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: else if (is_boundary_infinity(type2, x2, info2)) { -23376: should_shrink = boundary_infinity_is_open(type2, info2); -23376: return set_zero(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = (normal_is_open(type1, x1, info1) -23376: || normal_is_open(type2, x2, info2)); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: ((void) 0); -23376: -23376: Result r = div_assign_r(to, x1, x2, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: -23376: template -23376: inline Result -23376: div_assign_z(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type1, const T1& x1, const Info1& info1, int x1s, -23376: Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) { -23376: if (x1s != 0) { -23376: if (x2s != 0) { -23376: return div_assign(to_type, to, to_info, -23376: type1, x1, info1, -23376: type2, x2, info2); -23376: } -23376: else { -23376: return set_boundary_infinity(to_type, to, to_info, true); -23376: } -23376: } -23376: else { -23376: bool should_shrink = info1.get_boundary_property(type1, OPEN) -23376: && !is_boundary_infinity_closed(type2, x2, info2); -23376: return set_zero(to_type, to, to_info, should_shrink); -23376: } -23376: } -23376: -23376: template -23376: inline Result -23376: umod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info, -23376: unsigned int exp) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (is_boundary_infinity(type, x, info)) { -23376: should_shrink = boundary_infinity_is_open(type, info); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = normal_is_open(type, x, info); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: Result r = umod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: template -23376: inline Result -23376: smod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info, -23376: Boundary_Type type, const T& x, const Info& info, -23376: unsigned int exp) { -23376: ((void) 0); -23376: bool should_shrink; -23376: if (is_boundary_infinity(type, x, info)) { -23376: should_shrink = boundary_infinity_is_open(type, info); -23376: return set_boundary_infinity(to_type, to, to_info, should_shrink); -23376: } -23376: should_shrink = normal_is_open(type, x, info); -23376: bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open)); -23376: Result r = smod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check)); -23376: return adjust_boundary(to_type, to, to_info, should_shrink, r); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 28 "../../src/Interval_Info_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Interval_NS { -23376: -23376: struct Property { -23376: enum Type { -23376: CARDINALITY_0_, -23376: CARDINALITY_1_, -23376: CARDINALITY_IS_ -23376: }; -23376: typedef bool Value; -23376: static const Value default_value = true; -23376: static const Value unsupported_value = false; -23376: Property(Type t) -23376: : type(t) { -23376: } -23376: Type type; -23376: }; -23376: -23376: const Property CARDINALITY_0(Property::CARDINALITY_0_); -23376: const Property CARDINALITY_1(Property::CARDINALITY_1_); -23376: const Property CARDINALITY_IS(Property::CARDINALITY_IS_); -23376: -23376: template -23376: inline void -23376: reset_bits(T& bits) { -23376: bits = 0; -23376: } -23376: -23376: template -23376: inline void -23376: reset_bit(T& bits, unsigned int bit) { -23376: bits &= ~(static_cast(1) << bit); -23376: } -23376: -23376: template -23376: inline void -23376: set_bit(T& bits, unsigned int bit, bool value) { -23376: if (value) { -23376: bits |= static_cast(1) << bit; -23376: } -23376: else { -23376: reset_bit(bits, bit); -23376: } -23376: } -23376: -23376: template -23376: inline bool -23376: get_bit(const T& bits, unsigned int bit) { -23376: return (bits & (static_cast(1) << bit)) != 0; -23376: } -23376: -23376: template -23376: inline void -23376: set_bits(T& bits, unsigned int start, unsigned int len, T value) { -23376: bits &= ~(((static_cast(1) << len) - 1) << start); -23376: bits |= value << start; -23376: } -23376: -23376: template -23376: inline T -23376: get_bits(T& bits, unsigned int start, unsigned int len) { -23376: return (bits >> start) & ((static_cast(1) << len) - 1); -23376: } -23376: -23376: } -23376: -23376: using namespace Interval_NS; -23376: using namespace Boundary_NS; -23376: -23376: -23376: template -23376: class Interval_Info_Null { -23376: public: -23376: enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) }; -23376: enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) }; -23376: enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) }; -23376: enum const_bool_value_store_special { store_special = (false) }; -23376: enum const_bool_value_store_open { store_open = (false) }; -23376: enum const_bool_value_cache_empty { cache_empty = (false) }; -23376: enum const_bool_value_cache_singleton { cache_singleton = (false) }; -23376: Interval_Info_Null() { -23376: } -23376: void clear() { -23376: } -23376: void clear_boundary_properties(Boundary_Type) { -23376: } -23376: -23376: template -23376: void set_boundary_property(Boundary_Type, const Property&, typename Property::Value = Property::default_value) { -23376: } -23376: template -23376: typename Property::Value get_boundary_property(Boundary_Type, const Property&) const { -23376: return Property::unsupported_value; -23376: } -23376: template -23376: void set_interval_property(const Property&, typename Property::Value = Property::default_value) { -23376: } -23376: template -23376: typename Property::Value get_interval_property(const Property&) const { -23376: return Property::unsupported_value; -23376: } -23376: -23376: -23376: void m_swap(Interval_Info_Null& y); -23376: -23376: void ascii_dump(std::ostream& s) const; -23376: bool ascii_load(std::istream& s); -23376: }; -23376: -23376: template -23376: class Interval_Info_Null_Open : public Interval_Info_Null { -23376: public: -23376: enum const_bool_value_store_open { store_open = (true) }; -23376: Interval_Info_Null_Open(bool o) -23376: : open(o) { -23376: } -23376: bool get_boundary_property(Boundary_Type, -23376: const Boundary_NS::Property& p) const { -23376: if (p.type == Boundary_NS::Property::OPEN_) { -23376: return open; -23376: } -23376: else { -23376: return Boundary_NS::Property::unsupported_value; -23376: } -23376: } -23376: -23376: void ascii_dump(std::ostream& s) const; -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: bool open; -23376: }; -23376: -23376: -23376: template -23376: class Interval_Info_Bitset { -23376: public: -23376: enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) }; -23376: enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) }; -23376: enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) }; -23376: enum const_bool_value_store_special { store_special = (Policy::store_special) }; -23376: enum const_bool_value_store_open { store_open = (Policy::store_open) }; -23376: enum const_bool_value_cache_empty { cache_empty = (Policy::cache_empty) }; -23376: enum const_bool_value_cache_singleton { cache_singleton = (Policy::cache_singleton) }; -23376: enum anonymous_enum_lower_special_bit { lower_special_bit = (Policy::next_bit) }; -23376: enum anonymous_enum_lower_open_bit { lower_open_bit = (lower_special_bit + (store_special ? 1 : 0)) }; -23376: enum anonymous_enum_upper_special_bit { upper_special_bit = (lower_open_bit + (store_open ? 1 : 0)) }; -23376: enum anonymous_enum_upper_open_bit { upper_open_bit = (upper_special_bit + (store_special ? 1 : 0)) }; -23376: enum anonymous_enum_cardinality_is_bit { cardinality_is_bit = (upper_open_bit + (store_open ? 1 : 0)) }; -23376: enum anonymous_enum_cardinality_0_bit { cardinality_0_bit = (cardinality_is_bit + ((cache_empty || cache_singleton) ? 1 : 0)) } -23376: ; -23376: enum anonymous_enum_cardinality_1_bit { cardinality_1_bit = (cardinality_0_bit + (cache_empty ? 1 : 0)) }; -23376: enum anonymous_enum_next_bit { next_bit = (cardinality_1_bit + (cache_singleton ? 1 : 0)) }; -23376: -23376: Interval_Info_Bitset() { -23376: -23376: -23376: clear(); -23376: } -23376: -23376: void clear() { -23376: reset_bits(bitset); -23376: } -23376: void clear_boundary_properties(Boundary_Type t) { -23376: set_boundary_property(t, SPECIAL, false); -23376: set_boundary_property(t, OPEN, false); -23376: } -23376: void set_boundary_property(Boundary_Type t, -23376: const Boundary_NS::Property& p, -23376: bool value = true) { -23376: switch (p.type) { -23376: case Boundary_NS::Property::SPECIAL_: -23376: if (store_special) { -23376: if (t == LOWER) { -23376: set_bit(bitset, lower_special_bit, value); -23376: } -23376: else { -23376: set_bit(bitset, upper_special_bit, value); -23376: } -23376: } -23376: break; -23376: case Boundary_NS::Property::OPEN_: -23376: if (store_open) { -23376: if (t == LOWER) { -23376: set_bit(bitset, lower_open_bit, value); -23376: } -23376: else { -23376: set_bit(bitset, upper_open_bit, value); -23376: } -23376: } -23376: break; -23376: default: -23376: break; -23376: } -23376: } -23376: bool get_boundary_property(Boundary_Type t, const Boundary_NS::Property& p) const { -23376: switch (p.type) { -23376: case Boundary_NS::Property::SPECIAL_: -23376: if (!store_special) { -23376: return false; -23376: } -23376: if (t == LOWER) { -23376: return get_bit(bitset, lower_special_bit); -23376: } -23376: else { -23376: return get_bit(bitset, upper_special_bit); -23376: } -23376: case Boundary_NS::Property::OPEN_: -23376: if (!store_open) { -23376: return false; -23376: } -23376: else if (t == LOWER) { -23376: return get_bit(bitset, lower_open_bit); -23376: } -23376: else { -23376: return get_bit(bitset, upper_open_bit); -23376: } -23376: default: -23376: return false; -23376: } -23376: } -23376: void set_interval_property(const Interval_NS::Property& p, bool value = true) { -23376: switch (p.type) { -23376: case Interval_NS::Property::CARDINALITY_0_: -23376: if (cache_empty) { -23376: set_bit(bitset, cardinality_0_bit, value); -23376: } -23376: break; -23376: case Interval_NS::Property::CARDINALITY_1_: -23376: if (cache_singleton) { -23376: set_bit(bitset, cardinality_1_bit, value); -23376: } -23376: break; -23376: case Interval_NS::Property::CARDINALITY_IS_: -23376: if (cache_empty || cache_singleton) { -23376: set_bit(bitset, cardinality_is_bit, value); -23376: } -23376: break; -23376: default: -23376: break; -23376: } -23376: } -23376: bool get_interval_property(Interval_NS::Property p) const { -23376: switch (p.type) { -23376: case Interval_NS::Property::CARDINALITY_0_: -23376: return cache_empty && get_bit(bitset, cardinality_0_bit); -23376: case Interval_NS::Property::CARDINALITY_1_: -23376: return cache_singleton && get_bit(bitset, cardinality_1_bit); -23376: case Interval_NS::Property::CARDINALITY_IS_: -23376: return (cache_empty || cache_singleton) -23376: && get_bit(bitset, cardinality_is_bit); -23376: default: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: void m_swap(Interval_Info_Bitset& y); -23376: -23376: void ascii_dump(std::ostream& s) const; -23376: bool ascii_load(std::istream& s); -23376: -23376: protected: -23376: T bitset; -23376: }; -23376: -23376: } -23376: -23376: # 1 "../../src/Interval_Info_inlines.hh" 1 -23376: # 29 "../../src/Interval_Info_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline void -23376: Interval_Info_Null::m_swap(Interval_Info_Null&) { -23376: } -23376: -23376: template -23376: inline void -23376: Interval_Info_Null::ascii_dump(std::ostream&) const { -23376: } -23376: -23376: template -23376: inline bool -23376: Interval_Info_Null::ascii_load(std::istream&) { -23376: return true; -23376: } -23376: -23376: template -23376: inline void -23376: Interval_Info_Null_Open::ascii_dump(std::ostream& s) const { -23376: s << (open ? "open" : "closed"); -23376: } -23376: -23376: template -23376: inline bool -23376: Interval_Info_Null_Open::ascii_load(std::istream& s) { -23376: std::string str; -23376: if (!(s >> str)) { -23376: return false; -23376: } -23376: if (str == "open") { -23376: open = true; -23376: return true; -23376: } -23376: if (str == "closed") { -23376: open = false; -23376: return true; -23376: } -23376: return false; -23376: } -23376: -23376: template -23376: inline void -23376: Interval_Info_Bitset::m_swap(Interval_Info_Bitset& y) { -23376: using std::swap; -23376: swap(bitset, y.bitset); -23376: } -23376: -23376: template -23376: inline void -23376: Interval_Info_Bitset::ascii_dump(std::ostream& s) const { -23376: const std::ios::fmtflags old_flags = s.setf(std::ios::hex, -23376: std::ios::basefield); -23376: s << bitset; -23376: s.flags(old_flags); -23376: } -23376: -23376: template -23376: inline bool -23376: Interval_Info_Bitset::ascii_load(std::istream& s) { -23376: const std::ios::fmtflags old_flags = s.setf(std::ios::hex, -23376: std::ios::basefield); -23376: s >> bitset; -23376: s.flags(old_flags); -23376: return !s.fail(); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: swap(Interval_Info_Null& x, Interval_Info_Null& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: swap(Interval_Info_Bitset& x, Interval_Info_Bitset& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 300 "../../src/Interval_Info_defs.hh" 2 -23376: # 33 "../../src/Interval_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: enum Ternary { T_YES, T_NO, T_MAYBE }; -23376: -23376: inline I_Result -23376: combine(Result l, Result u) { -23376: const unsigned res -23376: = static_cast(l) | (static_cast(u) << 6); -23376: return static_cast(res); -23376: } -23376: -23376: struct Interval_Base { -23376: }; -23376: -23376: using namespace Boundary_NS; -23376: using namespace Interval_NS; -23376: -23376: template -23376: struct Is_Singleton : public Is_Native_Or_Checked {}; -23376: -23376: template -23376: struct Is_Interval : public Is_Same_Or_Derived {}; -23376: # 80 "../../src/Interval_defs.hh" -23376: template -23376: class Interval : public Interval_Base, private Info { -23376: private: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_86 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Info::store_special || !std::numeric_limits::has_infinity)>) } -23376: -23376: -23376: ; -23376: Info& w_info() const { -23376: return const_cast(*this); -23376: } -23376: -23376: public: -23376: typedef Boundary boundary_type; -23376: typedef Info info_type; -23376: -23376: typedef Interval_NS::Property Property; -23376: -23376: template -23376: typename Enable_If::value || Is_Interval::value, Interval&>::type -23376: operator=(const T& x) { -23376: assign(x); -23376: return *this; -23376: } -23376: -23376: template -23376: typename Enable_If::value || Is_Interval::value, Interval&>::type -23376: operator+=(const T& x) { -23376: add_assign(*this, x); -23376: return *this; -23376: } -23376: template -23376: typename Enable_If::value || Is_Interval::value, Interval&>::type -23376: operator-=(const T& x) { -23376: sub_assign(*this, x); -23376: return *this; -23376: } -23376: template -23376: typename Enable_If::value || Is_Interval::value, Interval&>::type -23376: operator*=(const T& x) { -23376: mul_assign(*this, x); -23376: return *this; -23376: } -23376: template -23376: typename Enable_If::value || Is_Interval::value, Interval&>::type -23376: operator/=(const T& x) { -23376: div_assign(*this, x); -23376: return *this; -23376: } -23376: -23376: -23376: void m_swap(Interval& y); -23376: -23376: Info& info() { -23376: return *this; -23376: } -23376: -23376: const Info& info() const { -23376: return *this; -23376: } -23376: -23376: Boundary& lower() { -23376: return lower_; -23376: } -23376: -23376: const Boundary& lower() const { -23376: return lower_; -23376: } -23376: -23376: Boundary& upper() { -23376: return upper_; -23376: } -23376: -23376: const Boundary& upper() const { -23376: return upper_; -23376: } -23376: -23376: I_Constraint lower_constraint() const { -23376: ((void) 0); -23376: if (info().get_boundary_property(LOWER, SPECIAL)) { -23376: return I_Constraint(); -23376: } -23376: return i_constraint(lower_is_open() ? GREATER_THAN : GREATER_OR_EQUAL, -23376: lower(), true); -23376: } -23376: I_Constraint upper_constraint() const { -23376: ((void) 0); -23376: if (info().get_boundary_property(UPPER, SPECIAL)) { -23376: return I_Constraint(); -23376: } -23376: return i_constraint(upper_is_open() ? LESS_THAN : LESS_OR_EQUAL, -23376: upper(), true); -23376: } -23376: -23376: bool is_empty() const { -23376: return lt(UPPER, upper(), info(), LOWER, lower(), info()); -23376: } -23376: -23376: bool check_empty(I_Result r) const { -23376: return (r & I_ANY) == I_EMPTY -23376: || ((r & I_ANY) != I_NOT_EMPTY && is_empty()); -23376: } -23376: -23376: bool is_singleton() const { -23376: return eq(LOWER, lower(), info(), UPPER, upper(), info()); -23376: } -23376: -23376: bool lower_is_open() const { -23376: ((void) 0); -23376: return is_open(LOWER, lower(), info()); -23376: } -23376: -23376: bool upper_is_open() const { -23376: ((void) 0); -23376: return is_open(UPPER, upper(), info()); -23376: } -23376: -23376: bool lower_is_boundary_infinity() const { -23376: ((void) 0); -23376: return Boundary_NS::is_boundary_infinity(LOWER, lower(), info()); -23376: } -23376: -23376: bool upper_is_boundary_infinity() const { -23376: ((void) 0); -23376: return Boundary_NS::is_boundary_infinity(UPPER, upper(), info()); -23376: } -23376: -23376: bool lower_is_domain_inf() const { -23376: ((void) 0); -23376: return Boundary_NS::is_domain_inf(LOWER, lower(), info()); -23376: } -23376: -23376: bool upper_is_domain_sup() const { -23376: ((void) 0); -23376: return Boundary_NS::is_domain_sup(UPPER, upper(), info()); -23376: } -23376: -23376: bool is_bounded() const { -23376: ((void) 0); -23376: return !lower_is_boundary_infinity() && !upper_is_boundary_infinity(); -23376: } -23376: -23376: bool is_universe() const { -23376: ((void) 0); -23376: return lower_is_domain_inf() && upper_is_domain_sup(); -23376: } -23376: -23376: I_Result lower_extend() { -23376: info().clear_boundary_properties(LOWER); -23376: set_unbounded(LOWER, lower(), info()); -23376: return I_ANY; -23376: } -23376: -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: lower_extend(const C& c); -23376: -23376: I_Result upper_extend() { -23376: info().clear_boundary_properties(UPPER); -23376: set_unbounded(UPPER, upper(), info()); -23376: return I_ANY; -23376: } -23376: -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: upper_extend(const C& c); -23376: -23376: I_Result build() { -23376: return assign(UNIVERSE); -23376: } -23376: -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: build(const C& c) { -23376: Relation_Symbol rs; -23376: switch (c.rel()) { -23376: case V_LGE: -23376: case V_GT_MINUS_INFINITY: -23376: case V_LT_PLUS_INFINITY: -23376: return assign(UNIVERSE); -23376: default: -23376: return assign(EMPTY); -23376: case V_LT: -23376: case V_LE: -23376: case V_GT: -23376: case V_GE: -23376: case V_EQ: -23376: case V_NE: -23376: assign(UNIVERSE); -23376: rs = static_cast(c.rel()); -23376: return refine_existential(rs, c.value()); -23376: } -23376: } -23376: -23376: template -23376: typename Enable_If::value -23376: && -23376: Is_Same_Or_Derived::value, -23376: I_Result>::type -23376: build(const C1& c1, const C2& c2) { -23376: switch (c1.rel()) { -23376: case V_LGE: -23376: return build(c2); -23376: case V_NAN: -23376: return assign(EMPTY); -23376: default: -23376: break; -23376: } -23376: switch (c2.rel()) { -23376: case V_LGE: -23376: return build(c1); -23376: case V_NAN: -23376: return assign(EMPTY); -23376: default: -23376: break; -23376: } -23376: build(c1); -23376: const I_Result r = add_constraint(c2); -23376: return r - (I_CHANGED | I_UNCHANGED); -23376: } -23376: -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: add_constraint(const C& c) { -23376: Interval x; -23376: x.build(c); -23376: return intersect_assign(x); -23376: } -23376: -23376: I_Result assign(Degenerate_Element e) { -23376: I_Result r; -23376: info().clear(); -23376: switch (e) { -23376: case EMPTY: -23376: lower_ = 1; -23376: upper_ = 0; -23376: r = I_EMPTY | I_EXACT; -23376: break; -23376: case UNIVERSE: -23376: set_unbounded(LOWER, lower(), info()); -23376: set_unbounded(UPPER, upper(), info()); -23376: r = I_UNIVERSE | I_EXACT; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: r = I_EMPTY; -23376: break; -23376: } -23376: ((void) 0); -23376: return r; -23376: } -23376: -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: assign(const From&) { -23376: info().clear(); -23376: Result rl; -23376: Result ru; -23376: switch (From::vclass) { -23376: case VC_MINUS_INFINITY: -23376: rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info()); -23376: ru = Boundary_NS::set_minus_infinity(UPPER, upper(), info()); -23376: break; -23376: case VC_PLUS_INFINITY: -23376: rl = Boundary_NS::set_plus_infinity(LOWER, lower(), info()); -23376: ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info()); -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: rl = V_NAN; -23376: ru = V_NAN; -23376: break; -23376: } -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: I_Result set_infinities() { -23376: info().clear(); -23376: Result rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info()); -23376: Result ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info()); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: static bool is_always_topologically_closed() { -23376: return !Info::store_open; -23376: } -23376: -23376: bool is_topologically_closed() const { -23376: ((void) 0); -23376: return is_always_topologically_closed() -23376: || is_empty() -23376: || ((lower_is_boundary_infinity() || !lower_is_open()) -23376: && (upper_is_boundary_infinity() || !upper_is_open())); -23376: } -23376: -23376: -23376: void topological_closure_assign() { -23376: if (!Info::store_open || is_empty()) { -23376: return; -23376: } -23376: if (lower_is_open() && !lower_is_boundary_infinity()) { -23376: info().set_boundary_property(LOWER, OPEN, false); -23376: } -23376: if (upper_is_open() && !upper_is_boundary_infinity()) { -23376: info().set_boundary_property(UPPER, OPEN, false); -23376: } -23376: } -23376: -23376: void remove_inf() { -23376: ((void) 0); -23376: if (!Info::store_open) { -23376: return; -23376: } -23376: info().set_boundary_property(LOWER, OPEN, true); -23376: } -23376: -23376: void remove_sup() { -23376: ((void) 0); -23376: if (!Info::store_open) { -23376: return; -23376: } -23376: info().set_boundary_property(UPPER, OPEN, true); -23376: } -23376: -23376: int infinity_sign() const { -23376: ((void) 0); -23376: if (is_reverse_infinity(LOWER, lower(), info())) { -23376: return 1; -23376: } -23376: else if (is_reverse_infinity(UPPER, upper(), info())) { -23376: return -1; -23376: } -23376: else { -23376: return 0; -23376: } -23376: } -23376: -23376: bool contains_integer_point() const { -23376: ((void) 0); -23376: if (is_empty()) { -23376: return false; -23376: } -23376: if (!is_bounded()) { -23376: return true; -23376: } -23376: Boundary l; -23376: if (lower_is_open()) { -23376: add_assign_r(l, lower(), Boundary(1), ROUND_DOWN); -23376: floor_assign_r(l, l, ROUND_DOWN); -23376: } -23376: else { -23376: ceil_assign_r(l, lower(), ROUND_DOWN); -23376: } -23376: Boundary u; -23376: if (upper_is_open()) { -23376: sub_assign_r(u, upper(), Boundary(1), ROUND_UP); -23376: ceil_assign_r(u, u, ROUND_UP); -23376: } -23376: else { -23376: floor_assign_r(u, upper(), ROUND_UP); -23376: } -23376: return u >= l; -23376: } -23376: -23376: void drop_some_non_integer_points() { -23376: if (is_empty()) { -23376: return; -23376: } -23376: if (lower_is_open() && !lower_is_boundary_infinity()) { -23376: add_assign_r(lower(), lower(), Boundary(1), ROUND_DOWN); -23376: floor_assign_r(lower(), lower(), ROUND_DOWN); -23376: info().set_boundary_property(LOWER, OPEN, false); -23376: } -23376: else { -23376: ceil_assign_r(lower(), lower(), ROUND_DOWN); -23376: } -23376: if (upper_is_open() && !upper_is_boundary_infinity()) { -23376: sub_assign_r(upper(), upper(), Boundary(1), ROUND_UP); -23376: ceil_assign_r(upper(), upper(), ROUND_UP); -23376: info().set_boundary_property(UPPER, OPEN, false); -23376: } -23376: else { -23376: floor_assign_r(upper(), upper(), ROUND_UP); -23376: } -23376: } -23376: -23376: template -23376: typename Enable_If::value || Is_Interval::value, I_Result>::type -23376: wrap_assign(Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: const From& refinement) { -23376: if (is_empty()) { -23376: return I_EMPTY; -23376: } -23376: if (lower_is_boundary_infinity() || upper_is_boundary_infinity()) { -23376: return assign(refinement); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u; Boundary& u = holder_u.item(); -23376: Result result = sub_2exp_assign_r(u, upper(), w, ROUND_UP); -23376: if (result_overflow(result) == 0 && u > lower()) { -23376: return assign(refinement); -23376: } -23376: info().clear(); -23376: switch (r) { -23376: case UNSIGNED: -23376: umod_2exp_assign(LOWER, lower(), info(), -23376: LOWER, lower(), info(), w); -23376: umod_2exp_assign(UPPER, upper(), info(), -23376: UPPER, upper(), info(), w); -23376: break; -23376: case SIGNED_2_COMPLEMENT: -23376: smod_2exp_assign(LOWER, lower(), info(), -23376: LOWER, lower(), info(), w); -23376: smod_2exp_assign(UPPER, upper(), info(), -23376: UPPER, upper(), info(), w); -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: if (le(LOWER, lower(), info(), UPPER, upper(), info())) { -23376: return intersect_assign(refinement); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; Interval& tmp = holder_tmp.item(); -23376: tmp.info().clear(); -23376: Boundary_NS::assign(LOWER, tmp.lower(), tmp.info(), -23376: LOWER, lower(), info()); -23376: set_unbounded(UPPER, tmp.upper(), tmp.info()); -23376: tmp.intersect_assign(refinement); -23376: lower_extend(); -23376: intersect_assign(refinement); -23376: return join_assign(tmp); -23376: } -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: void ascii_dump(std::ostream& s) const; -23376: bool ascii_load(std::istream& s); -23376: -23376: bool OK() const { -23376: if (!Info::may_be_empty && is_empty()) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: if (is_open(LOWER, lower(), info())) { -23376: if (is_plus_infinity(LOWER, lower(), info())) { -23376: -23376: -23376: -23376: } -23376: } -23376: else if (!Info::may_contain_infinity -23376: && (is_minus_infinity(LOWER, lower(), info()) -23376: || is_plus_infinity(LOWER, lower(), info()))) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: if (!info().get_boundary_property(LOWER, SPECIAL)) { -23376: if (is_not_a_number(lower())) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: if (is_open(UPPER, upper(), info())) { -23376: if (is_minus_infinity(UPPER, upper(), info())) { -23376: -23376: -23376: -23376: } -23376: } -23376: else if (!Info::may_contain_infinity -23376: && (is_minus_infinity(UPPER, upper(), info()) -23376: || is_plus_infinity(UPPER, upper(), info()))) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: if (!info().get_boundary_property(UPPER, SPECIAL)) { -23376: if (is_not_a_number(upper())) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: Interval() { -23376: } -23376: -23376: template -23376: explicit Interval(const T& x) { -23376: assign(x); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: explicit Interval(const char* s); -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: contains(const T& y) const; -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: strictly_contains(const T& y) const; -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: is_disjoint_from(const T& y) const; -23376: -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: assign(const From& x); -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: can_be_exactly_joined_to(const Type& x) const; -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: join_assign(const From& x); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: join_assign(const From1& x, const From2& y); -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: intersect_assign(const From& x); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: intersect_assign(const From1& x, const From2& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: difference_assign(const From& x); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: difference_assign(const From1& x, const From2& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: lower_approximation_difference_assign(const From& x); -23376: # 685 "../../src/Interval_defs.hh" -23376: template -23376: typename Enable_If::value, bool>::type -23376: simplify_using_context_assign(const From& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: empty_intersection_assign(const From& y); -23376: # 712 "../../src/Interval_defs.hh" -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: refine_existential(Relation_Symbol rel, const From& x); -23376: # 732 "../../src/Interval_defs.hh" -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: refine_universal(Relation_Symbol rel, const From& x); -23376: -23376: template -23376: typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: neg_assign(const From& x); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value || Is_Interval::value) -23376: && (Is_Singleton::value || Is_Interval::value)), I_Result>::type -23376: add_assign(const From1& x, const From2& y); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value || Is_Interval::value) -23376: && (Is_Singleton::value || Is_Interval::value)), I_Result>::type -23376: sub_assign(const From1& x, const From2& y); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value || Is_Interval::value) -23376: && (Is_Singleton::value || Is_Interval::value)), I_Result>::type -23376: mul_assign(const From1& x, const From2& y); -23376: -23376: template -23376: typename Enable_If<((Is_Singleton::value || Is_Interval::value) -23376: && (Is_Singleton::value || Is_Interval::value)), I_Result>::type -23376: div_assign(const From1& x, const From2& y); -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: CC76_widening_assign(const From& y, Iterator first, Iterator last); -23376: -23376: private: -23376: Boundary lower_; -23376: Boundary upper_; -23376: }; -23376: -23376: -23376: -23376: template -23376: void swap(Interval& x, Interval& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Interval_inlines.hh" 1 -23376: # 27 "../../src/Interval_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline memory_size_type -23376: Interval::external_memory_in_bytes() const { -23376: return Parma_Polyhedra_Library::external_memory_in_bytes(lower()) -23376: + Parma_Polyhedra_Library::external_memory_in_bytes(upper()); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Interval::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline void -23376: Interval::m_swap(Interval& y) { -23376: using std::swap; -23376: swap(lower(), y.lower()); -23376: swap(upper(), y.upper()); -23376: swap(info(), y.info()); -23376: } -23376: -23376: template -23376: inline bool -23376: f_is_empty(const Interval& x) { -23376: return x.is_empty(); -23376: } -23376: template -23376: inline bool -23376: f_is_singleton(const Interval& x) { -23376: return x.is_singleton(); -23376: } -23376: template -23376: inline int -23376: infinity_sign(const Interval& x) { -23376: return x.infinity_sign(); -23376: } -23376: -23376: namespace Interval_NS { -23376: -23376: template -23376: inline const Boundary& -23376: f_lower(const Interval& x) { -23376: return x.lower(); -23376: } -23376: template -23376: inline const Boundary& -23376: f_upper(const Interval& x) { -23376: return x.upper(); -23376: } -23376: template -23376: inline const Info& -23376: f_info(const Interval& x) { -23376: return x.info(); -23376: } -23376: -23376: struct Scalar_As_Interval_Policy { -23376: enum const_bool_value_may_be_empty { may_be_empty = (true) }; -23376: enum const_bool_value_may_contain_infinity { may_contain_infinity = (true) }; -23376: enum const_bool_value_check_inexact { check_inexact = (false) }; -23376: }; -23376: -23376: typedef Interval_Info_Null -23376: Scalar_As_Interval_Info; -23376: -23376: const Scalar_As_Interval_Info SCALAR_INFO; -23376: -23376: typedef Interval_Info_Null_Open -23376: Scalar_As_Interval_Info_Open; -23376: -23376: template -23376: inline typename Enable_If::value, const T&>::type -23376: f_lower(const T& x) { -23376: return x; -23376: } -23376: template -23376: inline typename Enable_If::value, const T&>::type -23376: f_upper(const T& x) { -23376: return x; -23376: } -23376: template -23376: inline typename Enable_If::value, -23376: const Scalar_As_Interval_Info&>::type -23376: f_info(const T&) { -23376: return SCALAR_INFO; -23376: } -23376: template -23376: inline typename Enable_If::value, -23376: Scalar_As_Interval_Info_Open>::type -23376: f_info(const T&, bool open) { -23376: return Scalar_As_Interval_Info_Open(open); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: f_is_empty(const T& x) { -23376: return is_not_a_number(x); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: f_is_singleton(const T& x) { -23376: return !f_is_empty(x); -23376: } -23376: -23376: } -23376: -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: is_singleton_integer(const T& x) { -23376: return is_singleton(x) && is_integer(f_lower(x)); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: check_empty_arg(const T& x) { -23376: if (f_info(x).may_be_empty) { -23376: return f_is_empty(x); -23376: } -23376: else { -23376: ((void) 0); -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Interval::value -23376: || Is_Interval::value)), -23376: bool>::type -23376: operator==(const T1& x, const T2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return check_empty_arg(y); -23376: } -23376: else if (check_empty_arg(y)) { -23376: return false; -23376: } -23376: return eq(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y)) -23376: && eq(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y)); -23376: } -23376: -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Interval::value -23376: || Is_Interval::value)), -23376: bool>::type -23376: operator!=(const T1& x, const T2& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: Interval::contains(const T& y) const { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(y)) { -23376: return true; -23376: } -23376: if (check_empty_arg(*this)) { -23376: return false; -23376: } -23376: return le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y)) -23376: && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y)); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: Interval::strictly_contains(const T& y) const { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(y)) { -23376: return !check_empty_arg(*this); -23376: } -23376: if (check_empty_arg(*this)) { -23376: return false; -23376: } -23376: return (lt(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y)) -23376: && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y))) -23376: || (le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y)) -23376: && gt(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y))); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: Interval::is_disjoint_from(const T& y) const { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(*this) || check_empty_arg(y)) { -23376: return true; -23376: } -23376: return gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y)) -23376: || lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y)); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::assign(const From& x) { -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return assign(EMPTY); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: const Result rl = Boundary_NS::assign(LOWER, lower(), to_info, -23376: LOWER, f_lower(x), f_info(x)); -23376: const Result ru = Boundary_NS::assign(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x)); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::join_assign(const From& x) { -23376: ((void) 0); -23376: if (check_empty_arg(*this)) { -23376: return assign(x); -23376: } -23376: if (check_empty_arg(x)) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: Result rl; -23376: Result ru; -23376: rl = min_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x)); -23376: ru = max_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x)); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::join_assign(const From1& x, const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return assign(y); -23376: } -23376: if (check_empty_arg(y)) { -23376: return assign(x); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl; -23376: Result ru; -23376: rl = min_assign(LOWER, lower(), to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: ru = max_assign(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, bool>::type -23376: Interval::can_be_exactly_joined_to(const Type& x) const { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b; Boundary& b = holder_b.item(); -23376: if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) { -23376: b = lower(); -23376: return eq(LOWER, b, info(), UPPER, f_upper(x), f_info(x)); -23376: } -23376: else if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) { -23376: b = upper(); -23376: return eq(UPPER, b, info(), LOWER, f_lower(x), f_info(x)); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::intersect_assign(const From& x) { -23376: ((void) 0); -23376: max_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x)); -23376: min_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x)); -23376: ((void) 0); -23376: return I_ANY; -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::intersect_assign(const From1& x, -23376: const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: max_assign(LOWER, lower(), to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: min_assign(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return I_NOT_EMPTY; -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::difference_assign(const From& x) { -23376: ((void) 0); -23376: if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x)) -23376: || gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: bool nl = ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x)); -23376: bool nu = le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x)); -23376: Result rl = V_EQ; -23376: Result ru = V_EQ; -23376: if (nl) { -23376: if (nu) { -23376: return assign(EMPTY); -23376: } -23376: else { -23376: info().clear_boundary_properties(LOWER); -23376: rl = complement(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x)); -23376: } -23376: } -23376: else if (nu) { -23376: info().clear_boundary_properties(UPPER); -23376: ru = complement(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x)); -23376: } -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::difference_assign(const From1& x, -23376: const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: if (lt(UPPER, f_upper(x), f_info(x), LOWER, f_lower(y), f_info(y)) -23376: || gt(LOWER, f_lower(x), f_info(x), UPPER, f_upper(y), f_info(y))) { -23376: return assign(x); -23376: } -23376: bool nl = ge(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y)); -23376: bool nu = le(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y)); -23376: Result rl = V_EQ; -23376: Result ru = V_EQ; -23376: if (nl) { -23376: if (nu) { -23376: return assign(EMPTY); -23376: } -23376: else { -23376: rl = complement(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y)); -23376: ru = Boundary_NS::assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x)); -23376: } -23376: } -23376: else if (nu) { -23376: ru = complement(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y)); -23376: rl = Boundary_NS::assign(LOWER, lower(), info(), -23376: LOWER, f_lower(x), f_info(x)); -23376: } -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval -23376: ::refine_existential(Relation_Symbol rel, const From& x) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return assign(EMPTY); -23376: } -23376: switch (rel) { -23376: case LESS_THAN: -23376: { -23376: if (lt(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(UPPER); -23376: Boundary_NS::assign(UPPER, upper(), info(), -23376: UPPER, f_upper(x), f_info(x), true); -23376: return I_ANY; -23376: } -23376: case LESS_OR_EQUAL: -23376: { -23376: if (le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(UPPER); -23376: Boundary_NS::assign(UPPER, upper(), info(), -23376: UPPER, f_upper(x), f_info(x)); -23376: return I_ANY; -23376: } -23376: case GREATER_THAN: -23376: { -23376: if (gt(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(LOWER); -23376: Boundary_NS::assign(LOWER, lower(), info(), -23376: LOWER, f_lower(x), f_info(x), true); -23376: return I_ANY; -23376: } -23376: case GREATER_OR_EQUAL: -23376: { -23376: if (ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(LOWER); -23376: Boundary_NS::assign(LOWER, lower(), info(), -23376: LOWER, f_lower(x), f_info(x)); -23376: return I_ANY; -23376: } -23376: case EQUAL: -23376: return intersect_assign(x); -23376: case NOT_EQUAL: -23376: { -23376: if (!f_is_singleton(x)) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: if (check_empty_arg(*this)) { -23376: return I_EMPTY; -23376: } -23376: if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) { -23376: remove_inf(); -23376: } -23376: if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) { -23376: remove_sup(); -23376: } -23376: return I_ANY; -23376: } -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return I_EMPTY; -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::refine_universal(Relation_Symbol rel, -23376: const From& x) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: switch (rel) { -23376: case LESS_THAN: -23376: { -23376: if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(UPPER); -23376: Result ru = Boundary_NS::assign(UPPER, upper(), info(), -23376: LOWER, f_lower(x), SCALAR_INFO, -23376: !is_open(LOWER, f_lower(x), f_info(x))); -23376: (void)(ru); -23376: return I_ANY; -23376: } -23376: case LESS_OR_EQUAL: -23376: { -23376: if (le(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(UPPER); -23376: Result ru = Boundary_NS::assign(UPPER, upper(), info(), -23376: LOWER, f_lower(x), SCALAR_INFO); -23376: (void)(ru); -23376: return I_ANY; -23376: } -23376: case GREATER_THAN: -23376: { -23376: if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(LOWER); -23376: Result rl = Boundary_NS::assign(LOWER, lower(), info(), -23376: UPPER, f_upper(x), SCALAR_INFO, -23376: !is_open(UPPER, f_upper(x), f_info(x))); -23376: (void)(rl); -23376: return I_ANY; -23376: } -23376: case GREATER_OR_EQUAL: -23376: { -23376: if (ge(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) { -23376: return combine(V_EQ, V_EQ); -23376: } -23376: info().clear_boundary_properties(LOWER); -23376: Result rl = Boundary_NS::assign(LOWER, lower(), info(), -23376: UPPER, f_upper(x), SCALAR_INFO); -23376: (void)(rl); -23376: return I_ANY; -23376: } -23376: case EQUAL: -23376: if (!f_is_singleton(x)) { -23376: return assign(EMPTY); -23376: } -23376: return intersect_assign(x); -23376: case NOT_EQUAL: -23376: { -23376: if (check_empty_arg(*this)) { -23376: return I_EMPTY; -23376: } -23376: if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) { -23376: remove_inf(); -23376: } -23376: if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) { -23376: remove_sup(); -23376: } -23376: return I_ANY; -23376: } -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return I_EMPTY; -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If::value -23376: || Is_Interval::value, I_Result>::type -23376: Interval::neg_assign(const From& x) { -23376: ((void) 0); -23376: if (check_empty_arg(x)) { -23376: return assign(EMPTY); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl; -23376: Result ru; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_lower; To_Boundary& to_lower = holder_to_lower.item(); -23376: rl = Boundary_NS::neg_assign(LOWER, to_lower, to_info, UPPER, f_upper(x), f_info(x)); -23376: ru = Boundary_NS::neg_assign(UPPER, upper(), to_info, LOWER, f_lower(x), f_info(x)); -23376: assign_or_swap(lower(), to_lower); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::add_assign(const From1& x, const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x) || check_empty_arg(y)) { -23376: return assign(EMPTY); -23376: } -23376: int inf_sign = Parma_Polyhedra_Library::infinity_sign(x); -23376: if (inf_sign != 0) { -23376: if (Parma_Polyhedra_Library::infinity_sign(y) == -inf_sign) { -23376: return assign(EMPTY); -23376: } -23376: } -23376: else { -23376: inf_sign = Parma_Polyhedra_Library::infinity_sign(y); -23376: } -23376: if (inf_sign < 0) { -23376: return assign(MINUS_INFINITY); -23376: } -23376: else if (inf_sign > 0) { -23376: return assign(PLUS_INFINITY); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl = Boundary_NS::add_assign(LOWER, lower(), to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: Result ru = Boundary_NS::add_assign(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::sub_assign(const From1& x, const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x) || check_empty_arg(y)) { -23376: return assign(EMPTY); -23376: } -23376: int inf_sign = Parma_Polyhedra_Library::infinity_sign(x); -23376: if (inf_sign != 0) { -23376: if (Parma_Polyhedra_Library::infinity_sign(y) == inf_sign) { -23376: return assign(EMPTY); -23376: } -23376: } -23376: else { -23376: inf_sign = -Parma_Polyhedra_Library::infinity_sign(y); -23376: } -23376: if (inf_sign < 0) { -23376: return assign(MINUS_INFINITY); -23376: } -23376: else if (inf_sign > 0) { -23376: return assign(PLUS_INFINITY); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl; -23376: Result ru; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_lower; To_Boundary& to_lower = holder_to_lower.item(); -23376: rl = Boundary_NS::sub_assign(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: ru = Boundary_NS::sub_assign(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: assign_or_swap(lower(), to_lower); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: # 708 "../../src/Interval_inlines.hh" -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::mul_assign(const From1& x, const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x) || check_empty_arg(y)) { -23376: return assign(EMPTY); -23376: } -23376: int xls = sgn_b(LOWER, f_lower(x), f_info(x)); -23376: int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x)); -23376: int yls = sgn_b(LOWER, f_lower(y), f_info(y)); -23376: int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y)); -23376: int inf_sign = Parma_Polyhedra_Library::infinity_sign(x); -23376: int ls; -23376: int us; -23376: if (inf_sign != 0) { -23376: ls = yls; -23376: us = yus; -23376: goto inf; -23376: } -23376: else { -23376: inf_sign = Parma_Polyhedra_Library::infinity_sign(y); -23376: if (inf_sign != 0) { -23376: ls = xls; -23376: us = xus; -23376: inf: -23376: if (ls == 0 && us == 0) { -23376: return assign(EMPTY); -23376: } -23376: if (ls == -us) { -23376: return set_infinities(); -23376: } -23376: if (ls < 0 || us < 0) { -23376: inf_sign = -inf_sign; -23376: } -23376: if (inf_sign < 0) { -23376: return assign(MINUS_INFINITY); -23376: } -23376: else { -23376: return assign(PLUS_INFINITY); -23376: } -23376: } -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl; -23376: Result ru; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_lower; To_Boundary& to_lower = holder_to_lower.item(); -23376: -23376: if (xls >= 0) { -23376: if (yls >= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: else if (yus <= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: else { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: } -23376: else if (xus <= 0) { -23376: if (yls >= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: else if (yus <= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: else { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: } -23376: else if (yls >= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: else if (yus <= 0) { -23376: -23376: rl = mul_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = mul_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; To_Boundary& tmp = holder_tmp.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp_info; To_Info& tmp_info = holder_tmp_info.item(); -23376: tmp_info.clear(); -23376: Result tmp_r; -23376: tmp_r = Boundary_NS::mul_assign(LOWER, tmp, tmp_info, -23376: UPPER, f_upper(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: rl = Boundary_NS::mul_assign(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: if (gt(LOWER, to_lower, to_info, LOWER, tmp, tmp_info)) { -23376: to_lower = tmp; -23376: rl = tmp_r; -23376: } -23376: tmp_info.clear(); -23376: tmp_r = Boundary_NS::mul_assign(UPPER, tmp, tmp_info, -23376: UPPER, f_upper(x), f_info(x), -23376: UPPER, f_upper(y), f_info(y)); -23376: ru = Boundary_NS::mul_assign(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), -23376: LOWER, f_lower(y), f_info(y)); -23376: if (lt(UPPER, upper(), to_info, UPPER, tmp, tmp_info)) { -23376: upper() = tmp; -23376: ru = tmp_r; -23376: } -23376: } -23376: assign_or_swap(lower(), to_lower); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: # 883 "../../src/Interval_inlines.hh" -23376: template -23376: template -23376: inline typename Enable_If<((Is_Singleton::value -23376: || Is_Interval::value) -23376: && (Is_Singleton::value -23376: || Is_Interval::value)), I_Result>::type -23376: Interval::div_assign(const From1& x, const From2& y) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (check_empty_arg(x) || check_empty_arg(y)) { -23376: return assign(EMPTY); -23376: } -23376: int yls = sgn_b(LOWER, f_lower(y), f_info(y)); -23376: int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y)); -23376: if (yls == 0 && yus == 0) { -23376: return assign(EMPTY); -23376: } -23376: int inf_sign = Parma_Polyhedra_Library::infinity_sign(x); -23376: if (inf_sign != 0) { -23376: if (Parma_Polyhedra_Library::infinity_sign(y) != 0) { -23376: return assign(EMPTY); -23376: } -23376: if (yls == -yus) { -23376: return set_infinities(); -23376: } -23376: if (yls < 0 || yus < 0) { -23376: inf_sign = -inf_sign; -23376: } -23376: if (inf_sign < 0) { -23376: return assign(MINUS_INFINITY); -23376: } -23376: else { -23376: return assign(PLUS_INFINITY); -23376: } -23376: } -23376: int xls = sgn_b(LOWER, f_lower(x), f_info(x)); -23376: int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x)); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_info; To_Info& to_info = holder_to_info.item(); -23376: to_info.clear(); -23376: Result rl; -23376: Result ru; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_to_lower; To_Boundary& to_lower = holder_to_lower.item(); -23376: if (yls >= 0) { -23376: if (xls >= 0) { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: else if (xus <= 0) { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: else { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: } -23376: else if (yus <= 0) { -23376: if (xls >= 0) { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: } -23376: else if (xus <= 0) { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: LOWER, f_lower(y), f_info(y), yls); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: else { -23376: rl = div_assign_z(LOWER, to_lower, to_info, -23376: UPPER, f_upper(x), f_info(x), xus, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: ru = div_assign_z(UPPER, upper(), to_info, -23376: LOWER, f_lower(x), f_info(x), xls, -23376: UPPER, f_upper(y), f_info(y), yus); -23376: } -23376: } -23376: else { -23376: return static_cast(assign(UNIVERSE) | I_SINGULARITIES); -23376: } -23376: assign_or_swap(lower(), to_lower); -23376: assign_or_swap(info(), to_info); -23376: ((void) 0); -23376: return combine(rl, ru); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator+(const Interval& x, const T& y) { -23376: Interval z; -23376: z.add_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator+(const T& x, const Interval& y) { -23376: Interval z; -23376: z.add_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline Interval -23376: operator+(const Interval& x, const Interval& y) { -23376: Interval z; -23376: z.add_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator-(const Interval& x, const T& y) { -23376: Interval z; -23376: z.sub_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator-(const T& x, const Interval& y) { -23376: Interval z; -23376: z.sub_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline Interval -23376: operator-(const Interval& x, const Interval& y) { -23376: Interval z; -23376: z.sub_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator*(const Interval& x, const T& y) { -23376: Interval z; -23376: z.mul_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator*(const T& x, const Interval& y) { -23376: Interval z; -23376: z.mul_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline Interval -23376: operator*(const Interval& x, const Interval& y) { -23376: Interval z; -23376: z.mul_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator/(const Interval& x, const T& y) { -23376: Interval z; -23376: z.div_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, Interval >::type -23376: operator/(const T& x, const Interval& y) { -23376: Interval z; -23376: z.div_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline Interval -23376: operator/(const Interval& x, const Interval& y) { -23376: Interval z; -23376: z.div_assign(x, y); -23376: return z; -23376: } -23376: -23376: template -23376: inline std::ostream& -23376: operator<<(std::ostream& os, const Interval& x) { -23376: if (check_empty_arg(x)) { -23376: return os << "[]"; -23376: } -23376: if (x.is_singleton()) { -23376: output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED); -23376: return os; -23376: } -23376: os << (x.lower_is_open() ? "(" : "["); -23376: if (x.info().get_boundary_property(LOWER, SPECIAL)) { -23376: os << "-inf"; -23376: } -23376: else { -23376: output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED); -23376: } -23376: os << ", "; -23376: if (x.info().get_boundary_property(UPPER, SPECIAL)) { -23376: os << "+inf"; -23376: } -23376: else { -23376: output(os, x.upper(), Numeric_Format(), ROUND_NOT_NEEDED); -23376: } -23376: os << (x.upper_is_open() ? ")" : "]"); -23376: return os; -23376: } -23376: -23376: template -23376: inline void -23376: Interval::ascii_dump(std::ostream& s) const { -23376: using Parma_Polyhedra_Library::ascii_dump; -23376: s << "info "; -23376: info().ascii_dump(s); -23376: s << " lower "; -23376: ascii_dump(s, lower()); -23376: s << " upper "; -23376: ascii_dump(s, upper()); -23376: s << '\n'; -23376: } -23376: -23376: template -23376: inline bool -23376: Interval::ascii_load(std::istream& s) { -23376: using Parma_Polyhedra_Library::ascii_load; -23376: std::string str; -23376: if (!(s >> str) || str != "info") { -23376: return false; -23376: } -23376: if (!info().ascii_load(s)) { -23376: return false; -23376: } -23376: if (!(s >> str) || str != "lower") { -23376: return false; -23376: } -23376: if (!ascii_load(s, lower())) { -23376: return false; -23376: } -23376: if (!(s >> str) || str != "upper") { -23376: return false; -23376: } -23376: if (!ascii_load(s, upper())) { -23376: return false; -23376: } -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template struct Select_Temp_Boundary_Type; -23376: -23376: template -23376: struct Select_Temp_Boundary_Type { -23376: typedef Interval_Boundary_Type type; -23376: }; -23376: # 1170 "../../src/Interval_inlines.hh" -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: template <> -23376: struct Select_Temp_Boundary_Type { -23376: typedef signed long long type; -23376: }; -23376: -23376: -23376: template -23376: inline void -23376: swap(Interval& x, Interval& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 779 "../../src/Interval_defs.hh" 2 -23376: # 1 "../../src/Interval_templates.hh" 1 -23376: # 29 "../../src/Interval_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: Interval::lower_extend(const C& c) { -23376: ((void) 0); -23376: bool open; -23376: switch (c.rel()) { -23376: case V_LGE: -23376: return lower_extend(); -23376: case V_NAN: -23376: return I_NOT_EMPTY | I_EXACT | I_UNCHANGED; -23376: case V_GT: -23376: open = true; -23376: break; -23376: case V_GE: -23376: case V_EQ: -23376: open = false; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return I_NOT_EMPTY | I_EXACT | I_UNCHANGED; -23376: } -23376: min_assign(LOWER, lower(), info(), LOWER, c.value(), f_info(c.value(), open)); -23376: ((void) 0); -23376: return I_ANY; -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If::value, I_Result>::type -23376: Interval::upper_extend(const C& c) { -23376: ((void) 0); -23376: bool open; -23376: switch (c.rel()) { -23376: case V_LGE: -23376: return lower_extend(); -23376: case V_NAN: -23376: return I_NOT_EMPTY | I_EXACT | I_UNCHANGED; -23376: case V_LT: -23376: open = true; -23376: break; -23376: case V_LE: -23376: case V_EQ: -23376: open = false; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return I_NOT_EMPTY | I_EXACT | I_UNCHANGED; -23376: } -23376: max_assign(UPPER, upper(), info(), UPPER, c.value(), f_info(c.value(), open)); -23376: ((void) 0); -23376: return I_ANY; -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If::value, void>::type -23376: Interval::CC76_widening_assign(const From& y, -23376: Iterator first, -23376: Iterator last) { -23376: -23376: ((void) 0); -23376: Interval& x = *this; -23376: -23376: -23376: if (!x.upper_is_boundary_infinity()) { -23376: Boundary& x_ub = x.upper(); -23376: const Boundary& y_ub = y.upper(); -23376: ((void) 0); -23376: if (y_ub < x_ub) { -23376: Iterator k = std::lower_bound(first, last, x_ub); -23376: if (k != last) { -23376: if (x_ub < *k) { -23376: x_ub = *k; -23376: } -23376: } -23376: else { -23376: x.upper_extend(); -23376: } -23376: } -23376: } -23376: -23376: -23376: if (!x.lower_is_boundary_infinity()) { -23376: Boundary& x_lb = x.lower(); -23376: const Boundary& y_lb = y.lower(); -23376: ((void) 0); -23376: if (y_lb > x_lb) { -23376: Iterator k = std::lower_bound(first, last, x_lb); -23376: if (k != last) { -23376: if (x_lb < *k) { -23376: if (k != first) { -23376: x_lb = *--k; -23376: } -23376: else { -23376: x.lower_extend(); -23376: } -23376: } -23376: } -23376: else { -23376: if (k != first) { -23376: x_lb = *--k; -23376: } -23376: else { -23376: x.lower_extend(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: Interval::Interval(const char* s) { -23376: -23376: Boundary lower_bound; -23376: Result lower_r = assign_r(lower_bound, s, ROUND_DOWN); -23376: if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) { -23376: throw std::invalid_argument("PPL::Interval(const char* s)" -23376: " with s invalid"); -23376: } -23376: lower_r = result_relation_class(lower_r); -23376: -23376: -23376: Boundary upper_bound; -23376: Result upper_r = assign_r(upper_bound, s, ROUND_UP); -23376: ((void) 0); -23376: upper_r = result_relation_class(upper_r); -23376: -23376: -23376: bool lower_open = false; -23376: bool upper_open = false; -23376: bool lower_boundary_infinity = false; -23376: bool upper_boundary_infinity = false; -23376: switch (lower_r) { -23376: case V_EQ: -23376: case V_GE: -23376: break; -23376: case V_GT: -23376: lower_open = true; -23376: break; -23376: case V_GT_MINUS_INFINITY: -23376: lower_open = true; -23376: -23376: case V_EQ_MINUS_INFINITY: -23376: lower_boundary_infinity = true; -23376: break; -23376: case V_EQ_PLUS_INFINITY: -23376: case V_LT_PLUS_INFINITY: -23376: if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) { -23376: assign(UNIVERSE); -23376: } -23376: else { -23376: assign(EMPTY); -23376: } -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: switch (upper_r) { -23376: case V_EQ: -23376: case V_LE: -23376: break; -23376: case V_LT: -23376: upper_open = true; -23376: break; -23376: case V_EQ_MINUS_INFINITY: -23376: case V_GT_MINUS_INFINITY: -23376: if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) { -23376: assign(UNIVERSE); -23376: } -23376: else { -23376: assign(EMPTY); -23376: } -23376: break; -23376: case V_LT_PLUS_INFINITY: -23376: upper_open = true; -23376: -23376: case V_EQ_PLUS_INFINITY: -23376: upper_boundary_infinity = true; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: if (!lower_boundary_infinity -23376: && !upper_boundary_infinity -23376: && (lower_bound > upper_bound -23376: || (lower_open && lower_bound == upper_bound))) { -23376: assign(EMPTY); -23376: } -23376: else { -23376: if (lower_boundary_infinity) { -23376: set_minus_infinity(LOWER, lower(), info(), lower_open); -23376: } -23376: else { -23376: Boundary_NS::assign(LOWER, lower(), info(), -23376: LOWER, lower_bound, SCALAR_INFO, lower_open); -23376: } -23376: if (upper_boundary_infinity) { -23376: set_plus_infinity(UPPER, upper(), info(), upper_open); -23376: } -23376: else { -23376: Boundary_NS::assign(UPPER, upper(), info(), -23376: UPPER, upper_bound, SCALAR_INFO, upper_open); -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: inline std::istream& -23376: operator>>(std::istream& is, Interval& x) { -23376: Boundary lower_bound; -23376: Boundary upper_bound; -23376: bool lower_boundary_infinity = false; -23376: bool upper_boundary_infinity = false; -23376: bool lower_open = false; -23376: bool upper_open = false; -23376: Result lower_r; -23376: Result upper_r; -23376: -23376: -23376: char c; -23376: do { -23376: if (!is.get(c)) { -23376: goto fail; -23376: } -23376: } while (is_space(c)); -23376: -23376: -23376: if (c == '(') { -23376: lower_open = true; -23376: } -23376: else if (c == '[') { -23376: if (!is.get(c)) { -23376: goto fail; -23376: } -23376: if (c == ']') { -23376: -23376: x.assign(EMPTY); -23376: return is; -23376: } -23376: else { -23376: is.unget(); -23376: } -23376: } -23376: else { -23376: goto unexpected_char; -23376: } -23376: -23376: -23376: lower_r = input(lower_bound, is, ROUND_DOWN); -23376: if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) { -23376: goto fail; -23376: } -23376: lower_r = result_relation_class(lower_r); -23376: -23376: -23376: do { -23376: if (!is.get(c)) { -23376: goto fail; -23376: } -23376: } while (is_space(c)); -23376: if (c != ',') { -23376: goto unexpected_char; -23376: } -23376: -23376: -23376: upper_r = input(upper_bound, is, ROUND_UP); -23376: if (upper_r == V_CVT_STR_UNK || upper_r == V_NAN) { -23376: goto fail; -23376: } -23376: upper_r = result_relation_class(upper_r); -23376: -23376: -23376: do { -23376: if (!is.get(c)) { -23376: goto fail; -23376: } -23376: } while (is_space(c)); -23376: if (c == ')') { -23376: upper_open = true; -23376: } -23376: else if (c != ']') { -23376: unexpected_char: -23376: is.unget(); -23376: fail: -23376: is.setstate(std::ios::failbit); -23376: return is; -23376: } -23376: -23376: -23376: switch (lower_r) { -23376: case V_EQ: -23376: case V_GE: -23376: break; -23376: case V_GT: -23376: lower_open = true; -23376: break; -23376: case V_GT_MINUS_INFINITY: -23376: lower_open = true; -23376: -23376: case V_EQ_MINUS_INFINITY: -23376: lower_boundary_infinity = true; -23376: break; -23376: case V_EQ_PLUS_INFINITY: -23376: case V_LT_PLUS_INFINITY: -23376: if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) { -23376: x.assign(UNIVERSE); -23376: } -23376: else { -23376: x.assign(EMPTY); -23376: } -23376: return is; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: switch (upper_r) { -23376: case V_EQ: -23376: case V_LE: -23376: break; -23376: case V_LT: -23376: upper_open = true; -23376: break; -23376: case V_GT_MINUS_INFINITY: -23376: upper_open = true; -23376: -23376: case V_EQ_MINUS_INFINITY: -23376: if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) { -23376: x.assign(UNIVERSE); -23376: } -23376: else { -23376: x.assign(EMPTY); -23376: } -23376: return is; -23376: case V_EQ_PLUS_INFINITY: -23376: case V_LT_PLUS_INFINITY: -23376: upper_boundary_infinity = true; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: if (!lower_boundary_infinity -23376: && !upper_boundary_infinity -23376: && (lower_bound > upper_bound -23376: || (lower_open && lower_bound == upper_bound))) { -23376: x.assign(EMPTY); -23376: } -23376: else { -23376: if (lower_boundary_infinity) { -23376: set_minus_infinity(LOWER, x.lower(), x.info(), lower_open); -23376: } -23376: else { -23376: assign(LOWER, x.lower(), x.info(), -23376: LOWER, lower_bound, SCALAR_INFO, lower_open); -23376: } -23376: if (upper_boundary_infinity) { -23376: set_plus_infinity(UPPER, x.upper(), x.info(), upper_open); -23376: } -23376: else { -23376: assign(UPPER, x.upper(), x.info(), -23376: UPPER, upper_bound, SCALAR_INFO, upper_open); -23376: } -23376: } -23376: return is; -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If::value, bool>::type -23376: Interval::simplify_using_context_assign(const From& y) { -23376: -23376: if (lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y))) { -23376: lower_extend(); -23376: return false; -23376: } -23376: if (gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y))) { -23376: upper_extend(); -23376: return false; -23376: } -23376: -23376: if (!upper_is_boundary_infinity() && !y.upper_is_boundary_infinity() -23376: && y.upper() <= upper()) { -23376: upper_extend(); -23376: } -23376: -23376: if (!lower_is_boundary_infinity() && !y.lower_is_boundary_infinity() -23376: && y.lower() >= lower()) { -23376: lower_extend(); -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If::value, void>::type -23376: Interval::empty_intersection_assign(const From&) { -23376: -23376: assign(EMPTY); -23376: } -23376: -23376: } -23376: # 780 "../../src/Interval_defs.hh" 2 -23376: # 28 "../../src/Integer_Interval.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: struct Integer_Interval_Info_Policy { -23376: enum const_bool_value_store_special { store_special = (true) }; -23376: enum const_bool_value_store_open { store_open = (false) }; -23376: enum const_bool_value_cache_empty { cache_empty = (true) }; -23376: enum const_bool_value_cache_singleton { cache_singleton = (true) }; -23376: enum anonymous_enum_next_bit { next_bit = (0) }; -23376: enum const_bool_value_may_be_empty { may_be_empty = (true) }; -23376: enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) }; -23376: enum const_bool_value_check_empty_result { check_empty_result = (false) }; -23376: enum const_bool_value_check_inexact { check_inexact = (false) }; -23376: }; -23376: -23376: typedef Interval_Info_Bitset Integer_Interval_Info; -23376: -23376: -23376: -23376: -23376: typedef Interval Integer_Interval; -23376: -23376: } -23376: # 7 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/initializer.hh" 1 -23376: # 27 "../../src/initializer.hh" -23376: # 1 "../../src/Init_defs.hh" 1 -23376: # 30 "../../src/Init_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 40 "../../src/Init_defs.hh" -23376: void set_rounding_for_PPL(); -23376: # 55 "../../src/Init_defs.hh" -23376: void restore_pre_PPL_rounding(); -23376: -23376: } -23376: # 72 "../../src/Init_defs.hh" -23376: class Parma_Polyhedra_Library::Init { -23376: public: -23376: -23376: Init(); -23376: -23376: -23376: ~Init(); -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const unsigned DEFAULT_IRRATIONAL_PRECISION = 128U; -23376: -23376: -23376: static unsigned int count; -23376: static fpu_rounding_direction_type old_rounding_direction; -23376: -23376: friend void set_rounding_for_PPL(); -23376: friend void restore_pre_PPL_rounding(); -23376: }; -23376: -23376: # 1 "../../src/Init_inlines.hh" 1 -23376: # 30 "../../src/Init_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: set_rounding_for_PPL() { -23376: -23376: -23376: -23376: } -23376: -23376: inline void -23376: restore_pre_PPL_rounding() { -23376: -23376: -23376: -23376: } -23376: -23376: } -23376: # 98 "../../src/Init_defs.hh" 2 -23376: # 28 "../../src/initializer.hh" 2 -23376: -23376: -23376: -23376: static Parma_Polyhedra_Library::Init Parma_Polyhedra_Library_initializer; -23376: # 48 "../../src/initializer.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: inline void -23376: initialize() { -23376: -23376: -23376: -23376: } -23376: -23376: -23376: inline void -23376: finalize() { -23376: -23376: -23376: -23376: } -23376: -23376: } -23376: # 8 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/Linear_Expression_Impl_defs.hh" 1 -23376: # 27 "../../src/Linear_Expression_Impl_defs.hh" -23376: # 1 "../../src/Linear_Expression_Impl_types.hh" 1 -23376: # 16 "../../src/Linear_Expression_Impl_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Linear_Expression_Impl; -23376: -23376: } -23376: # 28 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: # 1 "../../src/Linear_Expression_Interface_defs.hh" 1 -23376: # 27 "../../src/Linear_Expression_Interface_defs.hh" -23376: # 1 "../../src/Linear_Expression_Interface_types.hh" 1 -23376: # 16 "../../src/Linear_Expression_Interface_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Linear_Expression_Interface; -23376: -23376: } -23376: # 28 "../../src/Linear_Expression_Interface_defs.hh" 2 -23376: # 1 "../../src/Coefficient_defs.hh" 1 -23376: # 27 "../../src/Coefficient_defs.hh" -23376: # 1 "../../src/Coefficient_types.hh" 1 -23376: # 19 "../../src/Coefficient_types.hh" -23376: # 1 "../../src/GMP_Integer_types.hh" 1 -23376: # 20 "../../src/GMP_Integer_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 31 "../../src/GMP_Integer_types.hh" -23376: typedef mpz_class GMP_Integer; -23376: -23376: -23376: -23376: -23376: -23376: template <> -23376: struct Coefficient_traits_template { -23376: -23376: typedef const GMP_Integer& const_reference; -23376: }; -23376: -23376: } -23376: # 20 "../../src/Coefficient_types.hh" 2 -23376: # 152 "../../src/Coefficient_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 172 "../../src/Coefficient_types.hh" -23376: typedef mpz_class Coefficient; -23376: -23376: -23376: -23376: -23376: -23376: typedef Coefficient_traits_template Coefficient_traits; -23376: -23376: } -23376: # 28 "../../src/Coefficient_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "../../src/GMP_Integer_defs.hh" 1 -23376: # 31 "../../src/GMP_Integer_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: const mpz_class& raw_value(const GMP_Integer& x); -23376: -23376: -23376: -23376: mpz_class& raw_value(GMP_Integer& x); -23376: # 51 "../../src/GMP_Integer_defs.hh" -23376: void neg_assign(GMP_Integer& x); -23376: -23376: -23376: -23376: void neg_assign(GMP_Integer& x, const GMP_Integer& y); -23376: -23376: -23376: -23376: void abs_assign(GMP_Integer& x); -23376: -23376: -23376: -23376: void abs_assign(GMP_Integer& x, const GMP_Integer& y); -23376: -23376: -23376: -23376: void rem_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void gcd_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void lcm_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void add_mul_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void sub_mul_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp); -23376: -23376: -23376: -23376: void div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp); -23376: # 113 "../../src/GMP_Integer_defs.hh" -23376: void exact_div_assign(GMP_Integer& x, -23376: const GMP_Integer& y, const GMP_Integer& z); -23376: -23376: -23376: -23376: void sqrt_assign(GMP_Integer& x, const GMP_Integer& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int cmp(const GMP_Integer& x, const GMP_Integer& y); -23376: -23376: -23376: -23376: } -23376: -23376: # 1 "../../src/GMP_Integer_inlines.hh" 1 -23376: # 29 "../../src/GMP_Integer_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: neg_assign(GMP_Integer& x) { -23376: -23376: # 33 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_neg -23376: # 33 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), x.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: neg_assign(GMP_Integer& x, const GMP_Integer& y) { -23376: -23376: # 38 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_neg -23376: # 38 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: abs_assign(GMP_Integer& x) { -23376: -23376: # 43 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_abs -23376: # 43 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), x.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: abs_assign(GMP_Integer& x, const GMP_Integer& y) { -23376: -23376: # 48 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_abs -23376: # 48 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: gcd_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 53 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_gcd -23376: # 53 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: rem_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 58 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_tdiv_r -23376: # 58 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t, -23376: const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 64 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_gcdext -23376: # 64 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), -23376: s.get_mpz_t(), t.get_mpz_t(), -23376: y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: lcm_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 71 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_lcm -23376: # 71 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: add_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 76 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_addmul -23376: # 76 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: sub_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: -23376: # 81 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_submul -23376: # 81 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) { -23376: -23376: # 86 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_mul_2exp -23376: # 86 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), exp); -23376: } -23376: -23376: inline void -23376: div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) { -23376: -23376: # 91 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_tdiv_q_2exp -23376: # 91 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), exp); -23376: } -23376: -23376: inline void -23376: exact_div_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) { -23376: ((void) 0); -23376: -23376: # 97 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_divexact -23376: # 97 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t()); -23376: } -23376: -23376: inline void -23376: sqrt_assign(GMP_Integer& x, const GMP_Integer& y) { -23376: -23376: # 102 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_sqrt -23376: # 102 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t()); -23376: } -23376: -23376: inline int -23376: cmp(const GMP_Integer& x, const GMP_Integer& y) { -23376: return -23376: # 107 "../../src/GMP_Integer_inlines.hh" 3 4 -23376: __gmpz_cmp -23376: # 107 "../../src/GMP_Integer_inlines.hh" -23376: (x.get_mpz_t(), y.get_mpz_t()); -23376: } -23376: -23376: inline const mpz_class& -23376: raw_value(const GMP_Integer& x) { -23376: return x; -23376: } -23376: -23376: inline mpz_class& -23376: raw_value(GMP_Integer& x) { -23376: return x; -23376: } -23376: -23376: } -23376: # 133 "../../src/GMP_Integer_defs.hh" 2 -23376: # 36 "../../src/Coefficient_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: void Coefficient_constants_initialize(); -23376: -23376: -23376: -23376: -23376: void Coefficient_constants_finalize(); -23376: -23376: -23376: Coefficient_traits::const_reference Coefficient_zero(); -23376: -23376: -23376: Coefficient_traits::const_reference Coefficient_one(); -23376: -23376: } -23376: -23376: # 1 "../../src/Coefficient_inlines.hh" 1 -23376: # 27 "../../src/Coefficient_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 57 "../../src/Coefficient_inlines.hh" -23376: inline Coefficient_traits::const_reference -23376: Coefficient_zero() { -23376: extern const Coefficient* Coefficient_zero_p; -23376: return *Coefficient_zero_p; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Coefficient_one() { -23376: extern const Coefficient* Coefficient_one_p; -23376: ((void) 0); -23376: return *Coefficient_one_p; -23376: } -23376: -23376: -23376: } -23376: # 61 "../../src/Coefficient_defs.hh" 2 -23376: # 29 "../../src/Linear_Expression_Interface_defs.hh" 2 -23376: -23376: # 1 "../../src/Variables_Set_types.hh" 1 -23376: # 16 "../../src/Variables_Set_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Variables_Set; -23376: -23376: } -23376: # 31 "../../src/Linear_Expression_Interface_defs.hh" 2 -23376: # 1 "../../src/Dense_Row_types.hh" 1 -23376: # 16 "../../src/Dense_Row_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Dense_Row; -23376: -23376: } -23376: # 32 "../../src/Linear_Expression_Interface_defs.hh" 2 -23376: # 1 "../../src/Sparse_Row_types.hh" 1 -23376: # 16 "../../src/Sparse_Row_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Sparse_Row; -23376: -23376: } -23376: # 33 "../../src/Linear_Expression_Interface_defs.hh" 2 -23376: # 51 "../../src/Linear_Expression_Interface_defs.hh" -23376: class Parma_Polyhedra_Library::Linear_Expression_Interface { -23376: public: -23376: virtual ~Linear_Expression_Interface(); -23376: -23376: virtual bool OK() const = 0; -23376: -23376: -23376: virtual Representation representation() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: class const_iterator_interface { -23376: public: -23376: typedef std::bidirectional_iterator_tag iterator_category; -23376: typedef const Coefficient value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef Coefficient_traits::const_reference reference; -23376: -23376: -23376: -23376: -23376: virtual const_iterator_interface* clone() const = 0; -23376: -23376: virtual ~const_iterator_interface(); -23376: -23376: -23376: -23376: -23376: virtual void operator++() = 0; -23376: -23376: -23376: -23376: -23376: virtual void operator--() = 0; -23376: -23376: -23376: virtual reference operator*() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual Variable variable() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool operator==(const const_iterator_interface& x) const = 0; -23376: }; -23376: -23376: -23376: -23376: virtual const_iterator_interface* begin() const = 0; -23376: -23376: -23376: -23376: virtual const_iterator_interface* end() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual const_iterator_interface* lower_bound(Variable v) const = 0; -23376: -23376: -23376: virtual dimension_type space_dimension() const = 0; -23376: -23376: -23376: virtual void set_space_dimension(dimension_type n) = 0; -23376: -23376: -23376: virtual Coefficient_traits::const_reference -23376: coefficient(Variable v) const = 0; -23376: -23376: -23376: virtual void -23376: set_coefficient(Variable v, Coefficient_traits::const_reference n) = 0; -23376: -23376: -23376: virtual Coefficient_traits::const_reference inhomogeneous_term() const = 0; -23376: -23376: -23376: virtual void -23376: set_inhomogeneous_term(Coefficient_traits::const_reference n) = 0; -23376: # 158 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual void -23376: linear_combine(const Linear_Expression_Interface& y, Variable v) = 0; -23376: -23376: -23376: -23376: virtual void linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) = 0; -23376: -23376: -23376: -23376: virtual void linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) = 0; -23376: -23376: -23376: virtual void swap_space_dimensions(Variable v1, Variable v2) = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void remove_space_dimensions(const Variables_Set& vars) = 0; -23376: -23376: -23376: -23376: virtual void shift_space_dimensions(Variable v, dimension_type n) = 0; -23376: # 200 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual void -23376: permute_space_dimensions(const std::vector& cycle) = 0; -23376: -23376: -23376: virtual bool is_zero() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool all_homogeneous_terms_are_zero() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual memory_size_type total_memory_in_bytes() const = 0; -23376: -23376: -23376: virtual memory_size_type external_memory_in_bytes() const = 0; -23376: -23376: -23376: virtual void ascii_dump(std::ostream& s) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool ascii_load(std::istream& s) = 0; -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void normalize() = 0; -23376: -23376: -23376: -23376: virtual void sign_normalize() = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void negate(dimension_type first, dimension_type last) = 0; -23376: -23376: virtual Linear_Expression_Interface& -23376: operator+=(Coefficient_traits::const_reference n) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator-=(Coefficient_traits::const_reference n) = 0; -23376: # 269 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual int compare(const Linear_Expression_Interface& y) const = 0; -23376: -23376: virtual Linear_Expression_Interface& -23376: operator+=(const Linear_Expression_Interface& e2) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator+=(const Variable v) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator-=(const Linear_Expression_Interface& e2) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator-=(const Variable v) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator*=(Coefficient_traits::const_reference n) = 0; -23376: virtual Linear_Expression_Interface& -23376: operator/=(Coefficient_traits::const_reference n) = 0; -23376: -23376: virtual void negate() = 0; -23376: -23376: virtual Linear_Expression_Interface& -23376: add_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0; -23376: -23376: virtual Linear_Expression_Interface& -23376: sub_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0; -23376: -23376: virtual void add_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& e2) = 0; -23376: -23376: virtual void sub_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& e2) = 0; -23376: -23376: virtual void print(std::ostream& s) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool all_zeroes(const Variables_Set& vars) const = 0; -23376: -23376: -23376: -23376: virtual bool have_a_common_variable(const Linear_Expression_Interface& x, -23376: Variable first, Variable last) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual Coefficient_traits::const_reference get(dimension_type i) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void set(dimension_type i, Coefficient_traits::const_reference n) = 0; -23376: # 330 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual bool all_zeroes(dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type -23376: num_zeroes(dimension_type start, dimension_type end) const = 0; -23376: # 348 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual Coefficient gcd(dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: virtual void exact_div_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end) = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void mul_assign(Coefficient_traits::const_reference n, -23376: dimension_type start, dimension_type end) = 0; -23376: # 381 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual void -23376: linear_combine(const Linear_Expression_Interface& y, dimension_type i) = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type last_nonzero() const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type -23376: last_nonzero(dimension_type first, dimension_type last) const = 0; -23376: -23376: -23376: -23376: virtual dimension_type -23376: first_nonzero(dimension_type first, dimension_type last) const = 0; -23376: # 431 "../../src/Linear_Expression_Interface_defs.hh" -23376: virtual bool -23376: all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void -23376: scalar_product_assign(Coefficient& result, -23376: const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual int -23376: scalar_product_sign(const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void -23376: has_a_free_dimension_helper(std::set& x) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x, -23376: dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void get_row(Dense_Row& r) const = 0; -23376: -23376: -23376: -23376: -23376: -23376: virtual void get_row(Sparse_Row& r) const = 0; -23376: }; -23376: # 29 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/Variables_Set_defs.hh" 1 -23376: # 33 "../../src/Variables_Set_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& -23376: operator<<(std::ostream& s, const Variables_Set& vs); -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: class Parma_Polyhedra_Library::Variables_Set -23376: : public std::set { -23376: private: -23376: typedef std::set Base; -23376: -23376: public: -23376: -23376: Variables_Set(); -23376: -23376: -23376: explicit Variables_Set(const Variable v); -23376: # 68 "../../src/Variables_Set_defs.hh" -23376: Variables_Set(const Variable v, const Variable w); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: void insert(Variable v); -23376: -23376: -23376: -23376: using Base::insert; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: }; -23376: -23376: # 1 "../../src/Variables_Set_inlines.hh" 1 -23376: # 30 "../../src/Variables_Set_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Variables_Set::Variables_Set() -23376: : Base() { -23376: } -23376: -23376: inline void -23376: Variables_Set::insert(const Variable v) { -23376: insert(v.id()); -23376: } -23376: -23376: inline -23376: Variables_Set::Variables_Set(const Variable v) -23376: : Base() { -23376: insert(v); -23376: } -23376: -23376: inline dimension_type -23376: Variables_Set::max_space_dimension() { -23376: return Variable::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: Variables_Set::space_dimension() const { -23376: reverse_iterator i = rbegin(); -23376: return (i == rend()) ? 0 : (*i + 1); -23376: } -23376: -23376: inline memory_size_type -23376: Variables_Set::external_memory_in_bytes() const { -23376: -23376: -23376: -23376: enum color { red, black }; -23376: return size() * (sizeof(color) + 3*sizeof(void*) + sizeof(dimension_type)); -23376: } -23376: -23376: inline memory_size_type -23376: Variables_Set::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: } -23376: # 106 "../../src/Variables_Set_defs.hh" 2 -23376: # 32 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: # 1 "../../src/Dense_Row_defs.hh" 1 -23376: # 33 "../../src/Dense_Row_defs.hh" -23376: # 1 "/usr/include/c++/8/memory" 1 3 -23376: # 46 "/usr/include/c++/8/memory" 3 -23376: -23376: # 47 "/usr/include/c++/8/memory" 3 -23376: # 67 "/usr/include/c++/8/memory" 3 -23376: # 1 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 1 3 -23376: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3 -23376: -23376: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class raw_storage_iterator -23376: : public iterator -23376: { -23376: protected: -23376: _OutputIterator _M_iter; -23376: -23376: public: -23376: explicit -23376: raw_storage_iterator(_OutputIterator __x) -23376: : _M_iter(__x) {} -23376: -23376: raw_storage_iterator& -23376: operator*() { return *this; } -23376: -23376: raw_storage_iterator& -23376: operator=(const _Tp& __element) -23376: { -23376: std::_Construct(std::__addressof(*_M_iter), __element); -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: raw_storage_iterator& -23376: operator=(_Tp&& __element) -23376: { -23376: std::_Construct(std::__addressof(*_M_iter), std::move(__element)); -23376: return *this; -23376: } -23376: -23376: -23376: raw_storage_iterator& -23376: operator++() -23376: { -23376: ++_M_iter; -23376: return *this; -23376: } -23376: -23376: raw_storage_iterator -23376: operator++(int) -23376: { -23376: raw_storage_iterator __tmp = *this; -23376: ++_M_iter; -23376: return __tmp; -23376: } -23376: -23376: -23376: -23376: _OutputIterator base() const { return _M_iter; } -23376: }; -23376: -23376: -23376: } -23376: # 68 "/usr/include/c++/8/memory" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/ext/concurrence.h" 1 3 -23376: # 32 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: -23376: # 33 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; -23376: -23376: -23376: -23376: static const _Lock_policy __default_lock_policy = -23376: -23376: -23376: -23376: _S_atomic; -23376: # 67 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: class __concurrence_lock_error : public std::exception -23376: { -23376: public: -23376: virtual char const* -23376: what() const throw() -23376: { return "__gnu_cxx::__concurrence_lock_error"; } -23376: }; -23376: -23376: class __concurrence_unlock_error : public std::exception -23376: { -23376: public: -23376: virtual char const* -23376: what() const throw() -23376: { return "__gnu_cxx::__concurrence_unlock_error"; } -23376: }; -23376: -23376: class __concurrence_broadcast_error : public std::exception -23376: { -23376: public: -23376: virtual char const* -23376: what() const throw() -23376: { return "__gnu_cxx::__concurrence_broadcast_error"; } -23376: }; -23376: -23376: class __concurrence_wait_error : public std::exception -23376: { -23376: public: -23376: virtual char const* -23376: what() const throw() -23376: { return "__gnu_cxx::__concurrence_wait_error"; } -23376: }; -23376: -23376: -23376: inline void -23376: __throw_concurrence_lock_error() -23376: { (throw (__concurrence_lock_error())); } -23376: -23376: inline void -23376: __throw_concurrence_unlock_error() -23376: { (throw (__concurrence_unlock_error())); } -23376: -23376: -23376: inline void -23376: __throw_concurrence_broadcast_error() -23376: { (throw (__concurrence_broadcast_error())); } -23376: -23376: inline void -23376: __throw_concurrence_wait_error() -23376: { (throw (__concurrence_wait_error())); } -23376: -23376: -23376: class __mutex -23376: { -23376: private: -23376: -23376: __gthread_mutex_t _M_mutex = { { 0, 0, 0, 0, 0, { 0 } } }; -23376: -23376: -23376: -23376: -23376: __mutex(const __mutex&); -23376: __mutex& operator=(const __mutex&); -23376: -23376: public: -23376: __mutex() -23376: { -23376: -23376: -23376: -23376: -23376: } -23376: # 147 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: void lock() -23376: { -23376: -23376: if (__gthread_active_p()) -23376: { -23376: if (__gthread_mutex_lock(&_M_mutex) != 0) -23376: __throw_concurrence_lock_error(); -23376: } -23376: -23376: } -23376: -23376: void unlock() -23376: { -23376: -23376: if (__gthread_active_p()) -23376: { -23376: if (__gthread_mutex_unlock(&_M_mutex) != 0) -23376: __throw_concurrence_unlock_error(); -23376: } -23376: -23376: } -23376: -23376: __gthread_mutex_t* gthread_mutex(void) -23376: { return &_M_mutex; } -23376: }; -23376: -23376: class __recursive_mutex -23376: { -23376: private: -23376: -23376: __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } }; -23376: -23376: -23376: -23376: -23376: __recursive_mutex(const __recursive_mutex&); -23376: __recursive_mutex& operator=(const __recursive_mutex&); -23376: -23376: public: -23376: __recursive_mutex() -23376: { -23376: -23376: -23376: -23376: -23376: } -23376: # 202 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: void lock() -23376: { -23376: -23376: if (__gthread_active_p()) -23376: { -23376: if (__gthread_recursive_mutex_lock(&_M_mutex) != 0) -23376: __throw_concurrence_lock_error(); -23376: } -23376: -23376: } -23376: -23376: void unlock() -23376: { -23376: -23376: if (__gthread_active_p()) -23376: { -23376: if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0) -23376: __throw_concurrence_unlock_error(); -23376: } -23376: -23376: } -23376: -23376: __gthread_recursive_mutex_t* gthread_recursive_mutex(void) -23376: { return &_M_mutex; } -23376: }; -23376: -23376: -23376: -23376: -23376: class __scoped_lock -23376: { -23376: public: -23376: typedef __mutex __mutex_type; -23376: -23376: private: -23376: __mutex_type& _M_device; -23376: -23376: __scoped_lock(const __scoped_lock&); -23376: __scoped_lock& operator=(const __scoped_lock&); -23376: -23376: public: -23376: explicit __scoped_lock(__mutex_type& __name) : _M_device(__name) -23376: { _M_device.lock(); } -23376: -23376: ~__scoped_lock() throw() -23376: { _M_device.unlock(); } -23376: }; -23376: -23376: -23376: class __cond -23376: { -23376: private: -23376: -23376: __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; -23376: -23376: -23376: -23376: -23376: __cond(const __cond&); -23376: __cond& operator=(const __cond&); -23376: -23376: public: -23376: __cond() -23376: { -23376: -23376: -23376: -23376: -23376: } -23376: # 280 "/usr/include/c++/8/ext/concurrence.h" 3 -23376: void broadcast() -23376: { -23376: -23376: if (__gthread_active_p()) -23376: { -23376: if (__gthread_cond_broadcast(&_M_cond) != 0) -23376: __throw_concurrence_broadcast_error(); -23376: } -23376: -23376: } -23376: -23376: void wait(__mutex *mutex) -23376: { -23376: -23376: { -23376: if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0) -23376: __throw_concurrence_wait_error(); -23376: } -23376: -23376: } -23376: -23376: void wait_recursive(__recursive_mutex *mutex) -23376: { -23376: -23376: { -23376: if (__gthread_cond_wait_recursive(&_M_cond, -23376: mutex->gthread_recursive_mutex()) -23376: != 0) -23376: __throw_concurrence_wait_error(); -23376: } -23376: -23376: } -23376: }; -23376: -23376: -23376: -23376: } -23376: # 75 "/usr/include/c++/8/memory" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/shared_ptr.h" 1 3 -23376: # 52 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: # 1 "/usr/include/c++/8/bits/shared_ptr_base.h" 1 3 -23376: # 53 "/usr/include/c++/8/bits/shared_ptr_base.h" 3 -23376: # 1 "/usr/include/c++/8/bits/allocated_ptr.h" 1 3 -23376: # 40 "/usr/include/c++/8/bits/allocated_ptr.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: template -23376: struct __allocated_ptr -23376: { -23376: using pointer = typename allocator_traits<_Alloc>::pointer; -23376: using value_type = typename allocator_traits<_Alloc>::value_type; -23376: -23376: -23376: __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept -23376: : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) -23376: { } -23376: -23376: -23376: template>> -23376: __allocated_ptr(_Alloc& __a, _Ptr __ptr) -23376: : _M_alloc(std::__addressof(__a)), -23376: _M_ptr(pointer_traits::pointer_to(*__ptr)) -23376: { } -23376: -23376: -23376: __allocated_ptr(__allocated_ptr&& __gd) noexcept -23376: : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) -23376: { __gd._M_ptr = nullptr; } -23376: -23376: -23376: ~__allocated_ptr() -23376: { -23376: if (_M_ptr != nullptr) -23376: std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); -23376: } -23376: -23376: -23376: __allocated_ptr& -23376: operator=(std::nullptr_t) noexcept -23376: { -23376: _M_ptr = nullptr; -23376: return *this; -23376: } -23376: -23376: -23376: value_type* get() { return std::__to_address(_M_ptr); } -23376: -23376: private: -23376: _Alloc* _M_alloc; -23376: pointer _M_ptr; -23376: }; -23376: -23376: -23376: template -23376: __allocated_ptr<_Alloc> -23376: __allocate_guarded(_Alloc& __a) -23376: { -23376: return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; -23376: } -23376: -23376: -23376: } -23376: # 54 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3 -23376: # 1 "/usr/include/c++/8/bits/refwrap.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/refwrap.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/refwrap.h" 3 -23376: # 43 "/usr/include/c++/8/bits/refwrap.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _Maybe_unary_or_binary_function { }; -23376: -23376: -23376: template -23376: struct _Maybe_unary_or_binary_function<_Res, _T1> -23376: : std::unary_function<_T1, _Res> { }; -23376: -23376: -23376: template -23376: struct _Maybe_unary_or_binary_function<_Res, _T1, _T2> -23376: : std::binary_function<_T1, _T2, _Res> { }; -23376: -23376: template -23376: struct _Mem_fn_traits; -23376: -23376: template -23376: struct _Mem_fn_traits_base -23376: { -23376: using __result_type = _Res; -23376: using __maybe_type -23376: = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>; -23376: using __arity = integral_constant; -23376: }; -23376: # 97 "/usr/include/c++/8/bits/refwrap.h" 3 -23376: 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; }; -23376: 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; }; -23376: 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; }; -23376: # 111 "/usr/include/c++/8/bits/refwrap.h" 3 -23376: template> -23376: struct _Maybe_get_result_type -23376: { }; -23376: -23376: template -23376: struct _Maybe_get_result_type<_Functor, -23376: __void_t> -23376: { typedef typename _Functor::result_type result_type; }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _Weak_result_type_impl -23376: : _Maybe_get_result_type<_Functor> -23376: { }; -23376: -23376: -23376: template -23376: struct _Weak_result_type_impl<_Res(_ArgTypes...) > -23376: { typedef _Res result_type; }; -23376: -23376: -23376: template -23376: struct _Weak_result_type_impl<_Res(_ArgTypes......) > -23376: { typedef _Res result_type; }; -23376: -23376: -23376: template -23376: struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) > -23376: { typedef _Res result_type; }; -23376: -23376: -23376: template -23376: struct -23376: _Weak_result_type_impl<_Res(*)(_ArgTypes......) > -23376: { typedef _Res result_type; }; -23376: -23376: -23376: template::value> -23376: struct _Weak_result_type_memfun -23376: : _Weak_result_type_impl<_Functor> -23376: { }; -23376: -23376: -23376: template -23376: struct _Weak_result_type_memfun<_MemFunPtr, true> -23376: { -23376: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; -23376: }; -23376: -23376: -23376: template -23376: struct _Weak_result_type_memfun<_Func _Class::*, false> -23376: { }; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _Weak_result_type -23376: : _Weak_result_type_memfun::type> -23376: { }; -23376: -23376: -23376: template> -23376: struct _Refwrap_base_arg1 -23376: { }; -23376: -23376: -23376: template -23376: struct _Refwrap_base_arg1<_Tp, -23376: __void_t> -23376: { -23376: typedef typename _Tp::argument_type argument_type; -23376: }; -23376: -23376: -23376: template> -23376: struct _Refwrap_base_arg2 -23376: { }; -23376: -23376: -23376: template -23376: struct _Refwrap_base_arg2<_Tp, -23376: __void_t> -23376: { -23376: typedef typename _Tp::first_argument_type first_argument_type; -23376: typedef typename _Tp::second_argument_type second_argument_type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct _Reference_wrapper_base -23376: : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> -23376: { }; -23376: -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1) > -23376: : unary_function<_T1, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1) const> -23376: : unary_function<_T1, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1) volatile> -23376: : unary_function<_T1, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1) const volatile> -23376: : unary_function<_T1, _Res> -23376: { }; -23376: -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1, _T2) > -23376: : binary_function<_T1, _T2, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1, _T2) const> -23376: : binary_function<_T1, _T2, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1, _T2) volatile> -23376: : binary_function<_T1, _T2, _Res> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile> -23376: : binary_function<_T1, _T2, _Res> -23376: { }; -23376: -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(*)(_T1) > -23376: : unary_function<_T1, _Res> -23376: { }; -23376: -23376: -23376: template -23376: struct _Reference_wrapper_base<_Res(*)(_T1, _T2) > -23376: : binary_function<_T1, _T2, _Res> -23376: { }; -23376: -23376: template::value> -23376: struct _Reference_wrapper_base_memfun -23376: : _Reference_wrapper_base<_Tp> -23376: { }; -23376: -23376: template -23376: struct _Reference_wrapper_base_memfun<_MemFunPtr, true> -23376: : _Mem_fn_traits<_MemFunPtr>::__maybe_type -23376: { -23376: using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class reference_wrapper -23376: : public _Reference_wrapper_base_memfun::type> -23376: { -23376: _Tp* _M_data; -23376: -23376: public: -23376: typedef _Tp type; -23376: -23376: reference_wrapper(_Tp& __indata) noexcept -23376: : _M_data(std::__addressof(__indata)) -23376: { } -23376: -23376: reference_wrapper(_Tp&&) = delete; -23376: -23376: reference_wrapper(const reference_wrapper&) = default; -23376: -23376: reference_wrapper& -23376: operator=(const reference_wrapper&) = default; -23376: -23376: operator _Tp&() const noexcept -23376: { return this->get(); } -23376: -23376: _Tp& -23376: get() const noexcept -23376: { return *_M_data; } -23376: -23376: template -23376: typename result_of<_Tp&(_Args&&...)>::type -23376: operator()(_Args&&... __args) const -23376: { -23376: return std::__invoke(get(), std::forward<_Args>(__args)...); -23376: } -23376: }; -23376: -23376: -23376: -23376: template -23376: inline reference_wrapper<_Tp> -23376: ref(_Tp& __t) noexcept -23376: { return reference_wrapper<_Tp>(__t); } -23376: -23376: -23376: template -23376: inline reference_wrapper -23376: cref(const _Tp& __t) noexcept -23376: { return reference_wrapper(__t); } -23376: -23376: template -23376: void ref(const _Tp&&) = delete; -23376: -23376: template -23376: void cref(const _Tp&&) = delete; -23376: -23376: -23376: template -23376: inline reference_wrapper<_Tp> -23376: ref(reference_wrapper<_Tp> __t) noexcept -23376: { return __t; } -23376: -23376: -23376: template -23376: inline reference_wrapper -23376: cref(reference_wrapper<_Tp> __t) noexcept -23376: { return { __t.get() }; } -23376: -23376: -23376: -23376: -23376: } -23376: # 55 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3 -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: template class auto_ptr; -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: -23376: -23376: -23376: -23376: class bad_weak_ptr : public std::exception -23376: { -23376: public: -23376: virtual char const* what() const noexcept; -23376: -23376: virtual ~bad_weak_ptr() noexcept; -23376: }; -23376: -23376: -23376: inline void -23376: __throw_bad_weak_ptr() -23376: { (throw (bad_weak_ptr())); } -23376: -23376: using __gnu_cxx::_Lock_policy; -23376: using __gnu_cxx::__default_lock_policy; -23376: using __gnu_cxx::_S_single; -23376: using __gnu_cxx::_S_mutex; -23376: using __gnu_cxx::_S_atomic; -23376: -23376: -23376: template<_Lock_policy _Lp> -23376: class _Mutex_base -23376: { -23376: protected: -23376: -23376: enum { _S_need_barriers = 0 }; -23376: }; -23376: -23376: template<> -23376: class _Mutex_base<_S_mutex> -23376: : public __gnu_cxx::__mutex -23376: { -23376: protected: -23376: -23376: -23376: -23376: enum { _S_need_barriers = 1 }; -23376: }; -23376: -23376: template<_Lock_policy _Lp = __default_lock_policy> -23376: class _Sp_counted_base -23376: : public _Mutex_base<_Lp> -23376: { -23376: public: -23376: _Sp_counted_base() noexcept -23376: : _M_use_count(1), _M_weak_count(1) { } -23376: -23376: virtual -23376: ~_Sp_counted_base() noexcept -23376: { } -23376: -23376: -23376: -23376: virtual void -23376: _M_dispose() noexcept = 0; -23376: -23376: -23376: virtual void -23376: _M_destroy() noexcept -23376: { delete this; } -23376: -23376: virtual void* -23376: _M_get_deleter(const std::type_info&) noexcept = 0; -23376: -23376: void -23376: _M_add_ref_copy() -23376: { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } -23376: -23376: void -23376: _M_add_ref_lock(); -23376: -23376: bool -23376: _M_add_ref_lock_nothrow(); -23376: -23376: void -23376: _M_release() noexcept -23376: { -23376: -23376: ; -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) -23376: { -23376: ; -23376: _M_dispose(); -23376: -23376: -23376: -23376: -23376: if (_Mutex_base<_Lp>::_S_need_barriers) -23376: { -23376: __atomic_thread_fence (4); -23376: } -23376: -23376: -23376: ; -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -23376: -1) == 1) -23376: { -23376: ; -23376: _M_destroy(); -23376: } -23376: } -23376: } -23376: -23376: void -23376: _M_weak_add_ref() noexcept -23376: { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } -23376: -23376: void -23376: _M_weak_release() noexcept -23376: { -23376: -23376: ; -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) -23376: { -23376: ; -23376: if (_Mutex_base<_Lp>::_S_need_barriers) -23376: { -23376: -23376: -23376: __atomic_thread_fence (4); -23376: } -23376: _M_destroy(); -23376: } -23376: } -23376: -23376: long -23376: _M_get_use_count() const noexcept -23376: { -23376: -23376: -23376: return __atomic_load_n(&_M_use_count, 0); -23376: } -23376: -23376: private: -23376: _Sp_counted_base(_Sp_counted_base const&) = delete; -23376: _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; -23376: -23376: _Atomic_word _M_use_count; -23376: _Atomic_word _M_weak_count; -23376: }; -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_single>:: -23376: _M_add_ref_lock() -23376: { -23376: if (_M_use_count == 0) -23376: __throw_bad_weak_ptr(); -23376: ++_M_use_count; -23376: } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_mutex>:: -23376: _M_add_ref_lock() -23376: { -23376: __gnu_cxx::__scoped_lock sentry(*this); -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) -23376: { -23376: _M_use_count = 0; -23376: __throw_bad_weak_ptr(); -23376: } -23376: } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_atomic>:: -23376: _M_add_ref_lock() -23376: { -23376: -23376: _Atomic_word __count = _M_get_use_count(); -23376: do -23376: { -23376: if (__count == 0) -23376: __throw_bad_weak_ptr(); -23376: -23376: -23376: } -23376: while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, -23376: true, 4, -23376: 0)); -23376: } -23376: -23376: template<> -23376: inline bool -23376: _Sp_counted_base<_S_single>:: -23376: _M_add_ref_lock_nothrow() -23376: { -23376: if (_M_use_count == 0) -23376: return false; -23376: ++_M_use_count; -23376: return true; -23376: } -23376: -23376: template<> -23376: inline bool -23376: _Sp_counted_base<_S_mutex>:: -23376: _M_add_ref_lock_nothrow() -23376: { -23376: __gnu_cxx::__scoped_lock sentry(*this); -23376: if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) -23376: { -23376: _M_use_count = 0; -23376: return false; -23376: } -23376: return true; -23376: } -23376: -23376: template<> -23376: inline bool -23376: _Sp_counted_base<_S_atomic>:: -23376: _M_add_ref_lock_nothrow() -23376: { -23376: -23376: _Atomic_word __count = _M_get_use_count(); -23376: do -23376: { -23376: if (__count == 0) -23376: return false; -23376: -23376: -23376: } -23376: while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, -23376: true, 4, -23376: 0)); -23376: return true; -23376: } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_single>::_M_add_ref_copy() -23376: { ++_M_use_count; } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_single>::_M_release() noexcept -23376: { -23376: if (--_M_use_count == 0) -23376: { -23376: _M_dispose(); -23376: if (--_M_weak_count == 0) -23376: _M_destroy(); -23376: } -23376: } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept -23376: { ++_M_weak_count; } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_base<_S_single>::_M_weak_release() noexcept -23376: { -23376: if (--_M_weak_count == 0) -23376: _M_destroy(); -23376: } -23376: -23376: template<> -23376: inline long -23376: _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept -23376: { return _M_use_count; } -23376: -23376: -23376: -23376: template -23376: class __shared_ptr; -23376: -23376: template -23376: class __weak_ptr; -23376: -23376: template -23376: class __enable_shared_from_this; -23376: -23376: template -23376: class shared_ptr; -23376: -23376: template -23376: class weak_ptr; -23376: -23376: template -23376: struct owner_less; -23376: -23376: template -23376: class enable_shared_from_this; -23376: -23376: template<_Lock_policy _Lp = __default_lock_policy> -23376: class __weak_count; -23376: -23376: template<_Lock_policy _Lp = __default_lock_policy> -23376: class __shared_count; -23376: -23376: -23376: -23376: template -23376: class _Sp_counted_ptr final : public _Sp_counted_base<_Lp> -23376: { -23376: public: -23376: explicit -23376: _Sp_counted_ptr(_Ptr __p) noexcept -23376: : _M_ptr(__p) { } -23376: -23376: virtual void -23376: _M_dispose() noexcept -23376: { delete _M_ptr; } -23376: -23376: virtual void -23376: _M_destroy() noexcept -23376: { delete this; } -23376: -23376: virtual void* -23376: _M_get_deleter(const std::type_info&) noexcept -23376: { return nullptr; } -23376: -23376: _Sp_counted_ptr(const _Sp_counted_ptr&) = delete; -23376: _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete; -23376: -23376: private: -23376: _Ptr _M_ptr; -23376: }; -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_ptr::_M_dispose() noexcept { } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_ptr::_M_dispose() noexcept { } -23376: -23376: template<> -23376: inline void -23376: _Sp_counted_ptr::_M_dispose() noexcept { } -23376: -23376: template -23376: struct _Sp_ebo_helper; -23376: -23376: -23376: template -23376: struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp -23376: { -23376: explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { } -23376: explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { } -23376: -23376: static _Tp& -23376: _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); } -23376: }; -23376: -23376: -23376: template -23376: struct _Sp_ebo_helper<_Nm, _Tp, false> -23376: { -23376: explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { } -23376: explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { } -23376: -23376: static _Tp& -23376: _S_get(_Sp_ebo_helper& __eboh) -23376: { return __eboh._M_tp; } -23376: -23376: private: -23376: _Tp _M_tp; -23376: }; -23376: -23376: -23376: template -23376: class _Sp_counted_deleter final : public _Sp_counted_base<_Lp> -23376: { -23376: class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc> -23376: { -23376: typedef _Sp_ebo_helper<0, _Deleter> _Del_base; -23376: typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base; -23376: -23376: public: -23376: _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept -23376: : _M_ptr(__p), _Del_base(std::move(__d)), _Alloc_base(__a) -23376: { } -23376: -23376: _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); } -23376: _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); } -23376: -23376: _Ptr _M_ptr; -23376: }; -23376: -23376: public: -23376: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>; -23376: -23376: -23376: _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept -23376: : _M_impl(__p, std::move(__d), _Alloc()) { } -23376: -23376: -23376: _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept -23376: : _M_impl(__p, std::move(__d), __a) { } -23376: -23376: ~_Sp_counted_deleter() noexcept { } -23376: -23376: virtual void -23376: _M_dispose() noexcept -23376: { _M_impl._M_del()(_M_impl._M_ptr); } -23376: -23376: virtual void -23376: _M_destroy() noexcept -23376: { -23376: __allocator_type __a(_M_impl._M_alloc()); -23376: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; -23376: this->~_Sp_counted_deleter(); -23376: } -23376: -23376: virtual void* -23376: _M_get_deleter(const std::type_info& __ti) noexcept -23376: { -23376: -23376: -23376: -23376: return __ti == typeid(_Deleter) -23376: ? std::__addressof(_M_impl._M_del()) -23376: : nullptr; -23376: -23376: -23376: -23376: } -23376: -23376: private: -23376: _Impl _M_impl; -23376: }; -23376: -23376: -23376: -23376: struct _Sp_make_shared_tag -23376: { -23376: private: -23376: template -23376: friend class _Sp_counted_ptr_inplace; -23376: -23376: static const type_info& -23376: _S_ti() noexcept __attribute__ ((__visibility__ ("default"))) -23376: { -23376: alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { }; -23376: return reinterpret_cast(__tag); -23376: } -23376: }; -23376: -23376: template -23376: struct _Sp_alloc_shared_tag -23376: { -23376: const _Alloc& _M_a; -23376: }; -23376: -23376: template -23376: class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp> -23376: { -23376: class _Impl : _Sp_ebo_helper<0, _Alloc> -23376: { -23376: typedef _Sp_ebo_helper<0, _Alloc> _A_base; -23376: -23376: public: -23376: explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { } -23376: -23376: _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); } -23376: -23376: __gnu_cxx::__aligned_buffer<_Tp> _M_storage; -23376: }; -23376: -23376: public: -23376: using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; -23376: -23376: template -23376: _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) -23376: : _M_impl(__a) -23376: { -23376: -23376: -23376: allocator_traits<_Alloc>::construct(__a, _M_ptr(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: ~_Sp_counted_ptr_inplace() noexcept { } -23376: -23376: virtual void -23376: _M_dispose() noexcept -23376: { -23376: allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr()); -23376: } -23376: -23376: -23376: virtual void -23376: _M_destroy() noexcept -23376: { -23376: __allocator_type __a(_M_impl._M_alloc()); -23376: __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; -23376: this->~_Sp_counted_ptr_inplace(); -23376: } -23376: -23376: private: -23376: friend class __shared_count<_Lp>; -23376: -23376: -23376: -23376: virtual void* -23376: _M_get_deleter(const std::type_info& __ti) noexcept override -23376: { -23376: -23376: -23376: if (&__ti == &_Sp_make_shared_tag::_S_ti()) -23376: return const_cast::type*>(_M_ptr()); -23376: -23376: -23376: -23376: else if (__ti == typeid(_Sp_make_shared_tag)) -23376: return const_cast::type*>(_M_ptr()); -23376: -23376: -23376: -23376: -23376: -23376: -23376: return nullptr; -23376: } -23376: -23376: _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } -23376: -23376: _Impl _M_impl; -23376: }; -23376: -23376: -23376: struct __sp_array_delete -23376: { -23376: template -23376: void operator()(_Yp* __p) const { delete[] __p; } -23376: }; -23376: -23376: template<_Lock_policy _Lp> -23376: class __shared_count -23376: { -23376: template -23376: struct __not_alloc_shared_tag { using type = void; }; -23376: -23376: template -23376: struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; -23376: -23376: public: -23376: constexpr __shared_count() noexcept : _M_pi(0) -23376: { } -23376: -23376: template -23376: explicit -23376: __shared_count(_Ptr __p) : _M_pi(0) -23376: { -23376: try -23376: { -23376: _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p); -23376: } -23376: catch(...) -23376: { -23376: delete __p; -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: __shared_count(_Ptr __p, false_type) -23376: : __shared_count(__p) -23376: { } -23376: -23376: template -23376: __shared_count(_Ptr __p, true_type) -23376: : __shared_count(__p, __sp_array_delete{}, allocator()) -23376: { } -23376: -23376: template::type> -23376: __shared_count(_Ptr __p, _Deleter __d) -23376: : __shared_count(__p, std::move(__d), allocator()) -23376: { } -23376: -23376: template::type> -23376: __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0) -23376: { -23376: typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type; -23376: try -23376: { -23376: typename _Sp_cd_type::__allocator_type __a2(__a); -23376: auto __guard = std::__allocate_guarded(__a2); -23376: _Sp_cd_type* __mem = __guard.get(); -23376: ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a)); -23376: _M_pi = __mem; -23376: __guard = nullptr; -23376: } -23376: catch(...) -23376: { -23376: __d(__p); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a, -23376: _Args&&... __args) -23376: { -23376: typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type; -23376: typename _Sp_cp_type::__allocator_type __a2(__a._M_a); -23376: auto __guard = std::__allocate_guarded(__a2); -23376: _Sp_cp_type* __mem = __guard.get(); -23376: auto __pi = ::new (__mem) -23376: _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...); -23376: __guard = nullptr; -23376: _M_pi = __pi; -23376: __p = __pi->_M_ptr(); -23376: } -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: -23376: template -23376: explicit -23376: __shared_count(std::auto_ptr<_Tp>&& __r); -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: -23376: template -23376: explicit -23376: __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0) -23376: { -23376: -23376: -23376: if (__r.get() == nullptr) -23376: return; -23376: -23376: using _Ptr = typename unique_ptr<_Tp, _Del>::pointer; -23376: using _Del2 = typename conditional::value, -23376: reference_wrapper::type>, -23376: _Del>::type; -23376: using _Sp_cd_type -23376: = _Sp_counted_deleter<_Ptr, _Del2, allocator, _Lp>; -23376: using _Alloc = allocator<_Sp_cd_type>; -23376: using _Alloc_traits = allocator_traits<_Alloc>; -23376: _Alloc __a; -23376: _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1); -23376: _Alloc_traits::construct(__a, __mem, __r.release(), -23376: __r.get_deleter()); -23376: _M_pi = __mem; -23376: } -23376: -23376: -23376: explicit __shared_count(const __weak_count<_Lp>& __r); -23376: -23376: -23376: explicit __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t); -23376: -23376: ~__shared_count() noexcept -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_release(); -23376: } -23376: -23376: __shared_count(const __shared_count& __r) noexcept -23376: : _M_pi(__r._M_pi) -23376: { -23376: if (_M_pi != 0) -23376: _M_pi->_M_add_ref_copy(); -23376: } -23376: -23376: __shared_count& -23376: operator=(const __shared_count& __r) noexcept -23376: { -23376: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; -23376: if (__tmp != _M_pi) -23376: { -23376: if (__tmp != 0) -23376: __tmp->_M_add_ref_copy(); -23376: if (_M_pi != 0) -23376: _M_pi->_M_release(); -23376: _M_pi = __tmp; -23376: } -23376: return *this; -23376: } -23376: -23376: void -23376: _M_swap(__shared_count& __r) noexcept -23376: { -23376: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; -23376: __r._M_pi = _M_pi; -23376: _M_pi = __tmp; -23376: } -23376: -23376: long -23376: _M_get_use_count() const noexcept -23376: { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; } -23376: -23376: bool -23376: _M_unique() const noexcept -23376: { return this->_M_get_use_count() == 1; } -23376: -23376: void* -23376: _M_get_deleter(const std::type_info& __ti) const noexcept -23376: { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; } -23376: -23376: bool -23376: _M_less(const __shared_count& __rhs) const noexcept -23376: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } -23376: -23376: bool -23376: _M_less(const __weak_count<_Lp>& __rhs) const noexcept -23376: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } -23376: -23376: -23376: friend inline bool -23376: operator==(const __shared_count& __a, const __shared_count& __b) noexcept -23376: { return __a._M_pi == __b._M_pi; } -23376: -23376: private: -23376: friend class __weak_count<_Lp>; -23376: -23376: _Sp_counted_base<_Lp>* _M_pi; -23376: }; -23376: -23376: -23376: template<_Lock_policy _Lp> -23376: class __weak_count -23376: { -23376: public: -23376: constexpr __weak_count() noexcept : _M_pi(nullptr) -23376: { } -23376: -23376: __weak_count(const __shared_count<_Lp>& __r) noexcept -23376: : _M_pi(__r._M_pi) -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_add_ref(); -23376: } -23376: -23376: __weak_count(const __weak_count& __r) noexcept -23376: : _M_pi(__r._M_pi) -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_add_ref(); -23376: } -23376: -23376: __weak_count(__weak_count&& __r) noexcept -23376: : _M_pi(__r._M_pi) -23376: { __r._M_pi = nullptr; } -23376: -23376: ~__weak_count() noexcept -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_release(); -23376: } -23376: -23376: __weak_count& -23376: operator=(const __shared_count<_Lp>& __r) noexcept -23376: { -23376: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; -23376: if (__tmp != nullptr) -23376: __tmp->_M_weak_add_ref(); -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_release(); -23376: _M_pi = __tmp; -23376: return *this; -23376: } -23376: -23376: __weak_count& -23376: operator=(const __weak_count& __r) noexcept -23376: { -23376: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; -23376: if (__tmp != nullptr) -23376: __tmp->_M_weak_add_ref(); -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_release(); -23376: _M_pi = __tmp; -23376: return *this; -23376: } -23376: -23376: __weak_count& -23376: operator=(__weak_count&& __r) noexcept -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_weak_release(); -23376: _M_pi = __r._M_pi; -23376: __r._M_pi = nullptr; -23376: return *this; -23376: } -23376: -23376: void -23376: _M_swap(__weak_count& __r) noexcept -23376: { -23376: _Sp_counted_base<_Lp>* __tmp = __r._M_pi; -23376: __r._M_pi = _M_pi; -23376: _M_pi = __tmp; -23376: } -23376: -23376: long -23376: _M_get_use_count() const noexcept -23376: { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; } -23376: -23376: bool -23376: _M_less(const __weak_count& __rhs) const noexcept -23376: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } -23376: -23376: bool -23376: _M_less(const __shared_count<_Lp>& __rhs) const noexcept -23376: { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } -23376: -23376: -23376: friend inline bool -23376: operator==(const __weak_count& __a, const __weak_count& __b) noexcept -23376: { return __a._M_pi == __b._M_pi; } -23376: -23376: private: -23376: friend class __shared_count<_Lp>; -23376: -23376: _Sp_counted_base<_Lp>* _M_pi; -23376: }; -23376: -23376: -23376: template<_Lock_policy _Lp> -23376: inline -23376: __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r) -23376: : _M_pi(__r._M_pi) -23376: { -23376: if (_M_pi != nullptr) -23376: _M_pi->_M_add_ref_lock(); -23376: else -23376: __throw_bad_weak_ptr(); -23376: } -23376: -23376: -23376: template<_Lock_policy _Lp> -23376: inline -23376: __shared_count<_Lp>:: -23376: __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) -23376: : _M_pi(__r._M_pi) -23376: { -23376: if (_M_pi != nullptr) -23376: if (!_M_pi->_M_add_ref_lock_nothrow()) -23376: _M_pi = nullptr; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: struct __sp_compatible_with -23376: : false_type -23376: { }; -23376: -23376: template -23376: struct __sp_compatible_with<_Yp*, _Tp*> -23376: : is_convertible<_Yp*, _Tp*>::type -23376: { }; -23376: -23376: template -23376: struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]> -23376: : true_type -23376: { }; -23376: -23376: template -23376: struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]> -23376: : true_type -23376: { }; -23376: -23376: template -23376: struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]> -23376: : true_type -23376: { }; -23376: -23376: template -23376: struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]> -23376: : true_type -23376: { }; -23376: -23376: -23376: template -23376: struct __sp_is_constructible_arrN -23376: : false_type -23376: { }; -23376: -23376: template -23376: struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>> -23376: : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __sp_is_constructible_arr -23376: : false_type -23376: { }; -23376: -23376: template -23376: struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>> -23376: : is_convertible<_Yp(*)[], _Up(*)[]>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __sp_is_constructible; -23376: -23376: -23376: template -23376: struct __sp_is_constructible<_Up[_Nm], _Yp> -23376: : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __sp_is_constructible<_Up[], _Yp> -23376: : __sp_is_constructible_arr<_Up, _Yp>::type -23376: { }; -23376: -23376: -23376: template -23376: struct __sp_is_constructible -23376: : is_convertible<_Yp*, _Tp*>::type -23376: { }; -23376: -23376: -23376: -23376: template::value, bool = is_void<_Tp>::value> -23376: class __shared_ptr_access -23376: { -23376: public: -23376: using element_type = _Tp; -23376: -23376: element_type& -23376: operator*() const noexcept -23376: { -23376: ; -23376: return *_M_get(); -23376: } -23376: -23376: element_type* -23376: operator->() const noexcept -23376: { -23376: ; -23376: return _M_get(); -23376: } -23376: -23376: private: -23376: element_type* -23376: _M_get() const noexcept -23376: { return static_cast*>(this)->get(); } -23376: }; -23376: -23376: -23376: template -23376: class __shared_ptr_access<_Tp, _Lp, false, true> -23376: { -23376: public: -23376: using element_type = _Tp; -23376: -23376: element_type* -23376: operator->() const noexcept -23376: { -23376: auto __ptr = static_cast*>(this)->get(); -23376: ; -23376: return __ptr; -23376: } -23376: }; -23376: -23376: -23376: template -23376: class __shared_ptr_access<_Tp, _Lp, true, false> -23376: { -23376: public: -23376: using element_type = typename remove_extent<_Tp>::type; -23376: -23376: -23376: [[__deprecated__("shared_ptr::operator* is absent from C++17")]] -23376: element_type& -23376: operator*() const noexcept -23376: { -23376: ; -23376: return *_M_get(); -23376: } -23376: -23376: [[__deprecated__("shared_ptr::operator-> is absent from C++17")]] -23376: element_type* -23376: operator->() const noexcept -23376: { -23376: ; -23376: return _M_get(); -23376: } -23376: -23376: -23376: element_type& -23376: operator[](ptrdiff_t __i) const -23376: { -23376: ; -23376: ; -23376: return _M_get()[__i]; -23376: } -23376: -23376: private: -23376: element_type* -23376: _M_get() const noexcept -23376: { return static_cast*>(this)->get(); } -23376: }; -23376: -23376: template -23376: class __shared_ptr -23376: : public __shared_ptr_access<_Tp, _Lp> -23376: { -23376: public: -23376: using element_type = typename remove_extent<_Tp>::type; -23376: -23376: private: -23376: -23376: template -23376: using _SafeConv -23376: = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type; -23376: -23376: -23376: template -23376: using _Compatible = typename -23376: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; -23376: -23376: -23376: template -23376: using _Assignable = _Compatible<_Yp, __shared_ptr&>; -23376: -23376: -23376: template::pointer> -23376: using _UniqCompatible = typename enable_if<__and_< -23376: __sp_compatible_with<_Yp*, _Tp*>, is_convertible<_Ptr, element_type*> -23376: >::value, _Res>::type; -23376: -23376: -23376: template -23376: using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: constexpr __shared_ptr() noexcept -23376: : _M_ptr(0), _M_refcount() -23376: { } -23376: -23376: template> -23376: explicit -23376: __shared_ptr(_Yp* __p) -23376: : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type()) -23376: { -23376: static_assert( !is_void<_Yp>::value, "incomplete type" ); -23376: static_assert( sizeof(_Yp) > 0, "incomplete type" ); -23376: _M_enable_shared_from_this_with(__p); -23376: } -23376: -23376: template> -23376: __shared_ptr(_Yp* __p, _Deleter __d) -23376: : _M_ptr(__p), _M_refcount(__p, std::move(__d)) -23376: { -23376: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, -23376: "deleter expression d(p) is well-formed"); -23376: _M_enable_shared_from_this_with(__p); -23376: } -23376: -23376: template> -23376: __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) -23376: : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a)) -23376: { -23376: static_assert(__is_invocable<_Deleter&, _Yp*&>::value, -23376: "deleter expression d(p) is well-formed"); -23376: _M_enable_shared_from_this_with(__p); -23376: } -23376: -23376: template -23376: __shared_ptr(nullptr_t __p, _Deleter __d) -23376: : _M_ptr(0), _M_refcount(__p, std::move(__d)) -23376: { } -23376: -23376: template -23376: __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) -23376: : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a)) -23376: { } -23376: -23376: template -23376: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r, -23376: element_type* __p) noexcept -23376: : _M_ptr(__p), _M_refcount(__r._M_refcount) -23376: { } -23376: -23376: __shared_ptr(const __shared_ptr&) noexcept = default; -23376: __shared_ptr& operator=(const __shared_ptr&) noexcept = default; -23376: ~__shared_ptr() = default; -23376: -23376: template> -23376: __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept -23376: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) -23376: { } -23376: -23376: __shared_ptr(__shared_ptr&& __r) noexcept -23376: : _M_ptr(__r._M_ptr), _M_refcount() -23376: { -23376: _M_refcount._M_swap(__r._M_refcount); -23376: __r._M_ptr = 0; -23376: } -23376: -23376: template> -23376: __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept -23376: : _M_ptr(__r._M_ptr), _M_refcount() -23376: { -23376: _M_refcount._M_swap(__r._M_refcount); -23376: __r._M_ptr = 0; -23376: } -23376: -23376: template> -23376: explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r) -23376: : _M_refcount(__r._M_refcount) -23376: { -23376: -23376: -23376: _M_ptr = __r._M_ptr; -23376: } -23376: -23376: -23376: template> -23376: __shared_ptr(unique_ptr<_Yp, _Del>&& __r) -23376: : _M_ptr(__r.get()), _M_refcount() -23376: { -23376: auto __raw = __to_address(__r.get()); -23376: _M_refcount = __shared_count<_Lp>(std::move(__r)); -23376: _M_enable_shared_from_this_with(__raw); -23376: } -23376: -23376: -23376: protected: -23376: -23376: template>, is_array<_Tp1>, -23376: is_convertible::pointer, _Tp*> -23376: >::value, bool>::type = true> -23376: __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete) -23376: : _M_ptr(__r.get()), _M_refcount() -23376: { -23376: auto __raw = __to_address(__r.get()); -23376: _M_refcount = __shared_count<_Lp>(std::move(__r)); -23376: _M_enable_shared_from_this_with(__raw); -23376: } -23376: public: -23376: -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: -23376: template> -23376: __shared_ptr(auto_ptr<_Yp>&& __r); -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { } -23376: -23376: template -23376: _Assignable<_Yp> -23376: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept -23376: { -23376: _M_ptr = __r._M_ptr; -23376: _M_refcount = __r._M_refcount; -23376: return *this; -23376: } -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: template -23376: _Assignable<_Yp> -23376: operator=(auto_ptr<_Yp>&& __r) -23376: { -23376: __shared_ptr(std::move(__r)).swap(*this); -23376: return *this; -23376: } -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: __shared_ptr& -23376: operator=(__shared_ptr&& __r) noexcept -23376: { -23376: __shared_ptr(std::move(__r)).swap(*this); -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable<_Yp> -23376: operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept -23376: { -23376: __shared_ptr(std::move(__r)).swap(*this); -23376: return *this; -23376: } -23376: -23376: template -23376: _UniqAssignable<_Yp, _Del> -23376: operator=(unique_ptr<_Yp, _Del>&& __r) -23376: { -23376: __shared_ptr(std::move(__r)).swap(*this); -23376: return *this; -23376: } -23376: -23376: void -23376: reset() noexcept -23376: { __shared_ptr().swap(*this); } -23376: -23376: template -23376: _SafeConv<_Yp> -23376: reset(_Yp* __p) -23376: { -23376: -23376: ; -23376: __shared_ptr(__p).swap(*this); -23376: } -23376: -23376: template -23376: _SafeConv<_Yp> -23376: reset(_Yp* __p, _Deleter __d) -23376: { __shared_ptr(__p, std::move(__d)).swap(*this); } -23376: -23376: template -23376: _SafeConv<_Yp> -23376: reset(_Yp* __p, _Deleter __d, _Alloc __a) -23376: { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); } -23376: -23376: element_type* -23376: get() const noexcept -23376: { return _M_ptr; } -23376: -23376: explicit operator bool() const -23376: { return _M_ptr == 0 ? false : true; } -23376: -23376: bool -23376: unique() const noexcept -23376: { return _M_refcount._M_unique(); } -23376: -23376: long -23376: use_count() const noexcept -23376: { return _M_refcount._M_get_use_count(); } -23376: -23376: void -23376: swap(__shared_ptr<_Tp, _Lp>& __other) noexcept -23376: { -23376: std::swap(_M_ptr, __other._M_ptr); -23376: _M_refcount._M_swap(__other._M_refcount); -23376: } -23376: -23376: template -23376: bool -23376: owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept -23376: { return _M_refcount._M_less(__rhs._M_refcount); } -23376: -23376: template -23376: bool -23376: owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept -23376: { return _M_refcount._M_less(__rhs._M_refcount); } -23376: -23376: protected: -23376: -23376: template -23376: __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) -23376: : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...) -23376: { _M_enable_shared_from_this_with(_M_ptr); } -23376: -23376: template -23376: friend __shared_ptr<_Tp1, _Lp1> -23376: __allocate_shared(const _Alloc& __a, _Args&&... __args); -23376: -23376: -23376: -23376: __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) -23376: : _M_refcount(__r._M_refcount, std::nothrow) -23376: { -23376: _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr; -23376: } -23376: -23376: friend class __weak_ptr<_Tp, _Lp>; -23376: -23376: private: -23376: -23376: template -23376: using __esft_base_t = decltype(__enable_shared_from_this_base( -23376: std::declval&>(), -23376: std::declval<_Yp*>())); -23376: -23376: -23376: template -23376: struct __has_esft_base -23376: : false_type { }; -23376: -23376: template -23376: struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>> -23376: : __not_> { }; -23376: -23376: template::type> -23376: typename enable_if<__has_esft_base<_Yp2>::value>::type -23376: _M_enable_shared_from_this_with(_Yp* __p) noexcept -23376: { -23376: if (auto __base = __enable_shared_from_this_base(_M_refcount, __p)) -23376: __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount); -23376: } -23376: -23376: template::type> -23376: typename enable_if::value>::type -23376: _M_enable_shared_from_this_with(_Yp*) noexcept -23376: { } -23376: -23376: void* -23376: _M_get_deleter(const std::type_info& __ti) const noexcept -23376: { return _M_refcount._M_get_deleter(__ti); } -23376: -23376: template friend class __shared_ptr; -23376: template friend class __weak_ptr; -23376: -23376: template -23376: friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept; -23376: -23376: template -23376: friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; -23376: -23376: element_type* _M_ptr; -23376: __shared_count<_Lp> _M_refcount; -23376: }; -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const __shared_ptr<_Tp1, _Lp>& __a, -23376: const __shared_ptr<_Tp2, _Lp>& __b) noexcept -23376: { return __a.get() == __b.get(); } -23376: -23376: template -23376: inline bool -23376: operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { return !__a; } -23376: -23376: template -23376: inline bool -23376: operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { return !__a; } -23376: -23376: template -23376: inline bool -23376: operator!=(const __shared_ptr<_Tp1, _Lp>& __a, -23376: const __shared_ptr<_Tp2, _Lp>& __b) noexcept -23376: { return __a.get() != __b.get(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { return (bool)__a; } -23376: -23376: template -23376: inline bool -23376: operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { return (bool)__a; } -23376: -23376: template -23376: inline bool -23376: operator<(const __shared_ptr<_Tp, _Lp>& __a, -23376: const __shared_ptr<_Up, _Lp>& __b) noexcept -23376: { -23376: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; -23376: using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type; -23376: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; -23376: return less<_Vp>()(__a.get(), __b.get()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { -23376: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; -23376: return less<_Tp_elt*>()(__a.get(), nullptr); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { -23376: using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; -23376: return less<_Tp_elt*>()(nullptr, __a.get()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<=(const __shared_ptr<_Tp1, _Lp>& __a, -23376: const __shared_ptr<_Tp2, _Lp>& __b) noexcept -23376: { return !(__b < __a); } -23376: -23376: template -23376: inline bool -23376: operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { return !(nullptr < __a); } -23376: -23376: template -23376: inline bool -23376: operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { return !(__a < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>(const __shared_ptr<_Tp1, _Lp>& __a, -23376: const __shared_ptr<_Tp2, _Lp>& __b) noexcept -23376: { return (__b < __a); } -23376: -23376: template -23376: inline bool -23376: operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { return nullptr < __a; } -23376: -23376: template -23376: inline bool -23376: operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { return __a < nullptr; } -23376: -23376: template -23376: inline bool -23376: operator>=(const __shared_ptr<_Tp1, _Lp>& __a, -23376: const __shared_ptr<_Tp2, _Lp>& __b) noexcept -23376: { return !(__a < __b); } -23376: -23376: template -23376: inline bool -23376: operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept -23376: { return !(__a < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept -23376: { return !(nullptr < __a); } -23376: -23376: template -23376: struct _Sp_less : public binary_function<_Sp, _Sp, bool> -23376: { -23376: bool -23376: operator()(const _Sp& __lhs, const _Sp& __rhs) const noexcept -23376: { -23376: typedef typename _Sp::element_type element_type; -23376: return std::less()(__lhs.get(), __rhs.get()); -23376: } -23376: }; -23376: -23376: template -23376: struct less<__shared_ptr<_Tp, _Lp>> -23376: : public _Sp_less<__shared_ptr<_Tp, _Lp>> -23376: { }; -23376: -23376: -23376: template -23376: inline void -23376: swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept -23376: { __a.swap(__b); } -23376: # 1544 "/usr/include/c++/8/bits/shared_ptr_base.h" 3 -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept -23376: { -23376: using _Sp = __shared_ptr<_Tp, _Lp>; -23376: return _Sp(__r, static_cast(__r.get())); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept -23376: { -23376: using _Sp = __shared_ptr<_Tp, _Lp>; -23376: return _Sp(__r, const_cast(__r.get())); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept -23376: { -23376: using _Sp = __shared_ptr<_Tp, _Lp>; -23376: if (auto* __p = dynamic_cast(__r.get())) -23376: return _Sp(__r, __p); -23376: return _Sp(); -23376: } -23376: # 1590 "/usr/include/c++/8/bits/shared_ptr_base.h" 3 -23376: template -23376: class __weak_ptr -23376: { -23376: template -23376: using _Compatible = typename -23376: enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; -23376: -23376: -23376: template -23376: using _Assignable = _Compatible<_Yp, __weak_ptr&>; -23376: -23376: public: -23376: using element_type = typename remove_extent<_Tp>::type; -23376: -23376: constexpr __weak_ptr() noexcept -23376: : _M_ptr(nullptr), _M_refcount() -23376: { } -23376: -23376: __weak_ptr(const __weak_ptr&) noexcept = default; -23376: -23376: ~__weak_ptr() = default; -23376: # 1626 "/usr/include/c++/8/bits/shared_ptr_base.h" 3 -23376: template> -23376: __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept -23376: : _M_refcount(__r._M_refcount) -23376: { _M_ptr = __r.lock().get(); } -23376: -23376: template> -23376: __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept -23376: : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) -23376: { } -23376: -23376: __weak_ptr(__weak_ptr&& __r) noexcept -23376: : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount)) -23376: { __r._M_ptr = nullptr; } -23376: -23376: template> -23376: __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept -23376: : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) -23376: { __r._M_ptr = nullptr; } -23376: -23376: __weak_ptr& -23376: operator=(const __weak_ptr& __r) noexcept = default; -23376: -23376: template -23376: _Assignable<_Yp> -23376: operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept -23376: { -23376: _M_ptr = __r.lock().get(); -23376: _M_refcount = __r._M_refcount; -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable<_Yp> -23376: operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept -23376: { -23376: _M_ptr = __r._M_ptr; -23376: _M_refcount = __r._M_refcount; -23376: return *this; -23376: } -23376: -23376: __weak_ptr& -23376: operator=(__weak_ptr&& __r) noexcept -23376: { -23376: _M_ptr = __r._M_ptr; -23376: _M_refcount = std::move(__r._M_refcount); -23376: __r._M_ptr = nullptr; -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable<_Yp> -23376: operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept -23376: { -23376: _M_ptr = __r.lock().get(); -23376: _M_refcount = std::move(__r._M_refcount); -23376: __r._M_ptr = nullptr; -23376: return *this; -23376: } -23376: -23376: __shared_ptr<_Tp, _Lp> -23376: lock() const noexcept -23376: { return __shared_ptr(*this, std::nothrow); } -23376: -23376: long -23376: use_count() const noexcept -23376: { return _M_refcount._M_get_use_count(); } -23376: -23376: bool -23376: expired() const noexcept -23376: { return _M_refcount._M_get_use_count() == 0; } -23376: -23376: template -23376: bool -23376: owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept -23376: { return _M_refcount._M_less(__rhs._M_refcount); } -23376: -23376: template -23376: bool -23376: owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept -23376: { return _M_refcount._M_less(__rhs._M_refcount); } -23376: -23376: void -23376: reset() noexcept -23376: { __weak_ptr().swap(*this); } -23376: -23376: void -23376: swap(__weak_ptr& __s) noexcept -23376: { -23376: std::swap(_M_ptr, __s._M_ptr); -23376: _M_refcount._M_swap(__s._M_refcount); -23376: } -23376: -23376: private: -23376: -23376: void -23376: _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept -23376: { -23376: if (use_count() == 0) -23376: { -23376: _M_ptr = __ptr; -23376: _M_refcount = __refcount; -23376: } -23376: } -23376: -23376: template friend class __shared_ptr; -23376: template friend class __weak_ptr; -23376: friend class __enable_shared_from_this<_Tp, _Lp>; -23376: friend class enable_shared_from_this<_Tp>; -23376: -23376: element_type* _M_ptr; -23376: __weak_count<_Lp> _M_refcount; -23376: }; -23376: -23376: -23376: template -23376: inline void -23376: swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept -23376: { __a.swap(__b); } -23376: -23376: template -23376: struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool> -23376: { -23376: bool -23376: operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept -23376: { return __lhs.owner_before(__rhs); } -23376: -23376: bool -23376: operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept -23376: { return __lhs.owner_before(__rhs); } -23376: -23376: bool -23376: operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept -23376: { return __lhs.owner_before(__rhs); } -23376: }; -23376: -23376: template<> -23376: struct _Sp_owner_less -23376: { -23376: template -23376: auto -23376: operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept -23376: -> decltype(__lhs.owner_before(__rhs)) -23376: { return __lhs.owner_before(__rhs); } -23376: -23376: using is_transparent = void; -23376: }; -23376: -23376: template -23376: struct owner_less<__shared_ptr<_Tp, _Lp>> -23376: : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>> -23376: { }; -23376: -23376: template -23376: struct owner_less<__weak_ptr<_Tp, _Lp>> -23376: : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>> -23376: { }; -23376: -23376: -23376: template -23376: class __enable_shared_from_this -23376: { -23376: protected: -23376: constexpr __enable_shared_from_this() noexcept { } -23376: -23376: __enable_shared_from_this(const __enable_shared_from_this&) noexcept { } -23376: -23376: __enable_shared_from_this& -23376: operator=(const __enable_shared_from_this&) noexcept -23376: { return *this; } -23376: -23376: ~__enable_shared_from_this() { } -23376: -23376: public: -23376: __shared_ptr<_Tp, _Lp> -23376: shared_from_this() -23376: { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } -23376: -23376: __shared_ptr -23376: shared_from_this() const -23376: { return __shared_ptr(this->_M_weak_this); } -23376: -23376: -23376: __weak_ptr<_Tp, _Lp> -23376: weak_from_this() noexcept -23376: { return this->_M_weak_this; } -23376: -23376: __weak_ptr -23376: weak_from_this() const noexcept -23376: { return this->_M_weak_this; } -23376: -23376: -23376: private: -23376: template -23376: void -23376: _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept -23376: { _M_weak_this._M_assign(__p, __n); } -23376: -23376: friend const __enable_shared_from_this* -23376: __enable_shared_from_this_base(const __shared_count<_Lp>&, -23376: const __enable_shared_from_this* __p) -23376: { return __p; } -23376: -23376: template -23376: friend class __shared_ptr; -23376: -23376: mutable __weak_ptr<_Tp, _Lp> _M_weak_this; -23376: }; -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: __allocate_shared(const _Alloc& __a, _Args&&... __args) -23376: { -23376: return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a}, -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: __make_shared(_Args&&... __args) -23376: { -23376: typedef typename std::remove_const<_Tp>::type _Tp_nc; -23376: return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: template -23376: struct hash<__shared_ptr<_Tp, _Lp>> -23376: : public __hash_base> -23376: { -23376: size_t -23376: operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept -23376: { -23376: return hash::element_type*>()( -23376: __s.get()); -23376: } -23376: }; -23376: -23376: -23376: } -23376: # 53 "/usr/include/c++/8/bits/shared_ptr.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline std::basic_ostream<_Ch, _Tr>& -23376: operator<<(std::basic_ostream<_Ch, _Tr>& __os, -23376: const __shared_ptr<_Tp, _Lp>& __p) -23376: { -23376: __os << __p.get(); -23376: return __os; -23376: } -23376: -23376: template -23376: inline _Del* -23376: get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept -23376: { -23376: -23376: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: template -23376: inline _Del* -23376: get_deleter(const shared_ptr<_Tp>& __p) noexcept -23376: { -23376: -23376: return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class shared_ptr : public __shared_ptr<_Tp> -23376: { -23376: template -23376: using _Constructible = typename enable_if< -23376: is_constructible<__shared_ptr<_Tp>, _Args...>::value -23376: >::type; -23376: -23376: template -23376: using _Assignable = typename enable_if< -23376: is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr& -23376: >::type; -23376: -23376: public: -23376: -23376: using element_type = typename __shared_ptr<_Tp>::element_type; -23376: # 127 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { } -23376: -23376: shared_ptr(const shared_ptr&) noexcept = default; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template> -23376: explicit -23376: shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { } -23376: # 154 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template> -23376: shared_ptr(_Yp* __p, _Deleter __d) -23376: : __shared_ptr<_Tp>(__p, std::move(__d)) { } -23376: # 172 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: shared_ptr(nullptr_t __p, _Deleter __d) -23376: : __shared_ptr<_Tp>(__p, std::move(__d)) { } -23376: # 191 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template> -23376: shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) -23376: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } -23376: # 211 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) -23376: : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } -23376: # 233 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept -23376: : __shared_ptr<_Tp>(__r, __p) { } -23376: # 244 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template&>> -23376: shared_ptr(const shared_ptr<_Yp>& __r) noexcept -23376: : __shared_ptr<_Tp>(__r) { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: shared_ptr(shared_ptr&& __r) noexcept -23376: : __shared_ptr<_Tp>(std::move(__r)) { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template>> -23376: shared_ptr(shared_ptr<_Yp>&& __r) noexcept -23376: : __shared_ptr<_Tp>(std::move(__r)) { } -23376: # 274 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template&>> -23376: explicit shared_ptr(const weak_ptr<_Yp>& __r) -23376: : __shared_ptr<_Tp>(__r) { } -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: template>> -23376: shared_ptr(auto_ptr<_Yp>&& __r); -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: -23376: -23376: template>> -23376: shared_ptr(unique_ptr<_Yp, _Del>&& __r) -23376: : __shared_ptr<_Tp>(std::move(__r)) { } -23376: -23376: -23376: -23376: -23376: -23376: template, __sp_array_delete>* = 0> -23376: shared_ptr(unique_ptr<_Yp, _Del>&& __r) -23376: : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { } -23376: -23376: -23376: -23376: -23376: -23376: -23376: constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { } -23376: -23376: shared_ptr& operator=(const shared_ptr&) noexcept = default; -23376: -23376: template -23376: _Assignable&> -23376: operator=(const shared_ptr<_Yp>& __r) noexcept -23376: { -23376: this->__shared_ptr<_Tp>::operator=(__r); -23376: return *this; -23376: } -23376: -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: template -23376: _Assignable> -23376: operator=(auto_ptr<_Yp>&& __r) -23376: { -23376: this->__shared_ptr<_Tp>::operator=(std::move(__r)); -23376: return *this; -23376: } -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: shared_ptr& -23376: operator=(shared_ptr&& __r) noexcept -23376: { -23376: this->__shared_ptr<_Tp>::operator=(std::move(__r)); -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable> -23376: operator=(shared_ptr<_Yp>&& __r) noexcept -23376: { -23376: this->__shared_ptr<_Tp>::operator=(std::move(__r)); -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable> -23376: operator=(unique_ptr<_Yp, _Del>&& __r) -23376: { -23376: this->__shared_ptr<_Tp>::operator=(std::move(__r)); -23376: return *this; -23376: } -23376: -23376: private: -23376: -23376: template -23376: shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) -23376: : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...) -23376: { } -23376: -23376: template -23376: friend shared_ptr<_Yp> -23376: allocate_shared(const _Alloc& __a, _Args&&... __args); -23376: -23376: -23376: shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) -23376: : __shared_ptr<_Tp>(__r, std::nothrow) { } -23376: -23376: friend class weak_ptr<_Tp>; -23376: }; -23376: # 381 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: inline bool -23376: operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { return __a.get() == __b.get(); } -23376: -23376: template -23376: inline bool -23376: operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { return !__a; } -23376: -23376: template -23376: inline bool -23376: operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { return !__a; } -23376: -23376: template -23376: inline bool -23376: operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { return __a.get() != __b.get(); } -23376: -23376: template -23376: inline bool -23376: operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { return (bool)__a; } -23376: -23376: template -23376: inline bool -23376: operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { return (bool)__a; } -23376: -23376: template -23376: inline bool -23376: operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { -23376: using _Tp_elt = typename shared_ptr<_Tp>::element_type; -23376: using _Up_elt = typename shared_ptr<_Up>::element_type; -23376: using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; -23376: return less<_Vp>()(__a.get(), __b.get()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { -23376: using _Tp_elt = typename shared_ptr<_Tp>::element_type; -23376: return less<_Tp_elt*>()(__a.get(), nullptr); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { -23376: using _Tp_elt = typename shared_ptr<_Tp>::element_type; -23376: return less<_Tp_elt*>()(nullptr, __a.get()); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { return !(__b < __a); } -23376: -23376: template -23376: inline bool -23376: operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { return !(nullptr < __a); } -23376: -23376: template -23376: inline bool -23376: operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { return !(__a < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { return (__b < __a); } -23376: -23376: template -23376: inline bool -23376: operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { return nullptr < __a; } -23376: -23376: template -23376: inline bool -23376: operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { return __a < nullptr; } -23376: -23376: template -23376: inline bool -23376: operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept -23376: { return !(__a < __b); } -23376: -23376: template -23376: inline bool -23376: operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept -23376: { return !(__a < nullptr); } -23376: -23376: template -23376: inline bool -23376: operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept -23376: { return !(nullptr < __a); } -23376: -23376: template -23376: struct less> : public _Sp_less> -23376: { }; -23376: -23376: -23376: template -23376: inline void -23376: swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept -23376: { __a.swap(__b); } -23376: -23376: -23376: template -23376: inline shared_ptr<_Tp> -23376: static_pointer_cast(const shared_ptr<_Up>& __r) noexcept -23376: { -23376: using _Sp = shared_ptr<_Tp>; -23376: return _Sp(__r, static_cast(__r.get())); -23376: } -23376: -23376: template -23376: inline shared_ptr<_Tp> -23376: const_pointer_cast(const shared_ptr<_Up>& __r) noexcept -23376: { -23376: using _Sp = shared_ptr<_Tp>; -23376: return _Sp(__r, const_cast(__r.get())); -23376: } -23376: -23376: template -23376: inline shared_ptr<_Tp> -23376: dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept -23376: { -23376: using _Sp = shared_ptr<_Tp>; -23376: if (auto* __p = dynamic_cast(__r.get())) -23376: return _Sp(__r, __p); -23376: return _Sp(); -23376: } -23376: # 534 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: class weak_ptr : public __weak_ptr<_Tp> -23376: { -23376: template -23376: using _Constructible = typename enable_if< -23376: is_constructible<__weak_ptr<_Tp>, _Arg>::value -23376: >::type; -23376: -23376: template -23376: using _Assignable = typename enable_if< -23376: is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr& -23376: >::type; -23376: -23376: public: -23376: constexpr weak_ptr() noexcept = default; -23376: -23376: template&>> -23376: weak_ptr(const shared_ptr<_Yp>& __r) noexcept -23376: : __weak_ptr<_Tp>(__r) { } -23376: -23376: weak_ptr(const weak_ptr&) noexcept = default; -23376: -23376: template&>> -23376: weak_ptr(const weak_ptr<_Yp>& __r) noexcept -23376: : __weak_ptr<_Tp>(__r) { } -23376: -23376: weak_ptr(weak_ptr&&) noexcept = default; -23376: -23376: template>> -23376: weak_ptr(weak_ptr<_Yp>&& __r) noexcept -23376: : __weak_ptr<_Tp>(std::move(__r)) { } -23376: -23376: weak_ptr& -23376: operator=(const weak_ptr& __r) noexcept = default; -23376: -23376: template -23376: _Assignable&> -23376: operator=(const weak_ptr<_Yp>& __r) noexcept -23376: { -23376: this->__weak_ptr<_Tp>::operator=(__r); -23376: return *this; -23376: } -23376: -23376: template -23376: _Assignable&> -23376: operator=(const shared_ptr<_Yp>& __r) noexcept -23376: { -23376: this->__weak_ptr<_Tp>::operator=(__r); -23376: return *this; -23376: } -23376: -23376: weak_ptr& -23376: operator=(weak_ptr&& __r) noexcept = default; -23376: -23376: template -23376: _Assignable> -23376: operator=(weak_ptr<_Yp>&& __r) noexcept -23376: { -23376: this->__weak_ptr<_Tp>::operator=(std::move(__r)); -23376: return *this; -23376: } -23376: -23376: shared_ptr<_Tp> -23376: lock() const noexcept -23376: { return shared_ptr<_Tp>(*this, std::nothrow); } -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept -23376: { __a.swap(__b); } -23376: -23376: -23376: -23376: template -23376: struct owner_less; -23376: -23376: -23376: template<> -23376: struct owner_less : _Sp_owner_less -23376: { }; -23376: -23376: -23376: template -23376: struct owner_less> -23376: : public _Sp_owner_less, weak_ptr<_Tp>> -23376: { }; -23376: -23376: -23376: template -23376: struct owner_less> -23376: : public _Sp_owner_less, shared_ptr<_Tp>> -23376: { }; -23376: -23376: -23376: -23376: -23376: template -23376: class enable_shared_from_this -23376: { -23376: protected: -23376: constexpr enable_shared_from_this() noexcept { } -23376: -23376: enable_shared_from_this(const enable_shared_from_this&) noexcept { } -23376: -23376: enable_shared_from_this& -23376: operator=(const enable_shared_from_this&) noexcept -23376: { return *this; } -23376: -23376: ~enable_shared_from_this() { } -23376: -23376: public: -23376: shared_ptr<_Tp> -23376: shared_from_this() -23376: { return shared_ptr<_Tp>(this->_M_weak_this); } -23376: -23376: shared_ptr -23376: shared_from_this() const -23376: { return shared_ptr(this->_M_weak_this); } -23376: -23376: -23376: -23376: weak_ptr<_Tp> -23376: weak_from_this() noexcept -23376: { return this->_M_weak_this; } -23376: -23376: weak_ptr -23376: weak_from_this() const noexcept -23376: { return this->_M_weak_this; } -23376: -23376: -23376: private: -23376: template -23376: void -23376: _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept -23376: { _M_weak_this._M_assign(__p, __n); } -23376: -23376: -23376: friend const enable_shared_from_this* -23376: __enable_shared_from_this_base(const __shared_count<>&, -23376: const enable_shared_from_this* __p) -23376: { return __p; } -23376: -23376: template -23376: friend class __shared_ptr; -23376: -23376: mutable weak_ptr<_Tp> _M_weak_this; -23376: }; -23376: # 701 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: inline shared_ptr<_Tp> -23376: allocate_shared(const _Alloc& __a, _Args&&... __args) -23376: { -23376: return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, -23376: std::forward<_Args>(__args)...); -23376: } -23376: # 716 "/usr/include/c++/8/bits/shared_ptr.h" 3 -23376: template -23376: inline shared_ptr<_Tp> -23376: make_shared(_Args&&... __args) -23376: { -23376: typedef typename std::remove_cv<_Tp>::type _Tp_nc; -23376: return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: template -23376: struct hash> -23376: : public __hash_base> -23376: { -23376: size_t -23376: operator()(const shared_ptr<_Tp>& __s) const noexcept -23376: { -23376: return std::hash::element_type*>()(__s.get()); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: } -23376: # 82 "/usr/include/c++/8/memory" 2 3 -23376: # 1 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3 -23376: # 1 "/usr/include/c++/8/bits/atomic_base.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/atomic_base.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/atomic_base.h" 3 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3 -23376: # 38 "/usr/include/c++/8/bits/atomic_base.h" 2 3 -23376: -23376: -23376: -23376: -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 55 "/usr/include/c++/8/bits/atomic_base.h" 3 -23376: typedef enum memory_order -23376: { -23376: memory_order_relaxed, -23376: memory_order_consume, -23376: memory_order_acquire, -23376: memory_order_release, -23376: memory_order_acq_rel, -23376: memory_order_seq_cst -23376: } memory_order; -23376: -23376: enum __memory_order_modifier -23376: { -23376: __memory_order_mask = 0x0ffff, -23376: __memory_order_modifier_mask = 0xffff0000, -23376: __memory_order_hle_acquire = 0x10000, -23376: __memory_order_hle_release = 0x20000 -23376: }; -23376: -23376: constexpr memory_order -23376: operator|(memory_order __m, __memory_order_modifier __mod) -23376: { -23376: return memory_order(__m | int(__mod)); -23376: } -23376: -23376: constexpr memory_order -23376: operator&(memory_order __m, __memory_order_modifier __mod) -23376: { -23376: return memory_order(__m & int(__mod)); -23376: } -23376: -23376: -23376: constexpr memory_order -23376: __cmpexch_failure_order2(memory_order __m) noexcept -23376: { -23376: return __m == memory_order_acq_rel ? memory_order_acquire -23376: : __m == memory_order_release ? memory_order_relaxed : __m; -23376: } -23376: -23376: constexpr memory_order -23376: __cmpexch_failure_order(memory_order __m) noexcept -23376: { -23376: return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) -23376: | (__m & __memory_order_modifier_mask)); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: atomic_thread_fence(memory_order __m) noexcept -23376: { __atomic_thread_fence(__m); } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: atomic_signal_fence(memory_order __m) noexcept -23376: { __atomic_signal_fence(__m); } -23376: -23376: -23376: template -23376: inline _Tp -23376: kill_dependency(_Tp __y) noexcept -23376: { -23376: _Tp __ret(__y); -23376: return __ret; -23376: } -23376: -23376: -23376: -23376: template -23376: struct __atomic_base; -23376: -23376: -23376: -23376: -23376: template -23376: struct atomic; -23376: -23376: template -23376: struct atomic<_Tp*>; -23376: -23376: -23376: -23376: typedef bool __atomic_flag_data_type; -23376: # 148 "/usr/include/c++/8/bits/atomic_base.h" 3 -23376: extern "C" { -23376: -23376: struct __atomic_flag_base -23376: { -23376: __atomic_flag_data_type _M_i; -23376: }; -23376: -23376: } -23376: -23376: -23376: -23376: -23376: struct atomic_flag : public __atomic_flag_base -23376: { -23376: atomic_flag() noexcept = default; -23376: ~atomic_flag() noexcept = default; -23376: atomic_flag(const atomic_flag&) = delete; -23376: atomic_flag& operator=(const atomic_flag&) = delete; -23376: atomic_flag& operator=(const atomic_flag&) volatile = delete; -23376: -23376: -23376: constexpr atomic_flag(bool __i) noexcept -23376: : __atomic_flag_base{ _S_init(__i) } -23376: { } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: test_and_set(memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: return __atomic_test_and_set (&_M_i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: return __atomic_test_and_set (&_M_i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: clear(memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_clear (&_M_i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: clear(memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_clear (&_M_i, __m); -23376: } -23376: -23376: private: -23376: static constexpr __atomic_flag_data_type -23376: _S_init(bool __i) -23376: { return __i ? 1 : 0; } -23376: }; -23376: # 237 "/usr/include/c++/8/bits/atomic_base.h" 3 -23376: template -23376: struct __atomic_base -23376: { -23376: private: -23376: typedef _ITp __int_type; -23376: -23376: static constexpr int _S_alignment = -23376: sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp); -23376: -23376: alignas(_S_alignment) __int_type _M_i; -23376: -23376: public: -23376: __atomic_base() noexcept = default; -23376: ~__atomic_base() noexcept = default; -23376: __atomic_base(const __atomic_base&) = delete; -23376: __atomic_base& operator=(const __atomic_base&) = delete; -23376: __atomic_base& operator=(const __atomic_base&) volatile = delete; -23376: -23376: -23376: constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } -23376: -23376: operator __int_type() const noexcept -23376: { return load(); } -23376: -23376: operator __int_type() const volatile noexcept -23376: { return load(); } -23376: -23376: __int_type -23376: operator=(__int_type __i) noexcept -23376: { -23376: store(__i); -23376: return __i; -23376: } -23376: -23376: __int_type -23376: operator=(__int_type __i) volatile noexcept -23376: { -23376: store(__i); -23376: return __i; -23376: } -23376: -23376: __int_type -23376: operator++(int) noexcept -23376: { return fetch_add(1); } -23376: -23376: __int_type -23376: operator++(int) volatile noexcept -23376: { return fetch_add(1); } -23376: -23376: __int_type -23376: operator--(int) noexcept -23376: { return fetch_sub(1); } -23376: -23376: __int_type -23376: operator--(int) volatile noexcept -23376: { return fetch_sub(1); } -23376: -23376: __int_type -23376: operator++() noexcept -23376: { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator++() volatile noexcept -23376: { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator--() noexcept -23376: { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator--() volatile noexcept -23376: { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator+=(__int_type __i) noexcept -23376: { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator+=(__int_type __i) volatile noexcept -23376: { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator-=(__int_type __i) noexcept -23376: { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator-=(__int_type __i) volatile noexcept -23376: { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator&=(__int_type __i) noexcept -23376: { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator&=(__int_type __i) volatile noexcept -23376: { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator|=(__int_type __i) noexcept -23376: { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator|=(__int_type __i) volatile noexcept -23376: { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator^=(__int_type __i) noexcept -23376: { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: __int_type -23376: operator^=(__int_type __i) volatile noexcept -23376: { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); } -23376: -23376: bool -23376: is_lock_free() const noexcept -23376: { -23376: -23376: return __atomic_is_lock_free(sizeof(_M_i), -23376: reinterpret_cast(-__alignof(_M_i))); -23376: } -23376: -23376: bool -23376: is_lock_free() const volatile noexcept -23376: { -23376: -23376: return __atomic_is_lock_free(sizeof(_M_i), -23376: reinterpret_cast(-__alignof(_M_i))); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_store_n(&_M_i, __i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: store(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_store_n(&_M_i, __i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: load(memory_order __m = memory_order_seq_cst) const noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: -23376: return __atomic_load_n(&_M_i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: load(memory_order __m = memory_order_seq_cst) const volatile noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: -23376: return __atomic_load_n(&_M_i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: exchange(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: return __atomic_exchange_n(&_M_i, __i, __m); -23376: } -23376: -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: exchange(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: return __atomic_exchange_n(&_M_i, __i, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_weak(__int_type& __i1, __int_type __i2, -23376: memory_order __m1, memory_order __m2) noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_weak(__int_type& __i1, __int_type __i2, -23376: memory_order __m1, -23376: memory_order __m2) volatile noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_weak(__int_type& __i1, __int_type __i2, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: return compare_exchange_weak(__i1, __i2, __m, -23376: __cmpexch_failure_order(__m)); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_weak(__int_type& __i1, __int_type __i2, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: return compare_exchange_weak(__i1, __i2, __m, -23376: __cmpexch_failure_order(__m)); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__int_type& __i1, __int_type __i2, -23376: memory_order __m1, memory_order __m2) noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__int_type& __i1, __int_type __i2, -23376: memory_order __m1, -23376: memory_order __m2) volatile noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__int_type& __i1, __int_type __i2, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: return compare_exchange_strong(__i1, __i2, __m, -23376: __cmpexch_failure_order(__m)); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__int_type& __i1, __int_type __i2, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: return compare_exchange_strong(__i1, __i2, __m, -23376: __cmpexch_failure_order(__m)); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_add(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_add(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_add(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_add(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_sub(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_sub(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_sub(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_sub(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_and(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_and(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_and(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_and(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_or(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_or(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_or(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_or(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_xor(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_xor(&_M_i, __i, __m); } -23376: -23376: inline __attribute__((__always_inline__)) __int_type -23376: fetch_xor(__int_type __i, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_xor(&_M_i, __i, __m); } -23376: }; -23376: -23376: -23376: -23376: template -23376: struct __atomic_base<_PTp*> -23376: { -23376: private: -23376: typedef _PTp* __pointer_type; -23376: -23376: __pointer_type _M_p; -23376: -23376: -23376: constexpr ptrdiff_t -23376: _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); } -23376: -23376: constexpr ptrdiff_t -23376: _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); } -23376: -23376: public: -23376: __atomic_base() noexcept = default; -23376: ~__atomic_base() noexcept = default; -23376: __atomic_base(const __atomic_base&) = delete; -23376: __atomic_base& operator=(const __atomic_base&) = delete; -23376: __atomic_base& operator=(const __atomic_base&) volatile = delete; -23376: -23376: -23376: constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } -23376: -23376: operator __pointer_type() const noexcept -23376: { return load(); } -23376: -23376: operator __pointer_type() const volatile noexcept -23376: { return load(); } -23376: -23376: __pointer_type -23376: operator=(__pointer_type __p) noexcept -23376: { -23376: store(__p); -23376: return __p; -23376: } -23376: -23376: __pointer_type -23376: operator=(__pointer_type __p) volatile noexcept -23376: { -23376: store(__p); -23376: return __p; -23376: } -23376: -23376: __pointer_type -23376: operator++(int) noexcept -23376: { return fetch_add(1); } -23376: -23376: __pointer_type -23376: operator++(int) volatile noexcept -23376: { return fetch_add(1); } -23376: -23376: __pointer_type -23376: operator--(int) noexcept -23376: { return fetch_sub(1); } -23376: -23376: __pointer_type -23376: operator--(int) volatile noexcept -23376: { return fetch_sub(1); } -23376: -23376: __pointer_type -23376: operator++() noexcept -23376: { return __atomic_add_fetch(&_M_p, _M_type_size(1), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator++() volatile noexcept -23376: { return __atomic_add_fetch(&_M_p, _M_type_size(1), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator--() noexcept -23376: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator--() volatile noexcept -23376: { return __atomic_sub_fetch(&_M_p, _M_type_size(1), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator+=(ptrdiff_t __d) noexcept -23376: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator+=(ptrdiff_t __d) volatile noexcept -23376: { return __atomic_add_fetch(&_M_p, _M_type_size(__d), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator-=(ptrdiff_t __d) noexcept -23376: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), -23376: memory_order_seq_cst); } -23376: -23376: __pointer_type -23376: operator-=(ptrdiff_t __d) volatile noexcept -23376: { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), -23376: memory_order_seq_cst); } -23376: -23376: bool -23376: is_lock_free() const noexcept -23376: { -23376: -23376: return __atomic_is_lock_free(sizeof(_M_p), -23376: reinterpret_cast(-__alignof(_M_p))); -23376: } -23376: -23376: bool -23376: is_lock_free() const volatile noexcept -23376: { -23376: -23376: return __atomic_is_lock_free(sizeof(_M_p), -23376: reinterpret_cast(-__alignof(_M_p))); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: store(__pointer_type __p, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_store_n(&_M_p, __p, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) void -23376: store(__pointer_type __p, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: __atomic_store_n(&_M_p, __p, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: load(memory_order __m = memory_order_seq_cst) const noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: -23376: return __atomic_load_n(&_M_p, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: load(memory_order __m = memory_order_seq_cst) const volatile noexcept -23376: { -23376: memory_order __b = __m & __memory_order_mask; -23376: ; -23376: ; -23376: -23376: return __atomic_load_n(&_M_p, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: exchange(__pointer_type __p, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { -23376: return __atomic_exchange_n(&_M_p, __p, __m); -23376: } -23376: -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: exchange(__pointer_type __p, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { -23376: return __atomic_exchange_n(&_M_p, __p, __m); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, -23376: memory_order __m1, -23376: memory_order __m2) noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) bool -23376: compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, -23376: memory_order __m1, -23376: memory_order __m2) volatile noexcept -23376: { -23376: memory_order __b2 = __m2 & __memory_order_mask; -23376: memory_order __b1 = __m1 & __memory_order_mask; -23376: -23376: ; -23376: ; -23376: ; -23376: -23376: return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2); -23376: } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: fetch_add(ptrdiff_t __d, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: fetch_add(ptrdiff_t __d, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: fetch_sub(ptrdiff_t __d, -23376: memory_order __m = memory_order_seq_cst) noexcept -23376: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); } -23376: -23376: inline __attribute__((__always_inline__)) __pointer_type -23376: fetch_sub(ptrdiff_t __d, -23376: memory_order __m = memory_order_seq_cst) volatile noexcept -23376: { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); } -23376: }; -23376: -23376: -23376: -23376: -23376: } -23376: # 34 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 2 3 -23376: -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct _Sp_locker -23376: { -23376: _Sp_locker(const _Sp_locker&) = delete; -23376: _Sp_locker& operator=(const _Sp_locker&) = delete; -23376: -23376: -23376: explicit -23376: _Sp_locker(const void*) noexcept; -23376: _Sp_locker(const void*, const void*) noexcept; -23376: ~_Sp_locker(); -23376: -23376: private: -23376: unsigned char _M_key1; -23376: unsigned char _M_key2; -23376: -23376: -23376: -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p) -23376: { -23376: -23376: return __gthread_active_p() == 0; -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_is_lock_free(const shared_ptr<_Tp>* __p) -23376: { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } -23376: # 96 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3 -23376: template -23376: inline shared_ptr<_Tp> -23376: atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: return *__p; -23376: } -23376: -23376: template -23376: inline shared_ptr<_Tp> -23376: atomic_load(const shared_ptr<_Tp>* __p) -23376: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: return *__p; -23376: } -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: atomic_load(const __shared_ptr<_Tp, _Lp>* __p) -23376: { return std::atomic_load_explicit(__p, memory_order_seq_cst); } -23376: # 132 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3 -23376: template -23376: inline void -23376: atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, -23376: memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: __p->swap(__r); -23376: } -23376: -23376: template -23376: inline void -23376: atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) -23376: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } -23376: -23376: template -23376: inline void -23376: atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp> __r, -23376: memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: __p->swap(__r); -23376: } -23376: -23376: template -23376: inline void -23376: atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) -23376: { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } -23376: # 169 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3 -23376: template -23376: inline shared_ptr<_Tp> -23376: atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, -23376: memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: __p->swap(__r); -23376: return __r; -23376: } -23376: -23376: template -23376: inline shared_ptr<_Tp> -23376: atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) -23376: { -23376: return std::atomic_exchange_explicit(__p, std::move(__r), -23376: memory_order_seq_cst); -23376: } -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp> __r, -23376: memory_order) -23376: { -23376: _Sp_locker __lock{__p}; -23376: __p->swap(__r); -23376: return __r; -23376: } -23376: -23376: template -23376: inline __shared_ptr<_Tp, _Lp> -23376: atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) -23376: { -23376: return std::atomic_exchange_explicit(__p, std::move(__r), -23376: memory_order_seq_cst); -23376: } -23376: # 218 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3 -23376: template -23376: bool -23376: atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, -23376: shared_ptr<_Tp>* __v, -23376: shared_ptr<_Tp> __w, -23376: memory_order, -23376: memory_order) -23376: { -23376: shared_ptr<_Tp> __x; -23376: _Sp_locker __lock{__p, __v}; -23376: owner_less> __less; -23376: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) -23376: { -23376: __x = std::move(*__p); -23376: *__p = std::move(__w); -23376: return true; -23376: } -23376: __x = std::move(*__v); -23376: *__v = *__p; -23376: return false; -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, -23376: shared_ptr<_Tp> __w) -23376: { -23376: return std::atomic_compare_exchange_strong_explicit(__p, __v, -23376: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, -23376: shared_ptr<_Tp>* __v, -23376: shared_ptr<_Tp> __w, -23376: memory_order __success, -23376: memory_order __failure) -23376: { -23376: return std::atomic_compare_exchange_strong_explicit(__p, __v, -23376: std::move(__w), __success, __failure); -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, -23376: shared_ptr<_Tp> __w) -23376: { -23376: return std::atomic_compare_exchange_weak_explicit(__p, __v, -23376: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); -23376: } -23376: -23376: template -23376: bool -23376: atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp>* __v, -23376: __shared_ptr<_Tp, _Lp> __w, -23376: memory_order, -23376: memory_order) -23376: { -23376: __shared_ptr<_Tp, _Lp> __x; -23376: _Sp_locker __lock{__p, __v}; -23376: owner_less<__shared_ptr<_Tp, _Lp>> __less; -23376: if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) -23376: { -23376: __x = std::move(*__p); -23376: *__p = std::move(__w); -23376: return true; -23376: } -23376: __x = std::move(*__v); -23376: *__v = *__p; -23376: return false; -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp>* __v, -23376: __shared_ptr<_Tp, _Lp> __w) -23376: { -23376: return std::atomic_compare_exchange_strong_explicit(__p, __v, -23376: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp>* __v, -23376: __shared_ptr<_Tp, _Lp> __w, -23376: memory_order __success, -23376: memory_order __failure) -23376: { -23376: return std::atomic_compare_exchange_strong_explicit(__p, __v, -23376: std::move(__w), __success, __failure); -23376: } -23376: -23376: template -23376: inline bool -23376: atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, -23376: __shared_ptr<_Tp, _Lp>* __v, -23376: __shared_ptr<_Tp, _Lp> __w) -23376: { -23376: return std::atomic_compare_exchange_weak_explicit(__p, __v, -23376: std::move(__w), memory_order_seq_cst, memory_order_seq_cst); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 83 "/usr/include/c++/8/memory" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/backward/auto_ptr.h" 1 3 -23376: # 36 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 47 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: template -23376: struct auto_ptr_ref -23376: { -23376: _Tp1* _M_ptr; -23376: -23376: explicit -23376: auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } -23376: } __attribute__ ((__deprecated__)); -23376: -23376: #pragma GCC diagnostic push -23376: #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -23376: # 88 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: template -23376: class auto_ptr -23376: { -23376: private: -23376: _Tp* _M_ptr; -23376: -23376: public: -23376: -23376: typedef _Tp element_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } -23376: # 114 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } -23376: # 126 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: template -23376: auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } -23376: # 137 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: auto_ptr& -23376: operator=(auto_ptr& __a) throw() -23376: { -23376: reset(__a.release()); -23376: return *this; -23376: } -23376: # 154 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: template -23376: auto_ptr& -23376: operator=(auto_ptr<_Tp1>& __a) throw() -23376: { -23376: reset(__a.release()); -23376: return *this; -23376: } -23376: # 172 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: ~auto_ptr() { delete _M_ptr; } -23376: # 182 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: element_type& -23376: operator*() const throw() -23376: { -23376: ; -23376: return *_M_ptr; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: element_type* -23376: operator->() const throw() -23376: { -23376: ; -23376: return _M_ptr; -23376: } -23376: # 212 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: element_type* -23376: get() const throw() { return _M_ptr; } -23376: # 226 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: element_type* -23376: release() throw() -23376: { -23376: element_type* __tmp = _M_ptr; -23376: _M_ptr = 0; -23376: return __tmp; -23376: } -23376: # 241 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: void -23376: reset(element_type* __p = 0) throw() -23376: { -23376: if (__p != _M_ptr) -23376: { -23376: delete _M_ptr; -23376: _M_ptr = __p; -23376: } -23376: } -23376: # 266 "/usr/include/c++/8/backward/auto_ptr.h" 3 -23376: auto_ptr(auto_ptr_ref __ref) throw() -23376: : _M_ptr(__ref._M_ptr) { } -23376: -23376: auto_ptr& -23376: operator=(auto_ptr_ref __ref) throw() -23376: { -23376: if (__ref._M_ptr != this->get()) -23376: { -23376: delete _M_ptr; -23376: _M_ptr = __ref._M_ptr; -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: operator auto_ptr_ref<_Tp1>() throw() -23376: { return auto_ptr_ref<_Tp1>(this->release()); } -23376: -23376: template -23376: operator auto_ptr<_Tp1>() throw() -23376: { return auto_ptr<_Tp1>(this->release()); } -23376: } __attribute__ ((__deprecated__)); -23376: -23376: -23376: -23376: template<> -23376: class auto_ptr -23376: { -23376: public: -23376: typedef void element_type; -23376: } __attribute__ ((__deprecated__)); -23376: -23376: -23376: template<_Lock_policy _Lp> -23376: template -23376: inline -23376: __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r) -23376: : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get())) -23376: { __r.release(); } -23376: -23376: template -23376: template -23376: inline -23376: __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r) -23376: : _M_ptr(__r.get()), _M_refcount() -23376: { -23376: -23376: static_assert( sizeof(_Tp1) > 0, "incomplete type" ); -23376: _Tp1* __tmp = __r.get(); -23376: _M_refcount = __shared_count<_Lp>(std::move(__r)); -23376: _M_enable_shared_from_this_with(__tmp); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r) -23376: : __shared_ptr<_Tp>(std::move(__r)) { } -23376: -23376: template -23376: template -23376: inline -23376: unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept -23376: : _M_t(__u.release(), deleter_type()) { } -23376: -23376: -23376: #pragma GCC diagnostic pop -23376: -23376: -23376: } -23376: # 85 "/usr/include/c++/8/memory" 2 3 -23376: # 93 "/usr/include/c++/8/memory" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: # 113 "/usr/include/c++/8/memory" 3 -23376: inline void* -23376: align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept -23376: { -23376: const auto __intptr = reinterpret_cast(__ptr); -23376: const auto __aligned = (__intptr - 1u + __align) & -__align; -23376: const auto __diff = __aligned - __intptr; -23376: if ((__size + __diff) > __space) -23376: return nullptr; -23376: else -23376: { -23376: __space -= __diff; -23376: return __ptr = reinterpret_cast(__aligned); -23376: } -23376: } -23376: -23376: -23376: -23376: enum class pointer_safety { relaxed, preferred, strict }; -23376: -23376: inline void -23376: declare_reachable(void*) { } -23376: -23376: template -23376: inline _Tp* -23376: undeclare_reachable(_Tp* __p) { return __p; } -23376: -23376: inline void -23376: declare_no_pointers(char*, size_t) { } -23376: -23376: inline void -23376: undeclare_no_pointers(char*, size_t) { } -23376: -23376: inline pointer_safety -23376: get_pointer_safety() noexcept { return pointer_safety::relaxed; } -23376: -23376: -23376: } -23376: # 34 "../../src/Dense_Row_defs.hh" 2 -23376: # 42 "../../src/Dense_Row_defs.hh" -23376: -23376: # 42 "../../src/Dense_Row_defs.hh" -23376: class Parma_Polyhedra_Library::Dense_Row { -23376: public: -23376: class iterator; -23376: class const_iterator; -23376: -23376: -23376: Dense_Row(); -23376: -23376: explicit Dense_Row(const Sparse_Row& row); -23376: -23376: -23376: -23376: -23376: -23376: Dense_Row(dimension_type sz); -23376: # 69 "../../src/Dense_Row_defs.hh" -23376: Dense_Row(dimension_type sz, dimension_type capacity); -23376: -23376: -23376: Dense_Row(const Dense_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Dense_Row(const Dense_Row& y, dimension_type capacity); -23376: -23376: -23376: -23376: -23376: -23376: Dense_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity); -23376: -23376: -23376: -23376: -23376: -23376: Dense_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity); -23376: -23376: -23376: ~Dense_Row(); -23376: -23376: -23376: Dense_Row& operator=(const Dense_Row& y); -23376: -23376: -23376: Dense_Row& operator=(const Sparse_Row& y); -23376: -23376: -23376: void m_swap(Dense_Row& y); -23376: -23376: -23376: void resize(dimension_type sz); -23376: -23376: -23376: void resize(dimension_type sz, dimension_type capacity); -23376: -23376: -23376: void clear(); -23376: # 127 "../../src/Dense_Row_defs.hh" -23376: void add_zeroes_and_shift(dimension_type n, dimension_type i); -23376: # 136 "../../src/Dense_Row_defs.hh" -23376: void expand_within_capacity(dimension_type new_size); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void shrink(dimension_type new_size); -23376: -23376: -23376: static dimension_type max_size(); -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: -23376: -23376: Coefficient& operator[](dimension_type k); -23376: -23376: -23376: Coefficient_traits::const_reference operator[](dimension_type k) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void normalize(); -23376: -23376: -23376: -23376: void swap_coefficients(dimension_type i, dimension_type j); -23376: -23376: -23376: -23376: void swap_coefficients(iterator i, iterator j); -23376: -23376: iterator begin(); -23376: const_iterator begin() const; -23376: -23376: iterator end(); -23376: const_iterator end() const; -23376: -23376: -23376: -23376: void reset(dimension_type i); -23376: -23376: -23376: -23376: void reset(dimension_type first, dimension_type last); -23376: -23376: -23376: -23376: iterator reset(iterator itr); -23376: -23376: -23376: -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: iterator find(dimension_type i); -23376: -23376: -23376: const_iterator find(dimension_type i) const; -23376: -23376: -23376: iterator find(iterator itr, dimension_type i); -23376: -23376: -23376: const_iterator find(const_iterator itr, dimension_type i) const; -23376: -23376: -23376: iterator lower_bound(dimension_type i); -23376: -23376: -23376: const_iterator lower_bound(dimension_type i) const; -23376: -23376: -23376: iterator lower_bound(iterator itr, dimension_type i); -23376: -23376: -23376: const_iterator lower_bound(const_iterator itr, dimension_type i) const; -23376: -23376: -23376: iterator insert(dimension_type i, Coefficient_traits::const_reference x); -23376: -23376: -23376: iterator insert(dimension_type i); -23376: -23376: -23376: iterator insert(iterator itr, dimension_type i, -23376: Coefficient_traits::const_reference x); -23376: -23376: -23376: iterator insert(iterator itr, dimension_type i); -23376: # 258 "../../src/Dense_Row_defs.hh" -23376: template -23376: void combine_needs_first(const Dense_Row& y, -23376: const Func1& f, const Func2& g); -23376: # 286 "../../src/Dense_Row_defs.hh" -23376: template -23376: void combine_needs_second(const Dense_Row& y, -23376: const Func1& g, const Func2& h); -23376: # 318 "../../src/Dense_Row_defs.hh" -23376: template -23376: void combine(const Dense_Row& y, -23376: const Func1& f, const Func2& g, const Func3& h); -23376: # 342 "../../src/Dense_Row_defs.hh" -23376: void linear_combine(const Dense_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: # 354 "../../src/Dense_Row_defs.hh" -23376: void linear_combine(const Dense_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: bool OK() const; -23376: -23376: -23376: -23376: -23376: -23376: bool OK(dimension_type row_size) const; -23376: -23376: private: -23376: void init(const Sparse_Row& row); -23376: -23376: void destroy(); -23376: -23376: struct Impl { -23376: -23376: Impl(); -23376: -23376: ~Impl(); -23376: -23376: -23376: dimension_type size; -23376: -23376: -23376: dimension_type capacity; -23376: -23376: -23376: std::allocator coeff_allocator; -23376: -23376: -23376: -23376: Coefficient* vec; -23376: }; -23376: -23376: Impl impl; -23376: -23376: -23376: dimension_type capacity() const; -23376: }; -23376: -23376: class Parma_Polyhedra_Library::Dense_Row::iterator { -23376: public: -23376: -23376: typedef std::bidirectional_iterator_tag iterator_category; -23376: typedef Coefficient value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef value_type& reference; -23376: -23376: iterator(); -23376: iterator(Dense_Row& r, dimension_type i); -23376: -23376: Coefficient& operator*(); -23376: Coefficient_traits::const_reference operator*() const; -23376: # 454 "../../src/Dense_Row_defs.hh" -23376: dimension_type index() const; -23376: -23376: iterator& operator++(); -23376: iterator operator++(int); -23376: -23376: iterator& operator--(); -23376: iterator operator--(int); -23376: -23376: bool operator==(const iterator& x) const; -23376: bool operator!=(const iterator& x) const; -23376: -23376: operator const_iterator() const; -23376: -23376: bool OK() const; -23376: -23376: private: -23376: Dense_Row* row; -23376: dimension_type idx; -23376: }; -23376: -23376: class Parma_Polyhedra_Library::Dense_Row::const_iterator { -23376: public: -23376: -23376: typedef const Coefficient value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef Coefficient_traits::const_reference reference; -23376: -23376: const_iterator(); -23376: const_iterator(const Dense_Row& r, dimension_type i); -23376: -23376: Coefficient_traits::const_reference operator*() const; -23376: # 494 "../../src/Dense_Row_defs.hh" -23376: dimension_type index() const; -23376: -23376: const_iterator& operator++(); -23376: const_iterator operator++(int); -23376: -23376: const_iterator& operator--(); -23376: const_iterator operator--(int); -23376: -23376: bool operator==(const const_iterator& x) const; -23376: bool operator!=(const const_iterator& x) const; -23376: -23376: bool OK() const; -23376: -23376: private: -23376: const Dense_Row* row; -23376: dimension_type idx; -23376: }; -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: void swap(Dense_Row& x, Dense_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: void iter_swap(std::vector::iterator x, -23376: std::vector::iterator y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Dense_Row& x, const Dense_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Dense_Row& x, const Dense_Row& y); -23376: -23376: -23376: -23376: -23376: void linear_combine(Dense_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void linear_combine(Dense_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: } -23376: -23376: # 1 "../../src/Dense_Row_inlines.hh" 1 -23376: # 32 "../../src/Dense_Row_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Dense_Row::Impl::Impl() -23376: : size(0), capacity(0), coeff_allocator(), vec(0) { -23376: } -23376: -23376: inline -23376: Dense_Row::Impl::~Impl() { -23376: while (size != 0) { -23376: --size; -23376: vec[size].~Coefficient(); -23376: } -23376: coeff_allocator.deallocate(vec, capacity); -23376: } -23376: -23376: inline dimension_type -23376: Dense_Row::max_size() { -23376: return std::numeric_limits::max() / sizeof(Coefficient); -23376: } -23376: -23376: inline dimension_type -23376: Dense_Row::size() const { -23376: return impl.size; -23376: } -23376: -23376: inline dimension_type -23376: Dense_Row::capacity() const { -23376: return impl.capacity; -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row() -23376: : impl() { -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row(const dimension_type sz, -23376: const dimension_type capacity) -23376: : impl() { -23376: -23376: resize(sz, capacity); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row(const dimension_type sz) -23376: : impl() { -23376: -23376: resize(sz); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row(const Dense_Row& y) -23376: : impl() { -23376: impl.coeff_allocator = y.impl.coeff_allocator; -23376: if (y.impl.vec != 0) { -23376: impl.capacity = y.capacity(); -23376: impl.vec = impl.coeff_allocator.allocate(impl.capacity); -23376: while (impl.size != y.size()) { -23376: new(&impl.vec[impl.size]) Coefficient(y[impl.size]); -23376: ++impl.size; -23376: } -23376: } -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row(const Dense_Row& y, -23376: const dimension_type capacity) -23376: : impl() { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: impl.capacity = capacity; -23376: impl.coeff_allocator = y.impl.coeff_allocator; -23376: impl.vec = impl.coeff_allocator.allocate(impl.capacity); -23376: -23376: if (y.impl.vec != 0) { -23376: while (impl.size != y.size()) { -23376: new(&impl.vec[impl.size]) Coefficient(y[impl.size]); -23376: ++impl.size; -23376: } -23376: } -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::Dense_Row(const Dense_Row& y, -23376: const dimension_type sz, -23376: const dimension_type capacity) -23376: : impl() { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: impl.capacity = capacity; -23376: impl.coeff_allocator = y.impl.coeff_allocator; -23376: impl.vec = impl.coeff_allocator.allocate(impl.capacity); -23376: -23376: const dimension_type n = std::min(sz, y.size()); -23376: while (impl.size != n) { -23376: new(&impl.vec[impl.size]) Coefficient(y[impl.size]); -23376: ++impl.size; -23376: } -23376: while (impl.size != sz) { -23376: new(&impl.vec[impl.size]) Coefficient(); -23376: ++impl.size; -23376: } -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::~Dense_Row() { -23376: -23376: } -23376: -23376: inline void -23376: Dense_Row::destroy() { -23376: resize(0); -23376: impl.coeff_allocator.deallocate(impl.vec, impl.capacity); -23376: } -23376: -23376: inline void -23376: Dense_Row::m_swap(Dense_Row& y) { -23376: using std::swap; -23376: swap(impl.size, y.impl.size); -23376: swap(impl.capacity, y.impl.capacity); -23376: swap(impl.coeff_allocator, y.impl.coeff_allocator); -23376: swap(impl.vec, y.impl.vec); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline Dense_Row& -23376: Dense_Row::operator=(const Dense_Row& y) { -23376: -23376: if (this != &y && size() == y.size()) { -23376: -23376: -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: (*this)[i] = y[i]; -23376: } -23376: -23376: return *this; -23376: } -23376: -23376: Dense_Row x(y); -23376: swap(*this, x); -23376: -23376: return *this; -23376: } -23376: -23376: inline Coefficient& -23376: Dense_Row::operator[](const dimension_type k) { -23376: ((void) 0); -23376: ((void) 0); -23376: return impl.vec[k]; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Dense_Row::operator[](const dimension_type k) const { -23376: ((void) 0); -23376: ((void) 0); -23376: return impl.vec[k]; -23376: } -23376: -23376: inline void -23376: Dense_Row::swap_coefficients(dimension_type i, dimension_type j) { -23376: std::swap((*this)[i], (*this)[j]); -23376: } -23376: -23376: inline void -23376: Dense_Row::swap_coefficients(iterator i, iterator j) { -23376: std::swap(*i, *j); -23376: } -23376: -23376: inline void -23376: Dense_Row::reset(dimension_type i) { -23376: (*this)[i] = 0; -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::reset(iterator itr) { -23376: *itr = 0; -23376: ++itr; -23376: return itr; -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::begin() { -23376: return iterator(*this, 0); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::begin() const { -23376: return const_iterator(*this, 0); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::end() { -23376: return iterator(*this, size()); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::end() const { -23376: return const_iterator(*this, size()); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Dense_Row::get(dimension_type i) const { -23376: return (*this)[i]; -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::find(dimension_type i) { -23376: return iterator(*this, i); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::find(dimension_type i) const { -23376: return const_iterator(*this, i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::find(iterator itr, dimension_type i) { -23376: (void)itr; -23376: return iterator(*this, i); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::find(const_iterator itr, dimension_type i) const { -23376: (void)itr; -23376: return const_iterator(*this, i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::lower_bound(dimension_type i) { -23376: return find(i); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::lower_bound(dimension_type i) const { -23376: return find(i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::lower_bound(iterator itr, dimension_type i) { -23376: return find(itr, i); -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::lower_bound(const_iterator itr, dimension_type i) const { -23376: return find(itr, i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::insert(dimension_type i, -23376: Coefficient_traits::const_reference x) { -23376: (*this)[i] = x; -23376: return find(i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::insert(dimension_type i) { -23376: return find(i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::insert(iterator itr, dimension_type i, -23376: Coefficient_traits::const_reference x) { -23376: (void)itr; -23376: (*this)[i] = x; -23376: return find(i); -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::insert(iterator itr, dimension_type i) { -23376: (void)itr; -23376: return find(i); -23376: } -23376: -23376: inline memory_size_type -23376: Dense_Row::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Dense_Row::total_memory_in_bytes(dimension_type capacity) const { -23376: return sizeof(*this) + external_memory_in_bytes(capacity); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Dense_Row& x, const Dense_Row& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: inline -23376: Dense_Row::iterator::iterator() -23376: : row( -23376: # 349 "../../src/Dense_Row_inlines.hh" 3 4 -23376: __null -23376: # 349 "../../src/Dense_Row_inlines.hh" -23376: ), idx(0) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::iterator::iterator(Dense_Row& r, dimension_type i) -23376: : row(&r), idx(i) { -23376: ((void) 0); -23376: } -23376: -23376: inline Coefficient& -23376: Dense_Row::iterator::operator*() { -23376: ((void) 0); -23376: return (*row)[idx]; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Dense_Row::iterator::operator*() const { -23376: ((void) 0); -23376: return (*row)[idx]; -23376: } -23376: -23376: inline dimension_type -23376: Dense_Row::iterator::index() const { -23376: return idx; -23376: } -23376: -23376: inline Dense_Row::iterator& -23376: Dense_Row::iterator::operator++() { -23376: ((void) 0); -23376: ++idx; -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::iterator::operator++(int) { -23376: iterator tmp(*this); -23376: ++(*this); -23376: return tmp; -23376: } -23376: -23376: inline Dense_Row::iterator& -23376: Dense_Row::iterator::operator--() { -23376: ((void) 0); -23376: --idx; -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline Dense_Row::iterator -23376: Dense_Row::iterator::operator--(int) { -23376: iterator tmp(*this); -23376: --(*this); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Dense_Row::iterator::operator==(const iterator& x) const { -23376: return (row == x.row) && (idx == x.idx); -23376: } -23376: -23376: inline bool -23376: Dense_Row::iterator::operator!=(const iterator& x) const { -23376: return !(*this == x); -23376: } -23376: -23376: inline -23376: Dense_Row::iterator::operator const_iterator() const { -23376: return const_iterator(*row, idx); -23376: } -23376: -23376: inline bool -23376: Dense_Row::iterator::OK() const { -23376: if (row == -23376: # 423 "../../src/Dense_Row_inlines.hh" 3 4 -23376: __null -23376: # 423 "../../src/Dense_Row_inlines.hh" -23376: ) { -23376: return true; -23376: } -23376: -23376: return (idx <= row->size()); -23376: } -23376: -23376: -23376: inline -23376: Dense_Row::const_iterator::const_iterator() -23376: : row( -23376: # 433 "../../src/Dense_Row_inlines.hh" 3 4 -23376: __null -23376: # 433 "../../src/Dense_Row_inlines.hh" -23376: ), idx(0) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Dense_Row::const_iterator::const_iterator(const Dense_Row& r, -23376: dimension_type i) -23376: : row(&r), idx(i) { -23376: ((void) 0); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Dense_Row::const_iterator::operator*() const { -23376: ((void) 0); -23376: return (*row)[idx]; -23376: } -23376: -23376: inline dimension_type -23376: Dense_Row::const_iterator::index() const { -23376: return idx; -23376: } -23376: -23376: inline Dense_Row::const_iterator& -23376: Dense_Row::const_iterator::operator++() { -23376: ((void) 0); -23376: ++idx; -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::const_iterator::operator++(int) { -23376: const_iterator tmp(*this); -23376: ++(*this); -23376: return tmp; -23376: } -23376: -23376: inline Dense_Row::const_iterator& -23376: Dense_Row::const_iterator::operator--() { -23376: ((void) 0); -23376: --idx; -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline Dense_Row::const_iterator -23376: Dense_Row::const_iterator::operator--(int) { -23376: const_iterator tmp(*this); -23376: --(*this); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Dense_Row::const_iterator::operator==(const const_iterator& x) const { -23376: return (row == x.row) && (idx == x.idx); -23376: } -23376: -23376: inline bool -23376: Dense_Row::const_iterator::operator!=(const const_iterator& x) const { -23376: return !(*this == x); -23376: } -23376: -23376: inline bool -23376: Dense_Row::const_iterator::OK() const { -23376: if (row == -23376: # 497 "../../src/Dense_Row_inlines.hh" 3 4 -23376: __null -23376: # 497 "../../src/Dense_Row_inlines.hh" -23376: ) { -23376: return true; -23376: } -23376: -23376: return (idx <= row->size()); -23376: } -23376: -23376: inline void -23376: linear_combine(Dense_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2) { -23376: x.linear_combine(y, coeff1, coeff2); -23376: } -23376: -23376: inline void -23376: linear_combine(Dense_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) { -23376: x.linear_combine(y, c1, c2, start, end); -23376: } -23376: -23376: -23376: inline void -23376: swap(Dense_Row& x, Dense_Row& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: -23376: inline void -23376: iter_swap(std::vector::iterator x, -23376: std::vector::iterator y) { -23376: swap(*x, *y); -23376: } -23376: -23376: } -23376: # 560 "../../src/Dense_Row_defs.hh" 2 -23376: # 1 "../../src/Dense_Row_templates.hh" 1 -23376: # 27 "../../src/Dense_Row_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: template -23376: void -23376: Dense_Row::combine_needs_first(const Dense_Row& y, const Func1& , -23376: const Func2& g) { -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: g((*this)[i], y[i]); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Dense_Row::combine_needs_second(const Dense_Row& y, const Func1& g, -23376: const Func2& ) { -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: g((*this)[i], y[i]); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Dense_Row::combine(const Dense_Row& y, const Func1& , const Func2& g, -23376: const Func3& ) { -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: g((*this)[i], y[i]); -23376: } -23376: } -23376: -23376: } -23376: # 561 "../../src/Dense_Row_defs.hh" 2 -23376: # 33 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: # 1 "../../src/Sparse_Row_defs.hh" 1 -23376: # 29 "../../src/Sparse_Row_defs.hh" -23376: # 1 "../../src/CO_Tree_defs.hh" 1 -23376: # 27 "../../src/CO_Tree_defs.hh" -23376: # 1 "../../src/CO_Tree_types.hh" 1 -23376: # 16 "../../src/CO_Tree_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class CO_Tree; -23376: -23376: } -23376: # 28 "../../src/CO_Tree_defs.hh" 2 -23376: # 53 "../../src/CO_Tree_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 103 "../../src/CO_Tree_defs.hh" -23376: class CO_Tree { -23376: -23376: public: -23376: class const_iterator; -23376: class iterator; -23376: -23376: private: -23376: -23376: typedef unsigned height_t; -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_115 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(C_Integer::max >= ((sizeof(dimension_type)) * static_cast(8)))>) } -23376: -23376: ; -23376: -23376: class tree_iterator; -23376: # 128 "../../src/CO_Tree_defs.hh" -23376: dimension_type dfs_index(const_iterator itr) const; -23376: # 139 "../../src/CO_Tree_defs.hh" -23376: dimension_type dfs_index(iterator itr) const; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef Coefficient data_type; -23376: typedef Coefficient_traits::const_reference data_type_const_reference; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class const_iterator { -23376: private: -23376: public: -23376: -23376: typedef std::bidirectional_iterator_tag iterator_category; -23376: typedef const data_type value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef data_type_const_reference reference; -23376: -23376: -23376: -23376: -23376: -23376: explicit const_iterator(); -23376: # 180 "../../src/CO_Tree_defs.hh" -23376: explicit const_iterator(const CO_Tree& tree); -23376: # 195 "../../src/CO_Tree_defs.hh" -23376: const_iterator(const CO_Tree& tree, dimension_type i); -23376: # 204 "../../src/CO_Tree_defs.hh" -23376: const_iterator(const const_iterator& itr); -23376: # 213 "../../src/CO_Tree_defs.hh" -23376: const_iterator(const iterator& itr); -23376: # 222 "../../src/CO_Tree_defs.hh" -23376: void m_swap(const_iterator& itr); -23376: # 231 "../../src/CO_Tree_defs.hh" -23376: const_iterator& operator=(const const_iterator& itr); -23376: # 240 "../../src/CO_Tree_defs.hh" -23376: const_iterator& operator=(const iterator& itr); -23376: -23376: -23376: -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: -23376: -23376: -23376: const_iterator& operator--(); -23376: -23376: -23376: -23376: -23376: -23376: const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: const_iterator operator--(int); -23376: -23376: -23376: data_type_const_reference operator*() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type index() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& x) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& x) const; -23376: -23376: private: -23376: -23376: bool OK() const; -23376: -23376: -23376: const dimension_type* current_index; -23376: -23376: -23376: const data_type* current_data; -23376: -23376: -23376: -23376: -23376: -23376: -23376: friend dimension_type CO_Tree::dfs_index(const_iterator itr) const; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class iterator { -23376: public: -23376: -23376: typedef std::bidirectional_iterator_tag iterator_category; -23376: typedef data_type value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef value_type& reference; -23376: -23376: -23376: -23376: -23376: -23376: iterator(); -23376: # 335 "../../src/CO_Tree_defs.hh" -23376: explicit iterator(CO_Tree& tree); -23376: # 350 "../../src/CO_Tree_defs.hh" -23376: iterator(CO_Tree& tree, dimension_type i); -23376: # 362 "../../src/CO_Tree_defs.hh" -23376: explicit iterator(const tree_iterator& itr); -23376: # 371 "../../src/CO_Tree_defs.hh" -23376: iterator(const iterator& itr); -23376: # 380 "../../src/CO_Tree_defs.hh" -23376: void m_swap(iterator& itr); -23376: # 389 "../../src/CO_Tree_defs.hh" -23376: iterator& operator=(const iterator& itr); -23376: # 398 "../../src/CO_Tree_defs.hh" -23376: iterator& operator=(const tree_iterator& itr); -23376: -23376: -23376: -23376: -23376: -23376: iterator& operator++(); -23376: -23376: -23376: -23376: -23376: -23376: iterator& operator--(); -23376: -23376: -23376: -23376: -23376: -23376: iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: iterator operator--(int); -23376: -23376: -23376: data_type& operator*(); -23376: -23376: -23376: data_type_const_reference operator*() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type index() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const iterator& x) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const iterator& x) const; -23376: -23376: private: -23376: -23376: bool OK() const; -23376: -23376: -23376: const dimension_type* current_index; -23376: -23376: -23376: data_type* current_data; -23376: -23376: -23376: -23376: -23376: -23376: -23376: friend const_iterator& const_iterator::operator=(const iterator&); -23376: friend dimension_type CO_Tree::dfs_index(iterator itr) const; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: CO_Tree(); -23376: # 482 "../../src/CO_Tree_defs.hh" -23376: CO_Tree(const CO_Tree& y); -23376: # 501 "../../src/CO_Tree_defs.hh" -23376: template -23376: CO_Tree(Iterator i, dimension_type n); -23376: # 511 "../../src/CO_Tree_defs.hh" -23376: CO_Tree& operator=(const CO_Tree& y); -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: -23376: -23376: -23376: -23376: -23376: ~CO_Tree(); -23376: -23376: -23376: -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: static dimension_type max_size(); -23376: -23376: -23376: void dump_tree() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type external_memory_in_bytes() const; -23376: # 566 "../../src/CO_Tree_defs.hh" -23376: iterator insert(dimension_type key); -23376: # 587 "../../src/CO_Tree_defs.hh" -23376: iterator insert(dimension_type key, data_type_const_reference data); -23376: # 615 "../../src/CO_Tree_defs.hh" -23376: iterator insert(iterator itr, dimension_type key); -23376: # 645 "../../src/CO_Tree_defs.hh" -23376: iterator insert(iterator itr, dimension_type key, -23376: data_type_const_reference data); -23376: # 661 "../../src/CO_Tree_defs.hh" -23376: iterator erase(dimension_type key); -23376: # 676 "../../src/CO_Tree_defs.hh" -23376: iterator erase(iterator itr); -23376: # 690 "../../src/CO_Tree_defs.hh" -23376: void erase_element_and_shift_left(dimension_type key); -23376: # 703 "../../src/CO_Tree_defs.hh" -23376: void increase_keys_from(dimension_type key, dimension_type n); -23376: # 712 "../../src/CO_Tree_defs.hh" -23376: void fast_shift(dimension_type i, iterator itr); -23376: # 723 "../../src/CO_Tree_defs.hh" -23376: void m_swap(CO_Tree& x); -23376: -23376: -23376: -23376: -23376: -23376: iterator begin(); -23376: # 740 "../../src/CO_Tree_defs.hh" -23376: const iterator& end(); -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const const_iterator& end() const; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator cbegin() const; -23376: # 763 "../../src/CO_Tree_defs.hh" -23376: const const_iterator& cend() const; -23376: # 777 "../../src/CO_Tree_defs.hh" -23376: iterator bisect(dimension_type key); -23376: # 791 "../../src/CO_Tree_defs.hh" -23376: const_iterator bisect(dimension_type key) const; -23376: # 815 "../../src/CO_Tree_defs.hh" -23376: iterator bisect_in(iterator first, iterator last, dimension_type key); -23376: # 839 "../../src/CO_Tree_defs.hh" -23376: const_iterator bisect_in(const_iterator first, const_iterator last, -23376: dimension_type key) const; -23376: # 860 "../../src/CO_Tree_defs.hh" -23376: iterator bisect_near(iterator hint, dimension_type key); -23376: # 880 "../../src/CO_Tree_defs.hh" -23376: const_iterator bisect_near(const_iterator hint, dimension_type key) const; -23376: -23376: private: -23376: # 905 "../../src/CO_Tree_defs.hh" -23376: dimension_type bisect_in(dimension_type first, dimension_type last, -23376: dimension_type key) const; -23376: # 929 "../../src/CO_Tree_defs.hh" -23376: dimension_type bisect_near(dimension_type hint, dimension_type key) const; -23376: # 954 "../../src/CO_Tree_defs.hh" -23376: tree_iterator insert_precise(dimension_type key, -23376: data_type_const_reference data, -23376: tree_iterator itr); -23376: # 965 "../../src/CO_Tree_defs.hh" -23376: tree_iterator insert_precise_aux(dimension_type key, -23376: data_type_const_reference data, -23376: tree_iterator itr); -23376: # 984 "../../src/CO_Tree_defs.hh" -23376: void insert_in_empty_tree(dimension_type key, -23376: data_type_const_reference data); -23376: # 1000 "../../src/CO_Tree_defs.hh" -23376: iterator erase(tree_iterator itr); -23376: # 1009 "../../src/CO_Tree_defs.hh" -23376: void init(dimension_type n); -23376: # 1018 "../../src/CO_Tree_defs.hh" -23376: void destroy(); -23376: -23376: -23376: bool structure_OK() const; -23376: -23376: -23376: bool OK() const; -23376: # 1033 "../../src/CO_Tree_defs.hh" -23376: static unsigned integer_log2(dimension_type n); -23376: # 1051 "../../src/CO_Tree_defs.hh" -23376: static bool is_less_than_ratio(dimension_type numer, dimension_type denom, -23376: dimension_type ratio); -23376: # 1071 "../../src/CO_Tree_defs.hh" -23376: static bool is_greater_than_ratio(dimension_type numer, dimension_type denom, -23376: dimension_type ratio); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void dump_subtree(tree_iterator itr); -23376: # 1088 "../../src/CO_Tree_defs.hh" -23376: void rebuild_bigger_tree(); -23376: # 1100 "../../src/CO_Tree_defs.hh" -23376: void rebuild_smaller_tree(); -23376: # 1109 "../../src/CO_Tree_defs.hh" -23376: void refresh_cached_iterators(); -23376: # 1133 "../../src/CO_Tree_defs.hh" -23376: tree_iterator rebalance(tree_iterator itr, dimension_type key, -23376: data_type_const_reference value); -23376: # 1160 "../../src/CO_Tree_defs.hh" -23376: dimension_type compact_elements_in_the_rightmost_end( -23376: dimension_type last_in_subtree, dimension_type subtree_size, -23376: dimension_type key, data_type_const_reference value, -23376: bool add_element); -23376: # 1191 "../../src/CO_Tree_defs.hh" -23376: void redistribute_elements_in_subtree(dimension_type root_index, -23376: dimension_type subtree_size, -23376: dimension_type last_used, -23376: dimension_type key, -23376: data_type_const_reference value, -23376: bool add_element); -23376: # 1208 "../../src/CO_Tree_defs.hh" -23376: void move_data_from(CO_Tree& tree); -23376: # 1221 "../../src/CO_Tree_defs.hh" -23376: void copy_data_from(const CO_Tree& tree); -23376: # 1231 "../../src/CO_Tree_defs.hh" -23376: static dimension_type count_used_in_subtree(tree_iterator itr); -23376: # 1249 "../../src/CO_Tree_defs.hh" -23376: static void move_data_element(data_type& to, data_type& from); -23376: -23376: -23376: -23376: -23376: -23376: static const dimension_type max_density_percent = 91; -23376: -23376: -23376: -23376: -23376: -23376: static const dimension_type min_density_percent = 38; -23376: # 1271 "../../src/CO_Tree_defs.hh" -23376: static const dimension_type min_leaf_density_percent = 1; -23376: -23376: -23376: -23376: -23376: -23376: static const dimension_type unused_index = C_Integer::max; -23376: -23376: -23376: -23376: -23376: -23376: iterator cached_end; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator cached_const_end; -23376: -23376: -23376: height_t max_depth; -23376: # 1302 "../../src/CO_Tree_defs.hh" -23376: dimension_type* indexes; -23376: -23376: -23376: std::allocator data_allocator; -23376: # 1316 "../../src/CO_Tree_defs.hh" -23376: data_type* data; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type reserved_size; -23376: -23376: -23376: dimension_type size_; -23376: }; -23376: -23376: class CO_Tree::tree_iterator { -23376: -23376: public: -23376: # 1341 "../../src/CO_Tree_defs.hh" -23376: explicit tree_iterator(CO_Tree& tree); -23376: # 1353 "../../src/CO_Tree_defs.hh" -23376: tree_iterator(CO_Tree& tree, dimension_type i); -23376: # 1365 "../../src/CO_Tree_defs.hh" -23376: tree_iterator(const iterator& itr, CO_Tree& tree); -23376: -23376: -23376: -23376: -23376: -23376: -23376: tree_iterator& operator=(const tree_iterator& itr); -23376: -23376: -23376: -23376: -23376: -23376: -23376: tree_iterator& operator=(const iterator& itr); -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const tree_iterator& itr) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const tree_iterator& itr) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void get_root(); -23376: -23376: -23376: -23376: -23376: -23376: void get_left_child(); -23376: -23376: -23376: -23376: -23376: -23376: void get_right_child(); -23376: -23376: -23376: -23376: -23376: -23376: void get_parent(); -23376: # 1433 "../../src/CO_Tree_defs.hh" -23376: void go_down_searching_key(dimension_type key); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void follow_left_children_with_value(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void follow_right_children_with_value(); -23376: -23376: -23376: -23376: -23376: -23376: bool is_root() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_right_child() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_leaf() const; -23376: -23376: -23376: data_type& operator*(); -23376: -23376: -23376: Coefficient_traits::const_reference operator*() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type& index(); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type index() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type key() const; -23376: -23376: -23376: CO_Tree& tree; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type dfs_index() const; -23376: # 1512 "../../src/CO_Tree_defs.hh" -23376: dimension_type get_offset() const; -23376: -23376: -23376: -23376: -23376: -23376: height_t depth() const; -23376: -23376: private: -23376: -23376: bool OK() const; -23376: -23376: -23376: dimension_type i; -23376: # 1534 "../../src/CO_Tree_defs.hh" -23376: dimension_type offset; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: void swap(CO_Tree& x, CO_Tree& y); -23376: -23376: -23376: -23376: -23376: -23376: void swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y); -23376: -23376: -23376: -23376: -23376: -23376: void swap(CO_Tree::iterator& x, CO_Tree::iterator& y); -23376: -23376: } -23376: -23376: # 1 "../../src/CO_Tree_inlines.hh" 1 -23376: # 29 "../../src/CO_Tree_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline dimension_type -23376: CO_Tree::dfs_index(const_iterator itr) const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: const std::ptrdiff_t index = itr.current_index - indexes; -23376: return static_cast(index); -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::dfs_index(iterator itr) const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: const std::ptrdiff_t index = itr.current_index - indexes; -23376: return static_cast(index); -23376: } -23376: -23376: inline -23376: CO_Tree::CO_Tree() { -23376: init(0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::CO_Tree(const CO_Tree& y) { -23376: ((void) 0); -23376: data_allocator = y.data_allocator; -23376: init(y.reserved_size); -23376: copy_data_from(y); -23376: } -23376: -23376: inline CO_Tree& -23376: CO_Tree::operator=(const CO_Tree& y) { -23376: if (this != &y) { -23376: destroy(); -23376: data_allocator = y.data_allocator; -23376: init(y.reserved_size); -23376: copy_data_from(y); -23376: } -23376: return *this; -23376: } -23376: -23376: inline void -23376: CO_Tree::clear() { -23376: *this = CO_Tree(); -23376: } -23376: -23376: inline -23376: CO_Tree::~CO_Tree() { -23376: -23376: destroy(); -23376: } -23376: -23376: inline bool -23376: CO_Tree::empty() const { -23376: return size_ == 0; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::size() const { -23376: return size_; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::max_size() { -23376: return C_Integer::max/100; -23376: } -23376: -23376: inline void -23376: CO_Tree::dump_tree() const { -23376: if (empty()) { -23376: std::cout << "(empty tree)" << std::endl; -23376: } -23376: else { -23376: dump_subtree(tree_iterator(*const_cast(this))); -23376: } -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::insert(const dimension_type key) { -23376: if (empty()) { -23376: return insert(key, Coefficient_zero()); -23376: } -23376: else { -23376: tree_iterator itr(*this); -23376: itr.go_down_searching_key(key); -23376: if (itr.index() == key) { -23376: return iterator(itr); -23376: } -23376: else { -23376: return iterator(insert_precise(key, Coefficient_zero(), itr)); -23376: } -23376: } -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::insert(dimension_type key, data_type_const_reference data1) { -23376: if (empty()) { -23376: insert_in_empty_tree(key, data1); -23376: tree_iterator itr(*this); -23376: ((void) 0); -23376: return iterator(itr); -23376: } -23376: else { -23376: tree_iterator itr(*this); -23376: itr.go_down_searching_key(key); -23376: return iterator(insert_precise(key, data1, itr)); -23376: } -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::erase(dimension_type key) { -23376: ((void) 0); -23376: -23376: if (empty()) { -23376: return end(); -23376: } -23376: -23376: tree_iterator itr(*this); -23376: itr.go_down_searching_key(key); -23376: -23376: if (itr.index() == key) { -23376: return erase(itr); -23376: } -23376: -23376: iterator result(itr); -23376: if (result.index() < key) { -23376: ++result; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: -23376: return result; -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::erase(iterator itr) { -23376: ((void) 0); -23376: return erase(tree_iterator(itr, *this)); -23376: } -23376: -23376: inline void -23376: CO_Tree::m_swap(CO_Tree& x) { -23376: using std::swap; -23376: swap(max_depth, x.max_depth); -23376: swap(indexes, x.indexes); -23376: swap(data_allocator, x.data_allocator); -23376: swap(data, x.data); -23376: swap(reserved_size, x.reserved_size); -23376: swap(size_, x.size_); -23376: -23376: -23376: refresh_cached_iterators(); -23376: x.refresh_cached_iterators(); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::begin() { -23376: return iterator(*this); -23376: } -23376: -23376: inline const CO_Tree::iterator& -23376: CO_Tree::end() { -23376: return cached_end; -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::begin() const { -23376: return const_iterator(*this); -23376: } -23376: -23376: inline const CO_Tree::const_iterator& -23376: CO_Tree::end() const { -23376: return cached_const_end; -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::cbegin() const { -23376: return const_iterator(*this); -23376: } -23376: -23376: inline const CO_Tree::const_iterator& -23376: CO_Tree::cend() const { -23376: return cached_const_end; -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::bisect(dimension_type key) { -23376: if (empty()) { -23376: return end(); -23376: } -23376: iterator last = end(); -23376: --last; -23376: return bisect_in(begin(), last, key); -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::bisect(dimension_type key) const { -23376: if (empty()) { -23376: return end(); -23376: } -23376: const_iterator last = end(); -23376: --last; -23376: return bisect_in(begin(), last, key); -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::bisect_in(iterator first, iterator last, dimension_type key) { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type index -23376: = bisect_in(dfs_index(first), dfs_index(last), key); -23376: return iterator(*this, index); -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::bisect_in(const_iterator first, const_iterator last, -23376: dimension_type key) const { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type index -23376: = bisect_in(dfs_index(first), dfs_index(last), key); -23376: return const_iterator(*this, index); -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::bisect_near(iterator hint, dimension_type key) { -23376: if (hint == end()) { -23376: return bisect(key); -23376: } -23376: const dimension_type index -23376: = bisect_near(dfs_index(hint), key); -23376: return iterator(*this, index); -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::bisect_near(const_iterator hint, dimension_type key) const { -23376: if (hint == end()) { -23376: return bisect(key); -23376: } -23376: const dimension_type index = bisect_near(dfs_index(hint), key); -23376: return const_iterator(*this, index); -23376: } -23376: -23376: inline void -23376: CO_Tree::fast_shift(dimension_type i, iterator itr) { -23376: ((void) 0); -23376: ((void) 0); -23376: indexes[dfs_index(itr)] = i; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::insert_in_empty_tree(dimension_type key, -23376: data_type_const_reference data1) { -23376: ((void) 0); -23376: rebuild_bigger_tree(); -23376: tree_iterator itr(*this); -23376: ((void) 0); -23376: new(&(*itr)) data_type(data1); -23376: -23376: -23376: itr.index() = key; -23376: ++size_; -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline bool -23376: CO_Tree::is_less_than_ratio(dimension_type numer, dimension_type denom, -23376: dimension_type ratio) { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: return 100*numer < ratio*denom; -23376: } -23376: -23376: inline bool -23376: CO_Tree::is_greater_than_ratio(dimension_type numer, dimension_type denom, -23376: dimension_type ratio) { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: return 100*numer > ratio*denom; -23376: } -23376: -23376: inline void -23376: CO_Tree::rebuild_smaller_tree() { -23376: ((void) 0); -23376: CO_Tree new_tree; -23376: new_tree.init(reserved_size / 2); -23376: new_tree.move_data_from(*this); -23376: m_swap(new_tree); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::refresh_cached_iterators() { -23376: cached_end = iterator(*this, reserved_size + 1); -23376: cached_const_end = const_iterator(*this, reserved_size + 1); -23376: } -23376: -23376: inline void -23376: CO_Tree::move_data_element(data_type& to, data_type& from) { -23376: # 354 "../../src/CO_Tree_inlines.hh" -23376: std::memcpy(&to, &from, sizeof(data_type)); -23376: } -23376: -23376: -23376: inline -23376: CO_Tree::const_iterator::const_iterator() -23376: : current_index(0), current_data(0) { -23376: -23376: -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1) -23376: : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) { -23376: -23376: -23376: -23376: if (!tree1.empty()) { -23376: while (*current_index == unused_index) { -23376: ++current_index; -23376: ++current_data; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1, -23376: dimension_type i) -23376: : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) { -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::const_iterator::const_iterator(const const_iterator& itr2) { -23376: (*this) = itr2; -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::const_iterator::const_iterator(const iterator& itr2) { -23376: (*this) = itr2; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::const_iterator::m_swap(const_iterator& itr) { -23376: using std::swap; -23376: swap(current_data, itr.current_data); -23376: swap(current_index, itr.current_index); -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline CO_Tree::const_iterator& -23376: CO_Tree::const_iterator::operator=(const const_iterator& itr2) { -23376: current_index = itr2.current_index; -23376: current_data = itr2.current_data; -23376: -23376: -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::const_iterator& -23376: CO_Tree::const_iterator::operator=(const iterator& itr2) { -23376: current_index = itr2.current_index; -23376: current_data = itr2.current_data; -23376: -23376: -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::const_iterator& -23376: CO_Tree::const_iterator::operator++() { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: ++current_index; -23376: ++current_data; -23376: while (*current_index == unused_index) { -23376: ++current_index; -23376: ++current_data; -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::const_iterator& -23376: CO_Tree::const_iterator::operator--() { -23376: ((void) 0); -23376: ((void) 0); -23376: --current_index; -23376: --current_data; -23376: while (*current_index == unused_index) { -23376: --current_index; -23376: --current_data; -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::const_iterator::operator++(int) { -23376: const_iterator itr(*this); -23376: ++(*this); -23376: return itr; -23376: } -23376: -23376: inline CO_Tree::const_iterator -23376: CO_Tree::const_iterator::operator--(int) { -23376: const_iterator itr(*this); -23376: --(*this); -23376: return itr; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: CO_Tree::const_iterator::operator*() const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: return *current_data; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::const_iterator::index() const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: return *current_index; -23376: } -23376: -23376: inline bool -23376: CO_Tree::const_iterator::operator==(const const_iterator& x) const { -23376: ((void) 0) -23376: ; -23376: ((void) 0); -23376: return (current_index == x.current_index); -23376: } -23376: -23376: inline bool -23376: CO_Tree::const_iterator::operator!=(const const_iterator& x) const { -23376: return !(*this == x); -23376: } -23376: -23376: -23376: inline -23376: CO_Tree::iterator::iterator() -23376: : current_index(0), current_data(0) { -23376: -23376: -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::iterator::iterator(CO_Tree& tree1) -23376: : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) { -23376: -23376: -23376: -23376: if (!tree1.empty()) { -23376: while (*current_index == unused_index) { -23376: ++current_index; -23376: ++current_data; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::iterator::iterator(CO_Tree& tree1, dimension_type i) -23376: : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) { -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::iterator::iterator(const tree_iterator& itr) { -23376: *this = itr; -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::iterator::iterator(const iterator& itr2) { -23376: (*this) = itr2; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::iterator::m_swap(iterator& itr) { -23376: using std::swap; -23376: swap(current_data, itr.current_data); -23376: swap(current_index, itr.current_index); -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline CO_Tree::iterator& -23376: CO_Tree::iterator::operator=(const tree_iterator& itr) { -23376: current_index = &(itr.tree.indexes[itr.dfs_index()]); -23376: current_data = &(itr.tree.data[itr.dfs_index()]); -23376: -23376: -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::iterator& -23376: CO_Tree::iterator::operator=(const iterator& itr2) { -23376: current_index = itr2.current_index; -23376: current_data = itr2.current_data; -23376: -23376: -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::iterator& -23376: CO_Tree::iterator::operator++() { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: ++current_index; -23376: ++current_data; -23376: while (*current_index == unused_index) { -23376: ++current_index; -23376: ++current_data; -23376: } -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::iterator& -23376: CO_Tree::iterator::operator--() { -23376: ((void) 0); -23376: ((void) 0); -23376: --current_index; -23376: --current_data; -23376: while (*current_index == unused_index) { -23376: --current_index; -23376: --current_data; -23376: } -23376: -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::iterator::operator++(int) { -23376: iterator itr(*this); -23376: ++(*this); -23376: return itr; -23376: } -23376: -23376: inline CO_Tree::iterator -23376: CO_Tree::iterator::operator--(int) { -23376: iterator itr(*this); -23376: --(*this); -23376: return itr; -23376: } -23376: -23376: inline CO_Tree::data_type& -23376: CO_Tree::iterator::operator*() { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: return *current_data; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: CO_Tree::iterator::operator*() const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: return *current_data; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::iterator::index() const { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: return *current_index; -23376: } -23376: -23376: inline bool -23376: CO_Tree::iterator::operator==(const iterator& x) const { -23376: ((void) 0) -23376: ; -23376: ((void) 0); -23376: return (current_index == x.current_index); -23376: } -23376: -23376: inline bool -23376: CO_Tree::iterator::operator!=(const iterator& x) const { -23376: return !(*this == x); -23376: } -23376: -23376: -23376: inline -23376: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1) -23376: : tree(tree1) { -23376: ((void) 0); -23376: get_root(); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1, dimension_type i1) -23376: : tree(tree1) { -23376: ((void) 0); -23376: ((void) 0); -23376: i = i1; -23376: offset = least_significant_one_mask(i); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: CO_Tree::tree_iterator::tree_iterator(const iterator& itr, CO_Tree& tree1) -23376: : tree(tree1) { -23376: ((void) 0); -23376: *this = itr; -23376: ((void) 0); -23376: } -23376: -23376: inline CO_Tree::tree_iterator& -23376: CO_Tree::tree_iterator::operator=(const tree_iterator& itr) { -23376: ((void) 0); -23376: i = itr.i; -23376: offset = itr.offset; -23376: return *this; -23376: } -23376: -23376: inline CO_Tree::tree_iterator& -23376: CO_Tree::tree_iterator::operator=(const iterator& itr) { -23376: ((void) 0); -23376: i = tree.dfs_index(itr); -23376: offset = least_significant_one_mask(i); -23376: return *this; -23376: } -23376: -23376: inline bool -23376: CO_Tree::tree_iterator::operator==(const tree_iterator& itr) const { -23376: return i == itr.i; -23376: } -23376: -23376: inline bool -23376: CO_Tree::tree_iterator::operator!=(const tree_iterator& itr) const { -23376: return !(*this == itr); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::get_root() { -23376: i = tree.reserved_size / 2 + 1; -23376: offset = i; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::get_left_child() { -23376: ((void) 0); -23376: ((void) 0); -23376: offset /= 2; -23376: i -= offset; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::get_right_child() { -23376: ((void) 0); -23376: ((void) 0); -23376: offset /= 2; -23376: i += offset; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::get_parent() { -23376: ((void) 0); -23376: ((void) 0); -23376: i &= ~offset; -23376: offset *= 2; -23376: i |= offset; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::follow_left_children_with_value() { -23376: ((void) 0); -23376: const dimension_type* p = tree.indexes; -23376: p += i; -23376: p -= (offset - 1); -23376: while (*p == unused_index) { -23376: ++p; -23376: } -23376: const std::ptrdiff_t distance = p - tree.indexes; -23376: ((void) 0); -23376: i = static_cast(distance); -23376: offset = least_significant_one_mask(i); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: CO_Tree::tree_iterator::follow_right_children_with_value() { -23376: ((void) 0); -23376: const dimension_type* p = tree.indexes; -23376: p += i; -23376: p += (offset - 1); -23376: while (*p == unused_index) { -23376: --p; -23376: } -23376: const std::ptrdiff_t distance = p - tree.indexes; -23376: ((void) 0); -23376: i = static_cast(distance); -23376: offset = least_significant_one_mask(i); -23376: ((void) 0); -23376: } -23376: -23376: inline bool -23376: CO_Tree::tree_iterator::is_root() const { -23376: -23376: ((void) 0); -23376: return offset == (tree.reserved_size / 2 + 1); -23376: } -23376: -23376: inline bool -23376: CO_Tree::tree_iterator::is_right_child() const { -23376: if (is_root()) { -23376: return false; -23376: } -23376: return (i & (2*offset)) != 0; -23376: } -23376: -23376: inline bool -23376: CO_Tree::tree_iterator::is_leaf() const { -23376: return offset == 1; -23376: } -23376: -23376: inline CO_Tree::data_type& -23376: CO_Tree::tree_iterator::operator*() { -23376: return tree.data[i]; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: CO_Tree::tree_iterator::operator*() const { -23376: return tree.data[i]; -23376: } -23376: -23376: inline dimension_type& -23376: CO_Tree::tree_iterator::index() { -23376: return tree.indexes[i]; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::tree_iterator::index() const { -23376: return tree.indexes[i]; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::tree_iterator::dfs_index() const { -23376: return i; -23376: } -23376: -23376: inline dimension_type -23376: CO_Tree::tree_iterator::get_offset() const { -23376: return offset; -23376: } -23376: -23376: inline CO_Tree::height_t -23376: CO_Tree::tree_iterator::depth() const { -23376: return integer_log2((tree.reserved_size + 1) / offset); -23376: } -23376: -23376: inline void -23376: swap(CO_Tree& x, CO_Tree& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: inline void -23376: swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: inline void -23376: swap(CO_Tree::iterator& x, CO_Tree::iterator& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 1558 "../../src/CO_Tree_defs.hh" 2 -23376: # 1 "../../src/CO_Tree_templates.hh" 1 -23376: # 27 "../../src/CO_Tree_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: CO_Tree::CO_Tree(Iterator i, dimension_type n) { -23376: -23376: if (n == 0) { -23376: init(0); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: const dimension_type new_max_depth = integer_log2(n) + 1; -23376: reserved_size = (static_cast(1) << new_max_depth) - 1; -23376: -23376: if (is_greater_than_ratio(n, reserved_size, max_density_percent) -23376: && reserved_size != 3) { -23376: reserved_size = reserved_size*2 + 1; -23376: } -23376: -23376: init(reserved_size); -23376: -23376: tree_iterator root(*this); -23376: # 57 "../../src/CO_Tree_templates.hh" -23376: static std::pair -23376: stack[4U * ((sizeof(dimension_type)) * static_cast(8)) + 1U]; -23376: -23376: dimension_type stack_first_empty = 0; -23376: # 71 "../../src/CO_Tree_templates.hh" -23376: stack[0].first = n; -23376: stack[0].second = 3; -23376: ++stack_first_empty; -23376: -23376: while (stack_first_empty != 0) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type top_n = stack[stack_first_empty - 1].first; -23376: const signed char top_operation = stack[stack_first_empty - 1].second; -23376: -23376: switch (top_operation) { -23376: -23376: case 0: -23376: root.get_parent(); -23376: --stack_first_empty; -23376: continue; -23376: -23376: case 1: -23376: root.get_left_child(); -23376: break; -23376: -23376: case 2: -23376: root.get_right_child(); -23376: break; -23376: # 108 "../../src/CO_Tree_templates.hh" -23376: } -23376: -23376: -23376: -23376: if (top_n == 0) { -23376: --stack_first_empty; -23376: } -23376: else { -23376: if (top_n == 1) { -23376: ((void) 0); -23376: root.index() = i.index(); -23376: new(&(*root)) data_type(*i); -23376: ++i; -23376: --stack_first_empty; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: const dimension_type half = (top_n + 1) / 2; -23376: stack[stack_first_empty - 1].second = 0; -23376: stack[stack_first_empty ] = std::make_pair(top_n - half, 2); -23376: stack[stack_first_empty + 1] = std::make_pair(1, 3); -23376: stack[stack_first_empty + 2].second = 0; -23376: stack[stack_first_empty + 3] = std::make_pair(half - 1, 1); -23376: stack_first_empty += 4; -23376: } -23376: } -23376: } -23376: size_ = n; -23376: ((void) 0); -23376: } -23376: -23376: } -23376: # 1559 "../../src/CO_Tree_defs.hh" 2 -23376: # 30 "../../src/Sparse_Row_defs.hh" 2 -23376: # 58 "../../src/Sparse_Row_defs.hh" -23376: class Parma_Polyhedra_Library::Sparse_Row { -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef CO_Tree::iterator iterator; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef CO_Tree::const_iterator const_iterator; -23376: # 85 "../../src/Sparse_Row_defs.hh" -23376: explicit Sparse_Row(dimension_type n = 0); -23376: # 99 "../../src/Sparse_Row_defs.hh" -23376: Sparse_Row(dimension_type n, dimension_type capacity); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Sparse_Row(const Sparse_Row& y, dimension_type capacity); -23376: -23376: -23376: -23376: -23376: -23376: Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity); -23376: # 122 "../../src/Sparse_Row_defs.hh" -23376: explicit Sparse_Row(const Dense_Row& row); -23376: -23376: -23376: -23376: -23376: -23376: Sparse_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity); -23376: -23376: Sparse_Row& operator=(const Dense_Row& row); -23376: # 139 "../../src/Sparse_Row_defs.hh" -23376: void m_swap(Sparse_Row& x); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_stored_elements() const; -23376: # 164 "../../src/Sparse_Row_defs.hh" -23376: void resize(dimension_type n); -23376: # 176 "../../src/Sparse_Row_defs.hh" -23376: void expand_within_capacity(dimension_type n); -23376: # 189 "../../src/Sparse_Row_defs.hh" -23376: void shrink(dimension_type n); -23376: # 205 "../../src/Sparse_Row_defs.hh" -23376: void delete_element_and_shift(dimension_type i); -23376: # 226 "../../src/Sparse_Row_defs.hh" -23376: void add_zeroes_and_shift(dimension_type n, dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: iterator begin(); -23376: # 243 "../../src/Sparse_Row_defs.hh" -23376: const iterator& end(); -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const const_iterator& end() const; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator cbegin() const; -23376: # 266 "../../src/Sparse_Row_defs.hh" -23376: const const_iterator& cend() const; -23376: -23376: -23376: static dimension_type max_size(); -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: # 293 "../../src/Sparse_Row_defs.hh" -23376: Coefficient& operator[](dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference operator[](dimension_type i) const; -23376: # 311 "../../src/Sparse_Row_defs.hh" -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: # 323 "../../src/Sparse_Row_defs.hh" -23376: iterator find(dimension_type i); -23376: # 341 "../../src/Sparse_Row_defs.hh" -23376: iterator find(iterator itr, dimension_type i); -23376: # 353 "../../src/Sparse_Row_defs.hh" -23376: const_iterator find(dimension_type i) const; -23376: # 371 "../../src/Sparse_Row_defs.hh" -23376: const_iterator find(const_iterator itr, dimension_type i) const; -23376: # 387 "../../src/Sparse_Row_defs.hh" -23376: iterator lower_bound(dimension_type i); -23376: # 409 "../../src/Sparse_Row_defs.hh" -23376: iterator lower_bound(iterator itr, dimension_type i); -23376: # 426 "../../src/Sparse_Row_defs.hh" -23376: const_iterator lower_bound(dimension_type i) const; -23376: # 448 "../../src/Sparse_Row_defs.hh" -23376: const_iterator lower_bound(const_iterator itr, dimension_type i) const; -23376: # 465 "../../src/Sparse_Row_defs.hh" -23376: iterator insert(dimension_type i, Coefficient_traits::const_reference x); -23376: # 488 "../../src/Sparse_Row_defs.hh" -23376: iterator insert(iterator itr, dimension_type i, -23376: Coefficient_traits::const_reference x); -23376: # 503 "../../src/Sparse_Row_defs.hh" -23376: iterator insert(dimension_type i); -23376: # 523 "../../src/Sparse_Row_defs.hh" -23376: iterator insert(iterator itr, dimension_type i); -23376: # 537 "../../src/Sparse_Row_defs.hh" -23376: void swap_coefficients(dimension_type i, dimension_type j); -23376: # 547 "../../src/Sparse_Row_defs.hh" -23376: void fast_swap(dimension_type i, iterator itr); -23376: # 559 "../../src/Sparse_Row_defs.hh" -23376: void swap_coefficients(iterator i, iterator j); -23376: # 574 "../../src/Sparse_Row_defs.hh" -23376: iterator reset(iterator i); -23376: # 592 "../../src/Sparse_Row_defs.hh" -23376: iterator reset(iterator first, iterator last); -23376: # 606 "../../src/Sparse_Row_defs.hh" -23376: void reset(dimension_type i); -23376: # 621 "../../src/Sparse_Row_defs.hh" -23376: void reset_after(dimension_type i); -23376: # 630 "../../src/Sparse_Row_defs.hh" -23376: void normalize(); -23376: # 655 "../../src/Sparse_Row_defs.hh" -23376: template -23376: void combine_needs_first(const Sparse_Row& y, -23376: const Func1& f, const Func2& g); -23376: # 683 "../../src/Sparse_Row_defs.hh" -23376: template -23376: void combine_needs_second(const Sparse_Row& y, -23376: const Func1& g, const Func2& h); -23376: # 715 "../../src/Sparse_Row_defs.hh" -23376: template -23376: void combine(const Sparse_Row& y, -23376: const Func1& f, const Func2& g, const Func3& h); -23376: # 744 "../../src/Sparse_Row_defs.hh" -23376: void linear_combine(const Sparse_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void linear_combine(const Sparse_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: # 783 "../../src/Sparse_Row_defs.hh" -23376: memory_size_type external_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: # 800 "../../src/Sparse_Row_defs.hh" -23376: memory_size_type total_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: bool OK() const; -23376: # 812 "../../src/Sparse_Row_defs.hh" -23376: bool OK(dimension_type capacity) const; -23376: -23376: private: -23376: -23376: CO_Tree tree; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type size_; -23376: }; -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: void swap(Parma_Polyhedra_Library::Sparse_Row& x, -23376: Parma_Polyhedra_Library::Sparse_Row& y); -23376: -23376: void swap(Parma_Polyhedra_Library::Sparse_Row& x, -23376: Parma_Polyhedra_Library::Dense_Row& y); -23376: -23376: void swap(Parma_Polyhedra_Library::Dense_Row& x, -23376: Parma_Polyhedra_Library::Sparse_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Sparse_Row& x, const Sparse_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Sparse_Row& x, const Sparse_Row& y); -23376: -23376: bool operator==(const Dense_Row& x, const Sparse_Row& y); -23376: bool operator!=(const Dense_Row& x, const Sparse_Row& y); -23376: -23376: bool operator==(const Sparse_Row& x, const Dense_Row& y); -23376: bool operator!=(const Sparse_Row& x, const Dense_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void linear_combine(Sparse_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: # 876 "../../src/Sparse_Row_defs.hh" -23376: void linear_combine(Sparse_Row& x, const Dense_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void linear_combine(Dense_Row& x, const Sparse_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: # 898 "../../src/Sparse_Row_defs.hh" -23376: void linear_combine(Dense_Row& x, const Sparse_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void linear_combine(Sparse_Row& x, const Sparse_Row& y, -23376: Coefficient_traits::const_reference coeff1, -23376: Coefficient_traits::const_reference coeff2); -23376: # 920 "../../src/Sparse_Row_defs.hh" -23376: void linear_combine(Sparse_Row& x, const Sparse_Row& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: } -23376: -23376: # 1 "../../src/Sparse_Row_inlines.hh" 1 -23376: # 29 "../../src/Sparse_Row_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Sparse_Row::Sparse_Row(dimension_type n) -23376: : size_(n) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Sparse_Row::Sparse_Row(dimension_type n, dimension_type) -23376: : size_(n) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type) -23376: : tree(y.tree), size_(y.size_) { -23376: } -23376: -23376: inline -23376: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type) -23376: : tree(y.begin(), -23376: std::distance(y.begin(), y.lower_bound(std::min(y.size(), sz)))), -23376: size_(sz) { -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Sparse_Row::m_swap(Sparse_Row& x) { -23376: using std::swap; -23376: swap(tree, x.tree); -23376: swap(size_, x.size_); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline dimension_type -23376: Sparse_Row::size() const { -23376: return size_; -23376: } -23376: -23376: inline dimension_type -23376: Sparse_Row::num_stored_elements() const { -23376: return tree.size(); -23376: } -23376: -23376: inline void -23376: Sparse_Row::resize(dimension_type n) { -23376: if (n < size_) { -23376: reset_after(n); -23376: } -23376: size_ = n; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Sparse_Row::shrink(dimension_type n) { -23376: ((void) 0); -23376: resize(n); -23376: } -23376: -23376: inline void -23376: Sparse_Row::expand_within_capacity(dimension_type n) { -23376: ((void) 0); -23376: resize(n); -23376: } -23376: -23376: inline void -23376: Sparse_Row::delete_element_and_shift(dimension_type i) { -23376: ((void) 0); -23376: tree.erase_element_and_shift_left(i); -23376: --size_; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Sparse_Row::add_zeroes_and_shift(dimension_type n, dimension_type i) { -23376: ((void) 0); -23376: tree.increase_keys_from(i, n); -23376: size_ += n; -23376: ((void) 0); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::begin() { -23376: return tree.begin(); -23376: } -23376: -23376: inline const Sparse_Row::iterator& -23376: Sparse_Row::end() { -23376: return tree.end(); -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::begin() const { -23376: return tree.cbegin(); -23376: } -23376: -23376: inline const Sparse_Row::const_iterator& -23376: Sparse_Row::end() const { -23376: return tree.cend(); -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::cbegin() const { -23376: return tree.cbegin(); -23376: } -23376: -23376: inline const Sparse_Row::const_iterator& -23376: Sparse_Row::cend() const { -23376: return tree.cend(); -23376: } -23376: -23376: inline dimension_type -23376: Sparse_Row::max_size() { -23376: return CO_Tree::max_size(); -23376: } -23376: -23376: inline void -23376: Sparse_Row::clear() { -23376: tree.clear(); -23376: } -23376: -23376: inline Coefficient& -23376: Sparse_Row::operator[](dimension_type i) { -23376: ((void) 0); -23376: iterator itr = insert(i); -23376: return *itr; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Sparse_Row::operator[](dimension_type i) const { -23376: return get(i); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Sparse_Row::get(dimension_type i) const { -23376: ((void) 0); -23376: if (tree.empty()) { -23376: return Coefficient_zero(); -23376: } -23376: const_iterator itr = find(i); -23376: if (itr != end()) { -23376: return *itr; -23376: } -23376: else { -23376: return Coefficient_zero(); -23376: } -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::find(dimension_type i) { -23376: ((void) 0); -23376: -23376: iterator itr = tree.bisect(i); -23376: -23376: if (itr != end() && itr.index() == i) { -23376: return itr; -23376: } -23376: return end(); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::find(iterator hint, dimension_type i) { -23376: ((void) 0); -23376: -23376: iterator itr = tree.bisect_near(hint, i); -23376: -23376: if (itr != end() && itr.index() == i) { -23376: return itr; -23376: } -23376: return end(); -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::find(dimension_type i) const { -23376: ((void) 0); -23376: -23376: const_iterator itr = tree.bisect(i); -23376: -23376: if (itr != end() && itr.index() == i) { -23376: return itr; -23376: } -23376: -23376: return end(); -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::find(const_iterator hint, dimension_type i) const { -23376: ((void) 0); -23376: -23376: const_iterator itr = tree.bisect_near(hint, i); -23376: -23376: if (itr != end() && itr.index() == i) { -23376: return itr; -23376: } -23376: return end(); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::lower_bound(dimension_type i) { -23376: ((void) 0); -23376: -23376: iterator itr = tree.bisect(i); -23376: -23376: if (itr == end()) { -23376: return end(); -23376: } -23376: -23376: if (itr.index() < i) { -23376: ++itr; -23376: } -23376: -23376: ((void) 0); -23376: -23376: return itr; -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::lower_bound(iterator hint, dimension_type i) { -23376: ((void) 0); -23376: -23376: iterator itr = tree.bisect_near(hint, i); -23376: -23376: if (itr == end()) { -23376: return end(); -23376: } -23376: -23376: if (itr.index() < i) { -23376: ++itr; -23376: } -23376: -23376: ((void) 0); -23376: -23376: return itr; -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::lower_bound(dimension_type i) const { -23376: ((void) 0); -23376: -23376: const_iterator itr = tree.bisect(i); -23376: -23376: if (itr == end()) { -23376: return end(); -23376: } -23376: -23376: if (itr.index() < i) { -23376: ++itr; -23376: } -23376: -23376: ((void) 0); -23376: -23376: return itr; -23376: } -23376: -23376: inline Sparse_Row::const_iterator -23376: Sparse_Row::lower_bound(const_iterator hint, dimension_type i) const { -23376: ((void) 0); -23376: -23376: const_iterator itr = tree.bisect_near(hint, i); -23376: -23376: if (itr == end()) { -23376: return end(); -23376: } -23376: -23376: if (itr.index() < i) { -23376: ++itr; -23376: } -23376: -23376: ((void) 0); -23376: -23376: return itr; -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::insert(dimension_type i, Coefficient_traits::const_reference x) { -23376: ((void) 0); -23376: return tree.insert(i, x); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::insert(iterator itr, dimension_type i, -23376: Coefficient_traits::const_reference x) { -23376: ((void) 0); -23376: return tree.insert(itr, i, x); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::insert(dimension_type i) { -23376: ((void) 0); -23376: return tree.insert(i); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::insert(iterator itr, dimension_type i) { -23376: ((void) 0); -23376: return tree.insert(itr, i); -23376: } -23376: -23376: inline void -23376: Sparse_Row::swap_coefficients(iterator i, iterator j) { -23376: ((void) 0); -23376: ((void) 0); -23376: using std::swap; -23376: swap(*i, *j); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Sparse_Row::fast_swap(dimension_type i, iterator itr) { -23376: ((void) 0); -23376: ((void) 0); -23376: tree.fast_shift(i, itr); -23376: ((void) 0); -23376: } -23376: -23376: inline Sparse_Row::iterator -23376: Sparse_Row::reset(iterator i) { -23376: iterator res = tree.erase(i); -23376: ((void) 0); -23376: return res; -23376: } -23376: -23376: inline void -23376: Sparse_Row::reset(dimension_type i) { -23376: ((void) 0); -23376: -23376: tree.erase(i); -23376: ((void) 0); -23376: } -23376: -23376: inline memory_size_type -23376: Sparse_Row::external_memory_in_bytes() const { -23376: return tree.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Sparse_Row::external_memory_in_bytes(dimension_type ) const { -23376: return external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Sparse_Row::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: inline memory_size_type -23376: Sparse_Row::total_memory_in_bytes(dimension_type ) const { -23376: return total_memory_in_bytes(); -23376: } -23376: -23376: -23376: -23376: -23376: inline void -23376: swap(Sparse_Row& x, Sparse_Row& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 928 "../../src/Sparse_Row_defs.hh" 2 -23376: # 1 "../../src/Sparse_Row_templates.hh" 1 -23376: # 27 "../../src/Sparse_Row_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: template -23376: void -23376: Sparse_Row::combine_needs_first(const Sparse_Row& y, -23376: const Func1& f, const Func2& g) { -23376: if (this == &y) { -23376: for (iterator i = begin(), i_end = end(); i != i_end; ++i) { -23376: g(*i, *i); -23376: } -23376: } -23376: else { -23376: iterator i = begin(); -23376: -23376: -23376: -23376: const iterator& i_end = end(); -23376: const_iterator j = y.begin(); -23376: const_iterator j_end = y.end(); -23376: while (i != i_end && j != j_end) { -23376: if (i.index() == j.index()) { -23376: g(*i, *j); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: ++j; -23376: } -23376: else -23376: if (i.index() < j.index()) { -23376: f(*i); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: else { -23376: j = y.lower_bound(j, i.index()); -23376: } -23376: } -23376: while (i != i_end) { -23376: f(*i); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Sparse_Row::combine_needs_second(const Sparse_Row& y, -23376: const Func1& g, -23376: const Func2& ) { -23376: iterator i = begin(); -23376: for (const_iterator j = y.begin(), j_end = y.end(); j != j_end; ++j) { -23376: i = insert(i, j.index()); -23376: g(*i, *j); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Sparse_Row::combine(const Sparse_Row& y, const Func1& f, -23376: const Func2& g, const Func3& h) { -23376: if (this == &y) { -23376: for (iterator i = begin(), i_end = end(); i != i_end; ++i) { -23376: g(*i, *i); -23376: } -23376: } -23376: else { -23376: iterator i = begin(); -23376: -23376: -23376: -23376: const iterator& i_end = end(); -23376: const_iterator j = y.begin(); -23376: const_iterator j_end = y.end(); -23376: while (i != i_end && j != j_end) { -23376: if (i.index() == j.index()) { -23376: g(*i, *j); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: ++j; -23376: } -23376: else -23376: if (i.index() < j.index()) { -23376: f(*i); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: i = insert(i, j.index()); -23376: h(*i, *j); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: ++j; -23376: } -23376: } -23376: ((void) 0); -23376: while (i != i_end) { -23376: f(*i); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: while (j != j_end) { -23376: i = insert(i, j.index()); -23376: h(*i, *j); -23376: if (*i == 0) { -23376: i = reset(i); -23376: } -23376: ++j; -23376: } -23376: } -23376: } -23376: -23376: } -23376: # 929 "../../src/Sparse_Row_defs.hh" 2 -23376: # 34 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& s, const Linear_Expression_Impl& e); -23376: -23376: } -23376: -23376: } -23376: # 102 "../../src/Linear_Expression_Impl_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Linear_Expression_Impl -23376: : public Linear_Expression_Interface { -23376: public: -23376: -23376: Linear_Expression_Impl(); -23376: -23376: -23376: Linear_Expression_Impl(const Linear_Expression_Impl& e); -23376: -23376: -23376: template -23376: Linear_Expression_Impl(const Linear_Expression_Impl& e); -23376: -23376: -23376: Linear_Expression_Impl(const Linear_Expression_Interface& e); -23376: -23376: -23376: virtual ~Linear_Expression_Impl(); -23376: -23376: -23376: virtual bool OK() const; -23376: -23376: -23376: -23376: -23376: -23376: explicit Linear_Expression_Impl(Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression_Impl(Variable v); -23376: -23376: -23376: virtual Representation representation() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: class const_iterator: public const_iterator_interface { -23376: public: -23376: explicit const_iterator(const Row& row, dimension_type i); -23376: -23376: -23376: -23376: -23376: virtual const_iterator_interface* clone() const; -23376: -23376: -23376: -23376: -23376: virtual void operator++(); -23376: -23376: -23376: -23376: -23376: virtual void operator--(); -23376: -23376: -23376: virtual reference operator*() const; -23376: -23376: -23376: -23376: -23376: -23376: virtual Variable variable() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool operator==(const const_iterator_interface& x) const; -23376: -23376: private: -23376: -23376: void skip_zeroes_forward(); -23376: void skip_zeroes_backward(); -23376: -23376: const Row* row; -23376: typename Row::const_iterator itr; -23376: }; -23376: -23376: -23376: -23376: virtual const_iterator_interface* begin() const; -23376: -23376: -23376: -23376: virtual const_iterator_interface* end() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual const_iterator_interface* lower_bound(Variable v) const; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: virtual dimension_type space_dimension() const; -23376: -23376: -23376: virtual void set_space_dimension(dimension_type n); -23376: -23376: -23376: virtual Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: virtual void set_coefficient(Variable v, -23376: Coefficient_traits::const_reference n); -23376: -23376: -23376: virtual Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: virtual void set_inhomogeneous_term(Coefficient_traits::const_reference n); -23376: # 243 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual void linear_combine(const Linear_Expression_Interface& y, Variable v); -23376: -23376: -23376: -23376: virtual void linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: -23376: virtual void linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: virtual void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: virtual void shift_space_dimensions(Variable v, dimension_type n); -23376: # 284 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: virtual bool is_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool all_homogeneous_terms_are_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: virtual memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: virtual memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: virtual void ascii_dump(std::ostream& s) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool ascii_load(std::istream& s); -23376: -23376: -23376: Linear_Expression_Impl(const Linear_Expression_Interface& e, -23376: dimension_type space_dim); -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void normalize(); -23376: -23376: -23376: -23376: virtual void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: virtual void negate(dimension_type first, dimension_type last); -23376: -23376: virtual Linear_Expression_Impl& -23376: operator+=(Coefficient_traits::const_reference n); -23376: virtual Linear_Expression_Impl& -23376: operator-=(Coefficient_traits::const_reference n); -23376: # 357 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual int compare(const Linear_Expression_Interface& y) const; -23376: -23376: virtual Linear_Expression_Impl& -23376: operator+=(const Linear_Expression_Interface& e2); -23376: virtual Linear_Expression_Impl& operator+=(const Variable v); -23376: virtual Linear_Expression_Impl& -23376: operator-=(const Linear_Expression_Interface& e2); -23376: virtual Linear_Expression_Impl& operator-=(const Variable v); -23376: virtual Linear_Expression_Impl& -23376: operator*=(Coefficient_traits::const_reference n); -23376: virtual Linear_Expression_Impl& -23376: operator/=(Coefficient_traits::const_reference n); -23376: -23376: virtual void negate(); -23376: -23376: virtual Linear_Expression_Impl& -23376: add_mul_assign(Coefficient_traits::const_reference n, const Variable v); -23376: -23376: virtual Linear_Expression_Impl& -23376: sub_mul_assign(Coefficient_traits::const_reference n, const Variable v); -23376: -23376: virtual void add_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& e2); -23376: -23376: virtual void sub_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& e2); -23376: -23376: virtual void print(std::ostream& s) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool all_zeroes(const Variables_Set& vars) const; -23376: -23376: -23376: -23376: virtual bool have_a_common_variable(const Linear_Expression_Interface& x, -23376: Variable first, Variable last) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual void set(dimension_type i, Coefficient_traits::const_reference n); -23376: # 416 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual bool all_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type num_zeroes(dimension_type start, dimension_type end) const; -23376: # 433 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual Coefficient gcd(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: virtual void exact_div_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: -23376: -23376: virtual void mul_assign(Coefficient_traits::const_reference n, -23376: dimension_type start, dimension_type end); -23376: # 466 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual void -23376: linear_combine(const Linear_Expression_Interface& y, dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual void linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type last_nonzero() const; -23376: # 503 "../../src/Linear_Expression_Impl_defs.hh" -23376: virtual bool -23376: all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual void -23376: scalar_product_assign(Coefficient& result, -23376: const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual int -23376: scalar_product_sign(const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type -23376: first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual dimension_type -23376: last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual void has_a_free_dimension_helper(std::set& x) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: virtual bool is_equal_to(const Linear_Expression_Interface& x, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual void get_row(Dense_Row& r) const; -23376: -23376: -23376: -23376: -23376: -23376: virtual void get_row(Sparse_Row& r) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression_Impl(dimension_type space_dim, bool); -23376: # 597 "../../src/Linear_Expression_Impl_defs.hh" -23376: template -23376: void linear_combine(const Linear_Expression_Impl& y, Variable v); -23376: -23376: -23376: -23376: template -23376: void linear_combine(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: -23376: template -23376: void linear_combine_lax(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Linear_Expression_Impl& x) const; -23376: -23376: template -23376: Linear_Expression_Impl& operator+=(const Linear_Expression_Impl& e2); -23376: template -23376: Linear_Expression_Impl& operator-=(const Linear_Expression_Impl& e2); -23376: -23376: template -23376: Linear_Expression_Impl& -23376: sub_mul_assign(Coefficient_traits::const_reference n, -23376: const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end); -23376: -23376: template -23376: void add_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Impl& e2); -23376: -23376: template -23376: void sub_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Impl& e2); -23376: # 653 "../../src/Linear_Expression_Impl_defs.hh" -23376: template -23376: void linear_combine(const Linear_Expression_Impl& y, dimension_type i); -23376: -23376: -23376: -23376: template -23376: void linear_combine(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: template -23376: void linear_combine_lax(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: # 684 "../../src/Linear_Expression_Impl_defs.hh" -23376: template -23376: int compare(const Linear_Expression_Impl& y) const; -23376: -23376: -23376: template -23376: void -23376: scalar_product_assign(Coefficient& result, -23376: const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: int scalar_product_sign(const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: template -23376: bool is_equal_to(const Linear_Expression_Impl& x, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Linear_Expression_Impl& x, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: bool have_a_common_variable(const Linear_Expression_Impl& x, -23376: Variable first, Variable last) const; -23376: -23376: private: -23376: -23376: void construct(const Linear_Expression_Interface& e); -23376: void construct(const Linear_Expression_Interface& e, -23376: dimension_type space_dim); -23376: -23376: template -23376: void construct(const Linear_Expression_Impl& e); -23376: template -23376: void construct(const Linear_Expression_Impl& e, -23376: dimension_type space_dim); -23376: -23376: Row row; -23376: -23376: template -23376: friend class Linear_Expression_Impl; -23376: -23376: }; -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl::OK() const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl::OK() const; -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl::all_homogeneous_terms_are_zero() const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl::all_homogeneous_terms_are_zero() const; -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl::all_zeroes(dimension_type start, -23376: dimension_type end) const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl::all_zeroes(dimension_type start, -23376: dimension_type end) const; -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::all_zeroes(const Variables_Set& vars) const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::all_zeroes(const Variables_Set& vars) const; -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl -23376: ::first_nonzero(dimension_type first, dimension_type last) const; -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl -23376: ::first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: template <> -23376: Coefficient -23376: Linear_Expression_Impl::gcd(dimension_type start, -23376: dimension_type end) const; -23376: template <> -23376: Coefficient -23376: Linear_Expression_Impl::gcd(dimension_type start, -23376: dimension_type end) const; -23376: -23376: template <> -23376: void -23376: Linear_Expression_Impl -23376: ::has_a_free_dimension_helper(std::set& x) const; -23376: template <> -23376: void -23376: Linear_Expression_Impl -23376: ::has_a_free_dimension_helper(std::set& x) const; -23376: -23376: template <> -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::have_a_common_variable(const Linear_Expression_Impl& y, -23376: Variable first, Variable last) const; -23376: template <> -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::have_a_common_variable(const Linear_Expression_Impl& y, -23376: Variable first, Variable last) const; -23376: template <> -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::have_a_common_variable(const Linear_Expression_Impl& y, -23376: Variable first, Variable last) const; -23376: template <> -23376: template <> -23376: bool -23376: Linear_Expression_Impl -23376: ::have_a_common_variable(const Linear_Expression_Impl& y, -23376: Variable first, Variable last) const; -23376: -23376: template <> -23376: bool -23376: Linear_Expression_Impl::is_zero() const; -23376: template <> -23376: bool -23376: Linear_Expression_Impl::is_zero() const; -23376: -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl::last_nonzero() const; -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl::last_nonzero() const; -23376: -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl -23376: ::last_nonzero(dimension_type first, dimension_type last) const; -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl -23376: ::last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl::num_zeroes(dimension_type start, -23376: dimension_type end) const; -23376: template <> -23376: dimension_type -23376: Linear_Expression_Impl::num_zeroes(dimension_type start, -23376: dimension_type end) const; -23376: -23376: template <> -23376: void -23376: Linear_Expression_Impl -23376: ::remove_space_dimensions(const Variables_Set& vars); -23376: template <> -23376: void -23376: Linear_Expression_Impl -23376: ::remove_space_dimensions(const Variables_Set& vars); -23376: -23376: template <> -23376: Representation -23376: Linear_Expression_Impl::representation() const; -23376: template <> -23376: Representation -23376: Linear_Expression_Impl::representation() const; -23376: -23376: template <> -23376: void -23376: Linear_Expression_Impl::const_iterator::skip_zeroes_backward(); -23376: template <> -23376: void -23376: Linear_Expression_Impl::const_iterator::skip_zeroes_backward(); -23376: -23376: template <> -23376: void -23376: Linear_Expression_Impl::const_iterator::skip_zeroes_forward(); -23376: template <> -23376: void -23376: Linear_Expression_Impl::const_iterator::skip_zeroes_forward(); -23376: -23376: } -23376: -23376: -23376: # 1 "../../src/Linear_Expression_Impl_inlines.hh" 1 -23376: # 27 "../../src/Linear_Expression_Impl_inlines.hh" -23376: # 1 "../../src/math_utilities_defs.hh" 1 -23376: # 31 "../../src/math_utilities_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: numer_denom(const T& from, -23376: Coefficient& numer, Coefficient& denom); -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, void>::type -23376: div_round_up(T& to, -23376: Coefficient_traits::const_reference x, -23376: Coefficient_traits::const_reference y); -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: min_assign(N& x, const N& y); -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: max_assign(N& x, const N& y); -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_even(const T& x); -23376: -23376: -23376: -23376: -23376: template -23376: typename Enable_If::value, bool>::type -23376: is_additive_inverse(const T& x, const T& y); -23376: # 88 "../../src/math_utilities_defs.hh" -23376: void -23376: normalize2(Coefficient_traits::const_reference x, -23376: Coefficient_traits::const_reference y, -23376: Coefficient& n_x, Coefficient& n_y); -23376: -23376: -23376: -23376: -23376: bool -23376: is_canonical(const mpq_class& x); -23376: -23376: -23376: -23376: -23376: template -23376: T -23376: low_bits_mask(unsigned n); -23376: -23376: } -23376: -23376: # 1 "../../src/math_utilities_inlines.hh" 1 -23376: # 31 "../../src/math_utilities_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: normalize2(Coefficient_traits::const_reference x, -23376: Coefficient_traits::const_reference y, -23376: Coefficient& n_x, Coefficient& n_y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_gcd; Parma_Polyhedra_Library::Coefficient& gcd = holder_gcd.item(); -23376: gcd_assign(gcd, x, y); -23376: exact_div_assign(n_x, x, gcd); -23376: exact_div_assign(n_y, y, gcd); -23376: } -23376: -23376: template -23376: inline T -23376: low_bits_mask(const unsigned n) { -23376: ((void) 0); -23376: return ~((~static_cast(0)) << n); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, void>::type -23376: numer_denom(const T& from, -23376: Coefficient& numer, Coefficient& denom) { -23376: ((void) 0) -23376: -23376: ; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: assign_r(q, from, ROUND_NOT_NEEDED); -23376: numer = q.get_num(); -23376: denom = q.get_den(); -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, void>::type -23376: div_round_up(T& to, -23376: Coefficient_traits::const_reference x, -23376: Coefficient_traits::const_reference y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_x; mpq_class& q_x = holder_q_x.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_y; mpq_class& q_y = holder_q_y.item(); -23376: -23376: -23376: assign_r(q_x, x, ROUND_NOT_NEEDED); -23376: assign_r(q_y, y, ROUND_NOT_NEEDED); -23376: div_assign_r(q_x, q_x, q_y, ROUND_NOT_NEEDED); -23376: assign_r(to, q_x, ROUND_UP); -23376: } -23376: -23376: template -23376: inline void -23376: min_assign(N& x, const N& y) { -23376: if (x > y) { -23376: x = y; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: max_assign(N& x, const N& y) { -23376: if (x < y) { -23376: x = y; -23376: } -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_even(const T& x) { -23376: T mod; -23376: return umod_2exp_assign_r(mod, x, 1, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ -23376: && mod == 0; -23376: } -23376: -23376: template -23376: inline typename Enable_If::value, bool>::type -23376: is_additive_inverse(const T& x, const T& y) { -23376: T negated_x; -23376: return neg_assign_r(negated_x, x, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ -23376: && negated_x == y; -23376: } -23376: -23376: inline bool -23376: is_canonical(const mpq_class& x) { -23376: if (x.get_den() <= 0) { -23376: return false; -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp; mpq_class& temp = holder_temp.item(); -23376: temp = x; -23376: temp.canonicalize(); -23376: return temp.get_num() == x.get_num(); -23376: } -23376: -23376: } -23376: # 109 "../../src/math_utilities_defs.hh" 2 -23376: # 28 "../../src/Linear_Expression_Impl_inlines.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline dimension_type -23376: Linear_Expression_Impl::max_space_dimension() { -23376: return Row::max_size() - 1; -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression_Impl::Linear_Expression_Impl() -23376: : row(1) { -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(dimension_type space_dim, bool) -23376: : row(space_dim + 1) { -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression_Impl::~Linear_Expression_Impl() { -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(Coefficient_traits::const_reference n) -23376: : row(1) { -23376: if (n != 0) { -23376: row.insert(0, n); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_Expression_Impl::space_dimension() const { -23376: return row.size() - 1; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl::set_space_dimension(dimension_type n) { -23376: row.resize(n + 1); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression_Impl::coefficient(Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: return Coefficient_zero(); -23376: } -23376: return row.get(v.id() + 1); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl -23376: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) { -23376: ((void) 0); -23376: const dimension_type i = v.space_dimension(); -23376: if (n == 0) { -23376: row.reset(i); -23376: } -23376: else { -23376: row.insert(i, n); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression_Impl::inhomogeneous_term() const { -23376: return row.get(0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl -23376: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) { -23376: if (n == 0) { -23376: row.reset(0); -23376: } -23376: else { -23376: row.insert(0, n); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl::swap_space_dimensions(Variable v1, Variable v2) { -23376: row.swap_coefficients(v1.space_dimension(), v2.space_dimension()); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl::shift_space_dimensions(Variable v, -23376: dimension_type n) { -23376: row.add_zeroes_and_shift(n, v.space_dimension()); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Linear_Expression_Impl::external_memory_in_bytes() const { -23376: return row.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Linear_Expression_Impl::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: template -23376: inline Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator+=(Coefficient_traits::const_reference n) { -23376: typename Row::iterator itr = row.insert(0); -23376: (*itr) += n; -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: template -23376: inline Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator-=(Coefficient_traits::const_reference n) { -23376: typename Row::iterator itr = row.insert(0); -23376: (*itr) -= n; -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_Expression_Impl::normalize() { -23376: row.normalize(); -23376: ((void) 0); -23376: } -23376: -23376: template <> -23376: inline bool -23376: Linear_Expression_Impl::is_zero() const { -23376: return row.num_stored_elements() == 0; -23376: } -23376: -23376: template <> -23376: inline bool -23376: Linear_Expression_Impl::all_homogeneous_terms_are_zero() const { -23376: return row.lower_bound(1) == row.end(); -23376: } -23376: -23376: template <> -23376: inline bool -23376: Linear_Expression_Impl::all_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: return row.lower_bound(start) == row.lower_bound(end); -23376: } -23376: -23376: template <> -23376: inline dimension_type -23376: Linear_Expression_Impl::num_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: ((void) 0); -23376: return (end - start) -23376: - std::distance(row.lower_bound(start), row.lower_bound(end)); -23376: } -23376: -23376: template <> -23376: inline dimension_type -23376: Linear_Expression_Impl::last_nonzero() const { -23376: if (row.num_stored_elements() == 0) { -23376: return 0; -23376: } -23376: Sparse_Row::const_iterator i = row.end(); -23376: --i; -23376: return i.index(); -23376: } -23376: -23376: template <> -23376: inline dimension_type -23376: Linear_Expression_Impl -23376: ::first_nonzero(dimension_type first, dimension_type last) const { -23376: ((void) 0); -23376: ((void) 0); -23376: Sparse_Row::const_iterator i = row.lower_bound(first); -23376: -23376: if (i != row.end() && i.index() < last) { -23376: return i.index(); -23376: } -23376: else { -23376: return last; -23376: } -23376: } -23376: -23376: template <> -23376: inline dimension_type -23376: Linear_Expression_Impl -23376: ::last_nonzero(dimension_type first, dimension_type last) const { -23376: ((void) 0); -23376: ((void) 0); -23376: Sparse_Row::const_iterator itr1 = row.lower_bound(first); -23376: Sparse_Row::const_iterator itr2 = row.lower_bound(last); -23376: -23376: if (itr1 == itr2) { -23376: return last; -23376: } -23376: -23376: --itr2; -23376: return itr2.index(); -23376: } -23376: -23376: template <> -23376: inline Representation -23376: Linear_Expression_Impl::representation() const { -23376: return DENSE; -23376: } -23376: -23376: template <> -23376: inline Representation -23376: Linear_Expression_Impl::representation() const { -23376: return SPARSE; -23376: } -23376: -23376: template <> -23376: inline void -23376: Linear_Expression_Impl::const_iterator -23376: ::skip_zeroes_forward() { -23376: -23376: } -23376: -23376: template <> -23376: inline void -23376: Linear_Expression_Impl::const_iterator -23376: ::skip_zeroes_backward() { -23376: -23376: } -23376: -23376: namespace IO_Operators { -23376: -23376: template -23376: inline std::ostream& -23376: operator<<(std::ostream& s, const Linear_Expression_Impl& e) { -23376: e.print(s); -23376: return s; -23376: } -23376: -23376: } -23376: -23376: } -23376: # 904 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: # 1 "../../src/Linear_Expression_Impl_templates.hh" 1 -23376: # 30 "../../src/Linear_Expression_Impl_templates.hh" -23376: # 1 "../../src/Constraint_defs.hh" 1 -23376: # 27 "../../src/Constraint_defs.hh" -23376: # 1 "../../src/Constraint_types.hh" 1 -23376: # 16 "../../src/Constraint_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Constraint; -23376: -23376: } -23376: # 28 "../../src/Constraint_defs.hh" 2 -23376: -23376: # 1 "../../src/Congruence_types.hh" 1 -23376: # 16 "../../src/Congruence_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Congruence; -23376: -23376: } -23376: # 30 "../../src/Constraint_defs.hh" 2 -23376: -23376: # 1 "../../src/Polyhedron_types.hh" 1 -23376: # 16 "../../src/Polyhedron_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Polyhedron; -23376: -23376: } -23376: # 32 "../../src/Constraint_defs.hh" 2 -23376: # 1 "../../src/termination_types.hh" 1 -23376: # 16 "../../src/termination_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Termination_Helpers; -23376: -23376: } -23376: # 33 "../../src/Constraint_defs.hh" 2 -23376: # 1 "../../src/Octagonal_Shape_types.hh" 1 -23376: # 16 "../../src/Octagonal_Shape_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Octagonal_Shape; -23376: -23376: class Octagonal_Shape_Helper; -23376: -23376: } -23376: # 34 "../../src/Constraint_defs.hh" 2 -23376: # 1 "../../src/Grid_types.hh" 1 -23376: # 16 "../../src/Grid_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Grid; -23376: -23376: } -23376: # 35 "../../src/Constraint_defs.hh" 2 -23376: -23376: # 1 "../../src/Linear_Expression_defs.hh" 1 -23376: # 30 "../../src/Linear_Expression_defs.hh" -23376: # 1 "../../src/Generator_types.hh" 1 -23376: # 16 "../../src/Generator_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Generator; -23376: -23376: } -23376: # 31 "../../src/Linear_Expression_defs.hh" 2 -23376: -23376: # 1 "../../src/Grid_Generator_types.hh" 1 -23376: # 16 "../../src/Grid_Generator_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Grid_Generator; -23376: -23376: } -23376: # 33 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Linear_System_types.hh" 1 -23376: # 16 "../../src/Linear_System_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Linear_System; -23376: -23376: template -23376: class Linear_System_With_Bit_Matrix_iterator; -23376: -23376: } -23376: # 34 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Constraint_System_types.hh" 1 -23376: # 16 "../../src/Constraint_System_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Constraint_System; -23376: class Constraint_System_const_iterator; -23376: -23376: } -23376: # 35 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Congruence_System_types.hh" 1 -23376: # 16 "../../src/Congruence_System_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Congruence_System; -23376: -23376: } -23376: # 36 "../../src/Linear_Expression_defs.hh" 2 -23376: -23376: -23376: -23376: # 1 "../../src/PIP_Problem_types.hh" 1 -23376: # 16 "../../src/PIP_Problem_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: enum PIP_Problem_Status { -23376: -23376: UNFEASIBLE_PIP_PROBLEM, -23376: -23376: OPTIMIZED_PIP_PROBLEM -23376: }; -23376: -23376: class PIP_Problem; -23376: -23376: } -23376: # 40 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/BHRZ03_Certificate_types.hh" 1 -23376: # 16 "../../src/BHRZ03_Certificate_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class BHRZ03_Certificate; -23376: -23376: } -23376: # 41 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Scalar_Products_types.hh" 1 -23376: # 16 "../../src/Scalar_Products_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Scalar_Products; -23376: class Topology_Adjusted_Scalar_Product_Sign; -23376: class Topology_Adjusted_Scalar_Product_Assign; -23376: -23376: } -23376: # 42 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/MIP_Problem_types.hh" 1 -23376: # 16 "../../src/MIP_Problem_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: enum MIP_Problem_Status { -23376: -23376: UNFEASIBLE_MIP_PROBLEM, -23376: -23376: UNBOUNDED_MIP_PROBLEM, -23376: -23376: OPTIMIZED_MIP_PROBLEM -23376: }; -23376: -23376: class MIP_Problem; -23376: -23376: } -23376: # 43 "../../src/Linear_Expression_defs.hh" 2 -23376: -23376: # 1 "../../src/BD_Shape_types.hh" 1 -23376: # 16 "../../src/BD_Shape_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class BD_Shape; -23376: -23376: class BD_Shape_Helpers; -23376: -23376: } -23376: # 45 "../../src/Linear_Expression_defs.hh" 2 -23376: -23376: -23376: -23376: # 1 "../../src/Expression_Adapter_defs.hh" 1 -23376: # 27 "../../src/Expression_Adapter_defs.hh" -23376: # 1 "../../src/Expression_Adapter_types.hh" 1 -23376: # 16 "../../src/Expression_Adapter_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Expression_Adapter_Base; -23376: -23376: template -23376: class Expression_Adapter; -23376: -23376: template -23376: class Expression_Adapter_Transparent; -23376: -23376: } -23376: # 28 "../../src/Expression_Adapter_defs.hh" 2 -23376: # 36 "../../src/Expression_Adapter_defs.hh" -23376: class Parma_Polyhedra_Library::Expression_Adapter_Base { -23376: }; -23376: # 55 "../../src/Expression_Adapter_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Expression_Adapter -23376: : public Expression_Adapter_Base { -23376: public: -23376: -23376: typedef Expression_Adapter const_reference; -23376: -23376: typedef typename T::const_reference inner_type; -23376: -23376: typedef typename T::raw_type raw_type; -23376: -23376: -23376: inner_type inner() const; -23376: -23376: -23376: typedef typename raw_type::const_iterator const_iterator; -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: -23376: const_iterator lower_bound(Variable v) const; -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: bool is_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_homogeneous_terms_are_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(const Variables_Set& vars) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: dimension_type num_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: Coefficient gcd(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: dimension_type last_nonzero() const; -23376: -23376: -23376: -23376: dimension_type last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: dimension_type first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void has_a_free_dimension_helper(std::set& x) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void get_row(Dense_Row& r) const; -23376: -23376: -23376: void get_row(Sparse_Row& r) const; -23376: -23376: -23376: -23376: template -23376: bool have_a_common_variable(const Expression& y, -23376: Variable first, Variable last) const; -23376: -23376: protected: -23376: -23376: explicit Expression_Adapter(const raw_type& expr); -23376: -23376: const raw_type& raw_; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: class Parma_Polyhedra_Library::Expression_Adapter_Transparent -23376: : public Expression_Adapter { -23376: typedef Expression_Adapter base_type; -23376: public: -23376: -23376: typedef Expression_Adapter_Transparent const_reference; -23376: -23376: typedef typename base_type::inner_type inner_type; -23376: -23376: typedef typename base_type::raw_type raw_type; -23376: -23376: -23376: typedef typename base_type::const_iterator const_iterator; -23376: -23376: -23376: explicit Expression_Adapter_Transparent(const raw_type& expr); -23376: }; -23376: -23376: # 1 "../../src/Expression_Adapter_inlines.hh" 1 -23376: # 29 "../../src/Expression_Adapter_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Expression_Adapter::Expression_Adapter(const raw_type& expr) -23376: : raw_(expr) { -23376: } -23376: -23376: template -23376: inline typename Expression_Adapter::inner_type -23376: Expression_Adapter::inner() const { -23376: return inner_type(raw_); -23376: } -23376: -23376: template -23376: inline Representation -23376: Expression_Adapter::representation() const { -23376: return inner().representation(); -23376: } -23376: -23376: template -23376: inline typename Expression_Adapter::const_iterator -23376: Expression_Adapter::begin() const { -23376: return inner().begin(); -23376: } -23376: -23376: template -23376: inline typename Expression_Adapter::const_iterator -23376: Expression_Adapter::end() const { -23376: return inner().end(); -23376: } -23376: -23376: template -23376: inline typename Expression_Adapter::const_iterator -23376: Expression_Adapter::lower_bound(Variable v) const { -23376: return inner().lower_bound(v); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Adapter::space_dimension() const { -23376: return inner().space_dimension(); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Adapter::coefficient(Variable v) const { -23376: return inner().coefficient(v); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Adapter::inhomogeneous_term() const { -23376: return inner().inhomogeneous_term(); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Adapter::is_zero() const { -23376: return inner().is_zero(); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Adapter::all_homogeneous_terms_are_zero() const { -23376: return inner().all_homogeneous_terms_are_zero(); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Adapter::is_equal_to(const Expression& y) const { -23376: return inner().is_equal_to(y); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Adapter -23376: ::all_zeroes(const Variables_Set& vars) const { -23376: return inner().all_zeroes(vars); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Adapter::get(dimension_type i) const { -23376: return inner().get(i); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Adapter::get(Variable v) const { -23376: return inner().get(v); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Adapter::all_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: return inner().all_zeroes(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Adapter::num_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: return inner().num_zeroes(start, end); -23376: } -23376: -23376: template -23376: inline Coefficient -23376: Expression_Adapter::gcd(dimension_type start, -23376: dimension_type end) const { -23376: return inner().gcd(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Adapter::last_nonzero() const { -23376: return inner().last_nonzero(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Adapter::last_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: return inner().last_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Adapter::first_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: return inner().first_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Adapter -23376: ::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const { -23376: return inner().all_zeroes_except(vars, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Adapter -23376: ::has_a_free_dimension_helper(std::set& x) const { -23376: inner().has_a_free_dimension_helper(x); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Adapter -23376: ::is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const { -23376: return inner().is_equal_to(y, start, end); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Adapter -23376: ::is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: return inner().is_equal_to(y, c1, c2, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Adapter::get_row(Dense_Row& r) const { -23376: inner().get_row(r); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Adapter::get_row(Sparse_Row& r) const { -23376: inner().get_row(r); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Adapter -23376: ::have_a_common_variable(const Expression& y, -23376: Variable first, Variable last) const { -23376: return inner().have_a_common_variable(y, first, last); -23376: } -23376: -23376: template -23376: inline -23376: Expression_Adapter_Transparent -23376: ::Expression_Adapter_Transparent(const raw_type& expr) -23376: : base_type(expr) { -23376: } -23376: -23376: } -23376: # 215 "../../src/Expression_Adapter_defs.hh" 2 -23376: # 49 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Expression_Hide_Inhomo_types.hh" 1 -23376: # 16 "../../src/Expression_Hide_Inhomo_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Expression_Hide_Inhomo; -23376: -23376: } -23376: # 50 "../../src/Linear_Expression_defs.hh" 2 -23376: # 1 "../../src/Expression_Hide_Last_types.hh" 1 -23376: # 16 "../../src/Expression_Hide_Last_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Expression_Hide_Last; -23376: -23376: } -23376: # 51 "../../src/Linear_Expression_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(Variable v, Variable w); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(Variable v, const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(const Linear_Expression& e, Variable v); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator+(const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(Variable v, Variable w); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(Variable v, const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(const Linear_Expression& e, Variable v); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator*(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression -23376: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator+=(Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator+=(Linear_Expression& e, Variable v); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator-=(Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator-=(Linear_Expression& e, Variable v); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Linear_Expression& -23376: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: void -23376: neg_assign(Linear_Expression& e); -23376: -23376: -23376: -23376: Linear_Expression& -23376: add_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, Variable v); -23376: -23376: -23376: -23376: void add_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2); -23376: -23376: -23376: -23376: void sub_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2); -23376: -23376: -23376: -23376: Linear_Expression& -23376: sub_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, Variable v); -23376: # 230 "../../src/Linear_Expression_defs.hh" -23376: int compare(const Linear_Expression& x, const Linear_Expression& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Linear_Expression& e); -23376: -23376: } -23376: -23376: } -23376: # 289 "../../src/Linear_Expression_defs.hh" -23376: class Parma_Polyhedra_Library::Linear_Expression { -23376: public: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Linear_Expression(Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression(const Linear_Expression& e); -23376: -23376: -23376: Linear_Expression(const Linear_Expression& e, Representation r); -23376: -23376: -23376: typedef const Linear_Expression& const_reference; -23376: typedef Linear_Expression raw_type; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit -23376: Linear_Expression(const LE_Adapter& e, -23376: typename -23376: Enable_If::value, -23376: void*>::type = 0); -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Expression(const LE_Adapter& e, -23376: Representation r, -23376: typename -23376: Enable_If::value, -23376: void*>::type = 0); -23376: # 341 "../../src/Linear_Expression_defs.hh" -23376: template -23376: explicit -23376: Linear_Expression(const LE_Adapter& e, -23376: dimension_type space_dim, -23376: typename -23376: Enable_If::value, -23376: void*>::type = 0); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Linear_Expression(const LE_Adapter& e, -23376: dimension_type space_dim, -23376: Representation r, -23376: typename -23376: Enable_If::value, -23376: void*>::type = 0); -23376: -23376: -23376: Linear_Expression& operator=(const Linear_Expression& e); -23376: -23376: -23376: ~Linear_Expression(); -23376: -23376: -23376: -23376: -23376: -23376: explicit Linear_Expression(Coefficient_traits::const_reference n, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression(Variable v, Representation r = default_representation); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: class const_iterator { -23376: private: -23376: public: -23376: typedef std::bidirectional_iterator_tag iterator_category; -23376: typedef const Coefficient value_type; -23376: typedef std::ptrdiff_t difference_type; -23376: typedef value_type* pointer; -23376: typedef Coefficient_traits::const_reference reference; -23376: -23376: -23376: -23376: -23376: -23376: explicit const_iterator(); -23376: # 417 "../../src/Linear_Expression_defs.hh" -23376: const_iterator(const const_iterator& i); -23376: -23376: ~const_iterator(); -23376: # 428 "../../src/Linear_Expression_defs.hh" -23376: void m_swap(const_iterator& i); -23376: # 437 "../../src/Linear_Expression_defs.hh" -23376: const_iterator& operator=(const const_iterator& i); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator& operator--(); -23376: -23376: -23376: reference operator*() const; -23376: -23376: -23376: -23376: -23376: -23376: Variable variable() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& i) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& i) const; -23376: -23376: private: -23376: -23376: -23376: const_iterator(Linear_Expression_Interface::const_iterator_interface* i); -23376: -23376: Linear_Expression_Interface::const_iterator_interface* itr; -23376: -23376: friend class Linear_Expression; -23376: }; -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: -23376: const_iterator lower_bound(Variable v) const; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: void set_space_dimension(dimension_type n); -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: void set_coefficient(Variable v, -23376: Coefficient_traits::const_reference n); -23376: -23376: -23376: Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: void set_inhomogeneous_term(Coefficient_traits::const_reference n); -23376: # 535 "../../src/Linear_Expression_defs.hh" -23376: void linear_combine(const Linear_Expression& y, Variable v); -23376: -23376: -23376: -23376: void linear_combine(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: -23376: void linear_combine_lax(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: # 576 "../../src/Linear_Expression_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: bool is_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_homogeneous_terms_are_zero() const; -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: static const Linear_Expression& zero(); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: void m_swap(Linear_Expression& y); -23376: -23376: -23376: Linear_Expression(const Linear_Expression& e, dimension_type space_dim); -23376: -23376: -23376: Linear_Expression(const Linear_Expression& e, dimension_type space_dim, -23376: Representation r); -23376: -23376: -23376: -23376: bool is_equal_to(const Linear_Expression& x) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void normalize(); -23376: -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(const Variables_Set& vars) const; -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: static const Linear_Expression* zero_p; -23376: -23376: Linear_Expression_Interface* impl; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression(dimension_type space_dim, bool, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: -23376: -23376: -23376: void set(dimension_type i, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference get(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: void set(Variable v, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: dimension_type num_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: Coefficient gcd(dimension_type start, dimension_type end) const; -23376: -23376: void exact_div_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end); -23376: # 725 "../../src/Linear_Expression_defs.hh" -23376: void linear_combine(const Linear_Expression& y, dimension_type i); -23376: -23376: -23376: -23376: void linear_combine(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: void linear_combine_lax(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: void mul_assign(Coefficient_traits::const_reference n, -23376: dimension_type start, dimension_type end); -23376: -23376: -23376: -23376: dimension_type last_nonzero() const; -23376: -23376: -23376: -23376: dimension_type last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: dimension_type first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void scalar_product_assign(Coefficient& result, -23376: const Linear_Expression& y) const; -23376: -23376: -23376: void scalar_product_assign(Coefficient& result, const Linear_Expression& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: int scalar_product_sign(const Linear_Expression& y) const; -23376: -23376: -23376: -23376: int scalar_product_sign(const Linear_Expression& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void has_a_free_dimension_helper(std::set& x) const; -23376: -23376: -23376: bool is_equal_to(const Linear_Expression& x, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: bool is_equal_to(const Linear_Expression& x, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void get_row(Dense_Row& r) const; -23376: -23376: -23376: void get_row(Sparse_Row& r) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool have_a_common_variable(const Linear_Expression& x, -23376: Variable first, Variable last) const; -23376: -23376: -23376: -23376: -23376: -23376: void negate(dimension_type first, dimension_type last); -23376: -23376: template -23376: friend class Linear_Expression_Impl; -23376: -23376: -23376: -23376: -23376: -23376: -23376: friend class Grid; -23376: friend class Congruence; -23376: friend class Polyhedron; -23376: friend class PIP_Tree_Node; -23376: friend class Grid_Generator; -23376: friend class Generator; -23376: friend class Constraint; -23376: friend class Constraint_System; -23376: friend class PIP_Problem; -23376: friend class BHRZ03_Certificate; -23376: friend class Scalar_Products; -23376: friend class MIP_Problem; -23376: friend class Box_Helpers; -23376: friend class Congruence_System; -23376: friend class BD_Shape_Helpers; -23376: friend class Octagonal_Shape_Helper; -23376: friend class Termination_Helpers; -23376: template -23376: friend class BD_Shape; -23376: template -23376: friend class Octagonal_Shape; -23376: template -23376: friend class Linear_System; -23376: template -23376: friend class Box; -23376: template -23376: friend class Expression_Adapter; -23376: template -23376: friend class Expression_Hide_Inhomo; -23376: template -23376: friend class Expression_Hide_Last; -23376: -23376: friend Linear_Expression -23376: operator+(const Linear_Expression& e1, const Linear_Expression& e2); -23376: friend Linear_Expression -23376: operator+(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: friend Linear_Expression -23376: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: friend Linear_Expression -23376: operator+(Variable v, const Linear_Expression& e); -23376: friend Linear_Expression -23376: operator+(Variable v, Variable w); -23376: -23376: friend Linear_Expression -23376: operator-(const Linear_Expression& e); -23376: -23376: friend Linear_Expression -23376: operator-(const Linear_Expression& e1, const Linear_Expression& e2); -23376: friend Linear_Expression -23376: operator-(Variable v, Variable w); -23376: friend Linear_Expression -23376: operator-(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: friend Linear_Expression -23376: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: friend Linear_Expression -23376: operator-(Variable v, const Linear_Expression& e); -23376: friend Linear_Expression -23376: operator-(const Linear_Expression& e, Variable v); -23376: -23376: friend Linear_Expression -23376: operator*(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: friend Linear_Expression -23376: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Linear_Expression& -23376: operator+=(Linear_Expression& e1, const Linear_Expression& e2); -23376: friend Linear_Expression& -23376: operator+=(Linear_Expression& e, Variable v); -23376: friend Linear_Expression& -23376: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Linear_Expression& -23376: operator-=(Linear_Expression& e1, const Linear_Expression& e2); -23376: friend Linear_Expression& -23376: operator-=(Linear_Expression& e, Variable v); -23376: friend Linear_Expression& -23376: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Linear_Expression& -23376: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: friend Linear_Expression& -23376: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend void -23376: neg_assign(Linear_Expression& e); -23376: -23376: friend Linear_Expression& -23376: add_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, Variable v); -23376: friend Linear_Expression& -23376: sub_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, Variable v); -23376: -23376: friend void -23376: add_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2); -23376: friend void -23376: sub_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2); -23376: -23376: friend int -23376: compare(const Linear_Expression& x, const Linear_Expression& y); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators -23376: ::operator<<(std::ostream& s, const Linear_Expression& e); -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: void swap(Linear_Expression& x, Linear_Expression& y); -23376: -23376: -23376: -23376: void swap(Linear_Expression::const_iterator& x, -23376: Linear_Expression::const_iterator& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Linear_Expression_inlines.hh" 1 -23376: # 29 "../../src/Linear_Expression_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline Linear_Expression& -23376: Linear_Expression::operator=(const Linear_Expression& e) { -23376: Linear_Expression tmp = e; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline -23376: Linear_Expression::~Linear_Expression() { -23376: delete impl; -23376: } -23376: -23376: inline Representation -23376: Linear_Expression::representation() const { -23376: return impl->representation(); -23376: } -23376: -23376: inline dimension_type -23376: Linear_Expression::space_dimension() const { -23376: return impl->space_dimension(); -23376: } -23376: -23376: inline void -23376: Linear_Expression::set_space_dimension(dimension_type n) { -23376: impl->set_space_dimension(n); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression::coefficient(Variable v) const { -23376: return impl->coefficient(v); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) { -23376: impl->set_coefficient(v, n); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression::inhomogeneous_term() const { -23376: return impl->inhomogeneous_term(); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) { -23376: impl->set_inhomogeneous_term(n); -23376: } -23376: -23376: inline void -23376: Linear_Expression::swap_space_dimensions(Variable v1, Variable v2) { -23376: impl->swap_space_dimensions(v1, v2); -23376: } -23376: -23376: inline void -23376: Linear_Expression::shift_space_dimensions(Variable v, dimension_type n) { -23376: impl->shift_space_dimensions(v, n); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::is_zero() const { -23376: return impl->is_zero(); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::all_homogeneous_terms_are_zero() const { -23376: return impl->all_homogeneous_terms_are_zero(); -23376: } -23376: -23376: inline const Linear_Expression& -23376: Linear_Expression::zero() { -23376: ((void) 0); -23376: return *zero_p; -23376: } -23376: -23376: inline memory_size_type -23376: Linear_Expression::external_memory_in_bytes() const { -23376: return impl->total_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Linear_Expression::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Linear_Expression& e) { -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression x = e; -23376: x += n; -23376: return x; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Linear_Expression& e, const Variable v) { -23376: Linear_Expression x = e; -23376: x += v; -23376: return x; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression x = e; -23376: x -= n; -23376: return x; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Variable v, const Variable w) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: const dimension_type w_space_dim = w.space_dimension(); -23376: const dimension_type space_dim = std::max(v_space_dim, w_space_dim); -23376: if (space_dim > Linear_Expression::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression " -23376: "PPL::operator+(v, w):\n" -23376: "v or w exceed the maximum allowed " -23376: "space dimension."); -23376: } -23376: if (v_space_dim >= w_space_dim) { -23376: Linear_Expression e(v); -23376: e -= w; -23376: return e; -23376: } -23376: else { -23376: Linear_Expression e(w.space_dimension(), true); -23376: e -= w; -23376: e += v; -23376: return e; -23376: } -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression x = e; -23376: x *= n; -23376: return x; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: *e.impl += n; -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: *e.impl -= n; -23376: return e; -23376: } -23376: -23376: inline void -23376: Linear_Expression::m_swap(Linear_Expression& y) { -23376: using std::swap; -23376: swap(impl, y.impl); -23376: } -23376: -23376: inline void -23376: Linear_Expression::normalize() { -23376: impl->normalize(); -23376: } -23376: -23376: inline void -23376: Linear_Expression::ascii_dump(std::ostream& s) const { -23376: impl->ascii_dump(s); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::ascii_load(std::istream& s) { -23376: return impl->ascii_load(s); -23376: } -23376: -23376: inline void -23376: Linear_Expression::remove_space_dimensions(const Variables_Set& vars) { -23376: impl->remove_space_dimensions(vars); -23376: } -23376: -23376: inline void -23376: Linear_Expression::permute_space_dimensions(const std::vector& cycle) { -23376: impl->permute_space_dimensions(cycle); -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: if (e1.space_dimension() >= e2.space_dimension()) { -23376: Linear_Expression e = e1; -23376: e += e2; -23376: return e; -23376: } -23376: else { -23376: Linear_Expression e = e2; -23376: e += e1; -23376: return e; -23376: } -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Variable v, const Linear_Expression& e) { -23376: return e + v; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(Coefficient_traits::const_reference n, -23376: const Linear_Expression& e) { -23376: return e + n; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator+(const Variable v, const Variable w) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: const dimension_type w_space_dim = w.space_dimension(); -23376: const dimension_type space_dim = std::max(v_space_dim, w_space_dim); -23376: if (space_dim > Linear_Expression::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression " -23376: "PPL::operator+(v, w):\n" -23376: "v or w exceed the maximum allowed " -23376: "space dimension."); -23376: } -23376: if (v_space_dim >= w_space_dim) { -23376: Linear_Expression e(v); -23376: e += w; -23376: return e; -23376: } -23376: else { -23376: Linear_Expression e(w); -23376: e += v; -23376: return e; -23376: } -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Linear_Expression& e) { -23376: Linear_Expression r(e); -23376: neg_assign(r); -23376: return r; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: if (e1.space_dimension() >= e2.space_dimension()) { -23376: Linear_Expression e = e1; -23376: e -= e2; -23376: return e; -23376: } -23376: else { -23376: Linear_Expression e = e2; -23376: neg_assign(e); -23376: e += e1; -23376: return e; -23376: } -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Variable v, const Linear_Expression& e) { -23376: Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension())); -23376: result.negate(0, e.space_dimension() + 1); -23376: result += v; -23376: return result; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(const Linear_Expression& e, const Variable v) { -23376: Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension())); -23376: result -= v; -23376: return result; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator-(Coefficient_traits::const_reference n, -23376: const Linear_Expression& e) { -23376: Linear_Expression result(e); -23376: neg_assign(result); -23376: result += n; -23376: return result; -23376: } -23376: -23376: -23376: inline Linear_Expression -23376: operator*(Coefficient_traits::const_reference n, -23376: const Linear_Expression& e) { -23376: return e * n; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator+=(Linear_Expression& e1, const Linear_Expression& e2) { -23376: *e1.impl += *e2.impl; -23376: return e1; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator+=(Linear_Expression& e, const Variable v) { -23376: *e.impl += v; -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator-=(Linear_Expression& e1, const Linear_Expression& e2) { -23376: *e1.impl -= *e2.impl; -23376: return e1; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator-=(Linear_Expression& e, const Variable v) { -23376: *e.impl -= v; -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: *e.impl *= n; -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: *e.impl /= n; -23376: return e; -23376: } -23376: -23376: -23376: inline void -23376: neg_assign(Linear_Expression& e) { -23376: e.impl->negate(); -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: add_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, -23376: const Variable v) { -23376: e.impl->add_mul_assign(n, v); -23376: return e; -23376: } -23376: -23376: -23376: inline Linear_Expression& -23376: sub_mul_assign(Linear_Expression& e, -23376: Coefficient_traits::const_reference n, -23376: const Variable v) { -23376: e.impl->sub_mul_assign(n, v); -23376: return e; -23376: } -23376: -23376: inline void -23376: add_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2) { -23376: e1.impl->add_mul_assign(factor, *e2.impl); -23376: } -23376: -23376: inline void -23376: sub_mul_assign(Linear_Expression& e1, -23376: Coefficient_traits::const_reference factor, -23376: const Linear_Expression& e2) { -23376: e1.impl->sub_mul_assign(factor, *e2.impl); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression::get(dimension_type i) const { -23376: return impl->get(i); -23376: } -23376: -23376: inline void -23376: Linear_Expression::set(dimension_type i, -23376: Coefficient_traits::const_reference n) { -23376: impl->set(i, n); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Linear_Expression::get(Variable v) const { -23376: return impl->get(v.space_dimension()); -23376: } -23376: -23376: inline void -23376: Linear_Expression::set(Variable v, -23376: Coefficient_traits::const_reference n) { -23376: impl->set(v.space_dimension(), n); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::all_zeroes(dimension_type start, dimension_type end) const { -23376: return impl->all_zeroes(start, end); -23376: } -23376: -23376: inline dimension_type -23376: Linear_Expression::num_zeroes(dimension_type start, dimension_type end) const { -23376: return impl->num_zeroes(start, end); -23376: } -23376: -23376: inline Coefficient -23376: Linear_Expression::gcd(dimension_type start, dimension_type end) const { -23376: return impl->gcd(start, end); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::exact_div_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end) { -23376: impl->exact_div_assign(c, start, end); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::mul_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end) { -23376: impl->mul_assign(c, start, end); -23376: } -23376: -23376: inline void -23376: Linear_Expression::sign_normalize() { -23376: impl->sign_normalize(); -23376: } -23376: -23376: inline void -23376: Linear_Expression::negate(dimension_type first, dimension_type last) { -23376: impl->negate(first, last); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::all_zeroes(const Variables_Set& vars) const { -23376: return impl->all_zeroes(vars); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, -23376: dimension_type end) const { -23376: return impl->all_zeroes_except(vars, start, end); -23376: } -23376: -23376: inline dimension_type -23376: Linear_Expression::last_nonzero() const { -23376: return impl->last_nonzero(); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y) const { -23376: scalar_product_assign(result, y, 0, space_dimension() + 1); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y, -23376: dimension_type start, dimension_type end) const { -23376: impl->scalar_product_assign(result, *(y.impl), start, end); -23376: } -23376: -23376: inline int -23376: Linear_Expression -23376: ::scalar_product_sign(const Linear_Expression& y) const { -23376: return scalar_product_sign(y, 0, space_dimension() + 1); -23376: } -23376: -23376: inline int -23376: Linear_Expression -23376: ::scalar_product_sign(const Linear_Expression& y, -23376: dimension_type start, dimension_type end) const { -23376: return impl->scalar_product_sign(*(y.impl), start, end); -23376: } -23376: -23376: inline dimension_type -23376: Linear_Expression -23376: ::first_nonzero(dimension_type first, dimension_type last) const { -23376: return impl->first_nonzero(first, last); -23376: } -23376: -23376: inline dimension_type -23376: Linear_Expression -23376: ::last_nonzero(dimension_type first, dimension_type last) const { -23376: return impl->last_nonzero(first, last); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::has_a_free_dimension_helper(std::set& x) const { -23376: return impl->has_a_free_dimension_helper(x); -23376: } -23376: -23376: inline bool -23376: Linear_Expression -23376: ::is_equal_to(const Linear_Expression& x, -23376: dimension_type start, dimension_type end) const { -23376: return impl->is_equal_to(*(x.impl), start, end); -23376: } -23376: -23376: inline bool -23376: Linear_Expression -23376: ::is_equal_to(const Linear_Expression& x, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: return impl->is_equal_to(*(x.impl), c1, c2, start, end); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::get_row(Dense_Row& r) const { -23376: return impl->get_row(r); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::get_row(Sparse_Row& r) const { -23376: return impl->get_row(r); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::linear_combine(const Linear_Expression& y, dimension_type i) { -23376: impl->linear_combine(*y.impl, i); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::linear_combine(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: impl->linear_combine(*y.impl, c1, c2); -23376: } -23376: -23376: inline void -23376: Linear_Expression -23376: ::linear_combine_lax(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: impl->linear_combine_lax(*y.impl, c1, c2); -23376: } -23376: -23376: inline int -23376: compare(const Linear_Expression& x, const Linear_Expression& y) { -23376: return x.impl->compare(*y.impl); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::is_equal_to(const Linear_Expression& x) const { -23376: return impl->is_equal_to(*x.impl); -23376: } -23376: -23376: inline void -23376: Linear_Expression::linear_combine(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, -23376: dimension_type end) { -23376: impl->linear_combine(*y.impl, c1, c2, start, end); -23376: } -23376: -23376: inline void -23376: Linear_Expression::linear_combine_lax(const Linear_Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, -23376: dimension_type end) { -23376: impl->linear_combine_lax(*y.impl, c1, c2, start, end); -23376: } -23376: -23376: inline bool -23376: Linear_Expression -23376: ::have_a_common_variable(const Linear_Expression& x, -23376: Variable first, Variable last) const { -23376: return impl->have_a_common_variable(*(x.impl), first, last); -23376: } -23376: -23376: inline -23376: Linear_Expression::const_iterator -23376: ::const_iterator() -23376: : itr( -23376: # 624 "../../src/Linear_Expression_inlines.hh" 3 4 -23376: __null -23376: # 624 "../../src/Linear_Expression_inlines.hh" -23376: ) { -23376: } -23376: -23376: inline -23376: Linear_Expression::const_iterator -23376: ::const_iterator(const const_iterator& i) -23376: : itr(i.itr->clone()) { -23376: } -23376: -23376: inline -23376: Linear_Expression::const_iterator -23376: ::~const_iterator() { -23376: -23376: delete itr; -23376: } -23376: -23376: inline void -23376: Linear_Expression::const_iterator::m_swap(const_iterator& i) { -23376: using std::swap; -23376: swap(itr, i.itr); -23376: } -23376: -23376: inline Linear_Expression::const_iterator& -23376: Linear_Expression::const_iterator -23376: ::operator=(const const_iterator& i) { -23376: const_iterator tmp = i; -23376: using std::swap; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline Linear_Expression::const_iterator& -23376: Linear_Expression::const_iterator -23376: ::operator++() { -23376: ((void) 0); -23376: ++(*itr); -23376: return *this; -23376: } -23376: -23376: inline Linear_Expression::const_iterator& -23376: Linear_Expression::const_iterator -23376: ::operator--() { -23376: ((void) 0); -23376: --(*itr); -23376: return *this; -23376: } -23376: -23376: inline Linear_Expression::const_iterator::reference -23376: Linear_Expression::const_iterator -23376: ::operator*() const { -23376: ((void) 0); -23376: return *(*itr); -23376: } -23376: -23376: inline Variable -23376: Linear_Expression::const_iterator -23376: ::variable() const { -23376: ((void) 0); -23376: return itr->variable(); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::const_iterator -23376: ::operator==(const const_iterator& i) const { -23376: ((void) 0); -23376: ((void) 0); -23376: return *itr == *(i.itr); -23376: } -23376: -23376: inline bool -23376: Linear_Expression::const_iterator -23376: ::operator!=(const const_iterator& i) const { -23376: return !(*this == i); -23376: } -23376: -23376: inline -23376: Linear_Expression::const_iterator -23376: ::const_iterator(Linear_Expression_Interface::const_iterator_interface* i) -23376: : itr(i) { -23376: ((void) 0); -23376: } -23376: -23376: inline Linear_Expression::const_iterator -23376: Linear_Expression -23376: ::begin() const { -23376: return const_iterator(impl->begin()); -23376: } -23376: -23376: inline Linear_Expression::const_iterator -23376: Linear_Expression -23376: ::end() const { -23376: return const_iterator(impl->end()); -23376: } -23376: -23376: inline Linear_Expression::const_iterator -23376: Linear_Expression -23376: ::lower_bound(Variable v) const { -23376: return const_iterator(impl->lower_bound(v)); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression -23376: ::Linear_Expression(const LE_Adapter& e, -23376: typename Enable_If::value, -23376: void*>::type) -23376: : impl( -23376: # 731 "../../src/Linear_Expression_inlines.hh" 3 4 -23376: __null -23376: # 731 "../../src/Linear_Expression_inlines.hh" -23376: ) { -23376: Linear_Expression tmp(e.representation()); -23376: tmp.set_space_dimension(e.space_dimension()); -23376: tmp.set_inhomogeneous_term(e.inhomogeneous_term()); -23376: for (typename LE_Adapter::const_iterator i = e.begin(), -23376: i_end = e.end(); i != i_end; ++i) { -23376: add_mul_assign(tmp, *i, i.variable()); -23376: } -23376: using std::swap; -23376: swap(impl, tmp.impl); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression -23376: ::Linear_Expression(const LE_Adapter& e, -23376: Representation r, -23376: typename Enable_If::value, -23376: void*>::type) -23376: : impl( -23376: # 751 "../../src/Linear_Expression_inlines.hh" 3 4 -23376: __null -23376: # 751 "../../src/Linear_Expression_inlines.hh" -23376: ) { -23376: Linear_Expression tmp(r); -23376: tmp.set_space_dimension(e.space_dimension()); -23376: tmp.set_inhomogeneous_term(e.inhomogeneous_term()); -23376: for (typename LE_Adapter::const_iterator i = e.begin(), -23376: i_end = e.end(); i != i_end; ++i) { -23376: add_mul_assign(tmp, *i, i.variable()); -23376: } -23376: using std::swap; -23376: swap(impl, tmp.impl); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression -23376: ::Linear_Expression(const LE_Adapter& e, -23376: dimension_type space_dim, -23376: typename Enable_If::value, -23376: void*>::type) -23376: : impl( -23376: # 771 "../../src/Linear_Expression_inlines.hh" 3 4 -23376: __null -23376: # 771 "../../src/Linear_Expression_inlines.hh" -23376: ) { -23376: Linear_Expression tmp(e.representation()); -23376: tmp.set_space_dimension(space_dim); -23376: tmp.set_inhomogeneous_term(e.inhomogeneous_term()); -23376: typedef typename LE_Adapter::const_iterator itr_t; -23376: itr_t i_end; -23376: if (space_dim <= e.space_dimension()) { -23376: i_end = e.lower_bound(Variable(space_dim)); -23376: } -23376: else { -23376: i_end = e.end(); -23376: } -23376: for (itr_t i = e.begin(); i != i_end; ++i) { -23376: add_mul_assign(tmp, *i, i.variable()); -23376: } -23376: using std::swap; -23376: swap(impl, tmp.impl); -23376: } -23376: -23376: template -23376: inline -23376: Linear_Expression -23376: ::Linear_Expression(const LE_Adapter& e, -23376: dimension_type space_dim, -23376: Representation r, -23376: typename Enable_If::value, -23376: void*>::type) -23376: : impl( -23376: # 799 "../../src/Linear_Expression_inlines.hh" 3 4 -23376: __null -23376: # 799 "../../src/Linear_Expression_inlines.hh" -23376: ) { -23376: Linear_Expression tmp(r); -23376: tmp.set_space_dimension(space_dim); -23376: tmp.set_inhomogeneous_term(e.inhomogeneous_term()); -23376: typedef typename LE_Adapter::const_iterator itr_t; -23376: itr_t i_end; -23376: if (space_dim <= e.space_dimension()) { -23376: i_end = e.lower_bound(Variable(space_dim)); -23376: } -23376: else { -23376: i_end = e.end(); -23376: } -23376: for (itr_t i = e.begin(); i != i_end; ++i) { -23376: add_mul_assign(tmp, *i, i.variable()); -23376: } -23376: using std::swap; -23376: swap(impl, tmp.impl); -23376: } -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: inline std::ostream& -23376: operator<<(std::ostream& s, const Linear_Expression& e) { -23376: e.impl->print(s); -23376: return s; -23376: } -23376: -23376: } -23376: -23376: -23376: inline void -23376: swap(Linear_Expression& x, Linear_Expression& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: -23376: inline void -23376: swap(Linear_Expression::const_iterator& x, -23376: Linear_Expression::const_iterator& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 946 "../../src/Linear_Expression_defs.hh" 2 -23376: # 37 "../../src/Constraint_defs.hh" 2 -23376: -23376: # 1 "../../src/Topology_types.hh" 1 -23376: # 16 "../../src/Topology_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: enum Topology { -23376: NECESSARILY_CLOSED = 0, -23376: NOT_NECESSARILY_CLOSED = 1 -23376: }; -23376: -23376: } -23376: # 39 "../../src/Constraint_defs.hh" 2 -23376: # 1 "../../src/Expression_Hide_Last_defs.hh" 1 -23376: # 36 "../../src/Expression_Hide_Last_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Expression_Hide_Last -23376: : public Expression_Adapter { -23376: typedef Expression_Adapter base_type; -23376: public: -23376: -23376: typedef Expression_Hide_Last const_reference; -23376: -23376: typedef typename base_type::inner_type inner_type; -23376: -23376: typedef typename base_type::raw_type raw_type; -23376: -23376: -23376: typedef typename base_type::const_iterator const_iterator; -23376: -23376: -23376: explicit Expression_Hide_Last(const raw_type& expr, bool hide_last); -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: -23376: const_iterator lower_bound(Variable v) const; -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: bool is_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_homogeneous_terms_are_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(const Variables_Set& vars) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: dimension_type num_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: Coefficient gcd(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: dimension_type last_nonzero() const; -23376: -23376: -23376: -23376: dimension_type last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: dimension_type first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void has_a_free_dimension_helper(std::set& x) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void get_row(Dense_Row& r) const; -23376: -23376: -23376: void get_row(Sparse_Row& r) const; -23376: -23376: -23376: -23376: template -23376: bool have_a_common_variable(const Expression& y, -23376: Variable first, Variable last) const; -23376: -23376: private: -23376: -23376: const bool hide_last_; -23376: }; -23376: -23376: # 1 "../../src/Expression_Hide_Last_inlines.hh" 1 -23376: # 29 "../../src/Expression_Hide_Last_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Expression_Hide_Last::Expression_Hide_Last(const raw_type& expr, -23376: const bool hide_last) -23376: : base_type(expr), hide_last_(hide_last) { -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Last::space_dimension() const { -23376: dimension_type dim = this->inner().space_dimension(); -23376: if (hide_last_) { -23376: ((void) 0); -23376: --dim; -23376: } -23376: return dim; -23376: } -23376: -23376: template -23376: inline typename Expression_Hide_Last::const_iterator -23376: Expression_Hide_Last::end() const { -23376: if (hide_last_) { -23376: return this->inner().lower_bound(Variable(space_dimension())); -23376: } -23376: else { -23376: return this->inner().end(); -23376: } -23376: } -23376: -23376: template -23376: inline typename Expression_Hide_Last::const_iterator -23376: Expression_Hide_Last::lower_bound(Variable v) const { -23376: ((void) 0); -23376: return this->inner().lower_bound(v); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Last::coefficient(Variable v) const { -23376: ((void) 0); -23376: return this->inner().coefficient(v); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Last::is_zero() const { -23376: return this->inner().all_zeroes(0, space_dimension() + 1); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Last::all_homogeneous_terms_are_zero() const { -23376: return this->inner().all_zeroes(1, space_dimension() + 1); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Last -23376: ::is_equal_to(const Expression& y) const { -23376: const dimension_type x_dim = space_dimension(); -23376: const dimension_type y_dim = y.space_dimension(); -23376: if (x_dim != y_dim) { -23376: return false; -23376: } -23376: return is_equal_to(y, 0, x_dim + 1); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Last::all_zeroes(const Variables_Set& vars) const { -23376: ((void) 0); -23376: return this->inner().all_zeroes(vars); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Last::get(dimension_type i) const { -23376: ((void) 0); -23376: return this->inner().get(i); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Last::get(Variable v) const { -23376: ((void) 0); -23376: return this->inner().get(v); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Last::all_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: ((void) 0); -23376: return this->inner().all_zeroes(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Last::num_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: ((void) 0); -23376: return this->inner().num_zeroes(start, end); -23376: } -23376: -23376: template -23376: inline Coefficient -23376: Expression_Hide_Last::gcd(dimension_type start, -23376: dimension_type end) const { -23376: ((void) 0); -23376: return this->inner().gcd(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Last::last_nonzero() const { -23376: return this->inner().last_nonzero(0, space_dimension() + 1); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Last::last_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: ((void) 0); -23376: return this->inner().last_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Last::first_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: ((void) 0); -23376: return this->inner().first_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Last -23376: ::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const { -23376: ((void) 0); -23376: return this->inner().all_zeroes_except(vars, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Last -23376: ::has_a_free_dimension_helper(std::set& x) const { -23376: if (x.empty()) { -23376: return; -23376: } -23376: ((void) 0); -23376: this->inner().has_a_free_dimension_helper(x); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Last -23376: ::is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const { -23376: ((void) 0); -23376: ((void) 0); -23376: return this->inner().is_equal_to(y, start, end); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Last -23376: ::is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: ((void) 0); -23376: ((void) 0); -23376: return this->inner().is_equal_to(y, c1, c2, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Last::get_row(Dense_Row& r) const { -23376: this->inner().get_row(r); -23376: if (hide_last_) { -23376: ((void) 0); -23376: r.resize(r.size() - 1); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Last::get_row(Sparse_Row& r) const { -23376: this->inner().get_row(r); -23376: if (hide_last_) { -23376: ((void) 0); -23376: r.resize(r.size() - 1); -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Last -23376: ::have_a_common_variable(const Expression& y, -23376: Variable first, Variable last) const { -23376: ((void) 0); -23376: ((void) 0); -23376: return this->inner().have_a_common_variable(y, first, last); -23376: } -23376: -23376: } -23376: # 164 "../../src/Expression_Hide_Last_defs.hh" 2 -23376: # 40 "../../src/Constraint_defs.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: Constraint -23376: operator<(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Constraint -23376: operator<(Variable v1, Variable v2); -23376: -23376: -23376: -23376: Constraint -23376: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Constraint -23376: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Constraint -23376: operator>(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Constraint -23376: operator>(Variable v1, Variable v2); -23376: -23376: -23376: -23376: Constraint -23376: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Constraint -23376: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Constraint -23376: operator==(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Constraint -23376: operator==(Variable v1, Variable v2); -23376: -23376: -23376: -23376: Constraint -23376: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Constraint -23376: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Constraint -23376: operator<=(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Constraint -23376: operator<=(Variable v1, Variable v2); -23376: -23376: -23376: -23376: Constraint -23376: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Constraint -23376: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: -23376: -23376: Constraint -23376: operator>=(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Constraint -23376: operator>=(Variable v1, Variable v2); -23376: -23376: -23376: -23376: Constraint -23376: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: Constraint -23376: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: # 182 "../../src/Constraint_defs.hh" -23376: int compare(const Constraint& x, const Constraint& y); -23376: -23376: } -23376: # 284 "../../src/Constraint_defs.hh" -23376: class Parma_Polyhedra_Library::Constraint { -23376: public: -23376: -23376: -23376: enum Type { -23376: -23376: EQUALITY, -23376: -23376: NONSTRICT_INEQUALITY, -23376: -23376: STRICT_INEQUALITY -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Constraint(Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint(const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint(const Constraint& c, dimension_type space_dim); -23376: -23376: -23376: Constraint(const Constraint& c, Representation r); -23376: -23376: -23376: Constraint(const Constraint& c, dimension_type space_dim, -23376: Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit Constraint(const Congruence& cg, -23376: Representation r = default_representation); -23376: -23376: -23376: ~Constraint(); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: Constraint& operator=(const Constraint& c); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: # 371 "../../src/Constraint_defs.hh" -23376: bool remove_space_dimensions(const Variables_Set& vars); -23376: # 385 "../../src/Constraint_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: -23376: -23376: Type type() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_equality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_inequality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_nonstrict_inequality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_strict_inequality() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: static const Constraint& zero_dim_false(); -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint& zero_dim_positivity(); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: # 463 "../../src/Constraint_defs.hh" -23376: bool is_tautological() const; -23376: # 477 "../../src/Constraint_defs.hh" -23376: bool is_inconsistent() const; -23376: # 487 "../../src/Constraint_defs.hh" -23376: bool is_equivalent_to(const Constraint& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_to(const Constraint& y) const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: void m_swap(Constraint& y); -23376: -23376: -23376: static const Constraint& epsilon_geq_zero(); -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint& epsilon_leq_one(); -23376: -23376: -23376: typedef Expression_Hide_Last expr_type; -23376: -23376: expr_type expression() const; -23376: -23376: private: -23376: -23376: -23376: enum Kind { -23376: LINE_OR_EQUALITY = 0, -23376: RAY_OR_POINT_OR_INEQUALITY = 1 -23376: }; -23376: -23376: Linear_Expression expr; -23376: -23376: Kind kind_; -23376: -23376: Topology topology_; -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint* zero_dim_false_p; -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint* zero_dim_positivity_p; -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint* epsilon_geq_zero_p; -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint* epsilon_leq_one_p; -23376: -23376: -23376: Constraint(dimension_type space_dim, Kind kind, Topology topology, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint(Linear_Expression& e, Kind kind, Topology topology); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint(Linear_Expression& e, Type type, Topology topology); -23376: -23376: -23376: -23376: -23376: -23376: bool is_line_or_equality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_ray_or_point_or_inequality() const; -23376: -23376: -23376: void set_is_line_or_equality(); -23376: -23376: -23376: void set_is_ray_or_point_or_inequality(); -23376: -23376: -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_not_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_topology(Topology x); -23376: -23376: -23376: void set_necessarily_closed(); -23376: -23376: -23376: void set_not_necessarily_closed(); -23376: # 642 "../../src/Constraint_defs.hh" -23376: void set_space_dimension_no_ok(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_invalid_argument(const char* method, const char* message) const; -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_dimension_incompatible(const char* method, -23376: const char* name_var, -23376: Variable v) const; -23376: -23376: -23376: Coefficient_traits::const_reference epsilon_coefficient() const; -23376: -23376: -23376: void set_epsilon_coefficient(Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_not_necessarily_closed(); -23376: -23376: -23376: void set_is_equality(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_is_inequality(); -23376: # 703 "../../src/Constraint_defs.hh" -23376: void linear_combine(const Constraint& y, dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void strong_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: bool check_strong_normalized() const; -23376: -23376: -23376: -23376: -23376: -23376: static Constraint construct_epsilon_geq_zero(); -23376: -23376: friend int -23376: compare(const Constraint& x, const Constraint& y); -23376: -23376: friend class Linear_System; -23376: friend class Constraint_System; -23376: friend class Polyhedron; -23376: friend class Scalar_Products; -23376: friend class Topology_Adjusted_Scalar_Product_Sign; -23376: friend class Termination_Helpers; -23376: friend class Grid; -23376: template -23376: friend class Octagonal_Shape; -23376: -23376: friend Constraint -23376: operator<(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: friend Constraint -23376: operator<(Variable v1, Variable v2); -23376: -23376: friend Constraint -23376: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Constraint -23376: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: friend Constraint -23376: operator>(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: friend Constraint -23376: operator>(Variable v1, Variable v2); -23376: -23376: friend Constraint -23376: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Constraint -23376: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: friend Constraint -23376: operator==(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: friend Constraint -23376: operator==(Variable v1, Variable v2); -23376: -23376: friend Constraint -23376: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Constraint -23376: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: friend Constraint -23376: operator<=(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: friend Constraint -23376: operator<=(Variable v1, Variable v2); -23376: -23376: friend Constraint -23376: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Constraint -23376: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: -23376: friend Constraint -23376: operator>=(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: friend Constraint -23376: operator>=(Variable v1, Variable v2); -23376: -23376: friend Constraint -23376: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: -23376: friend Constraint -23376: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e); -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Constraint& c); -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Constraint::Type& t); -23376: -23376: } -23376: -23376: -23376: -23376: bool -23376: operator==(const Constraint& x, const Constraint& y); -23376: -23376: -23376: -23376: bool -23376: operator!=(const Constraint& x, const Constraint& y); -23376: -23376: -23376: void swap(Constraint& x, Constraint& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Constraint_inlines.hh" 1 -23376: # 29 "../../src/Constraint_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline bool -23376: Constraint::is_necessarily_closed() const { -23376: return (topology_ == NECESSARILY_CLOSED); -23376: } -23376: -23376: inline bool -23376: Constraint::is_not_necessarily_closed() const { -23376: return !is_necessarily_closed(); -23376: } -23376: -23376: inline Constraint::expr_type -23376: Constraint::expression() const { -23376: return expr_type(expr, is_not_necessarily_closed()); -23376: } -23376: -23376: inline dimension_type -23376: Constraint::space_dimension() const { -23376: return expression().space_dimension(); -23376: } -23376: -23376: inline void -23376: Constraint::shift_space_dimensions(Variable v, dimension_type n) { -23376: expr.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline bool -23376: Constraint::is_line_or_equality() const { -23376: return (kind_ == LINE_OR_EQUALITY); -23376: } -23376: -23376: inline bool -23376: Constraint::is_ray_or_point_or_inequality() const { -23376: return (kind_ == RAY_OR_POINT_OR_INEQUALITY); -23376: } -23376: -23376: inline Topology -23376: Constraint::topology() const { -23376: return topology_; -23376: } -23376: -23376: inline void -23376: Constraint::set_is_line_or_equality() { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: -23376: inline void -23376: Constraint::set_is_ray_or_point_or_inequality() { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: -23376: inline void -23376: Constraint::set_topology(Topology x) { -23376: if (topology() == x) { -23376: return; -23376: } -23376: if (topology() == NECESSARILY_CLOSED) { -23376: -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: else { -23376: ((void) 0); -23376: expr.set_space_dimension(expr.space_dimension() - 1); -23376: } -23376: topology_ = x; -23376: } -23376: -23376: inline void -23376: Constraint::mark_as_necessarily_closed() { -23376: ((void) 0); -23376: topology_ = NECESSARILY_CLOSED; -23376: } -23376: -23376: inline void -23376: Constraint::mark_as_not_necessarily_closed() { -23376: ((void) 0); -23376: topology_ = NOT_NECESSARILY_CLOSED; -23376: } -23376: -23376: inline void -23376: Constraint::set_necessarily_closed() { -23376: set_topology(NECESSARILY_CLOSED); -23376: } -23376: -23376: inline void -23376: Constraint::set_not_necessarily_closed() { -23376: set_topology(NOT_NECESSARILY_CLOSED); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(Representation r) -23376: : expr(r), -23376: kind_(RAY_OR_POINT_OR_INEQUALITY), -23376: topology_(NECESSARILY_CLOSED) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(dimension_type space_dim, Kind kind, Topology topology, -23376: Representation r) -23376: : expr(r), -23376: kind_(kind), -23376: topology_(topology) { -23376: expr.set_space_dimension(space_dim + 1); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(Linear_Expression& e, Kind kind, Topology topology) -23376: : kind_(kind), -23376: topology_(topology) { -23376: ((void) 0); -23376: swap(expr, e); -23376: if (topology == NOT_NECESSARILY_CLOSED) { -23376: -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: strong_normalize(); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(Linear_Expression& e, Type type, Topology topology) -23376: : topology_(topology) { -23376: ((void) 0); -23376: swap(expr, e); -23376: if (topology == NOT_NECESSARILY_CLOSED) { -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: if (type == EQUALITY) { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: else { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: strong_normalize(); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(const Constraint& c) -23376: : expr(c.expr), -23376: kind_(c.kind_), -23376: topology_(c.topology_) { -23376: -23376: } -23376: -23376: inline -23376: Constraint::Constraint(const Constraint& c, Representation r) -23376: : expr(c.expr, r), -23376: kind_(c.kind_), -23376: topology_(c.topology_) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(const Constraint& c, const dimension_type space_dim) -23376: : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1)), -23376: kind_(c.kind_), topology_(c.topology_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::Constraint(const Constraint& c, const dimension_type space_dim, -23376: Representation r) -23376: : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1), r), -23376: kind_(c.kind_), topology_(c.topology_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Constraint::~Constraint() { -23376: } -23376: -23376: inline Constraint& -23376: Constraint::operator=(const Constraint& c) { -23376: Constraint tmp = c; -23376: swap(*this, tmp); -23376: -23376: return *this; -23376: } -23376: -23376: inline Representation -23376: Constraint::representation() const { -23376: return expr.representation(); -23376: } -23376: -23376: inline void -23376: Constraint::set_representation(Representation r) { -23376: expr.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Constraint::max_space_dimension() { -23376: return Linear_Expression::max_space_dimension(); -23376: } -23376: -23376: inline void -23376: Constraint::set_space_dimension_no_ok(dimension_type space_dim) { -23376: const dimension_type old_expr_space_dim = expr.space_dimension(); -23376: if (topology() == NECESSARILY_CLOSED) { -23376: expr.set_space_dimension(space_dim); -23376: } -23376: else { -23376: const dimension_type old_space_dim = space_dimension(); -23376: if (space_dim > old_space_dim) { -23376: expr.set_space_dimension(space_dim + 1); -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: } -23376: else { -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: expr.set_space_dimension(space_dim + 1); -23376: } -23376: } -23376: ((void) 0); -23376: if (expr.space_dimension() < old_expr_space_dim) { -23376: strong_normalize(); -23376: } -23376: } -23376: -23376: inline void -23376: Constraint::set_space_dimension(dimension_type space_dim) { -23376: set_space_dimension_no_ok(space_dim); -23376: ((void) 0); -23376: } -23376: -23376: inline bool -23376: Constraint::remove_space_dimensions(const Variables_Set& vars) { -23376: expr.remove_space_dimensions(vars); -23376: return true; -23376: } -23376: -23376: inline bool -23376: Constraint::is_equality() const { -23376: return is_line_or_equality(); -23376: } -23376: -23376: inline bool -23376: Constraint::is_inequality() const { -23376: return is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline Constraint::Type -23376: Constraint::type() const { -23376: if (is_equality()) { -23376: return EQUALITY; -23376: } -23376: if (is_necessarily_closed()) { -23376: return NONSTRICT_INEQUALITY; -23376: } -23376: if (epsilon_coefficient() < 0) { -23376: return STRICT_INEQUALITY; -23376: } -23376: else { -23376: return NONSTRICT_INEQUALITY; -23376: } -23376: } -23376: -23376: inline bool -23376: Constraint::is_nonstrict_inequality() const { -23376: return type() == NONSTRICT_INEQUALITY; -23376: } -23376: -23376: inline bool -23376: Constraint::is_strict_inequality() const { -23376: return type() == STRICT_INEQUALITY; -23376: } -23376: -23376: inline void -23376: Constraint::set_is_equality() { -23376: set_is_line_or_equality(); -23376: } -23376: -23376: inline void -23376: Constraint::set_is_inequality() { -23376: set_is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Constraint::coefficient(const Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("coefficient(v)", "v", v); -23376: } -23376: return expr.coefficient(v); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Constraint::inhomogeneous_term() const { -23376: return expr.inhomogeneous_term(); -23376: } -23376: -23376: inline memory_size_type -23376: Constraint::external_memory_in_bytes() const { -23376: return expr.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Constraint::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline void -23376: Constraint::strong_normalize() { -23376: expr.normalize(); -23376: sign_normalize(); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Constraint& x, const Constraint& y) { -23376: return x.is_equivalent_to(y); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Constraint& x, const Constraint& y) { -23376: return !x.is_equivalent_to(y); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator==(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: Linear_Expression diff(e1, -23376: std::max(e1.space_dimension(), e2.space_dimension()), -23376: Constraint::default_representation); -23376: diff -= e2; -23376: return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator==(Variable v1, Variable v2) { -23376: if (v1.space_dimension() > v2.space_dimension()) { -23376: swap(v1, v2); -23376: } -23376: ((void) 0); -23376: -23376: Linear_Expression diff(v1, Constraint::default_representation); -23376: diff -= v2; -23376: return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>=(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: Linear_Expression diff(e1, -23376: std::max(e1.space_dimension(), e2.space_dimension()), -23376: Constraint::default_representation); -23376: diff -= e2; -23376: return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>=(const Variable v1, const Variable v2) { -23376: Linear_Expression diff(Constraint::default_representation); -23376: diff.set_space_dimension(std::max(v1.space_dimension(), -23376: v2.space_dimension())); -23376: diff += v1; -23376: diff -= v2; -23376: return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: Linear_Expression diff(e1, Constraint::default_representation); -23376: diff -= e2; -23376: Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED); -23376: -23376: -23376: c.set_epsilon_coefficient(-1); -23376: ((void) 0); -23376: -23376: return c; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>(const Variable v1, const Variable v2) { -23376: Linear_Expression diff(Constraint::default_representation); -23376: diff.set_space_dimension(std::max(v1.space_dimension(), -23376: v2.space_dimension())); -23376: diff += v1; -23376: diff -= v2; -23376: Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED); -23376: -23376: c.set_epsilon_coefficient(-1); -23376: ((void) 0); -23376: -23376: return c; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: neg_assign(diff); -23376: diff += n; -23376: return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: neg_assign(diff); -23376: diff += n; -23376: return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: neg_assign(diff); -23376: diff += n; -23376: Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED); -23376: -23376: -23376: c.set_epsilon_coefficient(-1); -23376: ((void) 0); -23376: -23376: return c; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: diff -= n; -23376: return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: diff -= n; -23376: return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED); -23376: } -23376: -23376: -23376: inline Constraint -23376: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: Linear_Expression diff(e, Constraint::default_representation); -23376: diff -= n; -23376: Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED); -23376: -23376: -23376: c.set_epsilon_coefficient(-1); -23376: ((void) 0); -23376: -23376: return c; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<=(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: return e2 >= e1; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<=(const Variable v1, const Variable v2) { -23376: return v2 >= v1; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e) { -23376: return e >= n; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: return n >= e; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: return e2 > e1; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<(const Variable v1, const Variable v2) { -23376: return v2 > v1; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e) { -23376: return e > n; -23376: } -23376: -23376: -23376: inline Constraint -23376: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: return n > e; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint::zero_dim_false() { -23376: ((void) 0); -23376: return *zero_dim_false_p; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint::zero_dim_positivity() { -23376: ((void) 0); -23376: return *zero_dim_positivity_p; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint::epsilon_geq_zero() { -23376: ((void) 0); -23376: return *epsilon_geq_zero_p; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint::epsilon_leq_one() { -23376: ((void) 0); -23376: return *epsilon_leq_one_p; -23376: } -23376: -23376: inline void -23376: Constraint::m_swap(Constraint& y) { -23376: using std::swap; -23376: swap(expr, y.expr); -23376: swap(kind_, y.kind_); -23376: swap(topology_, y.topology_); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Constraint::epsilon_coefficient() const { -23376: ((void) 0); -23376: return expr.coefficient(Variable(expr.space_dimension() - 1)); -23376: } -23376: -23376: inline void -23376: Constraint::set_epsilon_coefficient(Coefficient_traits::const_reference n) { -23376: ((void) 0); -23376: expr.set_coefficient(Variable(expr.space_dimension() - 1), n); -23376: } -23376: -23376: -23376: inline void -23376: swap(Constraint& x, Constraint& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 835 "../../src/Constraint_defs.hh" 2 -23376: # 31 "../../src/Linear_Expression_Impl_templates.hh" 2 -23376: # 1 "../../src/Generator_defs.hh" 1 -23376: # 31 "../../src/Generator_defs.hh" -23376: # 1 "../../src/Generator_System_types.hh" 1 -23376: # 16 "../../src/Generator_System_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Generator_System; -23376: class Generator_System_const_iterator; -23376: -23376: } -23376: # 32 "../../src/Generator_defs.hh" 2 -23376: -23376: -23376: -23376: # 1 "../../src/Grid_Generator_System_types.hh" 1 -23376: # 16 "../../src/Grid_Generator_System_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Grid_Generator_System; -23376: -23376: } -23376: # 36 "../../src/Generator_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "../../src/distances_defs.hh" 1 -23376: # 27 "../../src/distances_defs.hh" -23376: # 1 "../../src/distances_types.hh" 1 -23376: # 16 "../../src/distances_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: struct Rectilinear_Distance_Specialization; -23376: -23376: template -23376: struct Euclidean_Distance_Specialization; -23376: -23376: template -23376: struct L_Infinity_Distance_Specialization; -23376: -23376: } -23376: # 28 "../../src/distances_defs.hh" 2 -23376: -23376: -23376: template -23376: struct Parma_Polyhedra_Library::Rectilinear_Distance_Specialization { -23376: static void combine(Temp& running, const Temp& current, Rounding_Dir dir); -23376: -23376: static void finalize(Temp&, Rounding_Dir); -23376: }; -23376: -23376: template -23376: struct Parma_Polyhedra_Library::Euclidean_Distance_Specialization { -23376: static void combine(Temp& running, Temp& current, Rounding_Dir dir); -23376: -23376: static void finalize(Temp& running, Rounding_Dir dir); -23376: }; -23376: -23376: -23376: template -23376: struct Parma_Polyhedra_Library::L_Infinity_Distance_Specialization { -23376: static void combine(Temp& running, const Temp& current, Rounding_Dir); -23376: -23376: static void finalize(Temp&, Rounding_Dir); -23376: }; -23376: -23376: # 1 "../../src/distances_inlines.hh" 1 -23376: # 29 "../../src/distances_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: template -23376: struct maybe_assign_struct { -23376: static inline Result -23376: function(const To*& top, To& tmp, const From& from, Rounding_Dir dir) { -23376: -23376: -23376: top = &tmp; -23376: return assign_r(tmp, from, dir); -23376: } -23376: }; -23376: -23376: template -23376: struct maybe_assign_struct { -23376: static inline Result -23376: function(const Type*& top, Type&, const Type& from, Rounding_Dir) { -23376: -23376: top = &from; -23376: return V_EQ; -23376: } -23376: }; -23376: # 62 "../../src/distances_inlines.hh" -23376: template -23376: inline Result -23376: maybe_assign(const To*& top, To& tmp, const From& from, Rounding_Dir dir) { -23376: return maybe_assign_struct::function(top, tmp, from, dir); -23376: } -23376: -23376: template -23376: inline void -23376: Rectilinear_Distance_Specialization::combine(Temp& running, -23376: const Temp& current, -23376: Rounding_Dir dir) { -23376: add_assign_r(running, running, current, dir); -23376: } -23376: -23376: template -23376: inline void -23376: Rectilinear_Distance_Specialization::finalize(Temp&, Rounding_Dir) { -23376: } -23376: -23376: template -23376: inline void -23376: Euclidean_Distance_Specialization::combine(Temp& running, -23376: Temp& current, -23376: Rounding_Dir dir) { -23376: mul_assign_r(current, current, current, dir); -23376: add_assign_r(running, running, current, dir); -23376: } -23376: -23376: template -23376: inline void -23376: Euclidean_Distance_Specialization::finalize(Temp& running, -23376: Rounding_Dir dir) { -23376: sqrt_assign_r(running, running, dir); -23376: } -23376: -23376: template -23376: inline void -23376: L_Infinity_Distance_Specialization::combine(Temp& running, -23376: const Temp& current, -23376: Rounding_Dir) { -23376: if (current > running) { -23376: running = current; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: L_Infinity_Distance_Specialization::finalize(Temp&, Rounding_Dir) { -23376: } -23376: -23376: } -23376: # 53 "../../src/distances_defs.hh" 2 -23376: # 43 "../../src/Generator_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/Expression_Hide_Inhomo_defs.hh" 1 -23376: # 41 "../../src/Expression_Hide_Inhomo_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Expression_Hide_Inhomo -23376: : public Expression_Adapter { -23376: typedef Expression_Adapter base_type; -23376: public: -23376: -23376: typedef Expression_Hide_Inhomo const_reference; -23376: -23376: typedef typename base_type::inner_type inner_type; -23376: -23376: typedef typename base_type::raw_type raw_type; -23376: -23376: -23376: explicit Expression_Hide_Inhomo(const raw_type& expr); -23376: -23376: public: -23376: -23376: typedef typename base_type::const_iterator const_iterator; -23376: -23376: -23376: Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: bool is_zero() const; -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(dimension_type i) const; -23376: -23376: -23376: Coefficient_traits::const_reference get(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(const Variables_Set& vars) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: dimension_type num_zeroes(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: -23376: -23376: Coefficient gcd(dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: dimension_type last_nonzero() const; -23376: -23376: -23376: -23376: dimension_type last_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: dimension_type first_nonzero(dimension_type first, dimension_type last) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void has_a_free_dimension_helper(std::set& x) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: -23376: template -23376: bool is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const; -23376: -23376: -23376: void get_row(Dense_Row& r) const; -23376: -23376: -23376: void get_row(Sparse_Row& r) const; -23376: }; -23376: -23376: # 1 "../../src/Expression_Hide_Inhomo_inlines.hh" 1 -23376: # 29 "../../src/Expression_Hide_Inhomo_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Expression_Hide_Inhomo::Expression_Hide_Inhomo(const raw_type& expr) -23376: : base_type(expr) { -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Inhomo::inhomogeneous_term() const { -23376: -23376: return Coefficient_zero(); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo::is_zero() const { -23376: -23376: return this->inner().all_homogeneous_terms_are_zero(); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo -23376: ::is_equal_to(const Expression& y) const { -23376: const dimension_type x_dim = this->space_dimension(); -23376: const dimension_type y_dim = y.space_dimension(); -23376: if (x_dim != y_dim) { -23376: return false; -23376: } -23376: if (y.inhomogeneous_term() != 0) { -23376: return false; -23376: } -23376: -23376: return this->inner().is_equal_to(y, 1, x_dim + 1); -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Inhomo::get(dimension_type i) const { -23376: if (i == 0) { -23376: return Coefficient_zero(); -23376: } -23376: else { -23376: return this->inner().get(i); -23376: } -23376: } -23376: -23376: template -23376: inline Coefficient_traits::const_reference -23376: Expression_Hide_Inhomo::get(Variable v) const { -23376: return this->inner().get(v); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo -23376: ::all_zeroes(const Variables_Set& vars) const { -23376: return this->inner().all_zeroes(vars); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo::all_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: if (start == end) { -23376: return true; -23376: } -23376: if (start == 0) { -23376: ++start; -23376: } -23376: return this->inner().all_zeroes(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Inhomo::num_zeroes(dimension_type start, -23376: dimension_type end) const { -23376: if (start == end) { -23376: return 0; -23376: } -23376: dimension_type nz = 0; -23376: if (start == 0) { -23376: ++start; -23376: ++nz; -23376: } -23376: nz += this->inner().num_zeroes(start, end); -23376: return nz; -23376: } -23376: -23376: template -23376: inline Coefficient -23376: Expression_Hide_Inhomo::gcd(dimension_type start, -23376: dimension_type end) const { -23376: if (start == end) { -23376: return Coefficient_zero(); -23376: } -23376: if (start == 0) { -23376: ++start; -23376: } -23376: return this->inner().gcd(start, end); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Inhomo::last_nonzero() const { -23376: return this->inner().last_nonzero(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Inhomo::last_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: if (first == last) { -23376: return last; -23376: } -23376: if (first == 0) { -23376: ++first; -23376: } -23376: return this->inner().last_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Expression_Hide_Inhomo::first_nonzero(dimension_type first, -23376: dimension_type last) const { -23376: if (first == last) { -23376: return last; -23376: } -23376: if (first == 0) { -23376: ++first; -23376: } -23376: return this->inner().first_nonzero(first, last); -23376: } -23376: -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo -23376: ::all_zeroes_except(const Variables_Set& vars, -23376: dimension_type start, dimension_type end) const { -23376: if (start == end) { -23376: return true; -23376: } -23376: if (start == 0) { -23376: ++start; -23376: } -23376: return this->inner().all_zeroes_except(vars, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Inhomo -23376: ::has_a_free_dimension_helper(std::set& y) const { -23376: bool had_0 = (y.count(0) == 1); -23376: this->inner().has_a_free_dimension_helper(y); -23376: if (had_0) { -23376: y.insert(0); -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo -23376: ::is_equal_to(const Expression& y, -23376: dimension_type start, dimension_type end) const { -23376: if (start == end) { -23376: return true; -23376: } -23376: if (start == 0) { -23376: ++start; -23376: } -23376: return this->inner().is_equal_to(y, start, end); -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: Expression_Hide_Inhomo -23376: ::is_equal_to(const Expression& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: if (start == end) { -23376: return true; -23376: } -23376: if (start == 0) { -23376: ++start; -23376: } -23376: return this->inner().is_equal_to(y, c1, c2, start, end); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Inhomo::get_row(Dense_Row& r) const { -23376: this->inner().get_row(r); -23376: r.reset(0); -23376: } -23376: -23376: template -23376: inline void -23376: Expression_Hide_Inhomo::get_row(Sparse_Row& r) const { -23376: this->inner().get_row(r); -23376: r.reset(0); -23376: } -23376: -23376: } -23376: # 146 "../../src/Expression_Hide_Inhomo_defs.hh" 2 -23376: # 46 "../../src/Generator_defs.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: # 90 "../../src/Generator_defs.hh" -23376: int compare(const Generator& x, const Generator& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Generator& g); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(Generator& x, Generator& y); -23376: -23376: } -23376: # 285 "../../src/Generator_defs.hh" -23376: class Parma_Polyhedra_Library::Generator { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static Generator line(const Linear_Expression& e, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static Generator ray(const Linear_Expression& e, -23376: Representation r = default_representation); -23376: # 322 "../../src/Generator_defs.hh" -23376: static Generator point(const Linear_Expression& e -23376: = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d -23376: = Coefficient_one(), -23376: Representation r = default_representation); -23376: -23376: -23376: static Generator point(Representation r); -23376: -23376: -23376: static Generator point(const Linear_Expression& e, -23376: Representation r); -23376: -23376: -23376: explicit Generator(Representation r = default_representation); -23376: # 346 "../../src/Generator_defs.hh" -23376: static Generator -23376: closure_point(const Linear_Expression& e = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d = Coefficient_one(), -23376: Representation r = default_representation); -23376: -23376: -23376: static Generator -23376: closure_point(Representation r); -23376: -23376: -23376: static Generator -23376: closure_point(const Linear_Expression& e, Representation r); -23376: -23376: -23376: -23376: Generator(const Generator& g); -23376: -23376: -23376: Generator(const Generator& g, Representation r); -23376: -23376: -23376: -23376: Generator(const Generator& g, dimension_type space_dim); -23376: -23376: -23376: Generator(const Generator& g, dimension_type space_dim, Representation r); -23376: -23376: -23376: ~Generator(); -23376: -23376: -23376: Generator& operator=(const Generator& g); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: # 408 "../../src/Generator_defs.hh" -23376: bool remove_space_dimensions(const Variables_Set& vars); -23376: # 422 "../../src/Generator_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: -23376: -23376: enum Type { -23376: -23376: LINE, -23376: -23376: RAY, -23376: -23376: POINT, -23376: -23376: CLOSURE_POINT -23376: }; -23376: -23376: -23376: Type type() const; -23376: -23376: -23376: bool is_line() const; -23376: -23376: -23376: bool is_ray() const; -23376: -23376: -23376: -23376: -23376: bool is_line_or_ray() const; -23376: -23376: -23376: bool is_point() const; -23376: -23376: -23376: bool is_closure_point() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference divisor() const; -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: static const Generator& zero_dim_point(); -23376: -23376: -23376: -23376: -23376: -23376: static const Generator& zero_dim_closure_point(); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_equivalent_to(const Generator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_to(const Generator& y) const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: void m_swap(Generator& y); -23376: -23376: -23376: typedef Expression_Hide_Last > -23376: expr_type; -23376: -23376: expr_type expression() const; -23376: -23376: private: -23376: -23376: enum Kind { -23376: LINE_OR_EQUALITY = 0, -23376: RAY_OR_POINT_OR_INEQUALITY = 1 -23376: }; -23376: -23376: -23376: Linear_Expression expr; -23376: -23376: -23376: Kind kind_; -23376: -23376: -23376: Topology topology_; -23376: -23376: -23376: -23376: -23376: -23376: static const Generator* zero_dim_point_p; -23376: -23376: -23376: -23376: -23376: -23376: static const Generator* zero_dim_closure_point_p; -23376: # 570 "../../src/Generator_defs.hh" -23376: Generator(Linear_Expression& e, Type type, Topology topology); -23376: -23376: Generator(Linear_Expression& e, Kind kind, Topology topology); -23376: -23376: Generator(dimension_type space_dim, Kind kind, Topology topology, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: bool is_line_or_equality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_ray_or_point_or_inequality() const; -23376: -23376: -23376: void set_is_line_or_equality(); -23376: -23376: -23376: void set_is_ray_or_point_or_inequality(); -23376: -23376: -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_not_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_topology(Topology x); -23376: -23376: -23376: void set_necessarily_closed(); -23376: -23376: -23376: void set_not_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_not_necessarily_closed(); -23376: # 652 "../../src/Generator_defs.hh" -23376: void linear_combine(const Generator& y, dimension_type i); -23376: # 661 "../../src/Generator_defs.hh" -23376: void set_space_dimension_no_ok(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_dimension_incompatible(const char* method, -23376: const char* v_name, -23376: Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_invalid_argument(const char* method, const char* reason) const; -23376: -23376: -23376: bool is_ray_or_point() const; -23376: -23376: -23376: void set_is_line(); -23376: -23376: -23376: void set_is_ray_or_point(); -23376: # 695 "../../src/Generator_defs.hh" -23376: bool is_matching_closure_point(const Generator& p) const; -23376: -23376: -23376: Coefficient_traits::const_reference epsilon_coefficient() const; -23376: -23376: -23376: void set_epsilon_coefficient(Coefficient_traits::const_reference n); -23376: -23376: -23376: -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void strong_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: bool check_strong_normalized() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void fancy_print(std::ostream& s) const; -23376: -23376: friend class Expression_Adapter; -23376: friend class Linear_System; -23376: friend class Parma_Polyhedra_Library::Scalar_Products; -23376: friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign; -23376: friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Assign; -23376: friend class Parma_Polyhedra_Library::Generator_System; -23376: friend class Parma_Polyhedra_Library::Generator_System_const_iterator; -23376: -23376: friend class Parma_Polyhedra_Library::Polyhedron; -23376: -23376: friend class Parma_Polyhedra_Library::Grid_Generator_System; -23376: friend class Parma_Polyhedra_Library::MIP_Problem; -23376: friend class Parma_Polyhedra_Library::Grid; -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s, -23376: const Generator& g); -23376: -23376: friend int -23376: compare(const Generator& x, const Generator& y); -23376: }; -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: Generator line(const Linear_Expression& e, -23376: Representation r = Generator::default_representation); -23376: -23376: -23376: -23376: Generator ray(const Linear_Expression& e, -23376: Representation r = Generator::default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Generator -23376: point(const Linear_Expression& e = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d = Coefficient_one(), -23376: Representation r = Generator::default_representation); -23376: -23376: -23376: -23376: Generator -23376: point(Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Generator -23376: point(const Linear_Expression& e, Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Generator -23376: closure_point(const Linear_Expression& e = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d = Coefficient_one(), -23376: Representation r = Generator::default_representation); -23376: -23376: -23376: -23376: Generator -23376: closure_point(Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Generator -23376: closure_point(const Linear_Expression& e, Representation r); -23376: -23376: -23376: -23376: bool operator==(const Generator& x, const Generator& y); -23376: -23376: -23376: -23376: bool operator!=(const Generator& x, const Generator& y); -23376: # 838 "../../src/Generator_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 859 "../../src/Generator_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 880 "../../src/Generator_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 904 "../../src/Generator_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 925 "../../src/Generator_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 946 "../../src/Generator_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 970 "../../src/Generator_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 991 "../../src/Generator_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir); -23376: # 1012 "../../src/Generator_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Generator::Type& t); -23376: -23376: } -23376: -23376: } -23376: -23376: # 1 "../../src/Generator_inlines.hh" 1 -23376: # 27 "../../src/Generator_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline bool -23376: Generator::is_necessarily_closed() const { -23376: return (topology() == NECESSARILY_CLOSED); -23376: } -23376: -23376: inline bool -23376: Generator::is_not_necessarily_closed() const { -23376: return (topology() == NOT_NECESSARILY_CLOSED); -23376: } -23376: -23376: inline Generator::expr_type -23376: Generator::expression() const { -23376: return expr_type(expr, is_not_necessarily_closed()); -23376: } -23376: -23376: inline dimension_type -23376: Generator::space_dimension() const { -23376: return expression().space_dimension(); -23376: } -23376: -23376: inline bool -23376: Generator::is_line_or_equality() const { -23376: return (kind_ == LINE_OR_EQUALITY); -23376: } -23376: -23376: inline bool -23376: Generator::is_ray_or_point_or_inequality() const { -23376: return (kind_ == RAY_OR_POINT_OR_INEQUALITY); -23376: } -23376: -23376: inline Topology -23376: Generator::topology() const { -23376: return topology_; -23376: } -23376: -23376: inline void -23376: Generator::set_is_line_or_equality() { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: -23376: inline void -23376: Generator::set_is_ray_or_point_or_inequality() { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: -23376: inline void -23376: Generator::set_topology(Topology x) { -23376: if (topology() == x) { -23376: return; -23376: } -23376: if (topology() == NECESSARILY_CLOSED) { -23376: -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: else { -23376: ((void) 0); -23376: expr.set_space_dimension(expr.space_dimension() - 1); -23376: } -23376: topology_ = x; -23376: } -23376: -23376: inline void -23376: Generator::mark_as_necessarily_closed() { -23376: ((void) 0); -23376: topology_ = NECESSARILY_CLOSED; -23376: } -23376: -23376: inline void -23376: Generator::mark_as_not_necessarily_closed() { -23376: ((void) 0); -23376: topology_ = NOT_NECESSARILY_CLOSED; -23376: } -23376: -23376: inline void -23376: Generator::set_necessarily_closed() { -23376: set_topology(NECESSARILY_CLOSED); -23376: } -23376: -23376: inline void -23376: Generator::set_not_necessarily_closed() { -23376: set_topology(NOT_NECESSARILY_CLOSED); -23376: } -23376: -23376: inline -23376: Generator::Generator(Representation r) -23376: : expr(r), -23376: kind_(RAY_OR_POINT_OR_INEQUALITY), -23376: topology_(NECESSARILY_CLOSED) { -23376: expr.set_inhomogeneous_term(Coefficient_one()); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Generator::Generator(dimension_type space_dim, Kind kind, Topology topology, -23376: Representation r) -23376: : expr(r), -23376: kind_(kind), -23376: topology_(topology) { -23376: if (is_necessarily_closed()) { -23376: expr.set_space_dimension(space_dim); -23376: } -23376: else { -23376: expr.set_space_dimension(space_dim + 1); -23376: } -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Generator::Generator(Linear_Expression& e, Type type, Topology topology) -23376: : topology_(topology) { -23376: ((void) 0); -23376: swap(expr, e); -23376: if (topology == NOT_NECESSARILY_CLOSED) { -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: if (type == LINE) { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: else { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: strong_normalize(); -23376: } -23376: -23376: inline -23376: Generator::Generator(Linear_Expression& e, Kind kind, Topology topology) -23376: : kind_(kind), -23376: topology_(topology) { -23376: swap(expr, e); -23376: if (topology == NOT_NECESSARILY_CLOSED) { -23376: expr.set_space_dimension(expr.space_dimension() + 1); -23376: } -23376: strong_normalize(); -23376: } -23376: -23376: inline -23376: Generator::Generator(const Generator& g) -23376: : expr(g.expr), -23376: kind_(g.kind_), -23376: topology_(g.topology_) { -23376: } -23376: -23376: inline -23376: Generator::Generator(const Generator& g, Representation r) -23376: : expr(g.expr, r), -23376: kind_(g.kind_), -23376: topology_(g.topology_) { -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Generator::Generator(const Generator& g, dimension_type space_dim) -23376: : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1)), -23376: kind_(g.kind_), -23376: topology_(g.topology_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Generator::Generator(const Generator& g, dimension_type space_dim, -23376: Representation r) -23376: : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1), r), -23376: kind_(g.kind_), -23376: topology_(g.topology_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Generator::~Generator() { -23376: } -23376: -23376: inline Generator& -23376: Generator::operator=(const Generator& g) { -23376: Generator tmp = g; -23376: swap(*this, tmp); -23376: -23376: return *this; -23376: } -23376: -23376: inline Representation -23376: Generator::representation() const { -23376: return expr.representation(); -23376: } -23376: -23376: inline void -23376: Generator::set_representation(Representation r) { -23376: expr.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Generator::max_space_dimension() { -23376: return Linear_Expression::max_space_dimension(); -23376: } -23376: -23376: inline void -23376: Generator::set_space_dimension_no_ok(dimension_type space_dim) { -23376: const dimension_type old_expr_space_dim = expr.space_dimension(); -23376: if (topology() == NECESSARILY_CLOSED) { -23376: expr.set_space_dimension(space_dim); -23376: } -23376: else { -23376: const dimension_type old_space_dim = space_dimension(); -23376: if (space_dim > old_space_dim) { -23376: expr.set_space_dimension(space_dim + 1); -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: } -23376: else { -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: expr.set_space_dimension(space_dim + 1); -23376: } -23376: } -23376: ((void) 0); -23376: if (expr.space_dimension() < old_expr_space_dim) { -23376: strong_normalize(); -23376: } -23376: } -23376: -23376: inline void -23376: Generator::set_space_dimension(dimension_type space_dim) { -23376: set_space_dimension_no_ok(space_dim); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Generator::shift_space_dimensions(Variable v, dimension_type n) { -23376: expr.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline bool -23376: Generator::is_line() const { -23376: return is_line_or_equality(); -23376: } -23376: -23376: inline bool -23376: Generator::is_ray_or_point() const { -23376: return is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline bool -23376: Generator::is_line_or_ray() const { -23376: return expr.inhomogeneous_term() == 0; -23376: } -23376: -23376: inline bool -23376: Generator::is_ray() const { -23376: return is_ray_or_point() && is_line_or_ray(); -23376: } -23376: -23376: inline Generator::Type -23376: Generator::type() const { -23376: if (is_line()) { -23376: return LINE; -23376: } -23376: if (is_line_or_ray()) { -23376: return RAY; -23376: } -23376: if (is_necessarily_closed()) { -23376: return POINT; -23376: } -23376: else { -23376: -23376: if (epsilon_coefficient() == 0) { -23376: return CLOSURE_POINT; -23376: } -23376: else { -23376: return POINT; -23376: } -23376: } -23376: } -23376: -23376: inline bool -23376: Generator::is_point() const { -23376: return type() == POINT; -23376: } -23376: -23376: inline bool -23376: Generator::is_closure_point() const { -23376: return type() == CLOSURE_POINT; -23376: } -23376: -23376: inline void -23376: Generator::set_is_line() { -23376: set_is_line_or_equality(); -23376: } -23376: -23376: inline void -23376: Generator::set_is_ray_or_point() { -23376: set_is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Generator::coefficient(const Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("coefficient(v)", "v", v); -23376: } -23376: return expr.coefficient(v); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Generator::divisor() const { -23376: Coefficient_traits::const_reference d = expr.inhomogeneous_term(); -23376: if (!is_ray_or_point() || d == 0) { -23376: throw_invalid_argument("divisor()", -23376: "*this is neither a point nor a closure point"); -23376: } -23376: return d; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Generator::epsilon_coefficient() const { -23376: ((void) 0); -23376: return expr.coefficient(Variable(expr.space_dimension() - 1)); -23376: } -23376: -23376: -23376: inline void -23376: Generator::set_epsilon_coefficient(Coefficient_traits::const_reference n) { -23376: ((void) 0); -23376: expr.set_coefficient(Variable(expr.space_dimension() - 1), n); -23376: } -23376: -23376: -23376: inline memory_size_type -23376: Generator::external_memory_in_bytes() const { -23376: return expr.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Generator::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline void -23376: Generator::strong_normalize() { -23376: expr.normalize(); -23376: sign_normalize(); -23376: } -23376: -23376: inline const Generator& -23376: Generator::zero_dim_point() { -23376: ((void) 0); -23376: return *zero_dim_point_p; -23376: } -23376: -23376: inline const Generator& -23376: Generator::zero_dim_closure_point() { -23376: ((void) 0); -23376: return *zero_dim_closure_point_p; -23376: } -23376: -23376: -23376: inline Generator -23376: line(const Linear_Expression& e, Representation r) { -23376: return Generator::line(e, r); -23376: } -23376: -23376: -23376: inline Generator -23376: ray(const Linear_Expression& e, Representation r) { -23376: return Generator::ray(e, r); -23376: } -23376: -23376: -23376: inline Generator -23376: point(const Linear_Expression& e, Coefficient_traits::const_reference d, -23376: Representation r) { -23376: return Generator::point(e, d, r); -23376: } -23376: -23376: -23376: inline Generator -23376: point(Representation r) { -23376: return Generator::point(r); -23376: } -23376: -23376: -23376: inline Generator -23376: point(const Linear_Expression& e, Representation r) { -23376: return Generator::point(e, r); -23376: } -23376: -23376: -23376: inline Generator -23376: closure_point(const Linear_Expression& e, -23376: Coefficient_traits::const_reference d, -23376: Representation r) { -23376: return Generator::closure_point(e, d, r); -23376: } -23376: -23376: -23376: inline Generator -23376: closure_point(Representation r) { -23376: return Generator::closure_point(r); -23376: } -23376: -23376: -23376: inline Generator -23376: closure_point(const Linear_Expression& e, -23376: Representation r) { -23376: return Generator::closure_point(e, r); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Generator& x, const Generator& y) { -23376: return x.is_equivalent_to(y); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Generator& x, const Generator& y) { -23376: return !x.is_equivalent_to(y); -23376: } -23376: -23376: inline void -23376: Generator::ascii_dump(std::ostream& s) const { -23376: -23376: expr.ascii_dump(s); -23376: -23376: s << " "; -23376: -23376: switch (type()) { -23376: case Generator::LINE: -23376: s << "L "; -23376: break; -23376: case Generator::RAY: -23376: s << "R "; -23376: break; -23376: case Generator::POINT: -23376: s << "P "; -23376: break; -23376: case Generator::CLOSURE_POINT: -23376: s << "C "; -23376: break; -23376: } -23376: if (is_necessarily_closed()) { -23376: s << "(C)"; -23376: } -23376: else { -23376: s << "(NNC)"; -23376: } -23376: s << "\n"; -23376: } -23376: -23376: inline bool -23376: Generator::ascii_load(std::istream& s) { -23376: std::string str; -23376: -23376: expr.ascii_load(s); -23376: -23376: if (!(s >> str)) { -23376: return false; -23376: } -23376: if (str == "L") { -23376: set_is_line(); -23376: } -23376: else if (str == "R" || str == "P" || str == "C") { -23376: set_is_ray_or_point(); -23376: } -23376: else { -23376: return false; -23376: } -23376: -23376: std::string str2; -23376: -23376: if (!(s >> str2)) { -23376: return false; -23376: } -23376: if (str2 == "(C)") { -23376: if (is_not_necessarily_closed()) { -23376: -23376: mark_as_necessarily_closed(); -23376: } -23376: } -23376: else { -23376: if (str2 == "(NNC)") { -23376: if (is_necessarily_closed()) { -23376: -23376: mark_as_not_necessarily_closed(); -23376: } -23376: } -23376: else { -23376: return false; -23376: } -23376: } -23376: -23376: -23376: switch (type()) { -23376: case Generator::LINE: -23376: if (str != "L") { -23376: return false; -23376: } -23376: break; -23376: case Generator::RAY: -23376: if (str != "R") { -23376: return false; -23376: } -23376: break; -23376: case Generator::POINT: -23376: if (str != "P") { -23376: return false; -23376: } -23376: break; -23376: case Generator::CLOSURE_POINT: -23376: if (str != "C") { -23376: return false; -23376: } -23376: break; -23376: } -23376: -23376: return true; -23376: } -23376: -23376: inline void -23376: Generator::m_swap(Generator& y) { -23376: using std::swap; -23376: swap(expr, y.expr); -23376: swap(kind_, y.kind_); -23376: swap(topology_, y.topology_); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: l_m_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: -23376: -23376: if (x.is_line_or_ray() || y.is_line_or_ray()) { -23376: return false; -23376: } -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: return true; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_x_coord; mpq_class& x_coord = holder_x_coord.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_y_coord; mpq_class& y_coord = holder_y_coord.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_x_div; mpq_class& x_div = holder_x_div.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_y_div; mpq_class& y_div = holder_y_div.item(); -23376: assign_r(x_div, x.divisor(), ROUND_NOT_NEEDED); -23376: assign_r(y_div, y.divisor(), ROUND_NOT_NEEDED); -23376: -23376: assign_r(tmp0, 0, ROUND_NOT_NEEDED); -23376: -23376: for (dimension_type i = x_space_dim; i-- > 0; ) { -23376: assign_r(x_coord, x.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: div_assign_r(x_coord, x_coord, x_div, ROUND_NOT_NEEDED); -23376: assign_r(y_coord, y.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: div_assign_r(y_coord, y_coord, y_div, ROUND_NOT_NEEDED); -23376: const Temp* tmp1p; -23376: const Temp* tmp2p; -23376: -23376: if (x_coord > y_coord) { -23376: maybe_assign(tmp1p, tmp1, x_coord, dir); -23376: maybe_assign(tmp2p, tmp2, y_coord, inverse(dir)); -23376: } -23376: else { -23376: maybe_assign(tmp1p, tmp1, y_coord, dir); -23376: maybe_assign(tmp2p, tmp2, x_coord, inverse(dir)); -23376: } -23376: sub_assign_r(tmp1, *tmp1p, *tmp2p, dir); -23376: ((void) 0); -23376: Specialization::combine(tmp0, tmp1, dir); -23376: } -23376: Specialization::finalize(tmp0, dir); -23376: assign_r(r, tmp0, dir); -23376: return true; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: return rectilinear_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: return euclidean_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Generator& x, -23376: const Generator& y, -23376: const Rounding_Dir dir) { -23376: return l_infinity_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: inline void -23376: swap(Generator& x, Generator& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 1032 "../../src/Generator_defs.hh" 2 -23376: # 32 "../../src/Linear_Expression_Impl_templates.hh" 2 -23376: # 1 "../../src/Grid_Generator_defs.hh" 1 -23376: # 43 "../../src/Grid_Generator_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 84 "../../src/Grid_Generator_defs.hh" -23376: int compare(const Grid_Generator& x, const Grid_Generator& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Grid_Generator& g); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(Grid_Generator& x, Grid_Generator& y); -23376: -23376: } -23376: # 271 "../../src/Grid_Generator_defs.hh" -23376: class Parma_Polyhedra_Library::Grid_Generator { -23376: public: -23376: -23376: -23376: enum Kind { -23376: LINE_OR_EQUALITY = 0, -23376: RAY_OR_POINT_OR_INEQUALITY = 1 -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static Grid_Generator grid_line(const Linear_Expression& e, -23376: Representation r = default_representation); -23376: # 306 "../../src/Grid_Generator_defs.hh" -23376: static Grid_Generator parameter(const Linear_Expression& e -23376: = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d -23376: = Coefficient_one(), -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: static Grid_Generator parameter(Representation r); -23376: -23376: -23376: static Grid_Generator parameter(const Linear_Expression& e, -23376: Representation r); -23376: # 328 "../../src/Grid_Generator_defs.hh" -23376: static Grid_Generator grid_point(const Linear_Expression& e -23376: = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d -23376: = Coefficient_one(), -23376: Representation r = default_representation); -23376: -23376: -23376: static Grid_Generator grid_point(Representation r); -23376: -23376: -23376: static Grid_Generator grid_point(const Linear_Expression& e, -23376: Representation r); -23376: -23376: -23376: explicit Grid_Generator(Representation r = default_representation); -23376: -23376: -23376: -23376: Grid_Generator(const Grid_Generator& g); -23376: -23376: -23376: Grid_Generator(const Grid_Generator& g, Representation r); -23376: -23376: -23376: -23376: Grid_Generator(const Grid_Generator& g, dimension_type space_dim); -23376: -23376: -23376: Grid_Generator(const Grid_Generator& g, dimension_type space_dim, -23376: Representation r); -23376: -23376: -23376: ~Grid_Generator(); -23376: -23376: -23376: Grid_Generator& operator=(const Grid_Generator& g); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: # 393 "../../src/Grid_Generator_defs.hh" -23376: bool remove_space_dimensions(const Variables_Set& vars); -23376: # 407 "../../src/Grid_Generator_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: -23376: -23376: enum Type { -23376: -23376: LINE, -23376: -23376: PARAMETER, -23376: -23376: POINT -23376: }; -23376: -23376: -23376: Type type() const; -23376: -23376: -23376: bool is_line() const; -23376: -23376: -23376: bool is_parameter() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_line_or_parameter() const; -23376: -23376: -23376: bool is_point() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_parameter_or_point() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference divisor() const; -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: static const Grid_Generator& zero_dim_point(); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_equivalent_to(const Grid_Generator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_to(const Grid_Generator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool all_homogeneous_terms_are_zero() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: void m_swap(Grid_Generator& y); -23376: # 524 "../../src/Grid_Generator_defs.hh" -23376: void scale_to_divisor(Coefficient_traits::const_reference d); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_divisor(Coefficient_traits::const_reference d); -23376: -23376: -23376: typedef Expression_Hide_Last > -23376: expr_type; -23376: -23376: expr_type expression() const; -23376: -23376: private: -23376: Linear_Expression expr; -23376: -23376: Kind kind_; -23376: -23376: -23376: -23376: -23376: -23376: static const Grid_Generator* zero_dim_point_p; -23376: -23376: -23376: -23376: Grid_Generator(dimension_type space_dim, Kind kind, Topology topology, -23376: Representation r = default_representation); -23376: # 565 "../../src/Grid_Generator_defs.hh" -23376: Grid_Generator(Linear_Expression& e, Type t); -23376: # 574 "../../src/Grid_Generator_defs.hh" -23376: void set_space_dimension_no_ok(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_at_dimension(dimension_type dim, -23376: const Grid_Generator& gg) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void fancy_print(std::ostream& s) const; -23376: -23376: -23376: void set_is_parameter(); -23376: -23376: -23376: void set_is_line(); -23376: -23376: -23376: void set_is_parameter_or_point(); -23376: -23376: -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_not_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_line_or_equality() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_ray_or_point_or_inequality() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_topology(Topology x); -23376: -23376: -23376: void set_necessarily_closed(); -23376: -23376: -23376: void set_not_necessarily_closed(); -23376: -23376: -23376: void set_is_line_or_equality(); -23376: -23376: -23376: void set_is_ray_or_point_or_inequality(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void strong_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: bool check_strong_normalized() const; -23376: # 680 "../../src/Grid_Generator_defs.hh" -23376: void linear_combine(const Grid_Generator& y, dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_dimension_incompatible(const char* method, -23376: const char* name_var, -23376: const Variable v) const; -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_invalid_argument(const char* method, const char* reason) const; -23376: -23376: friend std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const Grid_Generator& g); -23376: -23376: friend int -23376: compare(const Grid_Generator& x, const Grid_Generator& y); -23376: -23376: friend class Expression_Adapter; -23376: friend class Grid_Generator_System; -23376: friend class Grid; -23376: friend class Linear_System; -23376: friend class Scalar_Products; -23376: friend class Topology_Adjusted_Scalar_Product_Sign; -23376: }; -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Grid_Generator -23376: grid_line(const Linear_Expression& e, -23376: Representation r = Grid_Generator::default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Grid_Generator -23376: parameter(const Linear_Expression& e = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d = Coefficient_one(), -23376: Representation r = Grid_Generator::default_representation); -23376: -23376: -23376: -23376: Grid_Generator -23376: parameter(Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Grid_Generator -23376: parameter(const Linear_Expression& e, Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Grid_Generator -23376: grid_point(const Linear_Expression& e = Linear_Expression::zero(), -23376: Coefficient_traits::const_reference d = Coefficient_one(), -23376: Representation r = Grid_Generator::default_representation); -23376: -23376: -23376: -23376: Grid_Generator -23376: grid_point(Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Grid_Generator -23376: grid_point(const Linear_Expression& e, Representation r); -23376: -23376: -23376: -23376: bool operator==(const Grid_Generator& x, const Grid_Generator& y); -23376: -23376: -23376: -23376: bool operator!=(const Grid_Generator& x, const Grid_Generator& y); -23376: -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Grid_Generator::Type& t); -23376: -23376: } -23376: -23376: } -23376: -23376: # 1 "../../src/Grid_Generator_inlines.hh" 1 -23376: # 27 "../../src/Grid_Generator_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline bool -23376: Grid_Generator::is_necessarily_closed() const { -23376: return true; -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_not_necessarily_closed() const { -23376: return false; -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_line_or_equality() const { -23376: return (kind_ == LINE_OR_EQUALITY); -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_ray_or_point_or_inequality() const { -23376: return (kind_ == RAY_OR_POINT_OR_INEQUALITY); -23376: } -23376: -23376: inline Topology -23376: Grid_Generator::topology() const { -23376: return NECESSARILY_CLOSED; -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_is_line_or_equality() { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_is_ray_or_point_or_inequality() { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_topology(Topology x) { -23376: (void)(x); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_necessarily_closed() { -23376: set_topology(NECESSARILY_CLOSED); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_not_necessarily_closed() { -23376: set_topology(NOT_NECESSARILY_CLOSED); -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(Linear_Expression& e, Type type) { -23376: swap(expr, e); -23376: if (type == LINE) { -23376: kind_ = LINE_OR_EQUALITY; -23376: } -23376: else { -23376: kind_ = RAY_OR_POINT_OR_INEQUALITY; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(Representation r) -23376: : expr(Coefficient_one(), r), -23376: kind_(RAY_OR_POINT_OR_INEQUALITY) { -23376: expr.set_space_dimension(1); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(const Grid_Generator& g) -23376: : expr(g.expr), -23376: kind_(g.kind_) { -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(const Grid_Generator& g, Representation r) -23376: : expr(g.expr, r), -23376: kind_(g.kind_) { -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(dimension_type space_dim, Kind kind, -23376: Topology topology, Representation r) -23376: : expr(r), -23376: kind_(kind) { -23376: (void)(topology); -23376: ((void) 0); -23376: expr.set_space_dimension(space_dim + 1); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(const Grid_Generator& g, -23376: dimension_type space_dim) -23376: : expr(g.expr, space_dim + 1), -23376: kind_(g.kind_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator::Grid_Generator(const Grid_Generator& g, -23376: dimension_type space_dim, Representation r) -23376: : expr(g.expr, space_dim + 1, r), -23376: kind_(g.kind_) { -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator::~Grid_Generator() { -23376: } -23376: -23376: inline Grid_Generator::expr_type -23376: Grid_Generator::expression() const { -23376: return expr_type(expr, true); -23376: } -23376: -23376: inline Representation -23376: Grid_Generator::representation() const { -23376: return expr.representation(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_representation(Representation r) { -23376: expr.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator::max_space_dimension() { -23376: return Linear_Expression::max_space_dimension() - 1; -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator::space_dimension() const { -23376: return expression().space_dimension(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_space_dimension(dimension_type space_dim) { -23376: const dimension_type old_space_dim = space_dimension(); -23376: if (space_dim > old_space_dim) { -23376: expr.set_space_dimension(space_dim + 1); -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: } -23376: else { -23376: expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim)); -23376: expr.set_space_dimension(space_dim + 1); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_space_dimension_no_ok(dimension_type space_dim) { -23376: set_space_dimension(space_dim); -23376: } -23376: -23376: inline void -23376: Grid_Generator::shift_space_dimensions(Variable v, dimension_type n) { -23376: expr.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline Grid_Generator::Type -23376: Grid_Generator::type() const { -23376: if (is_line()) { -23376: return LINE; -23376: } -23376: return is_point() ? POINT : PARAMETER; -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_line() const { -23376: return is_line_or_equality(); -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_parameter() const { -23376: return is_parameter_or_point() && is_line_or_parameter(); -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_line_or_parameter() const { -23376: return expr.inhomogeneous_term() == 0; -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_point() const { -23376: return !is_line_or_parameter(); -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_parameter_or_point() const { -23376: return is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_divisor(Coefficient_traits::const_reference d) { -23376: ((void) 0); -23376: if (is_line_or_parameter()) { -23376: expr.set_coefficient(Variable(space_dimension()), d); -23376: } -23376: else { -23376: expr.set_inhomogeneous_term(d); -23376: } -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Grid_Generator::divisor() const { -23376: if (is_line()) { -23376: throw_invalid_argument("divisor()", "*this is a line"); -23376: } -23376: if (is_line_or_parameter()) { -23376: return expr.coefficient(Variable(space_dimension())); -23376: } -23376: else { -23376: return expr.inhomogeneous_term(); -23376: } -23376: } -23376: -23376: inline bool -23376: Grid_Generator::is_equal_at_dimension(dimension_type dim, -23376: const Grid_Generator& y) const { -23376: const Grid_Generator& x = *this; -23376: return x.expr.get(dim) * y.divisor() == y.expr.get(dim) * x.divisor(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_is_line() { -23376: set_is_line_or_equality(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::set_is_parameter_or_point() { -23376: set_is_ray_or_point_or_inequality(); -23376: } -23376: -23376: inline Grid_Generator& -23376: Grid_Generator::operator=(const Grid_Generator& g) { -23376: Grid_Generator tmp = g; -23376: swap(*this, tmp); -23376: -23376: return *this; -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Grid_Generator::coefficient(const Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("coefficient(v)", "v", v); -23376: } -23376: return expr.coefficient(v); -23376: } -23376: -23376: inline memory_size_type -23376: Grid_Generator::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Grid_Generator::external_memory_in_bytes() const { -23376: return expr.external_memory_in_bytes(); -23376: } -23376: -23376: inline const Grid_Generator& -23376: Grid_Generator::zero_dim_point() { -23376: ((void) 0); -23376: return *zero_dim_point_p; -23376: } -23376: -23376: inline void -23376: Grid_Generator::strong_normalize() { -23376: ((void) 0); -23376: expr.normalize(); -23376: sign_normalize(); -23376: } -23376: -23376: inline void -23376: Grid_Generator::m_swap(Grid_Generator& y) { -23376: using std::swap; -23376: swap(expr, y.expr); -23376: swap(kind_, y.kind_); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Grid_Generator& x, const Grid_Generator& y) { -23376: return x.is_equivalent_to(y); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Grid_Generator& x, const Grid_Generator& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: grid_line(const Linear_Expression& e, Representation r) { -23376: return Grid_Generator::grid_line(e, r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: parameter(const Linear_Expression& e, -23376: Coefficient_traits::const_reference d, Representation r) { -23376: return Grid_Generator::parameter(e, d, r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: parameter(Representation r) { -23376: return Grid_Generator::parameter(r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: parameter(const Linear_Expression& e, Representation r) { -23376: return Grid_Generator::parameter(e, r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: grid_point(const Linear_Expression& e, -23376: Coefficient_traits::const_reference d, Representation r) { -23376: return Grid_Generator::grid_point(e, d, r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: grid_point(Representation r) { -23376: return Grid_Generator::grid_point(r); -23376: } -23376: -23376: -23376: inline Grid_Generator -23376: grid_point(const Linear_Expression& e, Representation r) { -23376: return Grid_Generator::grid_point(e, r); -23376: } -23376: -23376: -23376: inline void -23376: swap(Grid_Generator& x, Grid_Generator& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 795 "../../src/Grid_Generator_defs.hh" 2 -23376: # 33 "../../src/Linear_Expression_Impl_templates.hh" 2 -23376: # 1 "../../src/Congruence_defs.hh" 1 -23376: # 42 "../../src/Congruence_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: bool -23376: operator==(const Congruence& x, const Congruence& y); -23376: -23376: -23376: -23376: bool -23376: operator!=(const Congruence& x, const Congruence& y); -23376: -23376: } -23376: # 161 "../../src/Congruence_defs.hh" -23376: class Parma_Polyhedra_Library::Congruence { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Congruence(Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Congruence(const Congruence& cg); -23376: -23376: -23376: Congruence(const Congruence& cg, Representation r); -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit Congruence(const Constraint& c, -23376: Representation r = default_representation); -23376: -23376: -23376: ~Congruence(); -23376: -23376: -23376: Congruence& operator=(const Congruence& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: void permute_space_dimensions(const std::vector& cycles); -23376: -23376: -23376: typedef Expression_Adapter_Transparent expr_type; -23376: -23376: expr_type expression() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Coefficient_traits::const_reference coefficient(Variable v) const; -23376: -23376: -23376: Coefficient_traits::const_reference inhomogeneous_term() const; -23376: -23376: -23376: Coefficient_traits::const_reference modulus() const; -23376: -23376: -23376: -23376: void set_modulus(Coefficient_traits::const_reference m); -23376: -23376: -23376: void scale(Coefficient_traits::const_reference factor); -23376: -23376: -23376: void affine_preimage(Variable v, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Congruence& -23376: operator/=(Coefficient_traits::const_reference k); -23376: # 261 "../../src/Congruence_defs.hh" -23376: bool is_tautological() const; -23376: # 273 "../../src/Congruence_defs.hh" -23376: bool is_inconsistent() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_proper_congruence() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_equality() const; -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Congruence& zero_dim_integrality(); -23376: -23376: -23376: -23376: -23376: -23376: static const Congruence& zero_dim_false(); -23376: -23376: -23376: static Congruence -23376: create(const Linear_Expression& e1, const Linear_Expression& e2, -23376: Representation r = default_representation); -23376: -23376: -23376: static Congruence -23376: create(const Linear_Expression& e, Coefficient_traits::const_reference n, -23376: Representation r = default_representation); -23376: -23376: -23376: static Congruence -23376: create(Coefficient_traits::const_reference n, const Linear_Expression& e, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: void m_swap(Congruence& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Congruence(const Congruence& cg, dimension_type new_space_dimension); -23376: -23376: -23376: Congruence(const Congruence& cg, dimension_type new_space_dimension, -23376: Representation r); -23376: -23376: -23376: -23376: Congruence(const Constraint& cg, dimension_type new_space_dimension, -23376: Representation r = default_representation); -23376: # 374 "../../src/Congruence_defs.hh" -23376: Congruence(Linear_Expression& le, -23376: Coefficient_traits::const_reference m, Recycle_Input); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: -23376: -23376: void set_space_dimension(dimension_type n); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void strong_normalize(); -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: static const Congruence* zero_dim_false_p; -23376: -23376: -23376: -23376: -23376: -23376: -23376: static const Congruence* zero_dim_integrality_p; -23376: -23376: Linear_Expression expr; -23376: -23376: Coefficient modulus_; -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_at_dimension(Variable v, -23376: const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_invalid_argument(const char* method, const char* message) const; -23376: -23376: -23376: -23376: -23376: -23376: void -23376: throw_dimension_incompatible(const char* method, -23376: const char* v_name, -23376: Variable v) const; -23376: -23376: friend bool -23376: operator==(const Congruence& x, const Congruence& y); -23376: -23376: friend bool -23376: operator!=(const Congruence& x, const Congruence& y); -23376: -23376: friend class Scalar_Products; -23376: friend class Grid; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: std::ostream& -23376: operator<<(std::ostream& s, const Congruence& c); -23376: -23376: } -23376: -23376: -23376: -23376: Congruence -23376: operator%=(const Linear_Expression& e1, const Linear_Expression& e2); -23376: -23376: -23376: -23376: Congruence -23376: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n); -23376: # 490 "../../src/Congruence_defs.hh" -23376: Congruence -23376: operator/(const Congruence& cg, Coefficient_traits::const_reference k); -23376: -23376: -23376: -23376: Congruence -23376: operator/(const Constraint& c, Coefficient_traits::const_reference m); -23376: -23376: -23376: void -23376: swap(Congruence& x, Congruence& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Congruence_inlines.hh" 1 -23376: # 29 "../../src/Congruence_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Congruence::Congruence(Representation r) -23376: : expr(r) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Congruence::Congruence(const Congruence& cg) -23376: : expr(cg.expr), modulus_(cg.modulus_) { -23376: } -23376: -23376: inline -23376: Congruence::Congruence(const Congruence& cg, Representation r) -23376: : expr(cg.expr, r), modulus_(cg.modulus_) { -23376: } -23376: -23376: inline -23376: Congruence::Congruence(const Congruence& cg, -23376: dimension_type new_space_dimension) -23376: : expr(cg.expr, new_space_dimension), modulus_(cg.modulus_) { -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Congruence::Congruence(const Congruence& cg, -23376: dimension_type new_space_dimension, -23376: Representation r) -23376: : expr(cg.expr, new_space_dimension, r), modulus_(cg.modulus_) { -23376: ((void) 0); -23376: } -23376: -23376: inline Representation -23376: Congruence::representation() const { -23376: return expr.representation(); -23376: } -23376: -23376: inline void -23376: Congruence::set_representation(Representation r) { -23376: expr.set_representation(r); -23376: } -23376: -23376: inline Congruence::expr_type -23376: Congruence::expression() const { -23376: return expr_type(expr); -23376: } -23376: -23376: inline void -23376: Congruence::set_space_dimension(dimension_type n) { -23376: expr.set_space_dimension(n); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Congruence::shift_space_dimensions(Variable v, dimension_type n) { -23376: expr.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline -23376: Congruence::~Congruence() { -23376: } -23376: -23376: inline -23376: Congruence::Congruence(Linear_Expression& le, -23376: Coefficient_traits::const_reference m, -23376: Recycle_Input) -23376: : modulus_(m) { -23376: ((void) 0); -23376: swap(expr, le); -23376: -23376: ((void) 0); -23376: } -23376: -23376: inline Congruence -23376: Congruence::create(const Linear_Expression& e, -23376: Coefficient_traits::const_reference n, -23376: Representation r) { -23376: Linear_Expression diff(e, r); -23376: diff -= n; -23376: const Congruence cg(diff, 1, Recycle_Input()); -23376: return cg; -23376: } -23376: -23376: inline Congruence -23376: Congruence::create(Coefficient_traits::const_reference n, -23376: const Linear_Expression& e, -23376: Representation r) { -23376: Linear_Expression diff(e, r); -23376: diff -= n; -23376: const Congruence cg(diff, 1, Recycle_Input()); -23376: return cg; -23376: } -23376: -23376: -23376: inline Congruence -23376: operator%=(const Linear_Expression& e1, const Linear_Expression& e2) { -23376: return Congruence::create(e1, e2); -23376: } -23376: -23376: -23376: inline Congruence -23376: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n) { -23376: return Congruence::create(e, n); -23376: } -23376: -23376: -23376: inline Congruence -23376: operator/(const Congruence& cg, Coefficient_traits::const_reference k) { -23376: Congruence ret = cg; -23376: ret /= k; -23376: return ret; -23376: } -23376: -23376: inline const Congruence& -23376: Congruence::zero_dim_integrality() { -23376: return *zero_dim_integrality_p; -23376: } -23376: -23376: inline const Congruence& -23376: Congruence::zero_dim_false() { -23376: return *zero_dim_false_p; -23376: } -23376: -23376: inline Congruence& -23376: Congruence::operator=(const Congruence& y) { -23376: Congruence tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: -23376: inline Congruence -23376: operator/(const Constraint& c, Coefficient_traits::const_reference m) { -23376: Congruence ret(c); -23376: ret /= m; -23376: return ret; -23376: } -23376: -23376: inline Congruence& -23376: Congruence::operator/=(Coefficient_traits::const_reference k) { -23376: if (k >= 0) { -23376: modulus_ *= k; -23376: } -23376: else { -23376: modulus_ *= -k; -23376: } -23376: return *this; -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Congruence& x, const Congruence& y) { -23376: if (x.space_dimension() != y.space_dimension()) { -23376: return false; -23376: } -23376: Congruence x_temp(x); -23376: Congruence y_temp(y); -23376: x_temp.strong_normalize(); -23376: y_temp.strong_normalize(); -23376: return x_temp.expr.is_equal_to(y_temp.expr) -23376: && x_temp.modulus() == y_temp.modulus(); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Congruence& x, const Congruence& y) { -23376: return !(x == y); -23376: } -23376: -23376: inline dimension_type -23376: Congruence::max_space_dimension() { -23376: return Linear_Expression::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: Congruence::space_dimension() const { -23376: return expr.space_dimension(); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Congruence::coefficient(const Variable v) const { -23376: if (v.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("coefficient(v)", "v", v); -23376: } -23376: return expr.coefficient(v); -23376: } -23376: -23376: inline void -23376: Congruence::permute_space_dimensions(const std::vector& cycles) { -23376: expr.permute_space_dimensions(cycles); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Congruence::inhomogeneous_term() const { -23376: return expr.inhomogeneous_term(); -23376: } -23376: -23376: inline Coefficient_traits::const_reference -23376: Congruence::modulus() const { -23376: return modulus_; -23376: } -23376: -23376: inline void -23376: Congruence::set_modulus(Coefficient_traits::const_reference m) { -23376: modulus_ = m; -23376: ((void) 0); -23376: } -23376: -23376: inline bool -23376: Congruence::is_proper_congruence() const { -23376: return modulus() > 0; -23376: } -23376: -23376: inline bool -23376: Congruence::is_equality() const { -23376: return modulus() == 0; -23376: } -23376: -23376: inline bool -23376: Congruence::is_equal_at_dimension(Variable v, -23376: const Congruence& cg) const { -23376: return coefficient(v) * cg.modulus() == cg.coefficient(v) * modulus(); -23376: } -23376: -23376: inline memory_size_type -23376: Congruence::external_memory_in_bytes() const { -23376: return expr.external_memory_in_bytes() -23376: + Parma_Polyhedra_Library::external_memory_in_bytes(modulus_); -23376: } -23376: -23376: inline memory_size_type -23376: Congruence::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: inline void -23376: Congruence::m_swap(Congruence& y) { -23376: using std::swap; -23376: swap(expr, y.expr); -23376: swap(modulus_, y.modulus_); -23376: } -23376: -23376: inline void -23376: Congruence::swap_space_dimensions(Variable v1, Variable v2) { -23376: expr.swap_space_dimensions(v1, v2); -23376: } -23376: -23376: -23376: inline void -23376: swap(Congruence& x, Congruence& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 505 "../../src/Congruence_defs.hh" 2 -23376: # 34 "../../src/Linear_Expression_Impl_templates.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(const Linear_Expression_Impl& e) { -23376: construct(e); -23376: } -23376: -23376: template -23376: template -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(const Linear_Expression_Impl& e) { -23376: construct(e); -23376: } -23376: -23376: template -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(const Linear_Expression_Interface& e) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&e)) { -23376: construct(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&e)) { -23376: construct(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: Linear_Expression_Impl -23376: ::Linear_Expression_Impl(const Linear_Expression_Interface& e, -23376: dimension_type space_dim) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&e)) { -23376: construct(*p, space_dim); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&e)) { -23376: construct(*p, space_dim); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Impl& y, Variable i) { -23376: ((void) 0); -23376: ((void) 0); -23376: linear_combine(y, i.space_dimension()); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Impl& y, dimension_type i) { -23376: const Linear_Expression_Impl& x = *this; -23376: ((void) 0); -23376: ((void) 0); -23376: Coefficient_traits::const_reference x_i = x.row.get(i); -23376: Coefficient_traits::const_reference y_i = y.row.get(i); -23376: ((void) 0); -23376: ((void) 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_normalized_x_v; Parma_Polyhedra_Library::Coefficient& normalized_x_v = holder_normalized_x_v.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_normalized_y_v; Parma_Polyhedra_Library::Coefficient& normalized_y_v = holder_normalized_y_v.item(); -23376: normalize2(x_i, y_i, normalized_x_v, normalized_y_v); -23376: neg_assign(normalized_x_v); -23376: linear_combine(y, normalized_y_v, normalized_x_v); -23376: -23376: -23376: -23376: # 116 "../../src/Linear_Expression_Impl_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 116 "../../src/Linear_Expression_Impl_templates.hh" -23376: ; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: ((void) 0); -23376: ((void) 0); -23376: if (space_dimension() < y.space_dimension()) { -23376: set_space_dimension(y.space_dimension()); -23376: } -23376: linear_combine(y, c1, c2, 0, y.space_dimension() + 1); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine_lax(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: if (space_dimension() < y.space_dimension()) { -23376: set_space_dimension(y.space_dimension()); -23376: } -23376: linear_combine_lax(y, c1, c2, 0, y.space_dimension() + 1); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: int -23376: Linear_Expression_Impl -23376: ::compare(const Linear_Expression_Impl& y) const { -23376: const Linear_Expression_Impl& x = *this; -23376: -23376: -23376: typename Row::const_iterator i = x.row.lower_bound(1); -23376: typename Row::const_iterator i_end = x.row.end(); -23376: typename Row2::const_iterator j = y.row.lower_bound(1); -23376: typename Row2::const_iterator j_end = y.row.end(); -23376: while (i != i_end && j != j_end) { -23376: if (i.index() < j.index()) { -23376: const int s = sgn(*i); -23376: if (s != 0) { -23376: return 2*s; -23376: } -23376: ++i; -23376: continue; -23376: } -23376: if (i.index() > j.index()) { -23376: const int s = sgn(*j); -23376: if (s != 0) { -23376: return -2*s; -23376: } -23376: ++j; -23376: continue; -23376: } -23376: ((void) 0); -23376: const int s = cmp(*i, *j); -23376: if (s < 0) { -23376: return -2; -23376: } -23376: if (s > 0) { -23376: return 2; -23376: } -23376: ((void) 0); -23376: ++i; -23376: ++j; -23376: } -23376: for ( ; i != i_end; ++i) { -23376: const int s = sgn(*i); -23376: if (s != 0) { -23376: return 2*s; -23376: } -23376: } -23376: for ( ; j != j_end; ++j) { -23376: const int s = sgn(*j); -23376: if (s != 0) { -23376: return -2*s; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: const int comp = cmp(x.row.get(0), y.row.get(0)); -23376: if (comp > 0) { -23376: return 1; -23376: } -23376: if (comp < 0) { -23376: return -1; -23376: } -23376: ((void) 0); -23376: -23376: -23376: return 0; -23376: } -23376: -23376: template -23376: Linear_Expression_Impl::Linear_Expression_Impl(const Variable v) { -23376: if (v.space_dimension() > max_space_dimension()) { -23376: throw std::length_error("Linear_Expression_Impl::" -23376: "Linear_Expression_Impl(v):\n" -23376: "v exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: set_space_dimension(v.space_dimension()); -23376: (*this) += v; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Impl& x) const { -23376: return row == x.row; -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::get_row(Dense_Row& r) const { -23376: r = this->row; -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::get_row(Sparse_Row& r) const { -23376: r = this->row; -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::permute_space_dimensions(const std::vector& cycle) { -23376: const dimension_type n = cycle.size(); -23376: if (n < 2) { -23376: return; -23376: } -23376: -23376: if (n == 2) { -23376: row.swap_coefficients(cycle[0].space_dimension(), -23376: cycle[1].space_dimension()); -23376: } -23376: else { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item(); -23376: tmp = row.get(cycle.back().space_dimension()); -23376: for (dimension_type i = n - 1; i-- > 0; ) { -23376: row.swap_coefficients(cycle[i + 1].space_dimension(), -23376: cycle[i].space_dimension()); -23376: } -23376: if (tmp == 0) { -23376: row.reset(cycle[0].space_dimension()); -23376: } -23376: else { -23376: using std::swap; -23376: swap(tmp, row[cycle[0].space_dimension()]); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator+=(const Linear_Expression_Impl& e) { -23376: linear_combine(e, Coefficient_one(), Coefficient_one()); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator+=(const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Expression_Impl::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression_Impl& " -23376: "operator+=(e, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (space_dimension() < v_space_dim) { -23376: set_space_dimension(v_space_dim); -23376: } -23376: typename Row::iterator itr = row.insert(v_space_dim); -23376: ++(*itr); -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator-=(const Linear_Expression_Impl& e2) { -23376: linear_combine(e2, Coefficient_one(), -1); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator-=(const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Expression_Impl::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression_Impl& " -23376: "operator-=(e, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (space_dimension() < v_space_dim) { -23376: set_space_dimension(v_space_dim); -23376: } -23376: typename Row::iterator itr = row.insert(v_space_dim); -23376: --(*itr); -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator*=(Coefficient_traits::const_reference n) { -23376: if (n == 0) { -23376: row.clear(); -23376: ((void) 0); -23376: return *this; -23376: } -23376: for (typename Row::iterator i = row.begin(), -23376: i_end = row.end(); i != i_end; ++i) { -23376: (*i) *= n; -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::operator/=(Coefficient_traits::const_reference n) { -23376: typename Row::iterator i = row.begin(); -23376: const typename Row::iterator& i_end = row.end(); -23376: while (i != i_end) { -23376: (*i) /= n; -23376: if (*i == 0) { -23376: i = row.reset(i); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::negate() { -23376: for (typename Row::iterator i = row.begin(), -23376: i_end = row.end(); i != i_end; ++i) { -23376: neg_assign(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl::add_mul_assign(Coefficient_traits::const_reference n, -23376: const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Expression_Impl::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression_Impl& " -23376: "add_mul_assign(e, n, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (space_dimension() < v_space_dim) { -23376: set_space_dimension(v_space_dim); -23376: } -23376: if (n == 0) { -23376: return *this; -23376: } -23376: typename Row::iterator itr = row.insert(v_space_dim); -23376: (*itr) += n; -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl -23376: ::sub_mul_assign(Coefficient_traits::const_reference n, -23376: const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Expression_Impl::max_space_dimension()) { -23376: throw std::length_error("Linear_Expression_Impl& " -23376: "sub_mul_assign(e, n, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (space_dimension() < v_space_dim) { -23376: set_space_dimension(v_space_dim); -23376: } -23376: if (n == 0) { -23376: return *this; -23376: } -23376: typename Row::iterator itr = row.insert(v_space_dim); -23376: (*itr) -= n; -23376: if (*itr == 0) { -23376: row.reset(itr); -23376: } -23376: ((void) 0); -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::add_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Impl& y) { -23376: if (factor != 0) { -23376: linear_combine(y, Coefficient_one(), factor); -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::sub_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Impl& y) { -23376: if (factor != 0) { -23376: linear_combine(y, Coefficient_one(), -factor); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::print(std::ostream& s) const { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ev; Parma_Polyhedra_Library::Coefficient& ev = holder_ev.item(); -23376: bool first = true; -23376: for (typename Row::const_iterator i = row.lower_bound(1), i_end = row.end(); -23376: i != i_end; ++i) { -23376: ev = *i; -23376: if (ev == 0) { -23376: continue; -23376: } -23376: if (!first) { -23376: if (ev > 0) { -23376: s << " + "; -23376: } -23376: else { -23376: s << " - "; -23376: neg_assign(ev); -23376: } -23376: } -23376: else { -23376: first = false; -23376: } -23376: if (ev == -1) { -23376: s << "-"; -23376: } -23376: else if (ev != 1) { -23376: s << ev << "*"; -23376: } -23376: IO_Operators::operator<<(s, Variable(i.index() - 1)); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_it; Parma_Polyhedra_Library::Coefficient& it = holder_it.item(); -23376: it = row[0]; -23376: if (it != 0) { -23376: if (!first) { -23376: if (it > 0) { -23376: s << " + "; -23376: } -23376: else { -23376: s << " - "; -23376: neg_assign(it); -23376: } -23376: } -23376: else { -23376: first = false; -23376: } -23376: s << it; -23376: } -23376: -23376: if (first) { -23376: -23376: s << Coefficient_zero(); -23376: } -23376: } -23376: -23376: template -23376: Coefficient_traits::const_reference -23376: Linear_Expression_Impl::get(dimension_type i) const { -23376: return row.get(i); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::set(dimension_type i, Coefficient_traits::const_reference n) { -23376: if (n == 0) { -23376: row.reset(i); -23376: } -23376: else { -23376: row.insert(i, n); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::exact_div_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end) { -23376: -23376: -23376: -23376: for (typename Row::iterator i = row.lower_bound(start), -23376: i_end = row.lower_bound(end); i != i_end; ++i) { -23376: Parma_Polyhedra_Library::exact_div_assign(*i, *i, c); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::mul_assign(Coefficient_traits::const_reference c, -23376: dimension_type start, dimension_type end) { -23376: if (c == 0) { -23376: typename Row::iterator i = row.lower_bound(start); -23376: const typename Row::iterator& i_end = row.end(); -23376: while (i != i_end && i.index() < end) { -23376: i = row.reset(i); -23376: } -23376: } -23376: else { -23376: for (typename Row::iterator -23376: i = row.lower_bound(start), i_end = row.lower_bound(end); -23376: i != i_end; ++i) { -23376: (*i) *= c; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) { -23376: Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine_lax(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: if (c1 == 0) { -23376: if (c2 == 0) { -23376: ((void) 0); -23376: ((void) 0); -23376: typename Row::iterator i = row.lower_bound(start); -23376: const typename Row::iterator& i_end = row.end(); -23376: while (i != i_end && i.index() < end) { -23376: i = row.reset(i); -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: typename Row::iterator i = row.lower_bound(start); -23376: const typename Row::iterator& i_end = row.end(); -23376: typename Row2::const_iterator j = y.row.lower_bound(start); -23376: typename Row2::const_iterator j_last = y.row.lower_bound(end); -23376: -23376: while (i != i_end && i.index() < end && j != j_last) { -23376: if (i.index() < j.index()) { -23376: i = row.reset(i); -23376: continue; -23376: } -23376: if (i.index() > j.index()) { -23376: i = row.insert(i, j.index(), *j); -23376: (*i) *= c2; -23376: ++i; -23376: ++j; -23376: continue; -23376: } -23376: ((void) 0); -23376: (*i) = (*j); -23376: (*i) *= c2; -23376: ++i; -23376: ++j; -23376: } -23376: while (i != i_end && i.index() < end) { -23376: i = row.reset(i); -23376: } -23376: while (j != j_last) { -23376: i = row.insert(i, j.index(), *j); -23376: (*i) *= c2; -23376: -23376: ++j; -23376: } -23376: } -23376: } -23376: else { -23376: if (c2 == 0) { -23376: ((void) 0); -23376: ((void) 0); -23376: for (typename Row::iterator i = row.lower_bound(start), -23376: i_end = row.lower_bound(end); i != i_end; ++i) { -23376: (*i) *= c1; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: ((void) 0); -23376: Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::sign_normalize() { -23376: typename Row::iterator i = row.lower_bound(1); -23376: typename Row::iterator i_end = row.end(); -23376: -23376: for ( ; i != i_end; ++i) { -23376: if (*i != 0) { -23376: break; -23376: } -23376: } -23376: -23376: if (i != i_end && *i < 0) { -23376: for ( ; i != i_end; ++i) { -23376: neg_assign(*i); -23376: } -23376: -23376: typename Row::iterator first = row.begin(); -23376: if (first != row.end() && first.index() == 0) { -23376: neg_assign(*first); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::negate(dimension_type first, dimension_type last) { -23376: ((void) 0); -23376: ((void) 0); -23376: typename Row::iterator i = row.lower_bound(first); -23376: typename Row::iterator i_end = row.lower_bound(last); -23376: for ( ; i != i_end; ++i) { -23376: neg_assign(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl::construct(const Linear_Expression_Impl& e) { -23376: row = e.row; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl::construct(const Linear_Expression_Impl& e, -23376: dimension_type space_dim) { -23376: Row x(e.row, space_dim + 1, space_dim + 1); -23376: swap(row, x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::scalar_product_assign(Coefficient& result, -23376: const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end) const { -23376: const Linear_Expression_Impl& x = *this; -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: result = 0; -23376: typename Row ::const_iterator x_i = x.row.lower_bound(start); -23376: typename Row ::const_iterator x_end = x.row.lower_bound(end); -23376: typename Row2::const_iterator y_i = y.row.lower_bound(start); -23376: typename Row2::const_iterator y_end = y.row.lower_bound(end); -23376: while (x_i != x_end && y_i != y_end) { -23376: if (x_i.index() == y_i.index()) { -23376: Parma_Polyhedra_Library::add_mul_assign(result, *x_i, *y_i); -23376: ++x_i; -23376: ++y_i; -23376: } -23376: else { -23376: if (x_i.index() < y_i.index()) { -23376: ((void) 0); -23376: -23376: ++x_i; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: ++y_i; -23376: } -23376: } -23376: } -23376: -23376: -23376: } -23376: -23376: template -23376: template -23376: int -23376: Linear_Expression_Impl -23376: ::scalar_product_sign(const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end) const { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_result; Parma_Polyhedra_Library::Coefficient& result = holder_result.item(); -23376: scalar_product_assign(result, y, start, end); -23376: return sgn(result); -23376: } -23376: -23376: template -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Impl& y, -23376: dimension_type start, dimension_type end) const { -23376: const Linear_Expression_Impl& x = *this; -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: typename Row::const_iterator i = x.row.lower_bound(start); -23376: typename Row::const_iterator i_end = x.row.lower_bound(end); -23376: typename Row2::const_iterator j = y.row.lower_bound(start); -23376: typename Row2::const_iterator j_end = y.row.lower_bound(end); -23376: while (i != i_end && j != j_end) { -23376: if (i.index() == j.index()) { -23376: if (*i != *j) { -23376: return false; -23376: } -23376: ++i; -23376: ++j; -23376: } -23376: else { -23376: if (i.index() < j.index()) { -23376: if (*i != 0) { -23376: return false; -23376: } -23376: ++i; -23376: } -23376: else { -23376: ((void) 0); -23376: if (*j != 0) { -23376: return false; -23376: } -23376: ++j; -23376: } -23376: } -23376: } -23376: for ( ; i != i_end; ++i) { -23376: if (*i != 0) { -23376: return false; -23376: } -23376: } -23376: for ( ; j != j_end; ++j) { -23376: if (*j != 0) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Impl& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: const Linear_Expression_Impl& x = *this; -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: if (c1 == 0) { -23376: if (c2 == 0) { -23376: return true; -23376: } -23376: else { -23376: return y.all_zeroes(start, end); -23376: } -23376: } -23376: if (c2 == 0) { -23376: return x.all_zeroes(start, end); -23376: } -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: typename Row::const_iterator i = x.row.lower_bound(start); -23376: typename Row::const_iterator i_end = x.row.lower_bound(end); -23376: typename Row2::const_iterator j = y.row.lower_bound(start); -23376: typename Row2::const_iterator j_end = y.row.lower_bound(end); -23376: while (i != i_end && j != j_end) { -23376: if (i.index() == j.index()) { -23376: if ((*i) * c1 != (*j) * c2) { -23376: return false; -23376: } -23376: ++i; -23376: ++j; -23376: } -23376: else { -23376: if (i.index() < j.index()) { -23376: if (*i != 0) { -23376: return false; -23376: } -23376: ++i; -23376: } -23376: else { -23376: ((void) 0); -23376: if (*j != 0) { -23376: return false; -23376: } -23376: ++j; -23376: } -23376: } -23376: } -23376: for ( ; i != i_end; ++i) { -23376: if (*i != 0) { -23376: return false; -23376: } -23376: } -23376: for ( ; j != j_end; ++j) { -23376: if (*j != 0) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Interface& y, Variable v) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, v); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, v); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, c1, c2); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, c1, c2); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine_lax(*p, c1, c2); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine_lax(*p, c1, c2); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Interface& y) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl -23376: ::operator+=(const Linear_Expression_Interface& y) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return operator+=(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return operator+=(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return *this; -23376: } -23376: } -23376: -23376: template -23376: Linear_Expression_Impl& -23376: Linear_Expression_Impl -23376: ::operator-=(const Linear_Expression_Interface& y) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return operator-=(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return operator-=(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return *this; -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::add_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& y) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: add_mul_assign(factor, *p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: add_mul_assign(factor, *p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::sub_mul_assign(Coefficient_traits::const_reference factor, -23376: const Linear_Expression_Interface& y) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: sub_mul_assign(factor, *p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: sub_mul_assign(factor, *p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Interface& y, dimension_type i) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, i); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, i); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, c1, c2, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine(*p, c1, c2, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::linear_combine_lax(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: linear_combine_lax(*p, c1, c2, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: linear_combine_lax(*p, c1, c2, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: int -23376: Linear_Expression_Impl -23376: ::compare(const Linear_Expression_Interface& y) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return compare(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return compare(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return 0; -23376: } -23376: } -23376: -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::construct(const Linear_Expression_Interface& y) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return construct(*p); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return construct(*p); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::construct(const Linear_Expression_Interface& y, -23376: dimension_type space_dim) { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return construct(*p, space_dim); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return construct(*p, space_dim); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl -23376: ::scalar_product_assign(Coefficient& result, -23376: const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: scalar_product_assign(result, *p, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: scalar_product_assign(result, *p, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: int -23376: Linear_Expression_Impl -23376: ::scalar_product_sign(const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return scalar_product_sign(*p, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return scalar_product_sign(*p, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return 0; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Interface& y, -23376: dimension_type start, dimension_type end) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::is_equal_to(const Linear_Expression_Interface& y, -23376: Coefficient_traits::const_reference c1, -23376: Coefficient_traits::const_reference c2, -23376: dimension_type start, dimension_type end) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p, c1, c2, start, end); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return is_equal_to(*p, c1, c2, start, end); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl -23376: ::have_a_common_variable(const Linear_Expression_Interface& y, -23376: Variable first, Variable last) const { -23376: typedef const Linear_Expression_Impl* Dense_Ptr; -23376: typedef const Linear_Expression_Impl* Sparse_Ptr; -23376: if (const Dense_Ptr p = dynamic_cast(&y)) { -23376: return have_a_common_variable(*p, first, last); -23376: } -23376: else if (const Sparse_Ptr p = dynamic_cast(&y)) { -23376: return have_a_common_variable(*p, first, last); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: Linear_Expression_Interface::const_iterator_interface* -23376: Linear_Expression_Impl::begin() const { -23376: return new const_iterator(row, 1); -23376: } -23376: -23376: template -23376: Linear_Expression_Interface::const_iterator_interface* -23376: Linear_Expression_Impl::end() const { -23376: return new const_iterator(row, row.size()); -23376: } -23376: -23376: template -23376: Linear_Expression_Interface::const_iterator_interface* -23376: Linear_Expression_Impl::lower_bound(Variable v) const { -23376: return new const_iterator(row, v.space_dimension()); -23376: } -23376: -23376: template -23376: Linear_Expression_Impl::const_iterator -23376: ::const_iterator(const Row& r, dimension_type i) -23376: : row(&r), itr(r.lower_bound(i)) { -23376: skip_zeroes_forward(); -23376: } -23376: -23376: template -23376: Linear_Expression_Interface::const_iterator_interface* -23376: Linear_Expression_Impl::const_iterator -23376: ::clone() const { -23376: return new const_iterator(*this); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::const_iterator -23376: ::operator++() { -23376: ++itr; -23376: skip_zeroes_forward(); -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::const_iterator -23376: ::operator--() { -23376: --itr; -23376: skip_zeroes_backward(); -23376: } -23376: -23376: template -23376: typename Linear_Expression_Impl::const_iterator::reference -23376: Linear_Expression_Impl::const_iterator -23376: ::operator*() const { -23376: return *itr; -23376: } -23376: -23376: template -23376: Variable -23376: Linear_Expression_Impl::const_iterator -23376: ::variable() const { -23376: const dimension_type i = itr.index(); -23376: ((void) 0); -23376: return Variable(i - 1); -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl::const_iterator -23376: ::operator==(const const_iterator_interface& x) const { -23376: const const_iterator* const p = dynamic_cast(&x); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: return itr == p->itr; -23376: } -23376: -23376: template -23376: void -23376: Linear_Expression_Impl::ascii_dump(std::ostream& s) const { -23376: s << "size " << (space_dimension() + 1) << " "; -23376: for (dimension_type i = 0; i < row.size(); ++i) { -23376: s << row.get(i); -23376: if (i != row.size() - 1) { -23376: s << ' '; -23376: } -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl::ascii_load(std::istream& s) { -23376: std::string str; -23376: -23376: if (!(s >> str)) { -23376: return false; -23376: } -23376: if (str != "size") { -23376: return false; -23376: } -23376: -23376: dimension_type new_size; -23376: if (!(s >> new_size)) { -23376: return false; -23376: } -23376: -23376: row.resize(0); -23376: row.resize(new_size); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; Parma_Polyhedra_Library::Coefficient& c = holder_c.item(); -23376: -23376: for (dimension_type j = 0; j < new_size; ++j) { -23376: if (!(s >> c)) { -23376: return false; -23376: } -23376: if (c != 0) { -23376: row.insert(j, c); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Linear_Expression_Impl::OK() const { -23376: return row.OK(); -23376: } -23376: -23376: } -23376: # 905 "../../src/Linear_Expression_Impl_defs.hh" 2 -23376: # 9 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/Linear_Form_templates.hh" 1 -23376: # 29 "../../src/Linear_Form_templates.hh" -23376: # 1 "../../src/Box_defs.hh" 1 -23376: # 42 "../../src/Box_defs.hh" -23376: # 1 "../../src/Poly_Con_Relation_types.hh" 1 -23376: # 16 "../../src/Poly_Con_Relation_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Poly_Con_Relation; -23376: -23376: } -23376: # 43 "../../src/Box_defs.hh" 2 -23376: # 1 "../../src/Poly_Gen_Relation_types.hh" 1 -23376: # 16 "../../src/Poly_Gen_Relation_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Poly_Gen_Relation; -23376: -23376: } -23376: # 44 "../../src/Box_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/Partially_Reduced_Product_types.hh" 1 -23376: # 16 "../../src/Partially_Reduced_Product_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Smash_Reduction; -23376: -23376: template -23376: class Constraints_Reduction; -23376: -23376: template -23376: class Congruences_Reduction; -23376: -23376: template -23376: class Shape_Preserving_Reduction; -23376: -23376: template -23376: class No_Reduction; -23376: -23376: template -23376: class Partially_Reduced_Product; -23376: -23376: } -23376: # 47 "../../src/Box_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: struct Interval_Base; -23376: -23376: -23376: -23376: template -23376: void swap(Box& x, Box& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const Box& x, const Box& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const Box& x, const Box& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: template -23376: std::ostream& operator<<(std::ostream& s, const Box& box); -23376: -23376: } -23376: # 98 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 116 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 134 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 155 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 173 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 191 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 212 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 230 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir); -23376: # 248 "../../src/Box_defs.hh" -23376: template -23376: bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: l_m_distance_assign(Checked_Number& r, -23376: const Box& x, const Box& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: -23376: } -23376: # 298 "../../src/Box_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Box { -23376: public: -23376: -23376: typedef ITV interval_type; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_constraint_systems(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_congruence_systems(); -23376: # 328 "../../src/Box_defs.hh" -23376: explicit Box(dimension_type num_dimensions = 0, -23376: Degenerate_Element kind = UNIVERSE); -23376: -23376: -23376: -23376: -23376: -23376: Box(const Box& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit Box(const Box& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 356 "../../src/Box_defs.hh" -23376: explicit Box(const Constraint_System& cs); -23376: # 372 "../../src/Box_defs.hh" -23376: Box(const Constraint_System& cs, Recycle_Input dummy); -23376: # 382 "../../src/Box_defs.hh" -23376: explicit Box(const Generator_System& gs); -23376: # 399 "../../src/Box_defs.hh" -23376: Box(const Generator_System& gs, Recycle_Input dummy); -23376: # 411 "../../src/Box_defs.hh" -23376: explicit Box(const Congruence_System& cgs); -23376: # 427 "../../src/Box_defs.hh" -23376: Box(const Congruence_System& cgs, Recycle_Input dummy); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit Box(const BD_Shape& bds, -23376: Complexity_Class complexity = POLYNOMIAL_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit Box(const Octagonal_Shape& oct, -23376: Complexity_Class complexity = POLYNOMIAL_COMPLEXITY); -23376: # 454 "../../src/Box_defs.hh" -23376: explicit Box(const Polyhedron& ph, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: -23376: explicit Box(const Grid& gr, -23376: Complexity_Class complexity = POLYNOMIAL_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit Box(const Partially_Reduced_Product& dp, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: Box& operator=(const Box& y); -23376: -23376: -23376: -23376: -23376: -23376: void m_swap(Box& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type affine_dimension() const; -23376: -23376: -23376: bool is_empty() const; -23376: -23376: -23376: bool is_universe() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_topologically_closed() const; -23376: -23376: -23376: bool is_discrete() const; -23376: -23376: -23376: bool is_bounded() const; -23376: -23376: -23376: -23376: -23376: -23376: bool contains_integer_point() const; -23376: # 532 "../../src/Box_defs.hh" -23376: bool constrains(Variable var) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Constraint& c) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation relation_with(const Generator& g) const; -23376: # 562 "../../src/Box_defs.hh" -23376: bool bounds_from_above(const Linear_Expression& expr) const; -23376: # 571 "../../src/Box_defs.hh" -23376: bool bounds_from_below(const Linear_Expression& expr) const; -23376: # 597 "../../src/Box_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const; -23376: # 628 "../../src/Box_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const; -23376: # 656 "../../src/Box_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const; -23376: # 687 "../../src/Box_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const; -23376: # 719 "../../src/Box_defs.hh" -23376: bool frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool contains(const Box& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strictly_contains(const Box& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_disjoint_from(const Box& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool OK() const; -23376: # 769 "../../src/Box_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 783 "../../src/Box_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: # 801 "../../src/Box_defs.hh" -23376: void add_recycled_constraints(Constraint_System& cs); -23376: # 813 "../../src/Box_defs.hh" -23376: void add_congruence(const Congruence& cg); -23376: # 826 "../../src/Box_defs.hh" -23376: void add_congruences(const Congruence_System& cgs); -23376: # 844 "../../src/Box_defs.hh" -23376: void add_recycled_congruences(Congruence_System& cgs); -23376: # 855 "../../src/Box_defs.hh" -23376: void refine_with_constraint(const Constraint& c); -23376: # 876 "../../src/Box_defs.hh" -23376: void refine_with_constraints(const Constraint_System& cs); -23376: # 887 "../../src/Box_defs.hh" -23376: void refine_with_congruence(const Congruence& cg); -23376: # 898 "../../src/Box_defs.hh" -23376: void refine_with_congruences(const Congruence_System& cgs); -23376: # 909 "../../src/Box_defs.hh" -23376: void propagate_constraint(const Constraint& c); -23376: # 928 "../../src/Box_defs.hh" -23376: void propagate_constraints(const Constraint_System& cs, -23376: dimension_type max_iterations = 0); -23376: # 941 "../../src/Box_defs.hh" -23376: void unconstrain(Variable var); -23376: # 955 "../../src/Box_defs.hh" -23376: void unconstrain(const Variables_Set& vars); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void intersection_assign(const Box& y); -23376: # 971 "../../src/Box_defs.hh" -23376: void upper_bound_assign(const Box& y); -23376: # 981 "../../src/Box_defs.hh" -23376: bool upper_bound_assign_if_exact(const Box& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void difference_assign(const Box& y); -23376: # 999 "../../src/Box_defs.hh" -23376: bool simplify_using_context_assign(const Box& y); -23376: # 1022 "../../src/Box_defs.hh" -23376: void affine_image(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1048 "../../src/Box_defs.hh" -23376: void affine_form_image(Variable var, -23376: const Linear_Form& lf); -23376: # 1071 "../../src/Box_defs.hh" -23376: void affine_preimage(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1100 "../../src/Box_defs.hh" -23376: void generalized_affine_image(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1130 "../../src/Box_defs.hh" -23376: void -23376: generalized_affine_preimage(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1155 "../../src/Box_defs.hh" -23376: void generalized_affine_image(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1177 "../../src/Box_defs.hh" -23376: void generalized_affine_preimage(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1206 "../../src/Box_defs.hh" -23376: void bounded_affine_image(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1237 "../../src/Box_defs.hh" -23376: void bounded_affine_preimage(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1250 "../../src/Box_defs.hh" -23376: void time_elapse_assign(const Box& y); -23376: -23376: -23376: void topological_closure_assign(); -23376: # 1295 "../../src/Box_defs.hh" -23376: void wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p = 0, -23376: unsigned complexity_threshold = 16, -23376: bool wrap_individually = true); -23376: # 1314 "../../src/Box_defs.hh" -23376: void drop_some_non_integer_points(Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1332 "../../src/Box_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1351 "../../src/Box_defs.hh" -23376: template -23376: typename Enable_If::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: CC76_widening_assign(const T& y, unsigned* tp = 0); -23376: # 1373 "../../src/Box_defs.hh" -23376: template -23376: typename Enable_If::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: CC76_widening_assign(const T& y, -23376: Iterator first, Iterator last); -23376: -23376: -23376: void widening_assign(const Box& y, unsigned* tp = 0); -23376: # 1403 "../../src/Box_defs.hh" -23376: void limited_CC76_extrapolation_assign(const Box& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1426 "../../src/Box_defs.hh" -23376: template -23376: typename Enable_If::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: CC76_narrowing_assign(const T& y); -23376: # 1455 "../../src/Box_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 1478 "../../src/Box_defs.hh" -23376: void add_space_dimensions_and_project(dimension_type m); -23376: # 1503 "../../src/Box_defs.hh" -23376: void concatenate_assign(const Box& y); -23376: # 1514 "../../src/Box_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: # 1524 "../../src/Box_defs.hh" -23376: void remove_higher_space_dimensions(dimension_type new_dimension); -23376: # 1563 "../../src/Box_defs.hh" -23376: template -23376: void map_space_dimensions(const Partial_Function& pfunc); -23376: # 1587 "../../src/Box_defs.hh" -23376: void expand_space_dimension(Variable var, dimension_type m); -23376: # 1612 "../../src/Box_defs.hh" -23376: void fold_space_dimensions(const Variables_Set& vars, Variable dest); -23376: # 1622 "../../src/Box_defs.hh" -23376: const ITV& get_interval(Variable var) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_interval(Variable var, const ITV& i); -23376: # 1663 "../../src/Box_defs.hh" -23376: bool has_lower_bound(Variable var, -23376: Coefficient& n, Coefficient& d, bool& closed) const; -23376: # 1697 "../../src/Box_defs.hh" -23376: bool has_upper_bound(Variable var, -23376: Coefficient& n, Coefficient& d, bool& closed) const; -23376: -23376: -23376: Constraint_System constraints() const; -23376: -23376: -23376: Constraint_System minimized_constraints() const; -23376: -23376: -23376: Congruence_System congruences() const; -23376: -23376: -23376: Congruence_System minimized_congruences() const; -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int32_t hash_code() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: # 1735 "../../src/Box_defs.hh" -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: template -23376: friend class Parma_Polyhedra_Library::Box; -23376: -23376: friend bool -23376: operator==(const Box& x, const Box& y); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library -23376: ::IO_Operators::operator<<<>(std::ostream& s, const Box& box); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::l_m_distance_assign(Checked_Number& r, -23376: const Box& x, const Box& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: -23376: -23376: typedef std::vector Sequence; -23376: -23376: -23376: -23376: -23376: -23376: typedef ITV Tmp_Interval_Type; -23376: -23376: -23376: Sequence seq; -23376: -23376: -23376: # 1 "../../src/Box_Status_idefs.hh" 1 -23376: # 43 "../../src/Box_Status_idefs.hh" -23376: class Status; -23376: -23376: class Status { -23376: public: -23376: -23376: Status(); -23376: -23376: -23376: Status(const Status& y); -23376: -23376: -23376: template -23376: Status(const typename Box::Status& y); -23376: -23376: -23376: -23376: bool test_empty_up_to_date() const; -23376: void reset_empty_up_to_date(); -23376: void set_empty_up_to_date(); -23376: -23376: bool test_empty() const; -23376: void reset_empty(); -23376: void set_empty(); -23376: -23376: bool test_universe() const; -23376: void reset_universe(); -23376: void set_universe(); -23376: -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t NONE = 0U; -23376: static const flags_t EMPTY_UP_TO_DATE = 1U << 0; -23376: static const flags_t EMPTY = 1U << 1; -23376: static const flags_t UNIVERSE = 1U << 2; -23376: -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: Status(flags_t mask); -23376: -23376: -23376: bool test_all(flags_t mask) const; -23376: -23376: -23376: bool test_any(flags_t mask) const; -23376: -23376: -23376: void set(flags_t mask); -23376: -23376: -23376: void reset(flags_t mask); -23376: }; -23376: # 1769 "../../src/Box_defs.hh" 2 -23376: -23376: -23376: -23376: Status status; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool marked_empty() const; -23376: -23376: public: -23376: -23376: void set_empty(); -23376: -23376: private: -23376: -23376: void set_nonempty(); -23376: -23376: -23376: void set_empty_up_to_date(); -23376: -23376: -23376: void reset_empty_up_to_date(); -23376: -23376: -23376: -23376: -23376: -23376: bool check_empty() const; -23376: -23376: -23376: -23376: -23376: -23376: const ITV& operator[](dimension_type k) const; -23376: -23376: -23376: -23376: -23376: static I_Result -23376: refine_interval_no_check(ITV& itv, -23376: Constraint::Type type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom); -23376: -23376: -23376: -23376: -23376: void -23376: add_interval_constraint_no_check(dimension_type var_id, -23376: Constraint::Type type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom); -23376: -23376: -23376: -23376: -23376: void add_constraint_no_check(const Constraint& c); -23376: -23376: -23376: -23376: -23376: void add_constraints_no_check(const Constraint_System& cs); -23376: -23376: -23376: -23376: -23376: void add_congruence_no_check(const Congruence& cg); -23376: -23376: -23376: -23376: -23376: void add_congruences_no_check(const Congruence_System& cgs); -23376: # 1856 "../../src/Box_defs.hh" -23376: void refine_no_check(const Constraint& c); -23376: # 1870 "../../src/Box_defs.hh" -23376: void refine_no_check(const Constraint_System& cs); -23376: # 1883 "../../src/Box_defs.hh" -23376: void refine_no_check(const Congruence& cg); -23376: # 1896 "../../src/Box_defs.hh" -23376: void refine_no_check(const Congruence_System& cgs); -23376: # 2058 "../../src/Box_defs.hh" -23376: void propagate_constraint_no_check(const Constraint& c); -23376: # 2078 "../../src/Box_defs.hh" -23376: void propagate_constraints_no_check(const Constraint_System& cs, -23376: dimension_type max_iterations); -23376: # 2098 "../../src/Box_defs.hh" -23376: bool bounds(const Linear_Expression& expr, bool from_above) const; -23376: # 2130 "../../src/Box_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included, -23376: Generator& g) const; -23376: # 2160 "../../src/Box_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included) const; -23376: -23376: -23376: -23376: -23376: -23376: void get_limiting_box(const Constraint_System& cs, -23376: Box& limiting_box) const; -23376: -23376: -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Box& y) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Constraint_System& cs) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Congruence_System& cgs) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Generator& g) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const; -23376: -23376: template -23376: void throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const; -23376: -23376: static void throw_constraint_incompatible(const char* method); -23376: -23376: static void throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le); -23376: -23376: static void throw_invalid_argument(const char* method, const char* reason); -23376: -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: # 2237 "../../src/Box_defs.hh" -23376: template -23376: Poly_Con_Relation -23376: interval_relation(const ITV& i, -23376: const Constraint::Type constraint_type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom -23376: = Coefficient_one()); -23376: -23376: class Box_Helpers { -23376: public: -23376: # 2271 "../../src/Box_defs.hh" -23376: static bool extract_interval_constraint(const Constraint& c, -23376: dimension_type& c_num_vars, -23376: dimension_type& c_only_var); -23376: -23376: -23376: -23376: static bool extract_interval_congruence(const Congruence& cg, -23376: dimension_type& cg_num_vars, -23376: dimension_type& cg_only_var); -23376: }; -23376: -23376: } -23376: -23376: # 1 "../../src/Box_Status_inlines.hh" 1 -23376: # 29 "../../src/Box_Status_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Box::Status::Status(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: template -23376: inline -23376: Box::Status::Status(const Status& y) -23376: : flags(y.flags) { -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Box::Status::Status(const typename Box::Status& y) -23376: : flags(y.flags) { -23376: } -23376: -23376: template -23376: inline -23376: Box::Status::Status() -23376: : flags(NONE) { -23376: } -23376: -23376: template -23376: inline bool -23376: Box::Status::test_all(flags_t mask) const { -23376: return (flags & mask) == mask; -23376: } -23376: -23376: template -23376: inline bool -23376: Box::Status::test_any(flags_t mask) const { -23376: return (flags & mask) != 0; -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::set(flags_t mask) { -23376: flags |= mask; -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::reset(flags_t mask) { -23376: flags &= ~mask; -23376: } -23376: -23376: template -23376: inline bool -23376: Box::Status::test_empty_up_to_date() const { -23376: return test_any(EMPTY_UP_TO_DATE); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::reset_empty_up_to_date() { -23376: reset(EMPTY_UP_TO_DATE); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::set_empty_up_to_date() { -23376: set(EMPTY_UP_TO_DATE); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::Status::test_empty() const { -23376: return test_any(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::reset_empty() { -23376: reset(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::set_empty() { -23376: set(EMPTY); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::Status::test_universe() const { -23376: return test_any(UNIVERSE); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::reset_universe() { -23376: reset(UNIVERSE); -23376: } -23376: -23376: template -23376: inline void -23376: Box::Status::set_universe() { -23376: set(UNIVERSE); -23376: } -23376: -23376: template -23376: bool -23376: Box::Status::OK() const { -23376: if (test_empty_up_to_date() -23376: && test_empty() -23376: && test_universe()) { -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: -23376: namespace Implementation { -23376: -23376: namespace Boxes { -23376: -23376: -23376: extern const char* empty_up_to_date; -23376: extern const char* empty; -23376: extern const char* universe; -23376: const char yes = '+'; -23376: const char no = '-'; -23376: const char separator = ' '; -23376: # 172 "../../src/Box_Status_inlines.hh" -23376: inline bool -23376: get_field(std::istream& s, const char* keyword, bool& positive) { -23376: std::string str; -23376: if (!(s >> str) -23376: || (str[0] != yes && str[0] != no) -23376: || str.substr(1) != keyword) { -23376: return false; -23376: } -23376: positive = (str[0] == yes); -23376: return true; -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: template -23376: void -23376: Box::Status::ascii_dump(std::ostream& s) const { -23376: using namespace Implementation::Boxes; -23376: s << (test_empty_up_to_date() ? yes : no) << empty_up_to_date << separator -23376: << (test_empty() ? yes : no) << empty << separator -23376: << (test_universe() ? yes : no) << universe << separator; -23376: } -23376: -23376: template void Box::Status::ascii_dump() const { ascii_dump(std::cerr); } template void Box::Status::print() const { std::cerr << "No user level output operator defined " << "for " "Box::Status" << "." << std::endl; } -23376: -23376: template -23376: bool -23376: Box::Status::ascii_load(std::istream& s) { -23376: using namespace Implementation::Boxes; -23376: bool positive = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: if (!get_field(s, Implementation::Boxes::empty_up_to_date, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_empty_up_to_date(); -23376: } -23376: -23376: if (!get_field(s, Implementation::Boxes::empty, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_empty(); -23376: } -23376: if (!get_field(s, universe, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_universe(); -23376: } -23376: else { -23376: reset_universe(); -23376: } -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: } -23376: # 2285 "../../src/Box_defs.hh" 2 -23376: # 1 "../../src/Box_inlines.hh" 1 -23376: # 28 "../../src/Box_inlines.hh" -23376: # 1 "../../src/Constraint_System_defs.hh" 1 -23376: # 29 "../../src/Constraint_System_defs.hh" -23376: # 1 "../../src/Linear_System_defs.hh" 1 -23376: # 29 "../../src/Linear_System_defs.hh" -23376: # 1 "../../src/Swapping_Vector_defs.hh" 1 -23376: # 27 "../../src/Swapping_Vector_defs.hh" -23376: # 1 "../../src/Swapping_Vector_types.hh" 1 -23376: # 16 "../../src/Swapping_Vector_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Swapping_Vector; -23376: -23376: } -23376: # 28 "../../src/Swapping_Vector_defs.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: class Swapping_Vector { -23376: -23376: public: -23376: typedef typename std::vector::const_iterator const_iterator; -23376: typedef typename std::vector::iterator iterator; -23376: typedef typename std::vector::size_type size_type; -23376: -23376: Swapping_Vector(); -23376: explicit Swapping_Vector(dimension_type new_size); -23376: Swapping_Vector(dimension_type new_size, const T& x); -23376: -23376: void clear(); -23376: void reserve(dimension_type new_capacity); -23376: void resize(dimension_type new_size); -23376: void resize(dimension_type new_size, const T& x); -23376: -23376: dimension_type size() const; -23376: dimension_type capacity() const; -23376: bool empty() const; -23376: -23376: void m_swap(Swapping_Vector& v); -23376: -23376: T& operator[](dimension_type i); -23376: const T& operator[](dimension_type i) const; -23376: -23376: T& back(); -23376: const T& back() const; -23376: -23376: void push_back(const T& x); -23376: void pop_back(); -23376: -23376: iterator begin(); -23376: iterator end(); -23376: const_iterator begin() const; -23376: const_iterator end() const; -23376: -23376: iterator erase(iterator itr); -23376: iterator erase(iterator first, iterator last); -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: dimension_type max_num_rows(); -23376: -23376: private: -23376: std::vector impl; -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: void swap(Swapping_Vector& x, Swapping_Vector& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Swapping_Vector_inlines.hh" 1 -23376: # 29 "../../src/Swapping_Vector_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Swapping_Vector::Swapping_Vector() -23376: : impl() { -23376: } -23376: -23376: template -23376: inline -23376: Swapping_Vector::Swapping_Vector(dimension_type i) -23376: : impl() { -23376: -23376: -23376: resize(i); -23376: } -23376: -23376: template -23376: inline -23376: Swapping_Vector::Swapping_Vector(dimension_type new_size, const T& x) -23376: : impl() { -23376: resize(new_size, x); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::clear() { -23376: impl.clear(); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::reserve(dimension_type new_capacity) { -23376: if (impl.capacity() < new_capacity) { -23376: -23376: std::vector new_impl; -23376: -23376: new_impl.reserve(compute_capacity(new_capacity, max_num_rows())); -23376: new_impl.resize(impl.size()); -23376: -23376: using std::swap; -23376: -23376: -23376: for (dimension_type i = impl.size(); i-- > 0; ) { -23376: swap(new_impl[i], impl[i]); -23376: } -23376: -23376: -23376: swap(impl, new_impl); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::resize(dimension_type new_size) { -23376: reserve(new_size); -23376: impl.resize(new_size); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::resize(dimension_type new_size, const T& x) { -23376: reserve(new_size); -23376: impl.resize(new_size, x); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Swapping_Vector::size() const { -23376: return impl.size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Swapping_Vector::capacity() const { -23376: return impl.capacity(); -23376: } -23376: -23376: template -23376: inline bool -23376: Swapping_Vector::empty() const { -23376: return impl.empty(); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::m_swap(Swapping_Vector& v) { -23376: using std::swap; -23376: swap(impl, v.impl); -23376: } -23376: -23376: template -23376: inline T& -23376: Swapping_Vector::operator[](dimension_type i) { -23376: return impl[i]; -23376: } -23376: -23376: template -23376: inline const T& -23376: Swapping_Vector::operator[](dimension_type i) const { -23376: return impl[i]; -23376: } -23376: -23376: template -23376: inline T& -23376: Swapping_Vector::back() { -23376: return impl.back(); -23376: } -23376: -23376: template -23376: inline const T& -23376: Swapping_Vector::back() const { -23376: return impl.back(); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::push_back(const T& x) { -23376: reserve(size() + 1); -23376: impl.push_back(x); -23376: } -23376: -23376: template -23376: inline void -23376: Swapping_Vector::pop_back() { -23376: impl.pop_back(); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Swapping_Vector::external_memory_in_bytes() const { -23376: -23376: memory_size_type n = impl.capacity() * sizeof(T); -23376: for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) { -23376: n += i->external_memory_in_bytes(); -23376: } -23376: return n; -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::iterator -23376: Swapping_Vector::begin() { -23376: return impl.begin(); -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::iterator -23376: Swapping_Vector::end() { -23376: return impl.end(); -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::const_iterator -23376: Swapping_Vector::begin() const { -23376: return impl.begin(); -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::const_iterator -23376: Swapping_Vector::end() const { -23376: return impl.end(); -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::iterator -23376: Swapping_Vector::erase(iterator itr) { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type old_i = itr - begin(); -23376: dimension_type i = old_i; -23376: ++i; -23376: while (i != size()) { -23376: swap(impl[i-1], impl[i]); -23376: } -23376: impl.pop_back(); -23376: return begin() + old_i; -23376: } -23376: -23376: template -23376: inline typename Swapping_Vector::iterator -23376: Swapping_Vector::erase(iterator first, iterator last) { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: const iterator old_first = first; -23376: typedef typename std::iterator_traits::difference_type diff_t; -23376: const diff_t k = last - first; -23376: const dimension_type n = static_cast(end() - last); -23376: using std::swap; -23376: for (dimension_type i = 0; i < n; ++i, ++first) { -23376: swap(*first, *(first + k)); -23376: } -23376: impl.erase(end() - k, end()); -23376: return old_first; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Swapping_Vector::max_num_rows() { -23376: return impl.max_size(); -23376: } -23376: -23376: template -23376: inline void -23376: swap(Swapping_Vector& vec1, Swapping_Vector& vec2) { -23376: vec1.m_swap(vec2); -23376: } -23376: -23376: } -23376: # 95 "../../src/Swapping_Vector_defs.hh" 2 -23376: # 30 "../../src/Linear_System_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "../../src/Bit_Row_types.hh" 1 -23376: # 16 "../../src/Bit_Row_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Bit_Row; -23376: -23376: } -23376: # 36 "../../src/Linear_System_defs.hh" 2 -23376: # 1 "../../src/Bit_Matrix_types.hh" 1 -23376: # 16 "../../src/Bit_Matrix_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Bit_Matrix; -23376: -23376: } -23376: # 37 "../../src/Linear_System_defs.hh" 2 -23376: # 60 "../../src/Linear_System_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Linear_System { -23376: public: -23376: -23376: -23376: typedef typename Swapping_Vector::const_iterator iterator; -23376: typedef typename Swapping_Vector::const_iterator const_iterator; -23376: -23376: -23376: -23376: -23376: -23376: Linear_System(Topology topol, Representation r); -23376: # 88 "../../src/Linear_System_defs.hh" -23376: Linear_System(Topology topol, dimension_type space_dim, Representation r); -23376: # 98 "../../src/Linear_System_defs.hh" -23376: struct With_Pending { -23376: }; -23376: -23376: -23376: Linear_System(const Linear_System& y); -23376: -23376: -23376: -23376: Linear_System(const Linear_System& y, Representation r); -23376: -23376: -23376: Linear_System(const Linear_System& y, With_Pending); -23376: -23376: -23376: Linear_System(const Linear_System& y, Representation r, With_Pending); -23376: -23376: -23376: Linear_System& operator=(const Linear_System& y); -23376: -23376: -23376: void assign_with_pending(const Linear_System& y); -23376: -23376: -23376: void m_swap(Linear_System& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: # 141 "../../src/Linear_System_defs.hh" -23376: dimension_type space_dimension() const; -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: # 157 "../../src/Linear_System_defs.hh" -23376: void remove_row(dimension_type i, bool keep_sorted = false); -23376: # 167 "../../src/Linear_System_defs.hh" -23376: void remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted = false); -23376: # 177 "../../src/Linear_System_defs.hh" -23376: void remove_rows(const std::vector& indexes); -23376: # 186 "../../src/Linear_System_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: # 205 "../../src/Linear_System_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: -23376: -23376: -23376: const Row& operator[](dimension_type k) const; -23376: -23376: -23376: iterator begin(); -23376: iterator end(); -23376: const_iterator begin() const; -23376: const_iterator end() const; -23376: -23376: bool has_no_rows() const; -23376: dimension_type num_rows() const; -23376: -23376: -23376: void strong_normalize(); -23376: -23376: -23376: void sign_normalize(); -23376: -23376: -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: bool is_sorted() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_lines_or_equalities() const; -23376: -23376: -23376: dimension_type first_pending_row() const; -23376: -23376: -23376: dimension_type num_pending_rows() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool check_sorted() const; -23376: -23376: -23376: void set_topology(Topology t); -23376: -23376: -23376: void set_necessarily_closed(); -23376: -23376: -23376: void set_not_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_not_necessarily_closed(); -23376: -23376: -23376: void unset_pending_rows(); -23376: -23376: -23376: void set_index_first_pending_row(dimension_type i); -23376: -23376: -23376: void set_sorted(bool b); -23376: # 310 "../../src/Linear_System_defs.hh" -23376: void add_universe_rows_and_space_dimensions(dimension_type n); -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Row& r); -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(const Row& r); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Row& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(Row& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Linear_System& y); -23376: -23376: -23376: void insert_pending(const Linear_System& r); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Linear_System& r, Recycle_Input); -23376: -23376: -23376: -23376: void insert_pending(Linear_System& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void sort_rows(); -23376: -23376: -23376: -23376: -23376: -23376: void sort_rows(dimension_type first_row, dimension_type last_row); -23376: # 375 "../../src/Linear_System_defs.hh" -23376: void merge_rows_assign(const Linear_System& y); -23376: -23376: -23376: -23376: -23376: -23376: void sort_pending_and_remove_duplicates(); -23376: # 390 "../../src/Linear_System_defs.hh" -23376: void sort_and_remove_with_sat(Bit_Matrix& sat); -23376: # 404 "../../src/Linear_System_defs.hh" -23376: dimension_type gauss(dimension_type n_lines_or_equalities); -23376: # 416 "../../src/Linear_System_defs.hh" -23376: void back_substitute(dimension_type n_lines_or_equalities); -23376: -23376: -23376: -23376: -23376: -23376: void simplify(); -23376: -23376: -23376: void clear(); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: # 439 "../../src/Linear_System_defs.hh" -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Swapping_Vector rows; -23376: -23376: -23376: bool OK() const; -23376: -23376: private: -23376: # 469 "../../src/Linear_System_defs.hh" -23376: void remove_row_no_ok(dimension_type i, bool keep_sorted = false); -23376: # 478 "../../src/Linear_System_defs.hh" -23376: void insert_pending_no_ok(Row& r, Recycle_Input); -23376: # 487 "../../src/Linear_System_defs.hh" -23376: void insert_no_ok(Row& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_space_dimension_no_ok(dimension_type space_dim); -23376: # 506 "../../src/Linear_System_defs.hh" -23376: void swap_row_intervals(dimension_type first, dimension_type last, -23376: dimension_type offset); -23376: -23376: -23376: -23376: dimension_type space_dimension_; -23376: -23376: -23376: -23376: Topology row_topology; -23376: -23376: -23376: dimension_type index_first_pending; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool sorted; -23376: -23376: Representation representation_; -23376: -23376: -23376: struct Row_Less_Than { -23376: bool operator()(const Row& x, const Row& y) const; -23376: }; -23376: -23376: -23376: struct Unique_Compare { -23376: Unique_Compare(const Swapping_Vector& cont, -23376: dimension_type base = 0); -23376: -23376: bool operator()(dimension_type i, dimension_type j) const; -23376: -23376: const Swapping_Vector& container; -23376: const dimension_type base_index; -23376: }; -23376: -23376: friend class Polyhedron; -23376: friend class Generator_System; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void swap(Parma_Polyhedra_Library::Linear_System& x, -23376: Parma_Polyhedra_Library::Linear_System& y); -23376: -23376: } -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const Linear_System& x, const Linear_System& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const Linear_System& x, const Linear_System& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Linear_System_inlines.hh" 1 -23376: # 27 "../../src/Linear_System_inlines.hh" -23376: # 1 "../../src/Bit_Row_defs.hh" 1 -23376: # 33 "../../src/Bit_Row_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 45 "../../src/Bit_Row_defs.hh" -23376: void -23376: iter_swap(std::vector::iterator x, -23376: std::vector::iterator y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Bit_Row& x, const Bit_Row& y); -23376: # 77 "../../src/Bit_Row_defs.hh" -23376: int compare(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y); -23376: # 93 "../../src/Bit_Row_defs.hh" -23376: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y, -23376: bool& strict_subset); -23376: -23376: -23376: -23376: -23376: -23376: bool strict_subset(const Bit_Row& x, const Bit_Row& y); -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::Bit_Row { -23376: public: -23376: -23376: Bit_Row(); -23376: -23376: -23376: Bit_Row(const Bit_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: Bit_Row(const Bit_Row& y, const Bit_Row& z); -23376: -23376: -23376: ~Bit_Row(); -23376: -23376: -23376: Bit_Row& operator=(const Bit_Row& y); -23376: -23376: -23376: void m_swap(Bit_Row& y); -23376: -23376: -23376: bool operator[](unsigned long k) const; -23376: -23376: -23376: void set(unsigned long k); -23376: -23376: -23376: void set_until(unsigned long k); -23376: -23376: -23376: void clear(unsigned long k); -23376: -23376: -23376: void clear_from(unsigned long k); -23376: -23376: -23376: void clear(); -23376: -23376: -23376: void union_assign(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: void intersection_assign(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: void difference_assign(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: friend int compare(const Bit_Row& x, const Bit_Row& y); -23376: friend bool operator==(const Bit_Row& x, const Bit_Row& y); -23376: friend bool operator!=(const Bit_Row& x, const Bit_Row& y); -23376: friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y); -23376: friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y, -23376: bool& strict_subset); -23376: friend bool strict_subset(const Bit_Row& x, const Bit_Row& y); -23376: -23376: -23376: unsigned long first() const; -23376: -23376: -23376: -23376: -23376: -23376: unsigned long next(unsigned long position) const; -23376: -23376: -23376: unsigned long last() const; -23376: -23376: -23376: -23376: -23376: -23376: unsigned long prev(unsigned long position) const; -23376: -23376: -23376: unsigned long count_ones() const; -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: private: -23376: -23376: mpz_t vec; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void union_helper(const Bit_Row& y, const Bit_Row& z); -23376: }; -23376: -23376: # 1 "../../src/Bit_Row_inlines.hh" 1 -23376: # 40 "../../src/Bit_Row_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Bit_Row::Bit_Row() { -23376: -23376: # 44 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_init -23376: # 44 "../../src/Bit_Row_inlines.hh" -23376: (vec); -23376: } -23376: -23376: inline -23376: Bit_Row::Bit_Row(const Bit_Row& y) { -23376: -23376: # 49 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_init_set -23376: # 49 "../../src/Bit_Row_inlines.hh" -23376: (vec, y.vec); -23376: } -23376: -23376: inline -23376: Bit_Row::Bit_Row(const Bit_Row& y, const Bit_Row& z) { -23376: const mp_size_t y_size = y.vec->_mp_size; -23376: ((void) 0); -23376: const mp_size_t z_size = z.vec->_mp_size; -23376: ((void) 0); -23376: if (y_size < z_size) { -23376: ((void) 0) -23376: ; -23376: -23376: # 61 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_init2 -23376: # 61 "../../src/Bit_Row_inlines.hh" -23376: (vec, static_cast(z_size) * ((4) * static_cast(8))); -23376: union_helper(y, z); -23376: } -23376: else { -23376: ((void) 0) -23376: ; -23376: -23376: # 67 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_init2 -23376: # 67 "../../src/Bit_Row_inlines.hh" -23376: (vec, static_cast(y_size) * ((4) * static_cast(8))); -23376: union_helper(z, y); -23376: } -23376: } -23376: -23376: inline -23376: Bit_Row::~Bit_Row() { -23376: -23376: # 74 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_clear -23376: # 74 "../../src/Bit_Row_inlines.hh" -23376: (vec); -23376: } -23376: -23376: inline Bit_Row& -23376: Bit_Row::operator=(const Bit_Row& y) { -23376: -23376: # 79 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_set -23376: # 79 "../../src/Bit_Row_inlines.hh" -23376: (vec, y.vec); -23376: return *this; -23376: } -23376: -23376: inline void -23376: Bit_Row::set(const unsigned long k) { -23376: -23376: # 85 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_setbit -23376: # 85 "../../src/Bit_Row_inlines.hh" -23376: (vec, k); -23376: } -23376: -23376: inline void -23376: Bit_Row::clear(const unsigned long k) { -23376: -23376: # 90 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_clrbit -23376: # 90 "../../src/Bit_Row_inlines.hh" -23376: (vec, k); -23376: } -23376: -23376: inline void -23376: Bit_Row::clear_from(const unsigned long k) { -23376: -23376: # 95 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_tdiv_r_2exp -23376: # 95 "../../src/Bit_Row_inlines.hh" -23376: (vec, vec, k); -23376: } -23376: -23376: inline unsigned long -23376: Bit_Row::count_ones() const { -23376: const mp_size_t x_size = vec->_mp_size; -23376: ((void) 0); -23376: return (x_size == 0) ? 0 : -23376: # 102 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpn_popcount -23376: # 102 "../../src/Bit_Row_inlines.hh" -23376: (vec->_mp_d, x_size); -23376: } -23376: -23376: inline bool -23376: Bit_Row::empty() const { -23376: return -23376: # 107 "../../src/Bit_Row_inlines.hh" 3 4 -23376: (( -23376: # 107 "../../src/Bit_Row_inlines.hh" -23376: vec -23376: # 107 "../../src/Bit_Row_inlines.hh" 3 4 -23376: )->_mp_size < 0 ? -1 : ( -23376: # 107 "../../src/Bit_Row_inlines.hh" -23376: vec -23376: # 107 "../../src/Bit_Row_inlines.hh" 3 4 -23376: )->_mp_size > 0) -23376: # 107 "../../src/Bit_Row_inlines.hh" -23376: == 0; -23376: } -23376: -23376: inline void -23376: Bit_Row::m_swap(Bit_Row& y) { -23376: -23376: # 112 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_swap -23376: # 112 "../../src/Bit_Row_inlines.hh" -23376: (vec, y.vec); -23376: } -23376: -23376: inline void -23376: Bit_Row::clear() { -23376: -23376: # 117 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_set_ui -23376: # 117 "../../src/Bit_Row_inlines.hh" -23376: (vec, 0UL); -23376: } -23376: -23376: inline memory_size_type -23376: Bit_Row::external_memory_in_bytes() const { -23376: return static_cast(vec[0]._mp_alloc) * 4; -23376: } -23376: -23376: inline memory_size_type -23376: Bit_Row::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline void -23376: Bit_Row::union_assign(const Bit_Row& x, const Bit_Row& y) { -23376: const mp_size_t x_size = x.vec->_mp_size; -23376: ((void) 0); -23376: const mp_size_t y_size = y.vec->_mp_size; -23376: ((void) 0); -23376: if (x_size < y_size) { -23376: ((void) 0) -23376: ; -23376: -23376: # 139 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_realloc2 -23376: # 139 "../../src/Bit_Row_inlines.hh" -23376: (vec, static_cast(y_size) * ((4) * static_cast(8))); -23376: union_helper(x, y); -23376: } -23376: else { -23376: ((void) 0) -23376: ; -23376: -23376: # 145 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_realloc2 -23376: # 145 "../../src/Bit_Row_inlines.hh" -23376: (vec, static_cast(x_size) * ((4) * static_cast(8))); -23376: union_helper(y, x); -23376: } -23376: } -23376: -23376: inline void -23376: Bit_Row::intersection_assign(const Bit_Row& x, const Bit_Row& y) { -23376: -23376: # 152 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_and -23376: # 152 "../../src/Bit_Row_inlines.hh" -23376: (vec, x.vec, y.vec); -23376: } -23376: -23376: inline void -23376: Bit_Row::difference_assign(const Bit_Row& x, const Bit_Row& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_complement_y; mpz_class& complement_y = holder_complement_y.item(); -23376: -23376: # 158 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_com -23376: # 158 "../../src/Bit_Row_inlines.hh" -23376: (complement_y.get_mpz_t(), y.vec); -23376: -23376: # 159 "../../src/Bit_Row_inlines.hh" 3 4 -23376: __gmpz_and -23376: # 159 "../../src/Bit_Row_inlines.hh" -23376: (vec, x.vec, complement_y.get_mpz_t()); -23376: } -23376: -23376: namespace Implementation { -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: first_one(unsigned int u) { -23376: return ctz(u); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: first_one(unsigned long ul) { -23376: return ctz(ul); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: first_one(unsigned long long ull) { -23376: return ctz(ull); -23376: } -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: last_one(unsigned int u) { -23376: return static_cast(((sizeof(u)) * static_cast(8))) -23376: - 1U - clz(u); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: last_one(unsigned long ul) { -23376: return static_cast(((sizeof(ul)) * static_cast(8))) -23376: - 1U - clz(ul); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: inline unsigned int -23376: last_one(unsigned long long ull) { -23376: return static_cast(((sizeof(ull)) * static_cast(8))) -23376: - 1U - clz(ull); -23376: } -23376: -23376: } -23376: -23376: -23376: inline void -23376: swap(Bit_Row& x, Bit_Row& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: -23376: inline void -23376: iter_swap(std::vector::iterator x, -23376: std::vector::iterator y) { -23376: swap(*x, *y); -23376: } -23376: -23376: } -23376: # 213 "../../src/Bit_Row_defs.hh" 2 -23376: # 28 "../../src/Linear_System_inlines.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline memory_size_type -23376: Linear_System::external_memory_in_bytes() const { -23376: return rows.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Linear_System::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_System::is_sorted() const { -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: return sorted; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_sorted(const bool b) { -23376: sorted = b; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(Topology topol, Representation r) -23376: : rows(), -23376: space_dimension_(0), -23376: row_topology(topol), -23376: index_first_pending(0), -23376: sorted(true), -23376: representation_(r) { -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(Topology topol, -23376: dimension_type space_dim, -23376: Representation r) -23376: : rows(), -23376: space_dimension_(0), -23376: row_topology(topol), -23376: index_first_pending(0), -23376: sorted(true), -23376: representation_(r) { -23376: set_space_dimension(space_dim); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_System::first_pending_row() const { -23376: return index_first_pending; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_System::num_pending_rows() const { -23376: ((void) 0); -23376: return num_rows() - first_pending_row(); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::unset_pending_rows() { -23376: index_first_pending = num_rows(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_index_first_pending_row(const dimension_type i) { -23376: index_first_pending = i; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(const Linear_System& y) -23376: : rows(y.rows), -23376: space_dimension_(y.space_dimension_), -23376: row_topology(y.row_topology), -23376: representation_(y.representation_) { -23376: -23376: sorted = (y.num_pending_rows() > 0) ? false : y.sorted; -23376: unset_pending_rows(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(const Linear_System& y, Representation r) -23376: : rows(), -23376: space_dimension_(y.space_dimension_), -23376: row_topology(y.row_topology), -23376: representation_(r) { -23376: rows.resize(y.num_rows()); -23376: for (dimension_type i = 0; i < y.num_rows(); ++i) { -23376: -23376: Row row(y.rows[i], r); -23376: swap(rows[i], row); -23376: } -23376: -23376: sorted = (y.num_pending_rows() > 0) ? false : y.sorted; -23376: unset_pending_rows(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(const Linear_System& y, With_Pending) -23376: : rows(y.rows), -23376: space_dimension_(y.space_dimension_), -23376: row_topology(y.row_topology), -23376: index_first_pending(y.index_first_pending), -23376: sorted(y.sorted), -23376: representation_(y.representation_) { -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Linear_System(const Linear_System& y, Representation r, -23376: With_Pending) -23376: : rows(), -23376: space_dimension_(y.space_dimension_), -23376: row_topology(y.row_topology), -23376: index_first_pending(y.index_first_pending), -23376: sorted(y.sorted), -23376: representation_(r) { -23376: rows.resize(y.num_rows()); -23376: for (dimension_type i = 0; i < y.num_rows(); ++i) { -23376: -23376: Row row(y.rows[i], r); -23376: swap(rows[i], row); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline Linear_System& -23376: Linear_System::operator=(const Linear_System& y) { -23376: -23376: Linear_System tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::assign_with_pending(const Linear_System& y) { -23376: Linear_System tmp(y, With_Pending()); -23376: swap(*this, tmp); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::m_swap(Linear_System& y) { -23376: using std::swap; -23376: swap(rows, y.rows); -23376: swap(space_dimension_, y.space_dimension_); -23376: swap(row_topology, y.row_topology); -23376: swap(index_first_pending, y.index_first_pending); -23376: swap(sorted, y.sorted); -23376: swap(representation_, y.representation_); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::clear() { -23376: -23376: rows.clear(); -23376: index_first_pending = 0; -23376: sorted = true; -23376: space_dimension_ = 0; -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::mark_as_necessarily_closed() { -23376: ((void) 0); -23376: row_topology = NECESSARILY_CLOSED; -23376: ++space_dimension_; -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: rows[i].mark_as_necessarily_closed(); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::mark_as_not_necessarily_closed() { -23376: ((void) 0); -23376: ((void) 0); -23376: row_topology = NOT_NECESSARILY_CLOSED; -23376: --space_dimension_; -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: rows[i].mark_as_not_necessarily_closed(); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_topology(Topology t) { -23376: if (topology() == t) { -23376: return; -23376: } -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: rows[i].set_topology(t); -23376: } -23376: row_topology = t; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_necessarily_closed() { -23376: set_topology(NECESSARILY_CLOSED); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_not_necessarily_closed() { -23376: set_topology(NOT_NECESSARILY_CLOSED); -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_System::is_necessarily_closed() const { -23376: return row_topology == NECESSARILY_CLOSED; -23376: } -23376: -23376: template -23376: inline const Row& -23376: Linear_System::operator[](const dimension_type k) const { -23376: return rows[k]; -23376: } -23376: -23376: template -23376: inline typename Linear_System::iterator -23376: Linear_System::begin() { -23376: return rows.begin(); -23376: } -23376: -23376: template -23376: inline typename Linear_System::iterator -23376: Linear_System::end() { -23376: return rows.end(); -23376: } -23376: -23376: template -23376: inline typename Linear_System::const_iterator -23376: Linear_System::begin() const { -23376: return rows.begin(); -23376: } -23376: -23376: template -23376: inline typename Linear_System::const_iterator -23376: Linear_System::end() const { -23376: return rows.end(); -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_System::has_no_rows() const { -23376: return rows.empty(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_System::num_rows() const { -23376: return rows.size(); -23376: } -23376: -23376: template -23376: inline Topology -23376: Linear_System::topology() const { -23376: return row_topology; -23376: } -23376: -23376: template -23376: inline Representation -23376: Linear_System::representation() const { -23376: return representation_; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_representation(Representation r) { -23376: representation_ = r; -23376: for (dimension_type i = 0; i < rows.size(); ++i) { -23376: rows[i].set_representation(r); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_System::max_space_dimension() { -23376: return Row::max_space_dimension(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Linear_System::space_dimension() const { -23376: return space_dimension_; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_space_dimension_no_ok(dimension_type space_dim) { -23376: for (dimension_type i = rows.size(); i-- > 0; ) { -23376: rows[i].set_space_dimension_no_ok(space_dim); -23376: } -23376: space_dimension_ = space_dim; -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::set_space_dimension(dimension_type space_dim) { -23376: set_space_dimension_no_ok(space_dim); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::remove_row_no_ok(const dimension_type i, -23376: const bool keep_sorted) { -23376: ((void) 0); -23376: const bool was_pending = (i >= index_first_pending); -23376: -23376: if (sorted && keep_sorted && !was_pending) { -23376: for (dimension_type j = i + 1; j < rows.size(); ++j) { -23376: swap(rows[j], rows[j-1]); -23376: } -23376: rows.pop_back(); -23376: } -23376: else { -23376: if (!was_pending) { -23376: sorted = false; -23376: } -23376: const bool last_row_is_pending = (num_rows() - 1 >= index_first_pending); -23376: if (was_pending == last_row_is_pending) { -23376: -23376: swap(rows[i], rows.back()); -23376: } -23376: else { -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: swap(rows[i], rows[index_first_pending - 1]); -23376: -23376: -23376: -23376: swap(rows[i], rows.back()); -23376: } -23376: rows.pop_back(); -23376: } -23376: if (!was_pending) { -23376: -23376: --index_first_pending; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::remove_row(const dimension_type i, bool keep_sorted) { -23376: remove_row_no_ok(i, keep_sorted); -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: Linear_System::remove_rows(dimension_type first, -23376: dimension_type last, -23376: bool keep_sorted) { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type n = last - first; -23376: -23376: if (n == 0) { -23376: return; -23376: } -23376: -23376: -23376: -23376: ((void) 0); -23376: -23376: const bool were_pending = (first >= index_first_pending); -23376: -23376: -23376: if (sorted && keep_sorted && !were_pending) { -23376: -23376: for (dimension_type i = last; i < rows.size(); ++i) { -23376: swap(rows[i], rows[i - n]); -23376: } -23376: -23376: rows.resize(rows.size() - n); -23376: -23376: -23376: index_first_pending -= n; -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: const dimension_type offset = rows.size() - n - first; -23376: -23376: -23376: -23376: -23376: if (index_first_pending == num_rows()) { -23376: -23376: ((void) 0); -23376: -23376: swap_row_intervals(first, last, offset); -23376: -23376: rows.resize(rows.size() - n); -23376: -23376: -23376: index_first_pending -= n; -23376: } -23376: else { -23376: -23376: if (were_pending) { -23376: -23376: -23376: -23376: swap_row_intervals(first, last, offset); -23376: -23376: rows.resize(rows.size() - n); -23376: -23376: -23376: index_first_pending -= n; -23376: } -23376: else { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: ((void) 0); -23376: swap_row_intervals(first, last, index_first_pending - last); -23376: -23376: -23376: index_first_pending -= n; -23376: first = index_first_pending; -23376: last = first + n; -23376: -23376: -23376: swap_row_intervals(first, last, num_rows() - last); -23376: -23376: -23376: rows.resize(rows.size() - n); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::swap_row_intervals(dimension_type first, -23376: dimension_type last, -23376: dimension_type offset) { -23376: ((void) 0); -23376: ((void) 0); -23376: # 534 "../../src/Linear_System_inlines.hh" -23376: if (first + offset < last) { -23376: -23376: const dimension_type k = last - first - offset; -23376: last -= k; -23376: offset += k; -23376: } -23376: -23376: if (first == last) { -23376: -23376: return; -23376: } -23376: -23376: for (dimension_type i = first; i < last; ++i) { -23376: swap(rows[i], rows[i + offset]); -23376: } -23376: -23376: if (first < index_first_pending) { -23376: -23376: set_sorted(false); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::remove_rows(const std::vector& indexes) { -23376: # 576 "../../src/Linear_System_inlines.hh" -23376: if (indexes.empty()) { -23376: return; -23376: } -23376: -23376: const dimension_type rows_size = rows.size(); -23376: typedef std::vector::const_iterator itr_t; -23376: -23376: -23376: -23376: -23376: dimension_type last_unused_row = indexes[0]; -23376: dimension_type i = indexes[0]; -23376: itr_t itr = indexes.begin(); -23376: itr_t itr_end = indexes.end(); -23376: while (itr != itr_end) { -23376: -23376: ((void) 0); -23376: if (*itr == i) { -23376: -23376: ++itr; -23376: } -23376: else { -23376: -23376: swap(rows[last_unused_row], rows[i]); -23376: ++last_unused_row; -23376: } -23376: ++i; -23376: } -23376: -23376: -23376: for ( ; i < rows_size; ++i) { -23376: swap(rows[last_unused_row], rows[i]); -23376: ++last_unused_row; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: rows.resize(last_unused_row); -23376: -23376: -23376: if (indexes[0] >= index_first_pending) { -23376: -23376: } -23376: else { -23376: if (indexes.back() < index_first_pending) { -23376: -23376: index_first_pending -= indexes.size(); -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: itr_t j = std::lower_bound(indexes.begin(), indexes.end(), -23376: index_first_pending); -23376: std::iterator_traits::difference_type -23376: non_pending = j - indexes.begin(); -23376: index_first_pending -= static_cast(non_pending); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System::remove_trailing_rows(const dimension_type n) { -23376: ((void) 0); -23376: rows.resize(rows.size() - n); -23376: if (first_pending_row() > rows.size()) { -23376: index_first_pending = rows.size(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System -23376: ::permute_space_dimensions(const std::vector& cycle) { -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: rows[i].permute_space_dimensions(cycle); -23376: } -23376: sorted = false; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Linear_System -23376: ::swap_space_dimensions(Variable v1, Variable v2) { -23376: ((void) 0); -23376: ((void) 0); -23376: for (dimension_type k = num_rows(); k-- > 0; ) { -23376: rows[k].swap_space_dimensions(v1, v2); -23376: } -23376: sorted = false; -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const Linear_System& x, const Linear_System& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_System::Row_Less_Than::operator()(const Row& x, -23376: const Row& y) const { -23376: return compare(x, y) < 0; -23376: } -23376: -23376: template -23376: inline -23376: Linear_System::Unique_Compare -23376: ::Unique_Compare(const Swapping_Vector& cont, -23376: dimension_type base) -23376: : container(cont), base_index(base) { -23376: } -23376: -23376: template -23376: inline bool -23376: Linear_System::Unique_Compare -23376: ::operator()(dimension_type i, dimension_type j) const { -23376: return container[base_index + i].is_equal_to(container[base_index + j]); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(Linear_System& x, Linear_System& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 580 "../../src/Linear_System_defs.hh" 2 -23376: # 1 "../../src/Linear_System_templates.hh" 1 -23376: # 27 "../../src/Linear_System_templates.hh" -23376: # 1 "../../src/Bit_Matrix_defs.hh" 1 -23376: # 33 "../../src/Bit_Matrix_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::Bit_Matrix { -23376: public: -23376: -23376: Bit_Matrix(); -23376: -23376: -23376: Bit_Matrix(dimension_type n_rows, dimension_type n_columns); -23376: -23376: -23376: Bit_Matrix(const Bit_Matrix& y); -23376: -23376: -23376: ~Bit_Matrix(); -23376: -23376: -23376: Bit_Matrix& operator=(const Bit_Matrix& y); -23376: -23376: -23376: void m_swap(Bit_Matrix& y); -23376: -23376: -23376: Bit_Row& operator[](dimension_type k); -23376: -23376: -23376: const Bit_Row& operator[](dimension_type k) const; -23376: -23376: -23376: void clear(); -23376: -23376: -23376: void transpose(); -23376: -23376: -23376: void transpose_assign(const Bit_Matrix& y); -23376: -23376: -23376: static dimension_type max_num_rows(); -23376: -23376: -23376: dimension_type num_columns() const; -23376: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: void sort_rows(); -23376: # 105 "../../src/Bit_Matrix_defs.hh" -23376: bool sorted_contains(const Bit_Row& row) const; -23376: # 114 "../../src/Bit_Matrix_defs.hh" -23376: void add_recycled_row(Bit_Row& row); -23376: -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_trailing_columns(dimension_type n); -23376: -23376: -23376: void resize(dimension_type new_n_rows, dimension_type new_n_columns); -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: private: -23376: -23376: std::vector rows; -23376: -23376: -23376: dimension_type row_size; -23376: -23376: -23376: -23376: struct Bit_Row_Less_Than { -23376: bool operator()(const Bit_Row& x, const Bit_Row& y) const; -23376: }; -23376: -23376: template -23376: friend class Parma_Polyhedra_Library::Linear_System; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Bit_Matrix& x, const Bit_Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Bit_Matrix& x, const Bit_Matrix& y); -23376: -23376: } -23376: -23376: # 1 "../../src/Bit_Matrix_inlines.hh" 1 -23376: # 30 "../../src/Bit_Matrix_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Bit_Matrix::Bit_Matrix() -23376: : rows(), -23376: row_size(0) { -23376: } -23376: -23376: inline dimension_type -23376: Bit_Matrix::max_num_rows() { -23376: return std::vector().max_size(); -23376: } -23376: -23376: inline -23376: Bit_Matrix::Bit_Matrix(const dimension_type n_rows, -23376: const dimension_type n_columns) -23376: : rows(n_rows), -23376: row_size(n_columns) { -23376: } -23376: -23376: inline -23376: Bit_Matrix::Bit_Matrix(const Bit_Matrix& y) -23376: : rows(y.rows), -23376: row_size(y.row_size) { -23376: } -23376: -23376: inline -23376: Bit_Matrix::~Bit_Matrix() { -23376: } -23376: -23376: inline void -23376: Bit_Matrix::remove_trailing_rows(const dimension_type n) { -23376: -23376: -23376: ((void) 0); -23376: if (n != 0) { -23376: rows.resize(rows.size() - n); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Bit_Matrix::remove_trailing_columns(const dimension_type n) { -23376: -23376: -23376: ((void) 0); -23376: row_size -= n; -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Bit_Matrix::m_swap(Bit_Matrix& y) { -23376: std::swap(row_size, y.row_size); -23376: std::swap(rows, y.rows); -23376: } -23376: -23376: inline Bit_Row& -23376: Bit_Matrix::operator[](const dimension_type k) { -23376: ((void) 0); -23376: return rows[k]; -23376: } -23376: -23376: inline const Bit_Row& -23376: Bit_Matrix::operator[](const dimension_type k) const { -23376: ((void) 0); -23376: return rows[k]; -23376: } -23376: -23376: inline dimension_type -23376: Bit_Matrix::num_columns() const { -23376: return row_size; -23376: } -23376: -23376: inline dimension_type -23376: Bit_Matrix::num_rows() const { -23376: return rows.size(); -23376: } -23376: -23376: inline void -23376: Bit_Matrix::clear() { -23376: -23376: std::vector tmp; -23376: std::swap(tmp, rows); -23376: row_size = 0; -23376: } -23376: -23376: inline memory_size_type -23376: Bit_Matrix::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline bool -23376: Bit_Matrix::Bit_Row_Less_Than:: -23376: operator()(const Bit_Row& x, const Bit_Row& y) const { -23376: return compare(x, y) < 0; -23376: } -23376: -23376: inline bool -23376: Bit_Matrix::sorted_contains(const Bit_Row& row) const { -23376: ((void) 0); -23376: return std::binary_search(rows.begin(), rows.end(), row, -23376: Bit_Row_Less_Than()); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Bit_Matrix& x, const Bit_Matrix& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: inline void -23376: swap(Bit_Matrix& x, Bit_Matrix& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 186 "../../src/Bit_Matrix_defs.hh" 2 -23376: # 28 "../../src/Linear_System_templates.hh" 2 -23376: -23376: # 1 "../../src/Scalar_Products_defs.hh" 1 -23376: # 44 "../../src/Scalar_Products_defs.hh" -23376: class Parma_Polyhedra_Library::Scalar_Products { -23376: public: -23376: -23376: static void assign(Coefficient& z, -23376: const Linear_Expression& x, const Linear_Expression& y); -23376: -23376: -23376: static void assign(Coefficient& z, const Constraint& c, const Generator& g); -23376: -23376: -23376: static void assign(Coefficient& z, const Generator& g, const Constraint& c); -23376: -23376: -23376: static void assign(Coefficient& z, -23376: const Constraint& c, const Grid_Generator& gg); -23376: -23376: -23376: static void assign(Coefficient& z, -23376: const Grid_Generator& gg, const Congruence& cg); -23376: -23376: -23376: static void assign(Coefficient& z, -23376: const Congruence& cg, const Grid_Generator& gg); -23376: -23376: -23376: static int sign(const Linear_Expression& x, const Linear_Expression& y); -23376: -23376: -23376: static int sign(const Constraint& c, const Generator& g); -23376: -23376: -23376: static int sign(const Generator& g, const Constraint& c); -23376: -23376: -23376: static int sign(const Constraint& c, const Grid_Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void reduced_assign(Coefficient& z, -23376: const Linear_Expression& x, -23376: const Linear_Expression& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void reduced_assign(Coefficient& z, -23376: const Constraint& c, const Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void reduced_assign(Coefficient& z, -23376: const Generator& g, const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: static void reduced_assign(Coefficient& z, -23376: const Grid_Generator& gg, const Congruence& cg); -23376: -23376: -23376: -23376: -23376: -23376: static int reduced_sign(const Linear_Expression& x, -23376: const Linear_Expression& y); -23376: -23376: -23376: -23376: -23376: -23376: static int reduced_sign(const Constraint& c, const Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: static int reduced_sign(const Generator& g, const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void homogeneous_assign(Coefficient& z, -23376: const Linear_Expression& x, -23376: const Linear_Expression& y); -23376: -23376: -23376: -23376: -23376: -23376: static void homogeneous_assign(Coefficient& z, -23376: const Linear_Expression& e, -23376: const Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: static void homogeneous_assign(Coefficient& z, -23376: const Grid_Generator& gg, -23376: const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: static void homogeneous_assign(Coefficient& z, -23376: const Grid_Generator& gg, -23376: const Congruence& cg); -23376: -23376: -23376: -23376: -23376: -23376: static void homogeneous_assign(Coefficient& z, -23376: const Linear_Expression& e, -23376: const Grid_Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: static int homogeneous_sign(const Linear_Expression& x, -23376: const Linear_Expression& y); -23376: -23376: -23376: -23376: -23376: -23376: static int homogeneous_sign(const Linear_Expression& e, const Generator& g); -23376: -23376: -23376: -23376: -23376: static int homogeneous_sign(const Linear_Expression& e, -23376: const Grid_Generator& g); -23376: -23376: -23376: -23376: -23376: static int homogeneous_sign(const Grid_Generator& g, const Constraint& c); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign { -23376: public: -23376: -23376: Topology_Adjusted_Scalar_Product_Sign(const Constraint& c); -23376: -23376: -23376: Topology_Adjusted_Scalar_Product_Sign(const Generator& g); -23376: -23376: -23376: int operator()(const Constraint&, const Generator&) const; -23376: -23376: -23376: int operator()(const Generator&, const Constraint&) const; -23376: -23376: private: -23376: -23376: typedef int (* const SPS_type)(const Linear_Expression&, -23376: const Linear_Expression&); -23376: -23376: -23376: SPS_type sps_fp; -23376: }; -23376: # 30 "../../src/Linear_System_templates.hh" 2 -23376: # 1 "../../src/Scalar_Products_inlines.hh" 1 -23376: # 33 "../../src/Scalar_Products_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline int -23376: Scalar_Products::sign(const Linear_Expression& x, const Linear_Expression& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item(); -23376: assign(z, x, y); -23376: return sgn(z); -23376: } -23376: -23376: inline int -23376: Scalar_Products::reduced_sign(const Linear_Expression& x, -23376: const Linear_Expression& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item(); -23376: reduced_assign(z, x, y); -23376: return sgn(z); -23376: } -23376: -23376: inline int -23376: Scalar_Products::homogeneous_sign(const Linear_Expression& x, -23376: const Linear_Expression& y) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item(); -23376: homogeneous_assign(z, x, y); -23376: return sgn(z); -23376: } -23376: -23376: inline int -23376: Scalar_Products::sign(const Constraint& c, const Generator& g) { -23376: return sign(c.expr, g.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::sign(const Generator& g, const Constraint& c) { -23376: return sign(g.expr, c.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::sign(const Constraint& c, const Grid_Generator& g) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item(); -23376: assign(z, c, g); -23376: return sgn(z); -23376: } -23376: -23376: inline int -23376: Scalar_Products::reduced_sign(const Constraint& c, const Generator& g) { -23376: -23376: -23376: ((void) 0); -23376: return reduced_sign(c.expr, g.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::reduced_sign(const Generator& g, const Constraint& c) { -23376: -23376: -23376: ((void) 0); -23376: return reduced_sign(g.expr, c.expr); -23376: } -23376: -23376: inline void -23376: Scalar_Products::homogeneous_assign(Coefficient& z, -23376: const Linear_Expression& e, -23376: const Generator& g) { -23376: homogeneous_assign(z, e, g.expr); -23376: } -23376: -23376: inline void -23376: Scalar_Products::homogeneous_assign(Coefficient& z, -23376: const Linear_Expression& e, -23376: const Grid_Generator& g) { -23376: homogeneous_assign(z, e, g.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::homogeneous_sign(const Linear_Expression& e, -23376: const Generator& g) { -23376: return homogeneous_sign(e, g.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::homogeneous_sign(const Linear_Expression& e, -23376: const Grid_Generator& g) { -23376: return homogeneous_sign(e, g.expr); -23376: } -23376: -23376: inline int -23376: Scalar_Products::homogeneous_sign(const Grid_Generator& g, -23376: const Constraint& c) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item(); -23376: homogeneous_assign(z, g, c); -23376: return sgn(z); -23376: } -23376: -23376: inline -23376: Topology_Adjusted_Scalar_Product_Sign -23376: ::Topology_Adjusted_Scalar_Product_Sign(const Constraint& c) -23376: : sps_fp(c.is_necessarily_closed() -23376: ? static_cast(&Scalar_Products::sign) -23376: : static_cast(&Scalar_Products::reduced_sign)) { -23376: } -23376: -23376: inline -23376: Topology_Adjusted_Scalar_Product_Sign -23376: ::Topology_Adjusted_Scalar_Product_Sign(const Generator& g) -23376: : sps_fp(g.is_necessarily_closed() -23376: ? static_cast(&Scalar_Products::sign) -23376: : static_cast(&Scalar_Products::reduced_sign)) { -23376: } -23376: -23376: inline int -23376: Topology_Adjusted_Scalar_Product_Sign::operator()(const Constraint& c, -23376: const Generator& g) const { -23376: ((void) 0); -23376: ((void) 0) -23376: -23376: ; -23376: return sps_fp(c.expr, g.expr); -23376: } -23376: -23376: inline int -23376: Topology_Adjusted_Scalar_Product_Sign::operator()(const Generator& g, -23376: const Constraint& c) const { -23376: ((void) 0); -23376: ((void) 0) -23376: -23376: ; -23376: return sps_fp(g.expr, c.expr); -23376: } -23376: -23376: } -23376: # 31 "../../src/Linear_System_templates.hh" 2 -23376: # 1 "../../src/swapping_sort_templates.hh" 1 -23376: # 30 "../../src/swapping_sort_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: template -23376: struct Indirect_Sort_Compare { -23376: typedef typename RA_Container::size_type size_type; -23376: -23376: Indirect_Sort_Compare(const RA_Container& cont, -23376: size_type base = 0, -23376: Compare comp = Compare()) -23376: : container(cont), base_index(base), compare(comp) { -23376: } -23376: -23376: bool operator()(size_type i, size_type j) const { -23376: return compare(container[base_index + i], container[base_index + j]); -23376: } -23376: -23376: const RA_Container& container; -23376: const size_type base_index; -23376: const Compare compare; -23376: }; -23376: -23376: template -23376: struct Indirect_Unique_Compare { -23376: typedef typename RA_Container::size_type size_type; -23376: -23376: Indirect_Unique_Compare(const RA_Container& cont, size_type base = 0) -23376: : container(cont), base_index(base) { -23376: } -23376: -23376: bool operator()(size_type i, size_type j) const { -23376: return container[base_index + i] == container[base_index + j]; -23376: } -23376: -23376: const RA_Container& container; -23376: const size_type base_index; -23376: }; -23376: -23376: template -23376: struct Indirect_Swapper { -23376: typedef typename RA_Container::size_type size_type; -23376: -23376: Indirect_Swapper(RA_Container& cont, size_type base = 0) -23376: : container(cont), base_index(base) { -23376: } -23376: -23376: void operator()(size_type i, size_type j) const { -23376: using std::swap; -23376: swap(container[base_index + i], container[base_index + j]); -23376: } -23376: -23376: RA_Container& container; -23376: const size_type base_index; -23376: }; -23376: -23376: template -23376: struct Indirect_Swapper2 { -23376: typedef typename RA_Container1::size_type size_type; -23376: -23376: Indirect_Swapper2(RA_Container1& cont1, RA_Container2& cont2) -23376: : container1(cont1), container2(cont2) { -23376: } -23376: -23376: void operator()(size_type i, size_type j) const { -23376: using std::swap; -23376: swap(container1[i], container1[j]); -23376: swap(container2[i], container2[j]); -23376: } -23376: -23376: RA_Container1& container1; -23376: RA_Container2& container2; -23376: }; -23376: -23376: template -23376: typename Sort_Comparer::size_type -23376: indirect_sort_and_unique(typename Sort_Comparer::size_type num_elems, -23376: Sort_Comparer sort_cmp, -23376: Unique_Comparer unique_cmp, -23376: Swapper indirect_swap) { -23376: typedef typename Sort_Comparer::size_type index_type; -23376: -23376: ((void) 0); -23376: std::vector iv; -23376: iv.reserve(num_elems); -23376: for (index_type i = 0, i_end = num_elems; i != i_end; ++i) { -23376: iv.push_back(i); -23376: } -23376: -23376: typedef typename std::vector::iterator Iter; -23376: const Iter iv_begin = iv.begin(); -23376: Iter iv_end = iv.end(); -23376: -23376: -23376: std::sort(iv_begin, iv_end, sort_cmp); -23376: -23376: -23376: -23376: -23376: for (index_type i = num_elems; i-- > 0; ) { -23376: if (i != iv[i]) { -23376: index_type dst = i; -23376: index_type src = iv[i]; -23376: do { -23376: indirect_swap(src, dst); -23376: iv[dst] = dst; -23376: dst = src; -23376: src = iv[dst]; -23376: } while (i != src); -23376: iv[dst] = dst; -23376: } -23376: } -23376: -23376: -23376: for (index_type i = num_elems; i-- > 0; ) { -23376: iv[i] = i; -23376: } -23376: -23376: -23376: iv_end = std::unique(iv_begin, iv_end, unique_cmp); -23376: -23376: const index_type num_sorted = static_cast(iv_end - iv_begin); -23376: const index_type num_duplicates = num_elems - num_sorted; -23376: if (num_duplicates == 0) { -23376: return 0; -23376: } -23376: -23376: -23376: index_type dst = 0; -23376: while (dst < num_sorted && dst == iv[dst]) { -23376: ++dst; -23376: } -23376: if (dst == num_sorted) { -23376: return num_duplicates; -23376: } -23376: do { -23376: const index_type src = iv[dst]; -23376: indirect_swap(src, dst); -23376: ++dst; -23376: } -23376: while (dst < num_sorted); -23376: return num_duplicates; -23376: } -23376: -23376: template -23376: Iter -23376: swapping_unique(Iter first, Iter last) { -23376: return swapping_unique(first, last, std::iter_swap); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 32 "../../src/Linear_System_templates.hh" 2 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/deque" 1 3 -23376: # 58 "/usr/include/c++/8/deque" 3 -23376: -23376: # 59 "/usr/include/c++/8/deque" 3 -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stl_deque.h" 1 3 -23376: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: -23376: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: # 91 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: constexpr inline size_t -23376: __deque_buf_size(size_t __size) -23376: { return (__size < 512 -23376: ? size_t(512 / __size) : size_t(1)); } -23376: # 108 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: struct _Deque_iterator -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: private: -23376: template -23376: using __ptr_to = typename pointer_traits<_Ptr>::template rebind<_Up>; -23376: template -23376: using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_to<_CvTp>>; -23376: public: -23376: typedef __iter<_Tp> iterator; -23376: typedef __iter const_iterator; -23376: typedef __ptr_to<_Tp> _Elt_pointer; -23376: typedef __ptr_to<_Elt_pointer> _Map_pointer; -23376: -23376: -23376: static size_t _S_buffer_size() noexcept -23376: { return __deque_buf_size(sizeof(_Tp)); } -23376: -23376: typedef std::random_access_iterator_tag iterator_category; -23376: typedef _Tp value_type; -23376: typedef _Ptr pointer; -23376: typedef _Ref reference; -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Deque_iterator _Self; -23376: -23376: _Elt_pointer _M_cur; -23376: _Elt_pointer _M_first; -23376: _Elt_pointer _M_last; -23376: _Map_pointer _M_node; -23376: -23376: _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) noexcept -23376: : _M_cur(__x), _M_first(*__y), -23376: _M_last(*__y + _S_buffer_size()), _M_node(__y) { } -23376: -23376: _Deque_iterator() noexcept -23376: : _M_cur(), _M_first(), _M_last(), _M_node() { } -23376: -23376: _Deque_iterator(const iterator& __x) noexcept -23376: : _M_cur(__x._M_cur), _M_first(__x._M_first), -23376: _M_last(__x._M_last), _M_node(__x._M_node) { } -23376: -23376: iterator -23376: _M_const_cast() const noexcept -23376: { return iterator(_M_cur, _M_node); } -23376: -23376: reference -23376: operator*() const noexcept -23376: { return *_M_cur; } -23376: -23376: pointer -23376: operator->() const noexcept -23376: { return _M_cur; } -23376: -23376: _Self& -23376: operator++() noexcept -23376: { -23376: ++_M_cur; -23376: if (_M_cur == _M_last) -23376: { -23376: _M_set_node(_M_node + 1); -23376: _M_cur = _M_first; -23376: } -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator++(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: ++*this; -23376: return __tmp; -23376: } -23376: -23376: _Self& -23376: operator--() noexcept -23376: { -23376: if (_M_cur == _M_first) -23376: { -23376: _M_set_node(_M_node - 1); -23376: _M_cur = _M_last; -23376: } -23376: --_M_cur; -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator--(int) noexcept -23376: { -23376: _Self __tmp = *this; -23376: --*this; -23376: return __tmp; -23376: } -23376: -23376: _Self& -23376: operator+=(difference_type __n) noexcept -23376: { -23376: const difference_type __offset = __n + (_M_cur - _M_first); -23376: if (__offset >= 0 && __offset < difference_type(_S_buffer_size())) -23376: _M_cur += __n; -23376: else -23376: { -23376: const difference_type __node_offset = -23376: __offset > 0 ? __offset / difference_type(_S_buffer_size()) -23376: : -difference_type((-__offset - 1) -23376: / _S_buffer_size()) - 1; -23376: _M_set_node(_M_node + __node_offset); -23376: _M_cur = _M_first + (__offset - __node_offset -23376: * difference_type(_S_buffer_size())); -23376: } -23376: return *this; -23376: } -23376: -23376: _Self -23376: operator+(difference_type __n) const noexcept -23376: { -23376: _Self __tmp = *this; -23376: return __tmp += __n; -23376: } -23376: -23376: _Self& -23376: operator-=(difference_type __n) noexcept -23376: { return *this += -__n; } -23376: -23376: _Self -23376: operator-(difference_type __n) const noexcept -23376: { -23376: _Self __tmp = *this; -23376: return __tmp -= __n; -23376: } -23376: -23376: reference -23376: operator[](difference_type __n) const noexcept -23376: { return *(*this + __n); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: _M_set_node(_Map_pointer __new_node) noexcept -23376: { -23376: _M_node = __new_node; -23376: _M_first = *__new_node; -23376: _M_last = _M_first + difference_type(_S_buffer_size()); -23376: } -23376: }; -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return __x._M_cur == __y._M_cur; } -23376: -23376: template -23376: inline bool -23376: operator==(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return __x._M_cur == __y._M_cur; } -23376: -23376: template -23376: inline bool -23376: operator!=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator!=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return !(__x == __y); } -23376: -23376: template -23376: inline bool -23376: operator<(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur) -23376: : (__x._M_node < __y._M_node); } -23376: -23376: template -23376: inline bool -23376: operator<(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur) -23376: : (__x._M_node < __y._M_node); } -23376: -23376: template -23376: inline bool -23376: operator>(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator>(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return __y < __x; } -23376: -23376: template -23376: inline bool -23376: operator<=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator<=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return !(__y < __x); } -23376: -23376: template -23376: inline bool -23376: operator>=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { return !(__x < __y); } -23376: -23376: template -23376: inline bool -23376: operator>=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { return !(__x < __y); } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type -23376: operator-(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, -23376: const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept -23376: { -23376: return typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type -23376: (_Deque_iterator<_Tp, _Ref, _Ptr>::_S_buffer_size()) -23376: * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first) -23376: + (__y._M_last - __y._M_cur); -23376: } -23376: -23376: template -23376: inline typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type -23376: operator-(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, -23376: const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept -23376: { -23376: return typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type -23376: (_Deque_iterator<_Tp, _RefL, _PtrL>::_S_buffer_size()) -23376: * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first) -23376: + (__y._M_last - __y._M_cur); -23376: } -23376: -23376: template -23376: inline _Deque_iterator<_Tp, _Ref, _Ptr> -23376: operator+(ptrdiff_t __n, const _Deque_iterator<_Tp, _Ref, _Ptr>& __x) -23376: noexcept -23376: { return __x + __n; } -23376: -23376: template -23376: void -23376: fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>&, -23376: const _Deque_iterator<_Tp, _Tp&, _Tp*>&, const _Tp&); -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*>); -23376: -23376: template -23376: inline _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy(_Deque_iterator<_Tp, _Tp&, _Tp*> __first, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { return std::copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first), -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last), -23376: __result); } -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*>); -23376: -23376: template -23376: inline _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { return std::copy_backward(_Deque_iterator<_Tp, -23376: const _Tp&, const _Tp*>(__first), -23376: _Deque_iterator<_Tp, -23376: const _Tp&, const _Tp*>(__last), -23376: __result); } -23376: -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*>); -23376: -23376: template -23376: inline _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move(_Deque_iterator<_Tp, _Tp&, _Tp*> __first, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { return std::move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first), -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last), -23376: __result); } -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*>, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*>); -23376: -23376: template -23376: inline _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { return std::move_backward(_Deque_iterator<_Tp, -23376: const _Tp&, const _Tp*>(__first), -23376: _Deque_iterator<_Tp, -23376: const _Tp&, const _Tp*>(__last), -23376: __result); } -23376: # 460 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: class _Deque_base -23376: { -23376: protected: -23376: typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template -23376: rebind<_Tp>::other _Tp_alloc_type; -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; -23376: -23376: -23376: -23376: -23376: -23376: typedef typename _Alloc_traits::pointer _Ptr; -23376: typedef typename _Alloc_traits::const_pointer _Ptr_const; -23376: -23376: -23376: typedef typename _Alloc_traits::template rebind<_Ptr>::other -23376: _Map_alloc_type; -23376: typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits; -23376: -23376: public: -23376: typedef _Alloc allocator_type; -23376: typedef typename _Alloc_traits::size_type size_type; -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return allocator_type(_M_get_Tp_allocator()); } -23376: -23376: typedef _Deque_iterator<_Tp, _Tp&, _Ptr> iterator; -23376: typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const> const_iterator; -23376: -23376: _Deque_base() -23376: : _M_impl() -23376: { _M_initialize_map(0); } -23376: -23376: _Deque_base(size_t __num_elements) -23376: : _M_impl() -23376: { _M_initialize_map(__num_elements); } -23376: -23376: _Deque_base(const allocator_type& __a, size_t __num_elements) -23376: : _M_impl(__a) -23376: { _M_initialize_map(__num_elements); } -23376: -23376: _Deque_base(const allocator_type& __a) -23376: : _M_impl(__a) -23376: { } -23376: -23376: -23376: _Deque_base(_Deque_base&& __x, false_type) -23376: : _M_impl(__x._M_move_impl()) -23376: { } -23376: -23376: _Deque_base(_Deque_base&& __x, true_type) -23376: : _M_impl(std::move(__x._M_get_Tp_allocator())) -23376: { -23376: _M_initialize_map(0); -23376: if (__x._M_impl._M_map) -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: } -23376: -23376: _Deque_base(_Deque_base&& __x) -23376: : _Deque_base(std::move(__x), typename _Alloc_traits::is_always_equal{}) -23376: { } -23376: -23376: _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_type __n) -23376: : _M_impl(__a) -23376: { -23376: if (__x.get_allocator() == __a) -23376: { -23376: if (__x._M_impl._M_map) -23376: { -23376: _M_initialize_map(0); -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: } -23376: } -23376: else -23376: { -23376: _M_initialize_map(__n); -23376: } -23376: } -23376: -23376: -23376: ~_Deque_base() noexcept; -23376: -23376: protected: -23376: typedef typename iterator::_Map_pointer _Map_pointer; -23376: -23376: -23376: -23376: -23376: struct _Deque_impl -23376: : public _Tp_alloc_type -23376: { -23376: _Map_pointer _M_map; -23376: size_t _M_map_size; -23376: iterator _M_start; -23376: iterator _M_finish; -23376: -23376: _Deque_impl() -23376: : _Tp_alloc_type(), _M_map(), _M_map_size(0), -23376: _M_start(), _M_finish() -23376: { } -23376: -23376: _Deque_impl(const _Tp_alloc_type& __a) noexcept -23376: : _Tp_alloc_type(__a), _M_map(), _M_map_size(0), -23376: _M_start(), _M_finish() -23376: { } -23376: -23376: -23376: _Deque_impl(_Deque_impl&&) = default; -23376: -23376: _Deque_impl(_Tp_alloc_type&& __a) noexcept -23376: : _Tp_alloc_type(std::move(__a)), _M_map(), _M_map_size(0), -23376: _M_start(), _M_finish() -23376: { } -23376: -23376: -23376: void _M_swap_data(_Deque_impl& __x) noexcept -23376: { -23376: using std::swap; -23376: swap(this->_M_start, __x._M_start); -23376: swap(this->_M_finish, __x._M_finish); -23376: swap(this->_M_map, __x._M_map); -23376: swap(this->_M_map_size, __x._M_map_size); -23376: } -23376: }; -23376: -23376: _Tp_alloc_type& -23376: _M_get_Tp_allocator() noexcept -23376: { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); } -23376: -23376: const _Tp_alloc_type& -23376: _M_get_Tp_allocator() const noexcept -23376: { return *static_cast(&this->_M_impl); } -23376: -23376: _Map_alloc_type -23376: _M_get_map_allocator() const noexcept -23376: { return _Map_alloc_type(_M_get_Tp_allocator()); } -23376: -23376: _Ptr -23376: _M_allocate_node() -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; -23376: return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp))); -23376: } -23376: -23376: void -23376: _M_deallocate_node(_Ptr __p) noexcept -23376: { -23376: typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits; -23376: _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp))); -23376: } -23376: -23376: _Map_pointer -23376: _M_allocate_map(size_t __n) -23376: { -23376: _Map_alloc_type __map_alloc = _M_get_map_allocator(); -23376: return _Map_alloc_traits::allocate(__map_alloc, __n); -23376: } -23376: -23376: void -23376: _M_deallocate_map(_Map_pointer __p, size_t __n) noexcept -23376: { -23376: _Map_alloc_type __map_alloc = _M_get_map_allocator(); -23376: _Map_alloc_traits::deallocate(__map_alloc, __p, __n); -23376: } -23376: -23376: protected: -23376: void _M_initialize_map(size_t); -23376: void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish); -23376: void _M_destroy_nodes(_Map_pointer __nstart, -23376: _Map_pointer __nfinish) noexcept; -23376: enum { _S_initial_map_size = 8 }; -23376: -23376: _Deque_impl _M_impl; -23376: -23376: -23376: private: -23376: _Deque_impl -23376: _M_move_impl() -23376: { -23376: if (!_M_impl._M_map) -23376: return std::move(_M_impl); -23376: -23376: -23376: _Tp_alloc_type __alloc{_M_get_Tp_allocator()}; -23376: -23376: _Tp_alloc_type __sink __attribute((__unused__)) {std::move(__alloc)}; -23376: -23376: _Deque_base __empty{__alloc}; -23376: __empty._M_initialize_map(0); -23376: -23376: _Deque_impl __ret{std::move(_M_get_Tp_allocator())}; -23376: _M_impl._M_swap_data(__ret); -23376: _M_impl._M_swap_data(__empty._M_impl); -23376: return __ret; -23376: } -23376: -23376: }; -23376: -23376: template -23376: _Deque_base<_Tp, _Alloc>:: -23376: ~_Deque_base() noexcept -23376: { -23376: if (this->_M_impl._M_map) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_start._M_node, -23376: this->_M_impl._M_finish._M_node + 1); -23376: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); -23376: } -23376: } -23376: # 680 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: void -23376: _Deque_base<_Tp, _Alloc>:: -23376: _M_initialize_map(size_t __num_elements) -23376: { -23376: const size_t __num_nodes = (__num_elements/ __deque_buf_size(sizeof(_Tp)) -23376: + 1); -23376: -23376: this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size, -23376: size_t(__num_nodes + 2)); -23376: this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size); -23376: -23376: -23376: -23376: -23376: -23376: -23376: _Map_pointer __nstart = (this->_M_impl._M_map -23376: + (this->_M_impl._M_map_size - __num_nodes) / 2); -23376: _Map_pointer __nfinish = __nstart + __num_nodes; -23376: -23376: try -23376: { _M_create_nodes(__nstart, __nfinish); } -23376: catch(...) -23376: { -23376: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); -23376: this->_M_impl._M_map = _Map_pointer(); -23376: this->_M_impl._M_map_size = 0; -23376: throw; -23376: } -23376: -23376: this->_M_impl._M_start._M_set_node(__nstart); -23376: this->_M_impl._M_finish._M_set_node(__nfinish - 1); -23376: this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first; -23376: this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first -23376: + __num_elements -23376: % __deque_buf_size(sizeof(_Tp))); -23376: } -23376: -23376: template -23376: void -23376: _Deque_base<_Tp, _Alloc>:: -23376: _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish) -23376: { -23376: _Map_pointer __cur; -23376: try -23376: { -23376: for (__cur = __nstart; __cur < __nfinish; ++__cur) -23376: *__cur = this->_M_allocate_node(); -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(__nstart, __cur); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: void -23376: _Deque_base<_Tp, _Alloc>:: -23376: _M_destroy_nodes(_Map_pointer __nstart, -23376: _Map_pointer __nfinish) noexcept -23376: { -23376: for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n) -23376: _M_deallocate_node(*__n); -23376: } -23376: # 831 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template > -23376: class deque : protected _Deque_base<_Tp, _Alloc> -23376: { -23376: # 844 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: static_assert(is_same::type, _Tp>::value, -23376: "std::deque must have a non-const, non-volatile value_type"); -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef _Deque_base<_Tp, _Alloc> _Base; -23376: typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; -23376: typedef typename _Base::_Alloc_traits _Alloc_traits; -23376: typedef typename _Base::_Map_pointer _Map_pointer; -23376: -23376: public: -23376: typedef _Tp value_type; -23376: typedef typename _Alloc_traits::pointer pointer; -23376: typedef typename _Alloc_traits::const_pointer const_pointer; -23376: typedef typename _Alloc_traits::reference reference; -23376: typedef typename _Alloc_traits::const_reference const_reference; -23376: typedef typename _Base::iterator iterator; -23376: typedef typename _Base::const_iterator const_iterator; -23376: typedef std::reverse_iterator const_reverse_iterator; -23376: typedef std::reverse_iterator reverse_iterator; -23376: typedef size_t size_type; -23376: typedef ptrdiff_t difference_type; -23376: typedef _Alloc allocator_type; -23376: -23376: protected: -23376: static size_t _S_buffer_size() noexcept -23376: { return __deque_buf_size(sizeof(_Tp)); } -23376: -23376: -23376: using _Base::_M_initialize_map; -23376: using _Base::_M_create_nodes; -23376: using _Base::_M_destroy_nodes; -23376: using _Base::_M_allocate_node; -23376: using _Base::_M_deallocate_node; -23376: using _Base::_M_allocate_map; -23376: using _Base::_M_deallocate_map; -23376: using _Base::_M_get_Tp_allocator; -23376: -23376: -23376: -23376: -23376: -23376: using _Base::_M_impl; -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: deque() : _Base() { } -23376: -23376: -23376: -23376: -23376: -23376: explicit -23376: deque(const allocator_type& __a) -23376: : _Base(__a, 0) { } -23376: # 917 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: explicit -23376: deque(size_type __n, const allocator_type& __a = allocator_type()) -23376: : _Base(__a, __n) -23376: { _M_default_initialize(); } -23376: # 930 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque(size_type __n, const value_type& __value, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a, __n) -23376: { _M_fill_initialize(__value); } -23376: # 957 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque(const deque& __x) -23376: : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()), -23376: __x.size()) -23376: { std::__uninitialized_copy_a(__x.begin(), __x.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); } -23376: # 972 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque(deque&& __x) -23376: : _Base(std::move(__x)) { } -23376: -23376: -23376: deque(const deque& __x, const allocator_type& __a) -23376: : _Base(__a, __x.size()) -23376: { std::__uninitialized_copy_a(__x.begin(), __x.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); } -23376: -23376: -23376: deque(deque&& __x, const allocator_type& __a) -23376: : _Base(std::move(__x), __a, __x.size()) -23376: { -23376: if (__x.get_allocator() != __a) -23376: { -23376: std::__uninitialized_move_a(__x.begin(), __x.end(), -23376: this->_M_impl._M_start, -23376: _M_get_Tp_allocator()); -23376: __x.clear(); -23376: } -23376: } -23376: # 1006 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque(initializer_list __l, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { -23376: _M_range_initialize(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: } -23376: # 1031 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template> -23376: deque(_InputIterator __first, _InputIterator __last, -23376: const allocator_type& __a = allocator_type()) -23376: : _Base(__a) -23376: { _M_initialize_dispatch(__first, __last, __false_type()); } -23376: # 1054 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: ~deque() -23376: { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); } -23376: # 1066 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque& -23376: operator=(const deque& __x); -23376: # 1078 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque& -23376: operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal()) -23376: { -23376: using __always_equal = typename _Alloc_traits::is_always_equal; -23376: _M_move_assign1(std::move(__x), __always_equal{}); -23376: return *this; -23376: } -23376: # 1097 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: deque& -23376: operator=(initializer_list __l) -23376: { -23376: _M_assign_aux(__l.begin(), __l.end(), -23376: random_access_iterator_tag()); -23376: return *this; -23376: } -23376: # 1116 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: assign(size_type __n, const value_type& __val) -23376: { _M_fill_assign(__n, __val); } -23376: # 1133 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template> -23376: void -23376: assign(_InputIterator __first, _InputIterator __last) -23376: { _M_assign_dispatch(__first, __last, __false_type()); } -23376: # 1160 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: assign(initializer_list __l) -23376: { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } -23376: -23376: -23376: -23376: allocator_type -23376: get_allocator() const noexcept -23376: { return _Base::get_allocator(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: begin() noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: begin() const noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator -23376: end() noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: end() const noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rbegin() noexcept -23376: { return reverse_iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rbegin() const noexcept -23376: { return const_reverse_iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: reverse_iterator -23376: rend() noexcept -23376: { return reverse_iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: rend() const noexcept -23376: { return const_reverse_iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cbegin() const noexcept -23376: { return this->_M_impl._M_start; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator -23376: cend() const noexcept -23376: { return this->_M_impl._M_finish; } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crbegin() const noexcept -23376: { return const_reverse_iterator(this->_M_impl._M_finish); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_reverse_iterator -23376: crend() const noexcept -23376: { return const_reverse_iterator(this->_M_impl._M_start); } -23376: -23376: -23376: -23376: -23376: size_type -23376: size() const noexcept -23376: { return this->_M_impl._M_finish - this->_M_impl._M_start; } -23376: -23376: -23376: size_type -23376: max_size() const noexcept -23376: { return _Alloc_traits::max_size(_M_get_Tp_allocator()); } -23376: # 1299 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: resize(size_type __new_size) -23376: { -23376: const size_type __len = size(); -23376: if (__new_size > __len) -23376: _M_default_append(__new_size - __len); -23376: else if (__new_size < __len) -23376: _M_erase_at_end(this->_M_impl._M_start -23376: + difference_type(__new_size)); -23376: } -23376: # 1321 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: resize(size_type __new_size, const value_type& __x) -23376: { -23376: const size_type __len = size(); -23376: if (__new_size > __len) -23376: _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x); -23376: else if (__new_size < __len) -23376: _M_erase_at_end(this->_M_impl._M_start -23376: + difference_type(__new_size)); -23376: } -23376: # 1357 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: shrink_to_fit() noexcept -23376: { _M_shrink_to_fit(); } -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool -23376: empty() const noexcept -23376: { return this->_M_impl._M_finish == this->_M_impl._M_start; } -23376: # 1382 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: reference -23376: operator[](size_type __n) noexcept -23376: { -23376: ; -23376: return this->_M_impl._M_start[difference_type(__n)]; -23376: } -23376: # 1400 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: const_reference -23376: operator[](size_type __n) const noexcept -23376: { -23376: ; -23376: return this->_M_impl._M_start[difference_type(__n)]; -23376: } -23376: -23376: protected: -23376: -23376: void -23376: _M_range_check(size_type __n) const -23376: { -23376: if (__n >= this->size()) -23376: __throw_out_of_range_fmt(("deque::_M_range_check: __n " "(which is %zu)>= this->size() " "(which is %zu)") -23376: -23376: , -23376: __n, this->size()); -23376: } -23376: -23376: public: -23376: # 1431 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: reference -23376: at(size_type __n) -23376: { -23376: _M_range_check(__n); -23376: return (*this)[__n]; -23376: } -23376: # 1449 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: const_reference -23376: at(size_type __n) const -23376: { -23376: _M_range_check(__n); -23376: return (*this)[__n]; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: front() noexcept -23376: { -23376: ; -23376: return *begin(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: front() const noexcept -23376: { -23376: ; -23376: return *begin(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: reference -23376: back() noexcept -23376: { -23376: ; -23376: iterator __tmp = end(); -23376: --__tmp; -23376: return *__tmp; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const_reference -23376: back() const noexcept -23376: { -23376: ; -23376: const_iterator __tmp = end(); -23376: --__tmp; -23376: return *__tmp; -23376: } -23376: # 1514 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: push_front(const value_type& __x) -23376: { -23376: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) -23376: { -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_start._M_cur - 1, -23376: __x); -23376: --this->_M_impl._M_start._M_cur; -23376: } -23376: else -23376: _M_push_front_aux(__x); -23376: } -23376: -23376: -23376: void -23376: push_front(value_type&& __x) -23376: { emplace_front(std::move(__x)); } -23376: -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: emplace_front(_Args&&... __args); -23376: # 1551 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: push_back(const value_type& __x) -23376: { -23376: if (this->_M_impl._M_finish._M_cur -23376: != this->_M_impl._M_finish._M_last - 1) -23376: { -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_finish._M_cur, __x); -23376: ++this->_M_impl._M_finish._M_cur; -23376: } -23376: else -23376: _M_push_back_aux(__x); -23376: } -23376: -23376: -23376: void -23376: push_back(value_type&& __x) -23376: { emplace_back(std::move(__x)); } -23376: -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: emplace_back(_Args&&... __args); -23376: # 1587 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: pop_front() noexcept -23376: { -23376: ; -23376: if (this->_M_impl._M_start._M_cur -23376: != this->_M_impl._M_start._M_last - 1) -23376: { -23376: _Alloc_traits::destroy(this->_M_impl, -23376: this->_M_impl._M_start._M_cur); -23376: ++this->_M_impl._M_start._M_cur; -23376: } -23376: else -23376: _M_pop_front_aux(); -23376: } -23376: # 1610 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: pop_back() noexcept -23376: { -23376: ; -23376: if (this->_M_impl._M_finish._M_cur -23376: != this->_M_impl._M_finish._M_first) -23376: { -23376: --this->_M_impl._M_finish._M_cur; -23376: _Alloc_traits::destroy(this->_M_impl, -23376: this->_M_impl._M_finish._M_cur); -23376: } -23376: else -23376: _M_pop_back_aux(); -23376: } -23376: # 1635 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: iterator -23376: emplace(const_iterator __position, _Args&&... __args); -23376: # 1648 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: insert(const_iterator __position, const value_type& __x); -23376: # 1674 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: insert(const_iterator __position, value_type&& __x) -23376: { return emplace(__position, std::move(__x)); } -23376: # 1687 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: insert(const_iterator __p, initializer_list __l) -23376: { -23376: auto __offset = __p - cbegin(); -23376: _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(), -23376: std::random_access_iterator_tag()); -23376: return begin() + __offset; -23376: } -23376: # 1708 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: insert(const_iterator __position, size_type __n, const value_type& __x) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_fill_insert(__position._M_const_cast(), __n, __x); -23376: return begin() + __offset; -23376: } -23376: # 1742 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template> -23376: iterator -23376: insert(const_iterator __position, _InputIterator __first, -23376: _InputIterator __last) -23376: { -23376: difference_type __offset = __position - cbegin(); -23376: _M_insert_dispatch(__position._M_const_cast(), -23376: __first, __last, __false_type()); -23376: return begin() + __offset; -23376: } -23376: # 1788 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: -23376: erase(const_iterator __position) -23376: -23376: -23376: -23376: { return _M_erase(__position._M_const_cast()); } -23376: # 1812 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: iterator -23376: -23376: erase(const_iterator __first, const_iterator __last) -23376: -23376: -23376: -23376: { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } -23376: # 1831 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: swap(deque& __x) noexcept -23376: { -23376: -23376: -23376: ; -23376: -23376: _M_impl._M_swap_data(__x._M_impl); -23376: _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), -23376: __x._M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void -23376: clear() noexcept -23376: { _M_erase_at_end(begin()); } -23376: -23376: protected: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) -23376: { -23376: _M_initialize_map(static_cast(__n)); -23376: _M_fill_initialize(__x); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { -23376: _M_range_initialize(__first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: # 1890 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: void -23376: _M_range_initialize(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag); -23376: -23376: -23376: template -23376: void -23376: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag); -23376: # 1912 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: _M_fill_initialize(const value_type& __value); -23376: -23376: -23376: -23376: void -23376: _M_default_initialize(); -23376: # 1928 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: void -23376: _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) -23376: { _M_fill_assign(__n, __val); } -23376: -23376: -23376: template -23376: void -23376: _M_assign_dispatch(_InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } -23376: -23376: -23376: template -23376: void -23376: _M_assign_aux(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag); -23376: -23376: -23376: template -23376: void -23376: _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __len = std::distance(__first, __last); -23376: if (__len > size()) -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, size()); -23376: std::copy(__first, __mid, begin()); -23376: _M_range_insert_aux(end(), __mid, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: else -23376: _M_erase_at_end(std::copy(__first, __last, begin())); -23376: } -23376: -23376: -23376: -23376: void -23376: _M_fill_assign(size_type __n, const value_type& __val) -23376: { -23376: if (__n > size()) -23376: { -23376: std::fill(begin(), end(), __val); -23376: _M_fill_insert(end(), __n - size(), __val); -23376: } -23376: else -23376: { -23376: _M_erase_at_end(begin() + difference_type(__n)); -23376: std::fill(begin(), end(), __val); -23376: } -23376: } -23376: # 1989 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: void _M_push_back_aux(_Args&&... __args); -23376: -23376: template -23376: void _M_push_front_aux(_Args&&... __args); -23376: -23376: -23376: void _M_pop_back_aux(); -23376: -23376: void _M_pop_front_aux(); -23376: # 2008 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, -23376: _Integer __n, _Integer __x, __true_type) -23376: { _M_fill_insert(__pos, __n, __x); } -23376: -23376: -23376: template -23376: void -23376: _M_insert_dispatch(iterator __pos, -23376: _InputIterator __first, _InputIterator __last, -23376: __false_type) -23376: { -23376: _M_range_insert_aux(__pos, __first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: -23376: template -23376: void -23376: _M_range_insert_aux(iterator __pos, _InputIterator __first, -23376: _InputIterator __last, std::input_iterator_tag); -23376: -23376: -23376: template -23376: void -23376: _M_range_insert_aux(iterator __pos, _ForwardIterator __first, -23376: _ForwardIterator __last, std::forward_iterator_tag); -23376: -23376: -23376: -23376: -23376: void -23376: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: iterator -23376: _M_insert_aux(iterator __pos, _Args&&... __args); -23376: -23376: -23376: -23376: void -23376: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x); -23376: -23376: -23376: template -23376: void -23376: _M_insert_aux(iterator __pos, -23376: _ForwardIterator __first, _ForwardIterator __last, -23376: size_type __n); -23376: -23376: -23376: -23376: -23376: void -23376: _M_destroy_data_aux(iterator __first, iterator __last); -23376: -23376: -23376: -23376: template -23376: void -23376: _M_destroy_data(iterator __first, iterator __last, const _Alloc1&) -23376: { _M_destroy_data_aux(__first, __last); } -23376: -23376: void -23376: _M_destroy_data(iterator __first, iterator __last, -23376: const std::allocator<_Tp>&) -23376: { -23376: if (!__has_trivial_destructor(value_type)) -23376: _M_destroy_data_aux(__first, __last); -23376: } -23376: -23376: -23376: void -23376: _M_erase_at_begin(iterator __pos) -23376: { -23376: _M_destroy_data(begin(), __pos, _M_get_Tp_allocator()); -23376: _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node); -23376: this->_M_impl._M_start = __pos; -23376: } -23376: -23376: -23376: -23376: void -23376: _M_erase_at_end(iterator __pos) -23376: { -23376: _M_destroy_data(__pos, end(), _M_get_Tp_allocator()); -23376: _M_destroy_nodes(__pos._M_node + 1, -23376: this->_M_impl._M_finish._M_node + 1); -23376: this->_M_impl._M_finish = __pos; -23376: } -23376: -23376: iterator -23376: _M_erase(iterator __pos); -23376: -23376: iterator -23376: _M_erase(iterator __first, iterator __last); -23376: -23376: -23376: -23376: void -23376: _M_default_append(size_type __n); -23376: -23376: bool -23376: _M_shrink_to_fit(); -23376: -23376: -23376: -23376: -23376: iterator -23376: _M_reserve_elements_at_front(size_type __n) -23376: { -23376: const size_type __vacancies = this->_M_impl._M_start._M_cur -23376: - this->_M_impl._M_start._M_first; -23376: if (__n > __vacancies) -23376: _M_new_elements_at_front(__n - __vacancies); -23376: return this->_M_impl._M_start - difference_type(__n); -23376: } -23376: -23376: iterator -23376: _M_reserve_elements_at_back(size_type __n) -23376: { -23376: const size_type __vacancies = (this->_M_impl._M_finish._M_last -23376: - this->_M_impl._M_finish._M_cur) - 1; -23376: if (__n > __vacancies) -23376: _M_new_elements_at_back(__n - __vacancies); -23376: return this->_M_impl._M_finish + difference_type(__n); -23376: } -23376: -23376: void -23376: _M_new_elements_at_front(size_type __new_elements); -23376: -23376: void -23376: _M_new_elements_at_back(size_type __new_elements); -23376: # 2158 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: void -23376: _M_reserve_map_at_back(size_type __nodes_to_add = 1) -23376: { -23376: if (__nodes_to_add + 1 > this->_M_impl._M_map_size -23376: - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map)) -23376: _M_reallocate_map(__nodes_to_add, false); -23376: } -23376: -23376: void -23376: _M_reserve_map_at_front(size_type __nodes_to_add = 1) -23376: { -23376: if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node -23376: - this->_M_impl._M_map)) -23376: _M_reallocate_map(__nodes_to_add, true); -23376: } -23376: -23376: void -23376: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front); -23376: -23376: -23376: -23376: -23376: -23376: void -23376: _M_move_assign1(deque&& __x, true_type) noexcept -23376: { -23376: this->_M_impl._M_swap_data(__x._M_impl); -23376: __x.clear(); -23376: std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); -23376: } -23376: -23376: -23376: -23376: -23376: void -23376: _M_move_assign1(deque&& __x, false_type) -23376: { -23376: constexpr bool __move_storage = -23376: _Alloc_traits::_S_propagate_on_move_assign(); -23376: _M_move_assign2(std::move(__x), __bool_constant<__move_storage>()); -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: _M_replace_map(_Args&&... __args) -23376: { -23376: -23376: deque __newobj(std::forward<_Args>(__args)...); -23376: -23376: clear(); -23376: _M_deallocate_node(*begin()._M_node); -23376: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); -23376: this->_M_impl._M_map = nullptr; -23376: this->_M_impl._M_map_size = 0; -23376: -23376: this->_M_impl._M_swap_data(__newobj._M_impl); -23376: } -23376: -23376: -23376: void -23376: _M_move_assign2(deque&& __x, true_type) -23376: { -23376: -23376: auto __alloc = __x._M_get_Tp_allocator(); -23376: -23376: -23376: _M_replace_map(std::move(__x)); -23376: -23376: _M_get_Tp_allocator() = std::move(__alloc); -23376: } -23376: -23376: -23376: -23376: void -23376: _M_move_assign2(deque&& __x, false_type) -23376: { -23376: if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) -23376: { -23376: -23376: -23376: _M_replace_map(std::move(__x), __x.get_allocator()); -23376: } -23376: else -23376: { -23376: -23376: -23376: _M_assign_aux(std::__make_move_if_noexcept_iterator(__x.begin()), -23376: std::__make_move_if_noexcept_iterator(__x.end()), -23376: std::random_access_iterator_tag()); -23376: __x.clear(); -23376: } -23376: } -23376: -23376: }; -23376: # 2275 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: inline bool -23376: operator==(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return __x.size() == __y.size() -23376: && std::equal(__x.begin(), __x.end(), __y.begin()); } -23376: # 2293 "/usr/include/c++/8/bits/stl_deque.h" 3 -23376: template -23376: inline bool -23376: operator<(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return std::lexicographical_compare(__x.begin(), __x.end(), -23376: __y.begin(), __y.end()); } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return !(__x == __y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return __y < __x; } -23376: -23376: -23376: template -23376: inline bool -23376: operator<=(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return !(__y < __x); } -23376: -23376: -23376: template -23376: inline bool -23376: operator>=(const deque<_Tp, _Alloc>& __x, -23376: const deque<_Tp, _Alloc>& __y) -23376: { return !(__x < __y); } -23376: -23376: -23376: template -23376: inline void -23376: swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y) -23376: noexcept(noexcept(__x.swap(__y))) -23376: { __x.swap(__y); } -23376: -23376: -23376: -23376: -23376: -23376: } -23376: # 65 "/usr/include/c++/8/deque" 2 3 -23376: -23376: # 1 "/usr/include/c++/8/bits/deque.tcc" 1 3 -23376: # 59 "/usr/include/c++/8/bits/deque.tcc" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_default_initialize() -23376: { -23376: _Map_pointer __cur; -23376: try -23376: { -23376: for (__cur = this->_M_impl._M_start._M_node; -23376: __cur < this->_M_impl._M_finish._M_node; -23376: ++__cur) -23376: std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(), -23376: _M_get_Tp_allocator()); -23376: std::__uninitialized_default_a(this->_M_impl._M_finish._M_first, -23376: this->_M_impl._M_finish._M_cur, -23376: _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), -23376: _M_get_Tp_allocator()); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: deque<_Tp, _Alloc>& -23376: deque<_Tp, _Alloc>:: -23376: operator=(const deque& __x) -23376: { -23376: if (&__x != this) -23376: { -23376: -23376: if (_Alloc_traits::_S_propagate_on_copy_assign()) -23376: { -23376: if (!_Alloc_traits::_S_always_equal() -23376: && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) -23376: { -23376: -23376: -23376: _M_replace_map(__x, __x.get_allocator()); -23376: std::__alloc_on_copy(_M_get_Tp_allocator(), -23376: __x._M_get_Tp_allocator()); -23376: return *this; -23376: } -23376: std::__alloc_on_copy(_M_get_Tp_allocator(), -23376: __x._M_get_Tp_allocator()); -23376: } -23376: -23376: const size_type __len = size(); -23376: if (__len >= __x.size()) -23376: _M_erase_at_end(std::copy(__x.begin(), __x.end(), -23376: this->_M_impl._M_start)); -23376: else -23376: { -23376: const_iterator __mid = __x.begin() + difference_type(__len); -23376: std::copy(__x.begin(), __mid, this->_M_impl._M_start); -23376: _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(), -23376: std::random_access_iterator_tag()); -23376: } -23376: } -23376: return *this; -23376: } -23376: -23376: -23376: template -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: deque<_Tp, _Alloc>:: -23376: emplace_front(_Args&&... __args) -23376: { -23376: if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first) -23376: { -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_start._M_cur - 1, -23376: std::forward<_Args>(__args)...); -23376: --this->_M_impl._M_start._M_cur; -23376: } -23376: else -23376: _M_push_front_aux(std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: template -23376: -23376: -23376: -23376: void -23376: -23376: deque<_Tp, _Alloc>:: -23376: emplace_back(_Args&&... __args) -23376: { -23376: if (this->_M_impl._M_finish._M_cur -23376: != this->_M_impl._M_finish._M_last - 1) -23376: { -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_finish._M_cur, -23376: std::forward<_Args>(__args)...); -23376: ++this->_M_impl._M_finish._M_cur; -23376: } -23376: else -23376: _M_push_back_aux(std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: } -23376: -23376: -23376: -23376: template -23376: template -23376: typename deque<_Tp, _Alloc>::iterator -23376: deque<_Tp, _Alloc>:: -23376: emplace(const_iterator __position, _Args&&... __args) -23376: { -23376: if (__position._M_cur == this->_M_impl._M_start._M_cur) -23376: { -23376: emplace_front(std::forward<_Args>(__args)...); -23376: return this->_M_impl._M_start; -23376: } -23376: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) -23376: { -23376: emplace_back(std::forward<_Args>(__args)...); -23376: iterator __tmp = this->_M_impl._M_finish; -23376: --__tmp; -23376: return __tmp; -23376: } -23376: else -23376: return _M_insert_aux(__position._M_const_cast(), -23376: std::forward<_Args>(__args)...); -23376: } -23376: -23376: -23376: template -23376: typename deque<_Tp, _Alloc>::iterator -23376: deque<_Tp, _Alloc>:: -23376: -23376: insert(const_iterator __position, const value_type& __x) -23376: -23376: -23376: -23376: { -23376: if (__position._M_cur == this->_M_impl._M_start._M_cur) -23376: { -23376: push_front(__x); -23376: return this->_M_impl._M_start; -23376: } -23376: else if (__position._M_cur == this->_M_impl._M_finish._M_cur) -23376: { -23376: push_back(__x); -23376: iterator __tmp = this->_M_impl._M_finish; -23376: --__tmp; -23376: return __tmp; -23376: } -23376: else -23376: return _M_insert_aux(__position._M_const_cast(), __x); -23376: } -23376: -23376: template -23376: typename deque<_Tp, _Alloc>::iterator -23376: deque<_Tp, _Alloc>:: -23376: _M_erase(iterator __position) -23376: { -23376: iterator __next = __position; -23376: ++__next; -23376: const difference_type __index = __position - begin(); -23376: if (static_cast(__index) < (size() >> 1)) -23376: { -23376: if (__position != begin()) -23376: std::move_backward(begin(), __position, __next); -23376: pop_front(); -23376: } -23376: else -23376: { -23376: if (__next != end()) -23376: std::move(__next, end(), __position); -23376: pop_back(); -23376: } -23376: return begin() + __index; -23376: } -23376: -23376: template -23376: typename deque<_Tp, _Alloc>::iterator -23376: deque<_Tp, _Alloc>:: -23376: _M_erase(iterator __first, iterator __last) -23376: { -23376: if (__first == __last) -23376: return __first; -23376: else if (__first == begin() && __last == end()) -23376: { -23376: clear(); -23376: return end(); -23376: } -23376: else -23376: { -23376: const difference_type __n = __last - __first; -23376: const difference_type __elems_before = __first - begin(); -23376: if (static_cast(__elems_before) <= (size() - __n) / 2) -23376: { -23376: if (__first != begin()) -23376: std::move_backward(begin(), __first, __last); -23376: _M_erase_at_begin(begin() + __n); -23376: } -23376: else -23376: { -23376: if (__last != end()) -23376: std::move(__last, end(), __first); -23376: _M_erase_at_end(end() - __n); -23376: } -23376: return begin() + __elems_before; -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_assign_aux(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: iterator __cur = begin(); -23376: for (; __first != __last && __cur != end(); ++__cur, ++__first) -23376: *__cur = *__first; -23376: if (__first == __last) -23376: _M_erase_at_end(__cur); -23376: else -23376: _M_range_insert_aux(end(), __first, __last, -23376: std::__iterator_category(__first)); -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_fill_insert(iterator __pos, size_type __n, const value_type& __x) -23376: { -23376: if (__pos._M_cur == this->_M_impl._M_start._M_cur) -23376: { -23376: iterator __new_start = _M_reserve_elements_at_front(__n); -23376: try -23376: { -23376: std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start, -23376: __x, _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(__new_start._M_node, -23376: this->_M_impl._M_start._M_node); -23376: throw; -23376: } -23376: } -23376: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) -23376: { -23376: iterator __new_finish = _M_reserve_elements_at_back(__n); -23376: try -23376: { -23376: std::__uninitialized_fill_a(this->_M_impl._M_finish, -23376: __new_finish, __x, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, -23376: __new_finish._M_node + 1); -23376: throw; -23376: } -23376: } -23376: else -23376: _M_insert_aux(__pos, __n, __x); -23376: } -23376: -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_default_append(size_type __n) -23376: { -23376: if (__n) -23376: { -23376: iterator __new_finish = _M_reserve_elements_at_back(__n); -23376: try -23376: { -23376: std::__uninitialized_default_a(this->_M_impl._M_finish, -23376: __new_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, -23376: __new_finish._M_node + 1); -23376: throw; -23376: } -23376: } -23376: } -23376: -23376: template -23376: bool -23376: deque<_Tp, _Alloc>:: -23376: _M_shrink_to_fit() -23376: { -23376: const difference_type __front_capacity -23376: = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first); -23376: if (__front_capacity == 0) -23376: return false; -23376: -23376: const difference_type __back_capacity -23376: = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur); -23376: if (__front_capacity + __back_capacity < _S_buffer_size()) -23376: return false; -23376: -23376: return std::__shrink_to_fit_aux::_S_do_it(*this); -23376: } -23376: -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_fill_initialize(const value_type& __value) -23376: { -23376: _Map_pointer __cur; -23376: try -23376: { -23376: for (__cur = this->_M_impl._M_start._M_node; -23376: __cur < this->_M_impl._M_finish._M_node; -23376: ++__cur) -23376: std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(), -23376: __value, _M_get_Tp_allocator()); -23376: std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first, -23376: this->_M_impl._M_finish._M_cur, -23376: __value, _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), -23376: _M_get_Tp_allocator()); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_range_initialize(_InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { -23376: this->_M_initialize_map(0); -23376: try -23376: { -23376: for (; __first != __last; ++__first) -23376: -23376: emplace_back(*__first); -23376: -23376: -23376: -23376: } -23376: catch(...) -23376: { -23376: clear(); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __n = std::distance(__first, __last); -23376: this->_M_initialize_map(__n); -23376: -23376: _Map_pointer __cur_node; -23376: try -23376: { -23376: for (__cur_node = this->_M_impl._M_start._M_node; -23376: __cur_node < this->_M_impl._M_finish._M_node; -23376: ++__cur_node) -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, _S_buffer_size()); -23376: std::__uninitialized_copy_a(__first, __mid, *__cur_node, -23376: _M_get_Tp_allocator()); -23376: __first = __mid; -23376: } -23376: std::__uninitialized_copy_a(__first, __last, -23376: this->_M_impl._M_finish._M_first, -23376: _M_get_Tp_allocator()); -23376: } -23376: catch(...) -23376: { -23376: std::_Destroy(this->_M_impl._M_start, -23376: iterator(*__cur_node, __cur_node), -23376: _M_get_Tp_allocator()); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_push_back_aux(_Args&&... __args) -23376: -23376: -23376: -23376: -23376: -23376: { -23376: _M_reserve_map_at_back(); -23376: *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node(); -23376: try -23376: { -23376: -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_finish._M_cur, -23376: std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node -23376: + 1); -23376: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first; -23376: } -23376: catch(...) -23376: { -23376: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1)); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_push_front_aux(_Args&&... __args) -23376: -23376: -23376: -23376: -23376: -23376: { -23376: _M_reserve_map_at_front(); -23376: *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node(); -23376: try -23376: { -23376: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node -23376: - 1); -23376: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1; -23376: -23376: _Alloc_traits::construct(this->_M_impl, -23376: this->_M_impl._M_start._M_cur, -23376: std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: } -23376: catch(...) -23376: { -23376: ++this->_M_impl._M_start; -23376: _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1)); -23376: throw; -23376: } -23376: } -23376: -23376: -23376: template -23376: void deque<_Tp, _Alloc>:: -23376: _M_pop_back_aux() -23376: { -23376: _M_deallocate_node(this->_M_impl._M_finish._M_first); -23376: this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1); -23376: this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1; -23376: _Alloc_traits::destroy(_M_get_Tp_allocator(), -23376: this->_M_impl._M_finish._M_cur); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void deque<_Tp, _Alloc>:: -23376: _M_pop_front_aux() -23376: { -23376: _Alloc_traits::destroy(_M_get_Tp_allocator(), -23376: this->_M_impl._M_start._M_cur); -23376: _M_deallocate_node(this->_M_impl._M_start._M_first); -23376: this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1); -23376: this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first; -23376: } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_range_insert_aux(iterator __pos, -23376: _InputIterator __first, _InputIterator __last, -23376: std::input_iterator_tag) -23376: { std::copy(__first, __last, std::inserter(*this, __pos)); } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_range_insert_aux(iterator __pos, -23376: _ForwardIterator __first, _ForwardIterator __last, -23376: std::forward_iterator_tag) -23376: { -23376: const size_type __n = std::distance(__first, __last); -23376: if (__pos._M_cur == this->_M_impl._M_start._M_cur) -23376: { -23376: iterator __new_start = _M_reserve_elements_at_front(__n); -23376: try -23376: { -23376: std::__uninitialized_copy_a(__first, __last, __new_start, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(__new_start._M_node, -23376: this->_M_impl._M_start._M_node); -23376: throw; -23376: } -23376: } -23376: else if (__pos._M_cur == this->_M_impl._M_finish._M_cur) -23376: { -23376: iterator __new_finish = _M_reserve_elements_at_back(__n); -23376: try -23376: { -23376: std::__uninitialized_copy_a(__first, __last, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, -23376: __new_finish._M_node + 1); -23376: throw; -23376: } -23376: } -23376: else -23376: _M_insert_aux(__pos, __first, __last, __n); -23376: } -23376: -23376: template -23376: -23376: template -23376: typename deque<_Tp, _Alloc>::iterator -23376: deque<_Tp, _Alloc>:: -23376: _M_insert_aux(iterator __pos, _Args&&... __args) -23376: { -23376: value_type __x_copy(std::forward<_Args>(__args)...); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: difference_type __index = __pos - this->_M_impl._M_start; -23376: if (static_cast(__index) < size() / 2) -23376: { -23376: push_front(std::move(front())); -23376: iterator __front1 = this->_M_impl._M_start; -23376: ++__front1; -23376: iterator __front2 = __front1; -23376: ++__front2; -23376: __pos = this->_M_impl._M_start + __index; -23376: iterator __pos1 = __pos; -23376: ++__pos1; -23376: std::move(__front2, __pos1, __front1); -23376: } -23376: else -23376: { -23376: push_back(std::move(back())); -23376: iterator __back1 = this->_M_impl._M_finish; -23376: --__back1; -23376: iterator __back2 = __back1; -23376: --__back2; -23376: __pos = this->_M_impl._M_start + __index; -23376: std::move_backward(__pos, __back2, __back1); -23376: } -23376: *__pos = std::move(__x_copy); -23376: return __pos; -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_insert_aux(iterator __pos, size_type __n, const value_type& __x) -23376: { -23376: const difference_type __elems_before = __pos - this->_M_impl._M_start; -23376: const size_type __length = this->size(); -23376: value_type __x_copy = __x; -23376: if (__elems_before < difference_type(__length / 2)) -23376: { -23376: iterator __new_start = _M_reserve_elements_at_front(__n); -23376: iterator __old_start = this->_M_impl._M_start; -23376: __pos = this->_M_impl._M_start + __elems_before; -23376: try -23376: { -23376: if (__elems_before >= difference_type(__n)) -23376: { -23376: iterator __start_n = (this->_M_impl._M_start -23376: + difference_type(__n)); -23376: std::__uninitialized_move_a(this->_M_impl._M_start, -23376: __start_n, __new_start, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: std::move(__start_n, __pos, __old_start); -23376: std::fill(__pos - difference_type(__n), __pos, __x_copy); -23376: } -23376: else -23376: { -23376: std::__uninitialized_move_fill(this->_M_impl._M_start, -23376: __pos, __new_start, -23376: this->_M_impl._M_start, -23376: __x_copy, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: std::fill(__old_start, __pos, __x_copy); -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(__new_start._M_node, -23376: this->_M_impl._M_start._M_node); -23376: throw; -23376: } -23376: } -23376: else -23376: { -23376: iterator __new_finish = _M_reserve_elements_at_back(__n); -23376: iterator __old_finish = this->_M_impl._M_finish; -23376: const difference_type __elems_after = -23376: difference_type(__length) - __elems_before; -23376: __pos = this->_M_impl._M_finish - __elems_after; -23376: try -23376: { -23376: if (__elems_after > difference_type(__n)) -23376: { -23376: iterator __finish_n = (this->_M_impl._M_finish -23376: - difference_type(__n)); -23376: std::__uninitialized_move_a(__finish_n, -23376: this->_M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: std::move_backward(__pos, __finish_n, __old_finish); -23376: std::fill(__pos, __pos + difference_type(__n), __x_copy); -23376: } -23376: else -23376: { -23376: std::__uninitialized_fill_move(this->_M_impl._M_finish, -23376: __pos + difference_type(__n), -23376: __x_copy, __pos, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: std::fill(__pos, __old_finish, __x_copy); -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, -23376: __new_finish._M_node + 1); -23376: throw; -23376: } -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_insert_aux(iterator __pos, -23376: _ForwardIterator __first, _ForwardIterator __last, -23376: size_type __n) -23376: { -23376: const difference_type __elemsbefore = __pos - this->_M_impl._M_start; -23376: const size_type __length = size(); -23376: if (static_cast(__elemsbefore) < __length / 2) -23376: { -23376: iterator __new_start = _M_reserve_elements_at_front(__n); -23376: iterator __old_start = this->_M_impl._M_start; -23376: __pos = this->_M_impl._M_start + __elemsbefore; -23376: try -23376: { -23376: if (__elemsbefore >= difference_type(__n)) -23376: { -23376: iterator __start_n = (this->_M_impl._M_start -23376: + difference_type(__n)); -23376: std::__uninitialized_move_a(this->_M_impl._M_start, -23376: __start_n, __new_start, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: std::move(__start_n, __pos, __old_start); -23376: std::copy(__first, __last, __pos - difference_type(__n)); -23376: } -23376: else -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, difference_type(__n) - __elemsbefore); -23376: std::__uninitialized_move_copy(this->_M_impl._M_start, -23376: __pos, __first, __mid, -23376: __new_start, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_start = __new_start; -23376: std::copy(__mid, __last, __old_start); -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(__new_start._M_node, -23376: this->_M_impl._M_start._M_node); -23376: throw; -23376: } -23376: } -23376: else -23376: { -23376: iterator __new_finish = _M_reserve_elements_at_back(__n); -23376: iterator __old_finish = this->_M_impl._M_finish; -23376: const difference_type __elemsafter = -23376: difference_type(__length) - __elemsbefore; -23376: __pos = this->_M_impl._M_finish - __elemsafter; -23376: try -23376: { -23376: if (__elemsafter > difference_type(__n)) -23376: { -23376: iterator __finish_n = (this->_M_impl._M_finish -23376: - difference_type(__n)); -23376: std::__uninitialized_move_a(__finish_n, -23376: this->_M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: std::move_backward(__pos, __finish_n, __old_finish); -23376: std::copy(__first, __last, __pos); -23376: } -23376: else -23376: { -23376: _ForwardIterator __mid = __first; -23376: std::advance(__mid, __elemsafter); -23376: std::__uninitialized_copy_move(__mid, __last, __pos, -23376: this->_M_impl._M_finish, -23376: this->_M_impl._M_finish, -23376: _M_get_Tp_allocator()); -23376: this->_M_impl._M_finish = __new_finish; -23376: std::copy(__first, __mid, __pos); -23376: } -23376: } -23376: catch(...) -23376: { -23376: _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1, -23376: __new_finish._M_node + 1); -23376: throw; -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_destroy_data_aux(iterator __first, iterator __last) -23376: { -23376: for (_Map_pointer __node = __first._M_node + 1; -23376: __node < __last._M_node; ++__node) -23376: std::_Destroy(*__node, *__node + _S_buffer_size(), -23376: _M_get_Tp_allocator()); -23376: -23376: if (__first._M_node != __last._M_node) -23376: { -23376: std::_Destroy(__first._M_cur, __first._M_last, -23376: _M_get_Tp_allocator()); -23376: std::_Destroy(__last._M_first, __last._M_cur, -23376: _M_get_Tp_allocator()); -23376: } -23376: else -23376: std::_Destroy(__first._M_cur, __last._M_cur, -23376: _M_get_Tp_allocator()); -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_new_elements_at_front(size_type __new_elems) -23376: { -23376: if (this->max_size() - this->size() < __new_elems) -23376: __throw_length_error(("deque::_M_new_elements_at_front")); -23376: -23376: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) -23376: / _S_buffer_size()); -23376: _M_reserve_map_at_front(__new_nodes); -23376: size_type __i; -23376: try -23376: { -23376: for (__i = 1; __i <= __new_nodes; ++__i) -23376: *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node(); -23376: } -23376: catch(...) -23376: { -23376: for (size_type __j = 1; __j < __i; ++__j) -23376: _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j)); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_new_elements_at_back(size_type __new_elems) -23376: { -23376: if (this->max_size() - this->size() < __new_elems) -23376: __throw_length_error(("deque::_M_new_elements_at_back")); -23376: -23376: const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1) -23376: / _S_buffer_size()); -23376: _M_reserve_map_at_back(__new_nodes); -23376: size_type __i; -23376: try -23376: { -23376: for (__i = 1; __i <= __new_nodes; ++__i) -23376: *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node(); -23376: } -23376: catch(...) -23376: { -23376: for (size_type __j = 1; __j < __i; ++__j) -23376: _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j)); -23376: throw; -23376: } -23376: } -23376: -23376: template -23376: void -23376: deque<_Tp, _Alloc>:: -23376: _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front) -23376: { -23376: const size_type __old_num_nodes -23376: = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1; -23376: const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add; -23376: -23376: _Map_pointer __new_nstart; -23376: if (this->_M_impl._M_map_size > 2 * __new_num_nodes) -23376: { -23376: __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size -23376: - __new_num_nodes) / 2 -23376: + (__add_at_front ? __nodes_to_add : 0); -23376: if (__new_nstart < this->_M_impl._M_start._M_node) -23376: std::copy(this->_M_impl._M_start._M_node, -23376: this->_M_impl._M_finish._M_node + 1, -23376: __new_nstart); -23376: else -23376: std::copy_backward(this->_M_impl._M_start._M_node, -23376: this->_M_impl._M_finish._M_node + 1, -23376: __new_nstart + __old_num_nodes); -23376: } -23376: else -23376: { -23376: size_type __new_map_size = this->_M_impl._M_map_size -23376: + std::max(this->_M_impl._M_map_size, -23376: __nodes_to_add) + 2; -23376: -23376: _Map_pointer __new_map = this->_M_allocate_map(__new_map_size); -23376: __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2 -23376: + (__add_at_front ? __nodes_to_add : 0); -23376: std::copy(this->_M_impl._M_start._M_node, -23376: this->_M_impl._M_finish._M_node + 1, -23376: __new_nstart); -23376: _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size); -23376: -23376: this->_M_impl._M_map = __new_map; -23376: this->_M_impl._M_map_size = __new_map_size; -23376: } -23376: -23376: this->_M_impl._M_start._M_set_node(__new_nstart); -23376: this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1); -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>& __first, -23376: const _Deque_iterator<_Tp, _Tp&, _Tp*>& __last, const _Tp& __value) -23376: { -23376: typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self; -23376: -23376: for (typename _Self::_Map_pointer __node = __first._M_node + 1; -23376: __node < __last._M_node; ++__node) -23376: std::fill(*__node, *__node + _Self::_S_buffer_size(), __value); -23376: -23376: if (__first._M_node != __last._M_node) -23376: { -23376: std::fill(__first._M_cur, __first._M_last, __value); -23376: std::fill(__last._M_first, __last._M_cur, __value); -23376: } -23376: else -23376: std::fill(__first._M_cur, __last._M_cur, __value); -23376: } -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { -23376: typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self; -23376: typedef typename _Self::difference_type difference_type; -23376: -23376: difference_type __len = __last - __first; -23376: while (__len > 0) -23376: { -23376: const difference_type __clen -23376: = std::min(__len, std::min(__first._M_last - __first._M_cur, -23376: __result._M_last - __result._M_cur)); -23376: std::copy(__first._M_cur, __first._M_cur + __clen, __result._M_cur); -23376: __first += __clen; -23376: __result += __clen; -23376: __len -= __clen; -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { -23376: typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self; -23376: typedef typename _Self::difference_type difference_type; -23376: -23376: difference_type __len = __last - __first; -23376: while (__len > 0) -23376: { -23376: difference_type __llen = __last._M_cur - __last._M_first; -23376: _Tp* __lend = __last._M_cur; -23376: -23376: difference_type __rlen = __result._M_cur - __result._M_first; -23376: _Tp* __rend = __result._M_cur; -23376: -23376: if (!__llen) -23376: { -23376: __llen = _Self::_S_buffer_size(); -23376: __lend = *(__last._M_node - 1) + __llen; -23376: } -23376: if (!__rlen) -23376: { -23376: __rlen = _Self::_S_buffer_size(); -23376: __rend = *(__result._M_node - 1) + __rlen; -23376: } -23376: -23376: const difference_type __clen = std::min(__len, -23376: std::min(__llen, __rlen)); -23376: std::copy_backward(__lend - __clen, __lend, __rend); -23376: __last -= __clen; -23376: __result -= __clen; -23376: __len -= __clen; -23376: } -23376: return __result; -23376: } -23376: -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { -23376: typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self; -23376: typedef typename _Self::difference_type difference_type; -23376: -23376: difference_type __len = __last - __first; -23376: while (__len > 0) -23376: { -23376: const difference_type __clen -23376: = std::min(__len, std::min(__first._M_last - __first._M_cur, -23376: __result._M_last - __result._M_cur)); -23376: std::move(__first._M_cur, __first._M_cur + __clen, __result._M_cur); -23376: __first += __clen; -23376: __result += __clen; -23376: __len -= __clen; -23376: } -23376: return __result; -23376: } -23376: -23376: template -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> -23376: move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first, -23376: _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last, -23376: _Deque_iterator<_Tp, _Tp&, _Tp*> __result) -23376: { -23376: typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self; -23376: typedef typename _Self::difference_type difference_type; -23376: -23376: difference_type __len = __last - __first; -23376: while (__len > 0) -23376: { -23376: difference_type __llen = __last._M_cur - __last._M_first; -23376: _Tp* __lend = __last._M_cur; -23376: -23376: difference_type __rlen = __result._M_cur - __result._M_first; -23376: _Tp* __rend = __result._M_cur; -23376: -23376: if (!__llen) -23376: { -23376: __llen = _Self::_S_buffer_size(); -23376: __lend = *(__last._M_node - 1) + __llen; -23376: } -23376: if (!__rlen) -23376: { -23376: __rlen = _Self::_S_buffer_size(); -23376: __rend = *(__result._M_node - 1) + __rlen; -23376: } -23376: -23376: const difference_type __clen = std::min(__len, -23376: std::min(__llen, __rlen)); -23376: std::move_backward(__lend - __clen, __lend, __rend); -23376: __last -= __clen; -23376: __result -= __clen; -23376: __len -= __clen; -23376: } -23376: return __result; -23376: } -23376: -23376: -23376: -23376: -23376: } -23376: # 67 "/usr/include/c++/8/deque" 2 3 -23376: # 36 "../../src/Linear_System_templates.hh" 2 -23376: -23376: -23376: # 37 "../../src/Linear_System_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: dimension_type -23376: Linear_System::num_lines_or_equalities() const { -23376: ((void) 0); -23376: const Linear_System& x = *this; -23376: dimension_type n = 0; -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: if (x[i].is_line_or_equality()) { -23376: ++n; -23376: } -23376: } -23376: return n; -23376: } -23376: -23376: template -23376: void -23376: Linear_System::merge_rows_assign(const Linear_System& y) { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: Linear_System& x = *this; -23376: -23376: -23376: Swapping_Vector tmp; -23376: -23376: tmp.reserve(compute_capacity(x.rows.size() + y.rows.size(), -23376: tmp.max_num_rows())); -23376: -23376: dimension_type xi = 0; -23376: const dimension_type x_num_rows = x.num_rows(); -23376: dimension_type yi = 0; -23376: const dimension_type y_num_rows = y.num_rows(); -23376: -23376: while (xi < x_num_rows && yi < y_num_rows) { -23376: const int comp = compare(x[xi], y[yi]); -23376: if (comp <= 0) { -23376: -23376: tmp.resize(tmp.size() + 1); -23376: swap(tmp.back(), x.rows[xi++]); -23376: tmp.back().set_representation(representation()); -23376: if (comp == 0) { -23376: -23376: ++yi; -23376: } -23376: } -23376: else { -23376: -23376: tmp.resize(tmp.size() + 1); -23376: Row copy(y[yi++], space_dimension(), representation()); -23376: swap(tmp.back(), copy); -23376: } -23376: } -23376: -23376: if (xi < x_num_rows) { -23376: while (xi < x_num_rows) { -23376: tmp.resize(tmp.size() + 1); -23376: swap(tmp.back(), x.rows[xi++]); -23376: tmp.back().set_representation(representation()); -23376: } -23376: } -23376: else { -23376: while (yi < y_num_rows) { -23376: tmp.resize(tmp.size() + 1); -23376: Row copy(y[yi++], space_dimension(), representation()); -23376: swap(tmp.back(), copy); -23376: } -23376: } -23376: -23376: -23376: swap(tmp, rows); -23376: -23376: unset_pending_rows(); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::ascii_dump(std::ostream& s) const { -23376: -23376: -23376: -23376: -23376: s << "topology " << (is_necessarily_closed() -23376: ? "NECESSARILY_CLOSED" -23376: : "NOT_NECESSARILY_CLOSED") -23376: << "\n" -23376: << num_rows() << " x " << space_dimension() << " "; -23376: Parma_Polyhedra_Library::ascii_dump(s, representation()); -23376: s << " " << (sorted ? "(sorted)" : "(not_sorted)") -23376: << "\n" -23376: << "index_first_pending " << first_pending_row() -23376: << "\n"; -23376: for (dimension_type i = 0; i < rows.size(); ++i) { -23376: rows[i].ascii_dump(s); -23376: } -23376: } -23376: -23376: template void Linear_System::ascii_dump() const { ascii_dump(std::cerr); } template void Linear_System::print() const { std::cerr << "No user level output operator defined " << "for " "Linear_System" << "." << std::endl; } -23376: -23376: template -23376: bool -23376: Linear_System::ascii_load(std::istream& s) { -23376: std::string str; -23376: if (!(s >> str) || str != "topology") { -23376: return false; -23376: } -23376: if (!(s >> str)) { -23376: return false; -23376: } -23376: -23376: clear(); -23376: -23376: Topology t; -23376: if (str == "NECESSARILY_CLOSED") { -23376: t = NECESSARILY_CLOSED; -23376: } -23376: else { -23376: if (str != "NOT_NECESSARILY_CLOSED") { -23376: return false; -23376: } -23376: t = NOT_NECESSARILY_CLOSED; -23376: } -23376: -23376: set_topology(t); -23376: -23376: dimension_type nrows; -23376: dimension_type space_dims; -23376: if (!(s >> nrows)) { -23376: return false; -23376: } -23376: if (!(s >> str) || str != "x") { -23376: return false; -23376: } -23376: if (!(s >> space_dims)) { -23376: return false; -23376: } -23376: -23376: space_dimension_ = space_dims; -23376: -23376: if (!Parma_Polyhedra_Library::ascii_load(s, representation_)) { -23376: return false; -23376: } -23376: -23376: if (!(s >> str) || (str != "(sorted)" && str != "(not_sorted)")) { -23376: return false; -23376: } -23376: const bool sortedness = (str == "(sorted)"); -23376: dimension_type index; -23376: if (!(s >> str) || str != "index_first_pending") { -23376: return false; -23376: } -23376: if (!(s >> index)) { -23376: return false; -23376: } -23376: -23376: Row row; -23376: for (dimension_type i = 0; i < nrows; ++i) { -23376: if (!row.ascii_load(s)) { -23376: return false; -23376: } -23376: insert(row, Recycle_Input()); -23376: } -23376: index_first_pending = index; -23376: sorted = sortedness; -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert(const Row& r) { -23376: Row tmp(r, representation()); -23376: insert(tmp, Recycle_Input()); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert(Row& r, Recycle_Input) { -23376: insert_no_ok(r, Recycle_Input()); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_no_ok(Row& r, Recycle_Input) { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: -23376: const bool was_sorted = is_sorted(); -23376: -23376: insert_pending_no_ok(r, Recycle_Input()); -23376: -23376: if (was_sorted) { -23376: const dimension_type nrows = num_rows(); -23376: -23376: if (nrows > 1) { -23376: -23376: -23376: -23376: sorted = (compare(rows[nrows-2], rows[nrows-1]) <= 0); -23376: } -23376: else { -23376: -23376: sorted = true; -23376: } -23376: } -23376: -23376: unset_pending_rows(); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_pending_no_ok(Row& r, Recycle_Input) { -23376: # 267 "../../src/Linear_System_templates.hh" -23376: ((void) 0); -23376: -23376: r.set_representation(representation()); -23376: -23376: if (space_dimension() < r.space_dimension()) { -23376: set_space_dimension_no_ok(r.space_dimension()); -23376: } -23376: else { -23376: r.set_space_dimension_no_ok(space_dimension()); -23376: } -23376: -23376: rows.resize(rows.size() + 1); -23376: swap(rows.back(), r); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_pending(const Row& r) { -23376: Row tmp(r, representation()); -23376: insert_pending(tmp, Recycle_Input()); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_pending(Row& r, Recycle_Input) { -23376: insert_pending_no_ok(r, Recycle_Input()); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_pending(const Linear_System& y) { -23376: Linear_System tmp(y, representation(), With_Pending()); -23376: insert_pending(tmp, Recycle_Input()); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert_pending(Linear_System& y, Recycle_Input) { -23376: Linear_System& x = *this; -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < y.num_rows(); ++i) { -23376: x.insert_pending(y.rows[i], Recycle_Input()); -23376: } -23376: -23376: y.clear(); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert(const Linear_System& y) { -23376: Linear_System tmp(y, representation(), With_Pending()); -23376: insert(tmp, Recycle_Input()); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::insert(Linear_System& y, Recycle_Input) { -23376: ((void) 0); -23376: -23376: -23376: if (y.has_no_rows()) { -23376: return; -23376: } -23376: -23376: -23376: if (is_sorted()) { -23376: if (!y.is_sorted() || y.num_pending_rows() > 0) { -23376: sorted = false; -23376: } -23376: else { -23376: -23376: const dimension_type n_rows = num_rows(); -23376: if (n_rows > 0) { -23376: sorted = (compare(rows[n_rows-1], y[0]) <= 0); -23376: } -23376: } -23376: } -23376: -23376: -23376: insert_pending(y, Recycle_Input()); -23376: -23376: -23376: -23376: -23376: unset_pending_rows(); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::remove_space_dimensions(const Variables_Set& vars) { -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < num_rows(); ) { -23376: const bool valid = rows[i].remove_space_dimensions(vars); -23376: if (!valid) { -23376: -23376: -23376: -23376: -23376: remove_row_no_ok(i, false); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: -23376: space_dimension_ -= vars.size(); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::shift_space_dimensions(Variable v, dimension_type n) { -23376: -23376: -23376: ((void) 0); -23376: for (dimension_type i = rows.size(); i-- > 0; ) { -23376: rows[i].shift_space_dimensions(v, n); -23376: } -23376: space_dimension_ += n; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::sort_rows() { -23376: -23376: sort_rows(0, first_pending_row()); -23376: sorted = true; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::sort_rows(const dimension_type first_row, -23376: const dimension_type last_row) { -23376: ((void) 0); -23376: -23376: ((void) 0) -23376: ; -23376: -23376: const bool sorting_pending = (first_row >= first_pending_row()); -23376: const dimension_type old_num_pending = num_pending_rows(); -23376: -23376: const dimension_type num_elems = last_row - first_row; -23376: if (num_elems < 2) { -23376: return; -23376: } -23376: -23376: -23376: -23376: using namespace Implementation; -23376: typedef Swapping_Vector Cont; -23376: typedef Indirect_Sort_Compare Sort_Compare; -23376: typedef Indirect_Swapper Swapper; -23376: const dimension_type num_duplicates -23376: = indirect_sort_and_unique(num_elems, -23376: Sort_Compare(rows, first_row), -23376: Unique_Compare(rows, first_row), -23376: Swapper(rows, first_row)); -23376: -23376: if (num_duplicates > 0) { -23376: typedef typename Cont::iterator Iter; -23376: typedef typename std::iterator_traits::difference_type diff_t; -23376: Iter last = rows.begin() + static_cast(last_row); -23376: Iter first = last - + static_cast(num_duplicates); -23376: rows.erase(first, last); -23376: } -23376: -23376: if (sorting_pending) { -23376: ((void) 0); -23376: index_first_pending = num_rows() - (old_num_pending - num_duplicates); -23376: } -23376: else { -23376: index_first_pending = num_rows() - old_num_pending; -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::strong_normalize() { -23376: const dimension_type nrows = rows.size(); -23376: -23376: for (dimension_type i = nrows; i-- > 0; ) { -23376: rows[i].strong_normalize(); -23376: } -23376: sorted = (nrows <= 1); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::sign_normalize() { -23376: const dimension_type nrows = rows.size(); -23376: -23376: for (dimension_type i = nrows; i-- > 0; ) { -23376: rows[i].sign_normalize(); -23376: } -23376: sorted = (nrows <= 1); -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: bool -23376: operator==(const Linear_System& x, const Linear_System& y) { -23376: if (x.space_dimension() != y.space_dimension()) { -23376: return false; -23376: } -23376: const dimension_type x_num_rows = x.num_rows(); -23376: const dimension_type y_num_rows = y.num_rows(); -23376: if (x_num_rows != y_num_rows) { -23376: return false; -23376: } -23376: if (x.first_pending_row() != y.first_pending_row()) { -23376: return false; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = x_num_rows; i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Linear_System::sort_and_remove_with_sat(Bit_Matrix& sat) { -23376: -23376: ((void) 0); -23376: if (first_pending_row() <= 1) { -23376: set_sorted(true); -23376: return; -23376: } -23376: -23376: const dimension_type num_elems = sat.num_rows(); -23376: -23376: -23376: typedef Swapping_Vector Cont; -23376: const Implementation::Indirect_Sort_Compare -23376: sort_cmp(rows); -23376: const Unique_Compare unique_cmp(rows); -23376: const Implementation::Indirect_Swapper2 swapper(rows, sat); -23376: -23376: const dimension_type num_duplicates -23376: = Implementation::indirect_sort_and_unique(num_elems, sort_cmp, -23376: unique_cmp, swapper); -23376: -23376: const dimension_type new_first_pending_row -23376: = first_pending_row() - num_duplicates; -23376: -23376: if (num_pending_rows() > 0) { -23376: -23376: const dimension_type n_rows = num_rows() - 1; -23376: for (dimension_type i = 0; i < num_duplicates; ++i) { -23376: swap(rows[new_first_pending_row + i], rows[n_rows - i]); -23376: } -23376: } -23376: -23376: -23376: rows.resize(rows.size() - num_duplicates); -23376: index_first_pending = new_first_pending_row; -23376: -23376: sat.remove_trailing_rows(num_duplicates); -23376: -23376: -23376: sorted = true; -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: dimension_type -23376: Linear_System::gauss(const dimension_type n_lines_or_equalities) { -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type rank = 0; -23376: -23376: bool changed = false; -23376: -23376: const dimension_type num_cols -23376: = is_necessarily_closed() ? space_dimension() + 1 : space_dimension() + 2; -23376: -23376: -23376: -23376: for (dimension_type j = num_cols; j-- > 0; ) { -23376: for (dimension_type i = rank; i < n_lines_or_equalities; ++i) { -23376: -23376: -23376: if ((*this)[i].expr.get(j) == 0) { -23376: continue; -23376: } -23376: -23376: -23376: if (i > rank) { -23376: swap(rows[i], rows[rank]); -23376: -23376: changed = true; -23376: } -23376: -23376: -23376: -23376: for (dimension_type k = i + 1; k < n_lines_or_equalities; ++k) { -23376: if (rows[k].expr.get(Variable(j - 1)) != 0) { -23376: rows[k].linear_combine(rows[rank], j); -23376: changed = true; -23376: } -23376: } -23376: -23376: ++rank; -23376: -23376: break; -23376: } -23376: } -23376: if (changed) { -23376: sorted = false; -23376: } -23376: -23376: ((void) 0); -23376: return rank; -23376: } -23376: -23376: template -23376: void -23376: Linear_System -23376: ::back_substitute(const dimension_type n_lines_or_equalities) { -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type nrows = num_rows(); -23376: -23376: bool still_sorted = is_sorted(); -23376: -23376: -23376: std::deque check_for_sortedness; -23376: if (still_sorted) { -23376: check_for_sortedness.insert(check_for_sortedness.end(), nrows, false); -23376: } -23376: -23376: for (dimension_type k = n_lines_or_equalities; k-- > 0; ) { -23376: -23376: -23376: -23376: Row& row_k = rows[k]; -23376: const dimension_type j = row_k.expr.last_nonzero(); -23376: -23376: ((void) 0); -23376: -23376: -23376: for (dimension_type i = k; i-- > 0; ) { -23376: Row& row_i = rows[i]; -23376: if (row_i.expr.get(Variable(j - 1)) != 0) { -23376: -23376: -23376: row_i.linear_combine(row_k, j); -23376: if (still_sorted) { -23376: -23376: -23376: if (i > 0) { -23376: check_for_sortedness[i-1] = true; -23376: } -23376: check_for_sortedness[i] = true; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: const bool have_to_negate = (row_k.expr.get(Variable(j - 1)) < 0); -23376: if (have_to_negate) { -23376: neg_assign(row_k.expr); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = n_lines_or_equalities; i < nrows; ++i) { -23376: Row& row_i = rows[i]; -23376: if (row_i.expr.get(Variable(j - 1)) != 0) { -23376: -23376: -23376: row_i.linear_combine(row_k, j); -23376: if (still_sorted) { -23376: -23376: -23376: if (i > n_lines_or_equalities) { -23376: check_for_sortedness[i-1] = true; -23376: } -23376: check_for_sortedness[i] = true; -23376: } -23376: } -23376: } -23376: if (have_to_negate) { -23376: -23376: neg_assign(row_k.expr); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: -23376: for (dimension_type i = 0; still_sorted && i+1 < nrows; ++i) { -23376: if (check_for_sortedness[i]) { -23376: -23376: still_sorted = (compare((*this)[i], (*this)[i+1]) <= 0); -23376: } -23376: } -23376: -23376: -23376: sorted = still_sorted; -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::simplify() { -23376: -23376: ((void) 0); -23376: -23376: -23376: const dimension_type old_nrows = num_rows(); -23376: dimension_type nrows = old_nrows; -23376: dimension_type n_lines_or_equalities = 0; -23376: for (dimension_type i = 0; i < nrows; ++i) { -23376: if ((*this)[i].is_line_or_equality()) { -23376: if (n_lines_or_equalities < i) { -23376: swap(rows[i], rows[n_lines_or_equalities]); -23376: -23376: ((void) 0); -23376: } -23376: ++n_lines_or_equalities; -23376: } -23376: } -23376: -23376: const dimension_type rank = gauss(n_lines_or_equalities); -23376: -23376: if (rank < n_lines_or_equalities) { -23376: const dimension_type -23376: n_rays_or_points_or_inequalities = nrows - n_lines_or_equalities; -23376: const dimension_type -23376: num_swaps = std::min(n_lines_or_equalities - rank, -23376: n_rays_or_points_or_inequalities); -23376: for (dimension_type i = num_swaps; i-- > 0; ) { -23376: swap(rows[--nrows], rows[rank + i]); -23376: } -23376: remove_trailing_rows(old_nrows - nrows); -23376: if (n_rays_or_points_or_inequalities > num_swaps) { -23376: set_sorted(false); -23376: } -23376: unset_pending_rows(); -23376: n_lines_or_equalities = rank; -23376: } -23376: -23376: back_substitute(n_lines_or_equalities); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Linear_System -23376: ::add_universe_rows_and_space_dimensions(const dimension_type n) { -23376: ((void) 0); -23376: const bool was_sorted = is_sorted(); -23376: const dimension_type old_n_rows = num_rows(); -23376: const dimension_type old_space_dim -23376: = is_necessarily_closed() ? space_dimension() : space_dimension() + 1; -23376: set_space_dimension(space_dimension() + n); -23376: rows.resize(rows.size() + n); -23376: -23376: for (dimension_type i = old_n_rows; i-- > 0; ) { -23376: swap(rows[i], rows[i + n]); -23376: } -23376: for (dimension_type i = n, c = old_space_dim; i-- > 0; ) { -23376: -23376: -23376: -23376: if (Variable(c).space_dimension() <= space_dimension()) { -23376: -23376: Linear_Expression le(representation()); -23376: le.set_space_dimension(space_dimension()); -23376: le += Variable(c); -23376: Row r(le, Row::LINE_OR_EQUALITY, row_topology); -23376: swap(r, rows[i]); -23376: } -23376: else { -23376: -23376: ((void) 0); -23376: Linear_Expression le(Variable(c), representation()); -23376: Row r(le, Row::LINE_OR_EQUALITY, NECESSARILY_CLOSED); -23376: r.mark_as_not_necessarily_closed(); -23376: swap(r, rows[i]); -23376: -23376: } -23376: ++c; -23376: } -23376: -23376: -23376: if (was_sorted) { -23376: sorted = (compare(rows[n-1], rows[n]) <= 0); -23376: } -23376: -23376: -23376: -23376: if (!is_necessarily_closed()) { -23376: -23376: ((void) 0); -23376: if (!is_sorted()) { -23376: for (dimension_type i = n; i-- > 0; ) { -23376: rows[i].expr.swap_space_dimensions(Variable(old_space_dim - 1), -23376: Variable(old_space_dim - 1 + n)); -23376: ((void) 0); -23376: } -23376: } -23376: else { -23376: dimension_type old_eps_index = old_space_dim - 1; -23376: -23376: -23376: for (dimension_type i = n; i-- > 0; ++old_eps_index) { -23376: rows[i].expr.swap_space_dimensions(Variable(old_eps_index), -23376: Variable(old_eps_index + 1)); -23376: ((void) 0); -23376: } -23376: -23376: sorted = true; -23376: } -23376: } -23376: -23376: set_index_first_pending_row(index_first_pending + n); -23376: } -23376: -23376: template -23376: void -23376: Linear_System::sort_pending_and_remove_duplicates() { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: const dimension_type first_pending = first_pending_row(); -23376: sort_rows(first_pending, num_rows()); -23376: -23376: -23376: const dimension_type old_num_rows = num_rows(); -23376: dimension_type num_rows = old_num_rows; -23376: -23376: dimension_type k1 = 0; -23376: dimension_type k2 = first_pending; -23376: dimension_type num_duplicates = 0; -23376: -23376: -23376: while (k1 < first_pending && k2 < num_rows) { -23376: const int cmp = compare(rows[k1], rows[k2]); -23376: if (cmp == 0) { -23376: -23376: ++num_duplicates; -23376: --num_rows; -23376: -23376: ++k1; -23376: -23376: if (k2 < num_rows) { -23376: swap(rows[k2], rows[k2 + num_duplicates]); -23376: } -23376: } -23376: else if (cmp < 0) { -23376: -23376: ++k1; -23376: } -23376: else { -23376: -23376: -23376: -23376: ++k2; -23376: if (num_duplicates > 0 && k2 < num_rows) { -23376: swap(rows[k2], rows[k2 + num_duplicates]); -23376: } -23376: } -23376: } -23376: -23376: -23376: if (num_duplicates > 0) { -23376: if (k2 < num_rows) { -23376: for (++k2; k2 < num_rows; ++k2) { -23376: swap(rows[k2], rows[k2 + num_duplicates]); -23376: } -23376: } -23376: rows.resize(num_rows); -23376: } -23376: sorted = true; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: Linear_System::check_sorted() const { -23376: for (dimension_type i = first_pending_row(); i-- > 1; ) { -23376: if (compare(rows[i], rows[i-1]) < 0) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Linear_System::OK() const { -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = rows.size(); i-- > 0; ) { -23376: if (rows[i].representation() != representation()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: if (rows[i].space_dimension() != space_dimension()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: for (dimension_type i = rows.size(); i-- > 0; ) { -23376: if (rows[i].topology() != topology()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: } -23376: -23376: if (first_pending_row() > num_rows()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: -23376: const dimension_type n_rows = num_rows(); -23376: for (dimension_type i = 0; i < n_rows; ++i) { -23376: if (topology() != rows[i].topology()) { -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: } -23376: if (sorted && !check_sorted()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: } -23376: # 581 "../../src/Linear_System_defs.hh" 2 -23376: # 30 "../../src/Constraint_System_defs.hh" 2 -23376: # 38 "../../src/Constraint_System_defs.hh" -23376: # 1 "/usr/include/c++/8/iterator" 1 3 -23376: # 58 "/usr/include/c++/8/iterator" 3 -23376: -23376: # 59 "/usr/include/c++/8/iterator" 3 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/bits/stream_iterator.h" 1 3 -23376: # 33 "/usr/include/c++/8/bits/stream_iterator.h" 3 -23376: -23376: # 34 "/usr/include/c++/8/bits/stream_iterator.h" 3 -23376: -23376: -23376: -23376: -23376: # 37 "/usr/include/c++/8/bits/stream_iterator.h" 3 -23376: namespace std __attribute__ ((__visibility__ ("default"))) -23376: { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: template, typename _Dist = ptrdiff_t> -23376: class istream_iterator -23376: : public iterator -23376: { -23376: public: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: typedef basic_istream<_CharT, _Traits> istream_type; -23376: -23376: private: -23376: istream_type* _M_stream; -23376: _Tp _M_value; -23376: bool _M_ok; -23376: -23376: public: -23376: -23376: constexpr istream_iterator() -23376: : _M_stream(0), _M_value(), _M_ok(false) {} -23376: -23376: -23376: istream_iterator(istream_type& __s) -23376: : _M_stream(std::__addressof(__s)) -23376: { _M_read(); } -23376: -23376: istream_iterator(const istream_iterator& __obj) -23376: : _M_stream(__obj._M_stream), _M_value(__obj._M_value), -23376: _M_ok(__obj._M_ok) -23376: { } -23376: -23376: const _Tp& -23376: operator*() const -23376: { -23376: -23376: -23376: ; -23376: return _M_value; -23376: } -23376: -23376: const _Tp* -23376: operator->() const { return std::__addressof((operator*())); } -23376: -23376: istream_iterator& -23376: operator++() -23376: { -23376: -23376: -23376: ; -23376: _M_read(); -23376: return *this; -23376: } -23376: -23376: istream_iterator -23376: operator++(int) -23376: { -23376: -23376: -23376: ; -23376: istream_iterator __tmp = *this; -23376: _M_read(); -23376: return __tmp; -23376: } -23376: -23376: bool -23376: _M_equal(const istream_iterator& __x) const -23376: { return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); } -23376: -23376: private: -23376: void -23376: _M_read() -23376: { -23376: _M_ok = (_M_stream && *_M_stream) ? true : false; -23376: if (_M_ok) -23376: { -23376: *_M_stream >> _M_value; -23376: _M_ok = *_M_stream ? true : false; -23376: } -23376: } -23376: }; -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x, -23376: const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y) -23376: { return __x._M_equal(__y); } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x, -23376: const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y) -23376: { return !__x._M_equal(__y); } -23376: # 152 "/usr/include/c++/8/bits/stream_iterator.h" 3 -23376: template > -23376: class ostream_iterator -23376: : public iterator -23376: { -23376: public: -23376: -23376: -23376: typedef _CharT char_type; -23376: typedef _Traits traits_type; -23376: typedef basic_ostream<_CharT, _Traits> ostream_type; -23376: -23376: -23376: private: -23376: ostream_type* _M_stream; -23376: const _CharT* _M_string; -23376: -23376: public: -23376: -23376: ostream_iterator(ostream_type& __s) -23376: : _M_stream(std::__addressof(__s)), _M_string(0) {} -23376: # 184 "/usr/include/c++/8/bits/stream_iterator.h" 3 -23376: ostream_iterator(ostream_type& __s, const _CharT* __c) -23376: : _M_stream(&__s), _M_string(__c) { } -23376: -23376: -23376: ostream_iterator(const ostream_iterator& __obj) -23376: : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { } -23376: -23376: -23376: -23376: ostream_iterator& -23376: operator=(const _Tp& __value) -23376: { -23376: -23376: -23376: ; -23376: *_M_stream << __value; -23376: if (_M_string) *_M_stream << _M_string; -23376: return *this; -23376: } -23376: -23376: ostream_iterator& -23376: operator*() -23376: { return *this; } -23376: -23376: ostream_iterator& -23376: operator++() -23376: { return *this; } -23376: -23376: ostream_iterator& -23376: operator++(int) -23376: { return *this; } -23376: }; -23376: -23376: -23376: -23376: -23376: } -23376: # 67 "/usr/include/c++/8/iterator" 2 3 -23376: # 39 "../../src/Constraint_System_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: # 42 "../../src/Constraint_System_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Constraint_System& cs); -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Constraint_System& x, const Constraint_System& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Constraint_System& x, const Constraint_System& y); -23376: -23376: -23376: void -23376: swap(Constraint_System& x, Constraint_System& y); -23376: -23376: } -23376: # 137 "../../src/Constraint_System_defs.hh" -23376: class Parma_Polyhedra_Library::Constraint_System { -23376: public: -23376: typedef Constraint row_type; -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Constraint_System(Representation r = default_representation); -23376: -23376: -23376: explicit Constraint_System(const Constraint& c, -23376: Representation r = default_representation); -23376: -23376: -23376: explicit Constraint_System(const Congruence_System& cgs, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint_System(const Constraint_System& cs); -23376: -23376: -23376: Constraint_System(const Constraint_System& cs, Representation r); -23376: -23376: -23376: ~Constraint_System(); -23376: -23376: -23376: Constraint_System& operator=(const Constraint_System& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: bool has_equalities() const; -23376: -23376: -23376: -23376: -23376: -23376: bool has_strict_inequalities() const; -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Constraint& c); -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: -23376: -23376: static const Constraint_System& zero_dim_empty(); -23376: -23376: typedef Constraint_System_const_iterator const_iterator; -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: void m_swap(Constraint_System& y); -23376: -23376: private: -23376: Linear_System sys; -23376: -23376: -23376: -23376: -23376: -23376: static const Constraint_System* zero_dim_empty_p; -23376: -23376: friend class Constraint_System_const_iterator; -23376: -23376: friend bool operator==(const Constraint_System& x, -23376: const Constraint_System& y); -23376: -23376: -23376: explicit Constraint_System(Topology topol, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Constraint_System(Topology topol, dimension_type space_dim, -23376: Representation r = default_representation); -23376: -23376: -23376: dimension_type num_equalities() const; -23376: -23376: -23376: dimension_type num_inequalities() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void simplify(); -23376: # 303 "../../src/Constraint_System_defs.hh" -23376: bool adjust_topology_and_space_dimension(Topology new_topology, -23376: dimension_type new_space_dim); -23376: -23376: -23376: const Constraint& operator[](dimension_type k) const; -23376: -23376: -23376: bool satisfies_all_constraints(const Generator& g) const; -23376: # 347 "../../src/Constraint_System_defs.hh" -23376: void affine_preimage(Variable v, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(const Constraint& c); -23376: -23376: -23376: void add_low_level_constraints(); -23376: -23376: -23376: Topology topology() const; -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: dimension_type num_pending_rows() const; -23376: -23376: -23376: dimension_type first_pending_row() const; -23376: -23376: -23376: bool is_sorted() const; -23376: -23376: -23376: void unset_pending_rows(); -23376: -23376: -23376: void set_index_first_pending_row(dimension_type i); -23376: -23376: -23376: void set_sorted(bool b); -23376: # 398 "../../src/Constraint_System_defs.hh" -23376: void remove_row(dimension_type i, bool keep_sorted = false); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_rows(const std::vector& indexes); -23376: # 416 "../../src/Constraint_System_defs.hh" -23376: void remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted = false); -23376: -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: # 446 "../../src/Constraint_System_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: bool has_no_rows() const; -23376: -23376: -23376: void strong_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: void sort_rows(); -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(Constraint& r, Recycle_Input); -23376: -23376: -23376: -23376: void insert_pending(Constraint_System& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Constraint& r, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Constraint_System& r, Recycle_Input); -23376: -23376: -23376: void insert_pending(const Constraint_System& r); -23376: # 495 "../../src/Constraint_System_defs.hh" -23376: void merge_rows_assign(const Constraint_System& y); -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Constraint_System& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_necessarily_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void mark_as_not_necessarily_closed(); -23376: # 529 "../../src/Constraint_System_defs.hh" -23376: dimension_type gauss(dimension_type n_lines_or_equalities); -23376: # 541 "../../src/Constraint_System_defs.hh" -23376: void back_substitute(dimension_type n_lines_or_equalities); -23376: -23376: -23376: void assign_with_pending(const Constraint_System& y); -23376: -23376: -23376: -23376: -23376: -23376: void sort_pending_and_remove_duplicates(); -23376: # 559 "../../src/Constraint_System_defs.hh" -23376: void sort_and_remove_with_sat(Bit_Matrix& sat); -23376: -23376: -23376: -23376: -23376: -23376: bool check_sorted() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_lines_or_equalities() const; -23376: # 586 "../../src/Constraint_System_defs.hh" -23376: void add_universe_rows_and_space_dimensions(dimension_type n); -23376: -23376: friend class Polyhedron; -23376: friend class Termination_Helpers; -23376: }; -23376: # 610 "../../src/Constraint_System_defs.hh" -23376: class Parma_Polyhedra_Library::Constraint_System_const_iterator -23376: : public std::iterator { -23376: public: -23376: -23376: Constraint_System_const_iterator(); -23376: -23376: -23376: Constraint_System_const_iterator(const Constraint_System_const_iterator& y); -23376: -23376: -23376: ~Constraint_System_const_iterator(); -23376: -23376: -23376: Constraint_System_const_iterator& -23376: operator=(const Constraint_System_const_iterator& y); -23376: -23376: -23376: const Constraint& operator*() const; -23376: -23376: -23376: const Constraint* operator->() const; -23376: -23376: -23376: Constraint_System_const_iterator& operator++(); -23376: -23376: -23376: Constraint_System_const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Constraint_System_const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Constraint_System_const_iterator& y) const; -23376: -23376: private: -23376: friend class Constraint_System; -23376: -23376: -23376: Linear_System::const_iterator i; -23376: -23376: -23376: const Linear_System* csp; -23376: -23376: -23376: Constraint_System_const_iterator(const Linear_System -23376: ::const_iterator& iter, -23376: const Constraint_System& cs); -23376: -23376: -23376: void skip_forward(); -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: -23376: -23376: -23376: dimension_type -23376: num_constraints(const Constraint_System& cs); -23376: -23376: } -23376: -23376: } -23376: # 29 "../../src/Box_inlines.hh" 2 -23376: # 1 "../../src/Constraint_System_inlines.hh" 1 -23376: # 29 "../../src/Constraint_System_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Constraint_System::Constraint_System(Representation r) -23376: : sys(NECESSARILY_CLOSED, r) { -23376: } -23376: -23376: inline -23376: Constraint_System::Constraint_System(const Constraint& c, Representation r) -23376: : sys(c.topology(), r) { -23376: sys.insert(c); -23376: } -23376: -23376: inline -23376: Constraint_System::Constraint_System(const Constraint_System& cs) -23376: : sys(cs.sys) { -23376: } -23376: -23376: inline -23376: Constraint_System::Constraint_System(const Constraint_System& cs, -23376: Representation r) -23376: : sys(cs.sys, r) { -23376: } -23376: -23376: inline -23376: Constraint_System::Constraint_System(const Topology topol, Representation r) -23376: : sys(topol, r) { -23376: } -23376: -23376: inline -23376: Constraint_System::Constraint_System(const Topology topol, -23376: const dimension_type space_dim, -23376: Representation r) -23376: : sys(topol, space_dim, r) { -23376: } -23376: -23376: inline -23376: Constraint_System::~Constraint_System() { -23376: } -23376: -23376: inline Constraint_System& -23376: Constraint_System::operator=(const Constraint_System& y) { -23376: Constraint_System tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint_System::operator[](const dimension_type k) const { -23376: return sys[k]; -23376: } -23376: -23376: inline Representation -23376: Constraint_System::representation() const { -23376: return sys.representation(); -23376: } -23376: -23376: inline void -23376: Constraint_System::set_representation(Representation r) { -23376: sys.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::max_space_dimension() { -23376: return Linear_System::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::space_dimension() const { -23376: return sys.space_dimension(); -23376: } -23376: -23376: inline void -23376: Constraint_System::set_space_dimension(dimension_type space_dim) { -23376: return sys.set_space_dimension(space_dim); -23376: } -23376: -23376: inline void -23376: Constraint_System::clear() { -23376: sys.clear(); -23376: } -23376: -23376: inline const Constraint_System& -23376: Constraint_System::zero_dim_empty() { -23376: ((void) 0); -23376: return *zero_dim_empty_p; -23376: } -23376: -23376: inline -23376: Constraint_System_const_iterator::Constraint_System_const_iterator() -23376: : i(), csp(0) { -23376: } -23376: -23376: inline -23376: Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator& y) -23376: : i(y.i), csp(y.csp) { -23376: } -23376: -23376: inline -23376: Constraint_System_const_iterator::~Constraint_System_const_iterator() { -23376: } -23376: -23376: inline Constraint_System_const_iterator& -23376: Constraint_System_const_iterator::operator=(const Constraint_System_const_iterator& y) { -23376: i = y.i; -23376: csp = y.csp; -23376: return *this; -23376: } -23376: -23376: inline const Constraint& -23376: Constraint_System_const_iterator::operator*() const { -23376: return *i; -23376: } -23376: -23376: inline const Constraint* -23376: Constraint_System_const_iterator::operator->() const { -23376: return i.operator->(); -23376: } -23376: -23376: inline Constraint_System_const_iterator& -23376: Constraint_System_const_iterator::operator++() { -23376: ++i; -23376: skip_forward(); -23376: return *this; -23376: } -23376: -23376: inline Constraint_System_const_iterator -23376: Constraint_System_const_iterator::operator++(int) { -23376: const Constraint_System_const_iterator tmp = *this; -23376: operator++(); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Constraint_System_const_iterator::operator==(const Constraint_System_const_iterator& y) const { -23376: return i == y.i; -23376: } -23376: -23376: inline bool -23376: Constraint_System_const_iterator::operator!=(const Constraint_System_const_iterator& y) const { -23376: return i != y.i; -23376: } -23376: -23376: inline -23376: Constraint_System_const_iterator:: -23376: Constraint_System_const_iterator(const Linear_System::const_iterator& iter, -23376: const Constraint_System& cs) -23376: : i(iter), csp(&cs.sys) { -23376: } -23376: -23376: inline Constraint_System_const_iterator -23376: Constraint_System::begin() const { -23376: const_iterator i(sys.begin(), *this); -23376: i.skip_forward(); -23376: return i; -23376: } -23376: -23376: inline Constraint_System_const_iterator -23376: Constraint_System::end() const { -23376: const Constraint_System_const_iterator i(sys.end(), *this); -23376: return i; -23376: } -23376: -23376: inline bool -23376: Constraint_System::empty() const { -23376: return begin() == end(); -23376: } -23376: -23376: inline void -23376: Constraint_System::add_low_level_constraints() { -23376: if (sys.is_necessarily_closed()) { -23376: -23376: insert(Constraint::zero_dim_positivity()); -23376: } -23376: else { -23376: -23376: insert(Constraint::epsilon_leq_one()); -23376: insert(Constraint::epsilon_geq_zero()); -23376: } -23376: } -23376: -23376: inline void -23376: Constraint_System::m_swap(Constraint_System& y) { -23376: swap(sys, y.sys); -23376: } -23376: -23376: inline memory_size_type -23376: Constraint_System::external_memory_in_bytes() const { -23376: return sys.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Constraint_System::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: inline void -23376: Constraint_System::simplify() { -23376: sys.simplify(); -23376: } -23376: -23376: inline Topology -23376: Constraint_System::topology() const { -23376: return sys.topology(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::num_rows() const { -23376: return sys.num_rows(); -23376: } -23376: -23376: inline bool -23376: Constraint_System::is_necessarily_closed() const { -23376: return sys.is_necessarily_closed(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::num_pending_rows() const { -23376: return sys.num_pending_rows(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::first_pending_row() const { -23376: return sys.first_pending_row(); -23376: } -23376: -23376: inline bool -23376: Constraint_System::is_sorted() const { -23376: return sys.is_sorted(); -23376: } -23376: -23376: inline void -23376: Constraint_System::unset_pending_rows() { -23376: sys.unset_pending_rows(); -23376: } -23376: -23376: inline void -23376: Constraint_System::set_index_first_pending_row(dimension_type i) { -23376: sys.set_index_first_pending_row(i); -23376: } -23376: -23376: inline void -23376: Constraint_System::set_sorted(bool b) { -23376: sys.set_sorted(b); -23376: } -23376: -23376: inline void -23376: Constraint_System::remove_row(dimension_type i, bool keep_sorted) { -23376: sys.remove_row(i, keep_sorted); -23376: } -23376: -23376: inline void -23376: Constraint_System::remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted) { -23376: sys.remove_rows(first, last, keep_sorted); -23376: } -23376: -23376: inline void -23376: Constraint_System::remove_rows(const std::vector& indexes) { -23376: sys.remove_rows(indexes); -23376: } -23376: -23376: inline void -23376: Constraint_System::remove_trailing_rows(dimension_type n) { -23376: sys.remove_trailing_rows(n); -23376: } -23376: -23376: inline void -23376: Constraint_System -23376: ::remove_space_dimensions(const Variables_Set& vars) { -23376: sys.remove_space_dimensions(vars); -23376: } -23376: -23376: inline void -23376: Constraint_System -23376: ::shift_space_dimensions(Variable v, dimension_type n) { -23376: sys.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline void -23376: Constraint_System -23376: ::permute_space_dimensions(const std::vector& cycle) { -23376: sys.permute_space_dimensions(cycle); -23376: } -23376: -23376: inline void -23376: Constraint_System -23376: ::swap_space_dimensions(Variable v1, Variable v2) { -23376: sys.swap_space_dimensions(v1, v2); -23376: } -23376: -23376: inline bool -23376: Constraint_System::has_no_rows() const { -23376: return sys.has_no_rows(); -23376: } -23376: -23376: inline void -23376: Constraint_System::strong_normalize() { -23376: sys.strong_normalize(); -23376: } -23376: -23376: inline void -23376: Constraint_System::sort_rows() { -23376: sys.sort_rows(); -23376: } -23376: -23376: inline void -23376: Constraint_System::insert_pending(Constraint_System& r, Recycle_Input) { -23376: sys.insert_pending(r.sys, Recycle_Input()); -23376: } -23376: -23376: inline void -23376: Constraint_System::insert(Constraint_System& r, Recycle_Input) { -23376: sys.insert(r.sys, Recycle_Input()); -23376: } -23376: -23376: inline void -23376: Constraint_System::insert_pending(const Constraint_System& r) { -23376: sys.insert_pending(r.sys); -23376: } -23376: -23376: inline void -23376: Constraint_System::merge_rows_assign(const Constraint_System& y) { -23376: sys.merge_rows_assign(y.sys); -23376: } -23376: -23376: inline void -23376: Constraint_System::insert(const Constraint_System& y) { -23376: sys.insert(y.sys); -23376: } -23376: -23376: inline void -23376: Constraint_System::mark_as_necessarily_closed() { -23376: sys.mark_as_necessarily_closed(); -23376: } -23376: -23376: inline void -23376: Constraint_System::mark_as_not_necessarily_closed() { -23376: sys.mark_as_not_necessarily_closed(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::gauss(dimension_type n_lines_or_equalities) { -23376: return sys.gauss(n_lines_or_equalities); -23376: } -23376: -23376: inline void -23376: Constraint_System::back_substitute(dimension_type n_lines_or_equalities) { -23376: sys.back_substitute(n_lines_or_equalities); -23376: } -23376: -23376: inline void -23376: Constraint_System::assign_with_pending(const Constraint_System& y) { -23376: sys.assign_with_pending(y.sys); -23376: } -23376: -23376: inline void -23376: Constraint_System::sort_pending_and_remove_duplicates() { -23376: sys.sort_pending_and_remove_duplicates(); -23376: } -23376: -23376: inline void -23376: Constraint_System::sort_and_remove_with_sat(Bit_Matrix& sat) { -23376: sys.sort_and_remove_with_sat(sat); -23376: } -23376: -23376: inline bool -23376: Constraint_System::check_sorted() const { -23376: return sys.check_sorted(); -23376: } -23376: -23376: inline dimension_type -23376: Constraint_System::num_lines_or_equalities() const { -23376: return sys.num_lines_or_equalities(); -23376: } -23376: -23376: inline void -23376: Constraint_System::add_universe_rows_and_space_dimensions(dimension_type n) { -23376: sys.add_universe_rows_and_space_dimensions(n); -23376: } -23376: -23376: inline bool -23376: operator==(const Constraint_System& x, const Constraint_System& y) { -23376: return x.sys == y.sys; -23376: } -23376: -23376: inline bool -23376: operator!=(const Constraint_System& x, const Constraint_System& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: inline void -23376: swap(Constraint_System& x, Constraint_System& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: namespace Implementation { -23376: -23376: -23376: -23376: -23376: inline dimension_type -23376: num_constraints(const Constraint_System& cs) { -23376: return static_cast(std::distance(cs.begin(), cs.end())); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 30 "../../src/Box_inlines.hh" 2 -23376: # 1 "../../src/Congruence_System_defs.hh" 1 -23376: # 38 "../../src/Congruence_System_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: bool -23376: operator==(const Congruence_System& x, const Congruence_System& y); -23376: -23376: } -23376: # 103 "../../src/Congruence_System_defs.hh" -23376: class Parma_Polyhedra_Library::Congruence_System { -23376: public: -23376: -23376: typedef Congruence row_type; -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Congruence_System(Representation r = default_representation); -23376: -23376: -23376: explicit Congruence_System(dimension_type d, -23376: Representation r = default_representation); -23376: -23376: -23376: explicit Congruence_System(const Congruence& cg, -23376: Representation r = default_representation); -23376: # 129 "../../src/Congruence_System_defs.hh" -23376: explicit Congruence_System(const Constraint& c, -23376: Representation r = default_representation); -23376: -23376: -23376: explicit Congruence_System(const Constraint_System& cs, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Congruence_System(const Congruence_System& cgs); -23376: -23376: -23376: Congruence_System(const Congruence_System& cgs, Representation r); -23376: -23376: -23376: ~Congruence_System(); -23376: -23376: -23376: Congruence_System& operator=(const Congruence_System& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_equal_to(const Congruence_System& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool has_linear_equalities() const; -23376: -23376: -23376: void clear(); -23376: # 187 "../../src/Congruence_System_defs.hh" -23376: void insert(const Congruence& cg); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void insert(Congruence& cg, Recycle_Input); -23376: # 208 "../../src/Congruence_System_defs.hh" -23376: void insert(const Constraint& c); -23376: # 218 "../../src/Congruence_System_defs.hh" -23376: void insert(const Congruence_System& y); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Congruence_System& cgs, Recycle_Input); -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: static const Congruence_System& zero_dim_empty(); -23376: # 250 "../../src/Congruence_System_defs.hh" -23376: class const_iterator -23376: : public std::iterator { -23376: public: -23376: -23376: const_iterator(); -23376: -23376: -23376: const_iterator(const const_iterator& y); -23376: -23376: -23376: ~const_iterator(); -23376: -23376: -23376: const_iterator& operator=(const const_iterator& y); -23376: -23376: -23376: const Congruence& operator*() const; -23376: -23376: -23376: const Congruence* operator->() const; -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& y) const; -23376: -23376: private: -23376: friend class Congruence_System; -23376: -23376: -23376: Swapping_Vector::const_iterator i; -23376: -23376: -23376: const Swapping_Vector* csp; -23376: -23376: -23376: const_iterator(const Swapping_Vector::const_iterator& iter, -23376: const Congruence_System& cgs); -23376: -23376: -23376: void skip_forward(); -23376: }; -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: # 331 "../../src/Congruence_System_defs.hh" -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: dimension_type num_equalities() const; -23376: -23376: -23376: dimension_type num_proper_congruences() const; -23376: -23376: -23376: void m_swap(Congruence_System& y); -23376: # 372 "../../src/Congruence_System_defs.hh" -23376: void add_unit_rows_and_space_dimensions(dimension_type dims); -23376: # 386 "../../src/Congruence_System_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool set_space_dimension(dimension_type new_space_dim); -23376: -23376: -23376: -23376: protected: -23376: -23376: bool satisfies_all_congruences(const Grid_Generator& g) const; -23376: -23376: private: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: bool has_no_rows() const; -23376: -23376: -23376: const Congruence& operator[](dimension_type k) const; -23376: -23376: -23376: void normalize_moduli(); -23376: # 455 "../../src/Congruence_System_defs.hh" -23376: void affine_preimage(Variable v, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator); -23376: # 472 "../../src/Congruence_System_defs.hh" -23376: void concatenate(const Congruence_System& y); -23376: # 481 "../../src/Congruence_System_defs.hh" -23376: void insert_verbatim(Congruence& cg, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted); -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: -23376: -23376: -23376: -23376: -23376: static const Congruence_System* zero_dim_empty_p; -23376: -23376: Swapping_Vector rows; -23376: -23376: dimension_type space_dimension_; -23376: -23376: Representation representation_; -23376: # 514 "../../src/Congruence_System_defs.hh" -23376: bool has_a_free_dimension() const; -23376: -23376: friend class Grid; -23376: -23376: friend bool -23376: operator==(const Congruence_System& x, const Congruence_System& y); -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: std::ostream& -23376: operator<<(std::ostream& s, const Congruence_System& cgs); -23376: -23376: } -23376: -23376: -23376: void -23376: swap(Congruence_System& x, Congruence_System& y); -23376: -23376: } -23376: # 31 "../../src/Box_inlines.hh" 2 -23376: # 1 "../../src/Congruence_System_inlines.hh" 1 -23376: # 29 "../../src/Congruence_System_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline const Congruence& -23376: Congruence_System::operator[](const dimension_type k) const { -23376: return rows[k]; -23376: } -23376: -23376: inline dimension_type -23376: Congruence_System::num_rows() const { -23376: return rows.size(); -23376: } -23376: -23376: inline bool -23376: Congruence_System::has_no_rows() const { -23376: return num_rows() == 0; -23376: } -23376: -23376: inline void -23376: Congruence_System::remove_trailing_rows(dimension_type n) { -23376: ((void) 0); -23376: rows.resize(num_rows() - n); -23376: } -23376: -23376: inline void -23376: Congruence_System::insert(const Congruence& cg) { -23376: Congruence tmp = cg; -23376: insert(tmp, Recycle_Input()); -23376: } -23376: -23376: inline void -23376: Congruence_System::insert(Congruence& cg, Recycle_Input) { -23376: ((void) 0); -23376: cg.strong_normalize(); -23376: ((void) 0); -23376: insert_verbatim(cg, Recycle_Input()); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(Representation r) -23376: : rows(), -23376: space_dimension_(0), -23376: representation_(r) { -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(const Congruence& cg, Representation r) -23376: : rows(), -23376: space_dimension_(0), -23376: representation_(r) { -23376: insert(cg); -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(const Constraint& c, Representation r) -23376: : rows(), -23376: space_dimension_(0), -23376: representation_(r) { -23376: insert(c); -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(const Congruence_System& cgs) -23376: : rows(cgs.rows), -23376: space_dimension_(cgs.space_dimension_), -23376: representation_(cgs.representation_) { -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(const Congruence_System& cgs, -23376: Representation r) -23376: : rows(cgs.rows), -23376: space_dimension_(cgs.space_dimension_), -23376: representation_(r) { -23376: if (cgs.representation() != r) { -23376: for (dimension_type i = 0; i < num_rows(); ++i) { -23376: rows[i].set_representation(representation()); -23376: } -23376: } -23376: } -23376: -23376: inline -23376: Congruence_System::Congruence_System(const dimension_type d, Representation r) -23376: : rows(), -23376: space_dimension_(d), -23376: representation_(r) { -23376: } -23376: -23376: inline -23376: Congruence_System::~Congruence_System() { -23376: } -23376: -23376: inline Congruence_System& -23376: Congruence_System::operator=(const Congruence_System& y) { -23376: Congruence_System tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline Representation -23376: Congruence_System::representation() const { -23376: return representation_; -23376: } -23376: -23376: inline void -23376: Congruence_System::set_representation(Representation r) { -23376: if (representation_ == r) { -23376: return; -23376: } -23376: representation_ = r; -23376: for (dimension_type i = 0; i < num_rows(); ++i) { -23376: rows[i].set_representation(r); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline dimension_type -23376: Congruence_System::max_space_dimension() { -23376: return Congruence::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: Congruence_System::space_dimension() const { -23376: return space_dimension_; -23376: } -23376: -23376: inline void -23376: Congruence_System::clear() { -23376: rows.clear(); -23376: space_dimension_ = 0; -23376: } -23376: -23376: inline const Congruence_System& -23376: Congruence_System::zero_dim_empty() { -23376: ((void) 0); -23376: return *zero_dim_empty_p; -23376: } -23376: -23376: inline -23376: Congruence_System::const_iterator::const_iterator() -23376: : i(), csp(0) { -23376: } -23376: -23376: inline -23376: Congruence_System::const_iterator::const_iterator(const const_iterator& y) -23376: : i(y.i), csp(y.csp) { -23376: } -23376: -23376: inline -23376: Congruence_System::const_iterator::~const_iterator() { -23376: } -23376: -23376: inline Congruence_System::const_iterator& -23376: Congruence_System::const_iterator::operator=(const const_iterator& y) { -23376: i = y.i; -23376: csp = y.csp; -23376: return *this; -23376: } -23376: -23376: inline const Congruence& -23376: Congruence_System::const_iterator::operator*() const { -23376: return *i; -23376: } -23376: -23376: inline const Congruence* -23376: Congruence_System::const_iterator::operator->() const { -23376: return i.operator->(); -23376: } -23376: -23376: inline Congruence_System::const_iterator& -23376: Congruence_System::const_iterator::operator++() { -23376: ++i; -23376: skip_forward(); -23376: return *this; -23376: } -23376: -23376: inline Congruence_System::const_iterator -23376: Congruence_System::const_iterator::operator++(int) { -23376: const const_iterator tmp = *this; -23376: operator++(); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Congruence_System::const_iterator::operator==(const const_iterator& y) const { -23376: return i == y.i; -23376: } -23376: -23376: inline bool -23376: Congruence_System::const_iterator::operator!=(const const_iterator& y) const { -23376: return i != y.i; -23376: } -23376: -23376: inline -23376: Congruence_System::const_iterator:: -23376: const_iterator(const Swapping_Vector::const_iterator& iter, -23376: const Congruence_System& cgs) -23376: : i(iter), csp(&cgs.rows) { -23376: } -23376: -23376: inline Congruence_System::const_iterator -23376: Congruence_System::begin() const { -23376: const_iterator i(rows.begin(), *this); -23376: i.skip_forward(); -23376: return i; -23376: } -23376: -23376: inline Congruence_System::const_iterator -23376: Congruence_System::end() const { -23376: const const_iterator i(rows.end(), *this); -23376: return i; -23376: } -23376: -23376: inline bool -23376: Congruence_System::empty() const { -23376: return begin() == end(); -23376: } -23376: -23376: inline void -23376: Congruence_System::m_swap(Congruence_System& y) { -23376: using std::swap; -23376: swap(rows, y.rows); -23376: swap(space_dimension_, y.space_dimension_); -23376: swap(representation_, y.representation_); -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline memory_size_type -23376: Congruence_System::external_memory_in_bytes() const { -23376: return rows.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Congruence_System::total_memory_in_bytes() const { -23376: return rows.external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: -23376: inline void -23376: swap(Congruence_System& x, Congruence_System& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 32 "../../src/Box_inlines.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline bool -23376: Box::marked_empty() const { -23376: return status.test_empty_up_to_date() && status.test_empty(); -23376: } -23376: -23376: template -23376: inline void -23376: Box::set_empty() { -23376: status.set_empty(); -23376: status.set_empty_up_to_date(); -23376: } -23376: -23376: template -23376: inline void -23376: Box::set_nonempty() { -23376: status.reset_empty(); -23376: status.set_empty_up_to_date(); -23376: } -23376: -23376: template -23376: inline void -23376: Box::set_empty_up_to_date() { -23376: status.set_empty_up_to_date(); -23376: } -23376: -23376: template -23376: inline void -23376: Box::reset_empty_up_to_date() { -23376: return status.reset_empty_up_to_date(); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Box& y, Complexity_Class) -23376: : seq(y.seq), status(y.status) { -23376: } -23376: -23376: template -23376: inline Box& -23376: Box::operator=(const Box& y) { -23376: seq = y.seq; -23376: status = y.status; -23376: return *this; -23376: } -23376: -23376: template -23376: inline void -23376: Box::m_swap(Box& y) { -23376: Box& x = *this; -23376: using std::swap; -23376: swap(x.seq, y.seq); -23376: swap(x.status, y.status); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Constraint_System& cs, Recycle_Input) { -23376: -23376: Box tmp(cs); -23376: this->m_swap(tmp); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Generator_System& gs, Recycle_Input) { -23376: -23376: Box tmp(gs); -23376: this->m_swap(tmp); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Congruence_System& cgs, Recycle_Input) { -23376: -23376: Box tmp(cgs); -23376: this->m_swap(tmp); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Box::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Box::space_dimension() const { -23376: return seq.size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Box::max_space_dimension() { -23376: -23376: -23376: return Sequence().max_size() - 1; -23376: } -23376: -23376: template -23376: inline int32_t -23376: Box::hash_code() const { -23376: return hash_code_from_dimension(space_dimension()); -23376: } -23376: -23376: template -23376: inline const ITV& -23376: Box::operator[](const dimension_type k) const { -23376: ((void) 0); -23376: return seq[k]; -23376: } -23376: -23376: template -23376: inline const ITV& -23376: Box::get_interval(const Variable var) const { -23376: if (space_dimension() < var.space_dimension()) { -23376: throw_dimension_incompatible("get_interval(v)", "v", var); -23376: } -23376: if (is_empty()) { -23376: static ITV empty_interval(EMPTY); -23376: return empty_interval; -23376: } -23376: -23376: return seq[var.id()]; -23376: } -23376: -23376: template -23376: inline void -23376: Box::set_interval(const Variable var, const ITV& i) { -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < var.space_dimension()) { -23376: throw_dimension_incompatible("set_interval(v, i)", "v", var); -23376: } -23376: -23376: if (is_empty() && space_dim >= 2) { -23376: -23376: -23376: return; -23376: } -23376: seq[var.id()] = i; -23376: reset_empty_up_to_date(); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::is_empty() const { -23376: return marked_empty() || check_empty(); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::bounds_from_above(const Linear_Expression& expr) const { -23376: return bounds(expr, true); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::bounds_from_below(const Linear_Expression& expr) const { -23376: return bounds(expr, false); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, -23376: bool& maximum) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, -23376: bool& minimum) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::strictly_contains(const Box& y) const { -23376: const Box& x = *this; -23376: return x.contains(y) && !y.contains(x); -23376: } -23376: -23376: template -23376: inline void -23376: Box::expand_space_dimension(const Variable var, -23376: const dimension_type m) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (var.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var); -23376: } -23376: -23376: -23376: -23376: if (m > max_space_dimension() - space_dim) { -23376: throw_invalid_argument("expand_dimension(v, m)", -23376: "adding m new space dimensions exceeds " -23376: "the maximum allowed space dimension"); -23376: } -23376: -23376: -23376: -23376: seq.insert(seq.end(), m, seq[var.id()]); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline bool -23376: operator!=(const Box& x, const Box& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::has_lower_bound(const Variable var, -23376: Coefficient& n, Coefficient& d, bool& closed) const { -23376: -23376: -23376: ((void) 0); -23376: const dimension_type k = var.id(); -23376: ((void) 0); -23376: const ITV& seq_k = seq[k]; -23376: -23376: if (seq_k.lower_is_boundary_infinity()) { -23376: return false; -23376: } -23376: closed = !seq_k.lower_is_open(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lr; mpq_class& lr = holder_lr.item(); -23376: assign_r(lr, seq_k.lower(), ROUND_NOT_NEEDED); -23376: n = lr.get_num(); -23376: d = lr.get_den(); -23376: -23376: return true; -23376: } -23376: -23376: template -23376: inline bool -23376: Box::has_upper_bound(const Variable var, -23376: Coefficient& n, Coefficient& d, bool& closed) const { -23376: -23376: -23376: ((void) 0); -23376: const dimension_type k = var.id(); -23376: ((void) 0); -23376: const ITV& seq_k = seq[k]; -23376: -23376: if (seq_k.upper_is_boundary_infinity()) { -23376: return false; -23376: } -23376: -23376: closed = !seq_k.upper_is_open(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ur; mpq_class& ur = holder_ur.item(); -23376: assign_r(ur, seq_k.upper(), ROUND_NOT_NEEDED); -23376: n = ur.get_num(); -23376: d = ur.get_den(); -23376: -23376: return true; -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_constraint(const Constraint& c) { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: -23376: if (c_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("add_constraint(c)", c); -23376: } -23376: -23376: add_constraint_no_check(c); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_constraints(const Constraint_System& cs) { -23376: -23376: if (cs.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("add_constraints(cs)", cs); -23376: } -23376: -23376: add_constraints_no_check(cs); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_recycled_constraints(Constraint_System& cs) { -23376: add_constraints(cs); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: if (cg_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("add_congruence(cg)", cg); -23376: } -23376: -23376: add_congruence_no_check(cg); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_congruences(const Congruence_System& cgs) { -23376: if (cgs.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("add_congruences(cgs)", cgs); -23376: } -23376: add_congruences_no_check(cgs); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_recycled_congruences(Congruence_System& cgs) { -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: inline bool -23376: Box::can_recycle_constraint_systems() { -23376: return false; -23376: } -23376: -23376: template -23376: inline bool -23376: Box::can_recycle_congruence_systems() { -23376: return false; -23376: } -23376: -23376: template -23376: inline void -23376: Box::widening_assign(const Box& y, unsigned* tp) { -23376: CC76_widening_assign(y, tp); -23376: } -23376: -23376: template -23376: inline Congruence_System -23376: Box::minimized_congruences() const { -23376: -23376: return congruences(); -23376: } -23376: -23376: template -23376: inline I_Result -23376: Box -23376: ::refine_interval_no_check(ITV& itv, -23376: const Constraint::Type type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom) { -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: assign_r(q.get_num(), numer, ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), denom, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: -23376: q = -q; -23376: -23376: Relation_Symbol rel_sym; -23376: switch (type) { -23376: case Constraint::EQUALITY: -23376: rel_sym = EQUAL; -23376: break; -23376: case Constraint::NONSTRICT_INEQUALITY: -23376: rel_sym = (denom > 0) ? GREATER_OR_EQUAL : LESS_OR_EQUAL; -23376: break; -23376: case Constraint::STRICT_INEQUALITY: -23376: rel_sym = (denom > 0) ? GREATER_THAN : LESS_THAN; -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return I_ANY; -23376: } -23376: I_Result res = itv.add_constraint(i_constraint(rel_sym, q)); -23376: ((void) 0); -23376: return res; -23376: } -23376: -23376: template -23376: inline void -23376: Box -23376: ::add_interval_constraint_no_check(const dimension_type var_id, -23376: const Constraint::Type type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom) { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: refine_interval_no_check(seq[var_id], type, numer, denom); -23376: -23376: -23376: -23376: reset_empty_up_to_date(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Box::refine_with_constraint(const Constraint& c) { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: -23376: if (c_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_constraint(c)", c); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: refine_no_check(c); -23376: } -23376: -23376: template -23376: inline void -23376: Box::refine_with_constraints(const Constraint_System& cs) { -23376: -23376: if (cs.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_constraints(cs)", cs); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: refine_no_check(cs); -23376: } -23376: -23376: template -23376: inline void -23376: Box::refine_with_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: if (cg_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_congruence(cg)", cg); -23376: } -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: refine_no_check(cg); -23376: } -23376: -23376: template -23376: inline void -23376: Box::refine_with_congruences(const Congruence_System& cgs) { -23376: -23376: if (cgs.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_congruences(cgs)", cgs); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: refine_no_check(cgs); -23376: } -23376: -23376: template -23376: inline void -23376: Box::propagate_constraint(const Constraint& c) { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: -23376: if (c_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("propagate_constraint(c)", c); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: propagate_constraint_no_check(c); -23376: } -23376: -23376: template -23376: inline void -23376: Box::propagate_constraints(const Constraint_System& cs, -23376: const dimension_type max_iterations) { -23376: -23376: if (cs.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("propagate_constraints(cs)", cs); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: propagate_constraints_no_check(cs, max_iterations); -23376: } -23376: -23376: template -23376: inline void -23376: Box::unconstrain(const Variable var) { -23376: const dimension_type var_id = var.id(); -23376: -23376: if (space_dimension() < var_id + 1) { -23376: throw_dimension_incompatible("unconstrain(var)", var_id + 1); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: ITV& seq_var = seq[var_id]; -23376: if (seq_var.is_empty()) { -23376: set_empty(); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: -23376: -23376: return Parma_Polyhedra_Library -23376: ::rectilinear_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: -23376: -23376: return Parma_Polyhedra_Library -23376: ::euclidean_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return l_m_distance_assign > -23376: (r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Box& x, -23376: const Box& y, -23376: const Rounding_Dir dir) { -23376: -23376: -23376: return Parma_Polyhedra_Library -23376: ::l_infinity_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(Box& x, Box& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 2286 "../../src/Box_defs.hh" 2 -23376: # 1 "../../src/Box_templates.hh" 1 -23376: # 30 "../../src/Box_templates.hh" -23376: # 1 "../../src/Generator_System_defs.hh" 1 -23376: # 33 "../../src/Generator_System_defs.hh" -23376: # 1 "../../src/Poly_Con_Relation_defs.hh" 1 -23376: # 31 "../../src/Poly_Con_Relation_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: -23376: -23376: -23376: bool operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: -23376: -23376: -23376: Poly_Con_Relation operator&&(const Poly_Con_Relation& x, -23376: const Poly_Con_Relation& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation operator-(const Poly_Con_Relation& x, -23376: const Poly_Con_Relation& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Poly_Con_Relation& r); -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::Poly_Con_Relation { -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t NOTHING = 0U; -23376: static const flags_t IS_DISJOINT = 1U << 0; -23376: static const flags_t STRICTLY_INTERSECTS = 1U << 1; -23376: static const flags_t IS_INCLUDED = 1U << 2; -23376: static const flags_t SATURATES = 1U << 3; -23376: -23376: -23376: -23376: static const flags_t EVERYTHING -23376: = IS_DISJOINT -23376: | STRICTLY_INTERSECTS -23376: | IS_INCLUDED -23376: | SATURATES; -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: static bool implies(flags_t x, flags_t y); -23376: -23376: -23376: Poly_Con_Relation(flags_t mask); -23376: -23376: friend bool -23376: operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: friend bool -23376: operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: -23376: friend Poly_Con_Relation -23376: operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: -23376: friend Poly_Con_Relation -23376: operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library:: -23376: IO_Operators::operator<<(std::ostream& s, const Poly_Con_Relation& r); -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: flags_t get_flags() const; -23376: -23376: public: -23376: -23376: static Poly_Con_Relation nothing(); -23376: -23376: -23376: -23376: -23376: -23376: static Poly_Con_Relation is_disjoint(); -23376: -23376: -23376: -23376: -23376: -23376: static Poly_Con_Relation strictly_intersects(); -23376: -23376: -23376: -23376: -23376: -23376: static Poly_Con_Relation is_included(); -23376: -23376: -23376: -23376: -23376: -23376: static Poly_Con_Relation saturates(); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: bool implies(const Poly_Con_Relation& y) const; -23376: -23376: -23376: bool OK() const; -23376: }; -23376: -23376: # 1 "../../src/Poly_Con_Relation_inlines.hh" 1 -23376: # 27 "../../src/Poly_Con_Relation_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Poly_Con_Relation::Poly_Con_Relation(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: inline Poly_Con_Relation::flags_t -23376: Poly_Con_Relation::get_flags() const { -23376: return flags; -23376: } -23376: -23376: inline Poly_Con_Relation -23376: Poly_Con_Relation::nothing() { -23376: return Poly_Con_Relation(NOTHING); -23376: } -23376: -23376: inline Poly_Con_Relation -23376: Poly_Con_Relation::is_disjoint() { -23376: return Poly_Con_Relation(IS_DISJOINT); -23376: } -23376: -23376: inline Poly_Con_Relation -23376: Poly_Con_Relation::strictly_intersects() { -23376: return Poly_Con_Relation(STRICTLY_INTERSECTS); -23376: } -23376: -23376: inline Poly_Con_Relation -23376: Poly_Con_Relation::is_included() { -23376: return Poly_Con_Relation(IS_INCLUDED); -23376: } -23376: -23376: inline Poly_Con_Relation -23376: Poly_Con_Relation::saturates() { -23376: return Poly_Con_Relation(SATURATES); -23376: } -23376: -23376: inline bool -23376: Poly_Con_Relation::implies(flags_t x, flags_t y) { -23376: return (x & y) == y; -23376: } -23376: -23376: inline bool -23376: Poly_Con_Relation::implies(const Poly_Con_Relation& y) const { -23376: return implies(flags, y.flags); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y) { -23376: return x.flags == y.flags; -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y) { -23376: return x.flags != y.flags; -23376: } -23376: -23376: -23376: inline Poly_Con_Relation -23376: operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y) { -23376: return Poly_Con_Relation(x.flags | y.flags); -23376: } -23376: -23376: -23376: inline Poly_Con_Relation -23376: operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y) { -23376: return Poly_Con_Relation(x.flags & ~y.flags); -23376: } -23376: -23376: } -23376: # 165 "../../src/Poly_Con_Relation_defs.hh" 2 -23376: # 34 "../../src/Generator_System_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Generator_System& gs); -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Generator_System& x, const Generator_System& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Generator_System& x, const Generator_System& y); -23376: -23376: -23376: void -23376: swap(Generator_System& x, Generator_System& y); -23376: -23376: } -23376: # 188 "../../src/Generator_System_defs.hh" -23376: class Parma_Polyhedra_Library::Generator_System { -23376: public: -23376: typedef Generator row_type; -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: Generator_System(Representation r = default_representation); -23376: -23376: -23376: explicit Generator_System(const Generator& g, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: Generator_System(const Generator_System& gs); -23376: -23376: -23376: Generator_System(const Generator_System& gs, Representation r); -23376: -23376: -23376: ~Generator_System(); -23376: -23376: -23376: Generator_System& operator=(const Generator_System& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Generator& g, Recycle_Input); -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: -23376: -23376: static const Generator_System& zero_dim_univ(); -23376: -23376: typedef Generator_System_const_iterator const_iterator; -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: # 287 "../../src/Generator_System_defs.hh" -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: void m_swap(Generator_System& y); -23376: -23376: private: -23376: -23376: bool has_no_rows() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: # 326 "../../src/Generator_System_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: -23376: void swap_space_dimensions(Variable v1, Variable v2); -23376: -23376: dimension_type num_rows() const; -23376: # 346 "../../src/Generator_System_defs.hh" -23376: void add_universe_rows_and_space_dimensions(dimension_type n); -23376: -23376: Topology topology() const; -23376: -23376: -23376: dimension_type first_pending_row() const; -23376: -23376: -23376: void unset_pending_rows(); -23376: -23376: -23376: void set_sorted(bool b); -23376: -23376: -23376: bool is_sorted() const; -23376: -23376: -23376: void set_index_first_pending_row(dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: -23376: void assign_with_pending(const Generator_System& y); -23376: -23376: -23376: dimension_type num_pending_rows() const; -23376: -23376: -23376: -23376: -23376: -23376: void sort_pending_and_remove_duplicates(); -23376: # 390 "../../src/Generator_System_defs.hh" -23376: void sort_and_remove_with_sat(Bit_Matrix& sat); -23376: -23376: -23376: -23376: -23376: -23376: void sort_rows(); -23376: -23376: -23376: -23376: -23376: -23376: bool check_sorted() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_lines_or_equalities() const; -23376: # 418 "../../src/Generator_System_defs.hh" -23376: void remove_row(dimension_type i, bool keep_sorted = false); -23376: # 428 "../../src/Generator_System_defs.hh" -23376: void remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted = false); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_rows(const std::vector& indexes); -23376: -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: # 454 "../../src/Generator_System_defs.hh" -23376: dimension_type gauss(dimension_type n_lines_or_equalities); -23376: # 466 "../../src/Generator_System_defs.hh" -23376: void back_substitute(dimension_type n_lines_or_equalities); -23376: -23376: -23376: void strong_normalize(); -23376: # 479 "../../src/Generator_System_defs.hh" -23376: void merge_rows_assign(const Generator_System& y); -23376: -23376: -23376: -23376: -23376: -23376: void insert(const Generator_System& y); -23376: -23376: -23376: void insert_pending(const Generator_System& r); -23376: -23376: -23376: -23376: -23376: -23376: static const Generator_System* zero_dim_univ_p; -23376: -23376: friend class Generator_System_const_iterator; -23376: -23376: -23376: explicit Generator_System(Topology topol, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: -23376: -23376: -23376: Generator_System(Topology topol, dimension_type space_dim, -23376: Representation r = default_representation); -23376: # 517 "../../src/Generator_System_defs.hh" -23376: bool adjust_topology_and_space_dimension(Topology new_topology, -23376: dimension_type new_space_dim); -23376: # 527 "../../src/Generator_System_defs.hh" -23376: void add_corresponding_points(); -23376: -23376: -23376: -23376: -23376: -23376: bool has_points() const; -23376: # 542 "../../src/Generator_System_defs.hh" -23376: void add_corresponding_closure_points(); -23376: # 554 "../../src/Generator_System_defs.hh" -23376: bool has_closure_points() const; -23376: -23376: -23376: -23376: void convert_into_non_necessarily_closed(); -23376: -23376: -23376: const Generator& operator[](dimension_type k) const; -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Poly_Con_Relation -23376: relation_with(const Constraint& c) const; -23376: -23376: -23376: bool satisfied_by_all_generators(const Constraint& c) const; -23376: -23376: -23376: -23376: -23376: -23376: bool satisfied_by_all_generators_C(const Constraint& c) const; -23376: -23376: -23376: -23376: -23376: -23376: bool satisfied_by_all_generators_NNC(const Constraint& c) const; -23376: # 612 "../../src/Generator_System_defs.hh" -23376: void affine_image(Variable v, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator); -23376: -23376: -23376: dimension_type num_lines() const; -23376: -23376: -23376: dimension_type num_rays() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_invalid_lines_and_rays(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void simplify(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(const Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void insert_pending(Generator& g, Recycle_Input); -23376: -23376: Linear_System sys; -23376: -23376: friend bool -23376: operator==(const Generator_System& x, const Generator_System& y); -23376: -23376: friend class Polyhedron; -23376: }; -23376: # 680 "../../src/Generator_System_defs.hh" -23376: class Parma_Polyhedra_Library::Generator_System_const_iterator -23376: : public std::iterator { -23376: public: -23376: -23376: Generator_System_const_iterator(); -23376: -23376: -23376: Generator_System_const_iterator(const Generator_System_const_iterator& y); -23376: -23376: -23376: ~Generator_System_const_iterator(); -23376: -23376: -23376: Generator_System_const_iterator& operator=(const Generator_System_const_iterator& y); -23376: -23376: -23376: const Generator& operator*() const; -23376: -23376: -23376: const Generator* operator->() const; -23376: -23376: -23376: Generator_System_const_iterator& operator++(); -23376: -23376: -23376: Generator_System_const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Generator_System_const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const Generator_System_const_iterator& y) const; -23376: -23376: private: -23376: friend class Generator_System; -23376: -23376: -23376: Linear_System::const_iterator i; -23376: -23376: -23376: const Linear_System* gsp; -23376: -23376: -23376: Generator_System_const_iterator(const Linear_System::const_iterator& iter, -23376: const Generator_System& gsys); -23376: -23376: -23376: -23376: -23376: -23376: void skip_forward(); -23376: }; -23376: # 31 "../../src/Box_templates.hh" 2 -23376: # 1 "../../src/Generator_System_inlines.hh" 1 -23376: # 29 "../../src/Generator_System_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Generator_System::Generator_System(Representation r) -23376: : sys(NECESSARILY_CLOSED, r) { -23376: } -23376: -23376: inline -23376: Generator_System::Generator_System(const Generator& g, Representation r) -23376: : sys(g.topology(), r) { -23376: sys.insert(g); -23376: } -23376: -23376: inline -23376: Generator_System::Generator_System(const Generator_System& gs) -23376: : sys(gs.sys) { -23376: } -23376: -23376: inline -23376: Generator_System::Generator_System(const Generator_System& gs, -23376: Representation r) -23376: : sys(gs.sys, r) { -23376: } -23376: -23376: inline -23376: Generator_System::Generator_System(const Topology topol, Representation r) -23376: : sys(topol, r) { -23376: } -23376: -23376: inline -23376: Generator_System::Generator_System(const Topology topol, -23376: const dimension_type space_dim, -23376: Representation r) -23376: : sys(topol, space_dim, r) { -23376: } -23376: -23376: inline -23376: Generator_System::~Generator_System() { -23376: } -23376: -23376: inline Generator_System& -23376: Generator_System::operator=(const Generator_System& y) { -23376: Generator_System tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline Representation -23376: Generator_System::representation() const { -23376: return sys.representation(); -23376: } -23376: -23376: inline void -23376: Generator_System::set_representation(Representation r) { -23376: sys.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::max_space_dimension() { -23376: return Linear_System::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::space_dimension() const { -23376: return sys.space_dimension(); -23376: } -23376: -23376: inline void -23376: Generator_System::set_space_dimension(dimension_type space_dim) { -23376: const dimension_type old_space_dim = space_dimension(); -23376: sys.set_space_dimension_no_ok(space_dim); -23376: -23376: if (space_dim < old_space_dim) { -23376: -23376: remove_invalid_lines_and_rays(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Generator_System::clear() { -23376: sys.clear(); -23376: } -23376: -23376: inline const Generator& -23376: Generator_System::operator[](const dimension_type k) const { -23376: return sys[k]; -23376: } -23376: -23376: inline void -23376: Generator_System -23376: ::remove_space_dimensions(const Variables_Set& vars) { -23376: sys.remove_space_dimensions(vars); -23376: } -23376: -23376: inline void -23376: Generator_System -23376: ::shift_space_dimensions(Variable v, dimension_type n) { -23376: sys.shift_space_dimensions(v, n); -23376: } -23376: -23376: inline void -23376: Generator_System -23376: ::permute_space_dimensions(const std::vector& cycle) { -23376: sys.permute_space_dimensions(cycle); -23376: } -23376: -23376: inline void -23376: Generator_System -23376: ::swap_space_dimensions(Variable v1, Variable v2) { -23376: sys.swap_space_dimensions(v1, v2); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::num_rows() const { -23376: return sys.num_rows(); -23376: } -23376: -23376: inline void -23376: Generator_System::add_universe_rows_and_space_dimensions(dimension_type n) { -23376: sys.add_universe_rows_and_space_dimensions(n); -23376: } -23376: -23376: inline Topology -23376: Generator_System::topology() const { -23376: return sys.topology(); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::first_pending_row() const { -23376: return sys.first_pending_row(); -23376: } -23376: -23376: inline void -23376: Generator_System::unset_pending_rows() { -23376: sys.unset_pending_rows(); -23376: } -23376: -23376: inline void -23376: Generator_System::set_sorted(bool b) { -23376: sys.set_sorted(b); -23376: } -23376: -23376: inline bool -23376: Generator_System::is_sorted() const { -23376: return sys.is_sorted(); -23376: } -23376: -23376: inline void -23376: Generator_System::set_index_first_pending_row(dimension_type i) { -23376: sys.set_index_first_pending_row(i); -23376: } -23376: -23376: inline bool -23376: Generator_System::is_necessarily_closed() const { -23376: return sys.is_necessarily_closed(); -23376: } -23376: -23376: inline void -23376: Generator_System::assign_with_pending(const Generator_System& y) { -23376: sys.assign_with_pending(y.sys); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::num_pending_rows() const { -23376: return sys.num_pending_rows(); -23376: } -23376: -23376: inline void -23376: Generator_System::sort_pending_and_remove_duplicates() { -23376: return sys.sort_pending_and_remove_duplicates(); -23376: } -23376: -23376: inline void -23376: Generator_System::sort_and_remove_with_sat(Bit_Matrix& sat) { -23376: sys.sort_and_remove_with_sat(sat); -23376: } -23376: -23376: inline void -23376: Generator_System::sort_rows() { -23376: sys.sort_rows(); -23376: } -23376: -23376: inline bool -23376: Generator_System::check_sorted() const { -23376: return sys.check_sorted(); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::num_lines_or_equalities() const { -23376: return sys.num_lines_or_equalities(); -23376: } -23376: -23376: inline void -23376: Generator_System::remove_row(dimension_type i, bool keep_sorted) { -23376: sys.remove_row(i, keep_sorted); -23376: } -23376: -23376: inline void -23376: Generator_System::remove_rows(dimension_type first, dimension_type last, -23376: bool keep_sorted) { -23376: sys.remove_rows(first, last, keep_sorted); -23376: } -23376: -23376: inline void -23376: Generator_System::remove_rows(const std::vector& indexes) { -23376: sys.remove_rows(indexes); -23376: } -23376: -23376: inline void -23376: Generator_System::remove_trailing_rows(dimension_type n) { -23376: sys.remove_trailing_rows(n); -23376: } -23376: -23376: inline dimension_type -23376: Generator_System::gauss(dimension_type n_lines_or_equalities) { -23376: return sys.gauss(n_lines_or_equalities); -23376: } -23376: -23376: inline void -23376: Generator_System::back_substitute(dimension_type n_lines_or_equalities) { -23376: sys.back_substitute(n_lines_or_equalities); -23376: } -23376: -23376: inline void -23376: Generator_System::strong_normalize() { -23376: sys.strong_normalize(); -23376: } -23376: -23376: inline void -23376: Generator_System::merge_rows_assign(const Generator_System& y) { -23376: sys.merge_rows_assign(y.sys); -23376: } -23376: -23376: inline void -23376: Generator_System::insert(const Generator_System& y) { -23376: sys.insert(y.sys); -23376: } -23376: -23376: inline void -23376: Generator_System::insert_pending(const Generator_System& r) { -23376: sys.insert_pending(r.sys); -23376: } -23376: -23376: inline bool -23376: operator==(const Generator_System& x, const Generator_System& y) { -23376: return x.sys == y.sys; -23376: } -23376: -23376: inline bool -23376: operator!=(const Generator_System& x, const Generator_System& y) { -23376: return !(x == y); -23376: } -23376: -23376: inline -23376: Generator_System_const_iterator::Generator_System_const_iterator() -23376: : i(), gsp(0) { -23376: } -23376: -23376: inline -23376: Generator_System_const_iterator::Generator_System_const_iterator(const Generator_System_const_iterator& y) -23376: : i(y.i), gsp(y.gsp) { -23376: } -23376: -23376: inline -23376: Generator_System_const_iterator::~Generator_System_const_iterator() { -23376: } -23376: -23376: inline -23376: Generator_System_const_iterator& -23376: Generator_System_const_iterator::operator=(const Generator_System_const_iterator& y) { -23376: i = y.i; -23376: gsp = y.gsp; -23376: return *this; -23376: } -23376: -23376: inline const Generator& -23376: Generator_System_const_iterator::operator*() const { -23376: return *i; -23376: } -23376: -23376: inline const Generator* -23376: Generator_System_const_iterator::operator->() const { -23376: return i.operator->(); -23376: } -23376: -23376: inline Generator_System_const_iterator& -23376: Generator_System_const_iterator::operator++() { -23376: ++i; -23376: if (!gsp->is_necessarily_closed()) { -23376: skip_forward(); -23376: } -23376: return *this; -23376: } -23376: -23376: inline Generator_System_const_iterator -23376: Generator_System_const_iterator::operator++(int) { -23376: const Generator_System_const_iterator tmp = *this; -23376: operator++(); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Generator_System_const_iterator::operator==(const Generator_System_const_iterator& y) const { -23376: return i == y.i; -23376: } -23376: -23376: inline bool -23376: Generator_System_const_iterator::operator!=(const Generator_System_const_iterator& y) const { -23376: return i != y.i; -23376: } -23376: -23376: inline -23376: Generator_System_const_iterator:: -23376: Generator_System_const_iterator(const Linear_System::const_iterator& iter, -23376: const Generator_System& gs) -23376: : i(iter), gsp(&gs.sys) { -23376: } -23376: -23376: inline bool -23376: Generator_System::empty() const { -23376: return sys.has_no_rows(); -23376: } -23376: -23376: inline bool -23376: Generator_System::has_no_rows() const { -23376: return sys.has_no_rows(); -23376: } -23376: -23376: inline Generator_System::const_iterator -23376: Generator_System::begin() const { -23376: const_iterator i(sys.begin(), *this); -23376: if (!sys.is_necessarily_closed()) { -23376: i.skip_forward(); -23376: } -23376: return i; -23376: } -23376: -23376: inline Generator_System::const_iterator -23376: Generator_System::end() const { -23376: const const_iterator i(sys.end(), *this); -23376: return i; -23376: } -23376: -23376: inline const Generator_System& -23376: Generator_System::zero_dim_univ() { -23376: ((void) 0); -23376: return *zero_dim_univ_p; -23376: } -23376: -23376: inline void -23376: Generator_System::m_swap(Generator_System& y) { -23376: swap(sys, y.sys); -23376: } -23376: -23376: inline memory_size_type -23376: Generator_System::external_memory_in_bytes() const { -23376: return sys.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Generator_System::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: inline void -23376: Generator_System::simplify() { -23376: sys.simplify(); -23376: remove_invalid_lines_and_rays(); -23376: } -23376: -23376: -23376: inline void -23376: swap(Generator_System& x, Generator_System& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 32 "../../src/Box_templates.hh" 2 -23376: -23376: # 1 "../../src/Poly_Gen_Relation_defs.hh" 1 -23376: # 31 "../../src/Poly_Gen_Relation_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: -23376: -23376: -23376: bool operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: -23376: -23376: -23376: Poly_Gen_Relation operator&&(const Poly_Gen_Relation& x, -23376: const Poly_Gen_Relation& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation operator-(const Poly_Gen_Relation& x, -23376: const Poly_Gen_Relation& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Poly_Gen_Relation& r); -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: class Parma_Polyhedra_Library::Poly_Gen_Relation { -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t NOTHING = 0U; -23376: static const flags_t SUBSUMES = 1U << 0; -23376: -23376: -23376: -23376: static const flags_t EVERYTHING -23376: = SUBSUMES; -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: static bool implies(flags_t x, flags_t y); -23376: -23376: -23376: Poly_Gen_Relation(flags_t mask); -23376: -23376: friend bool -23376: operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: friend bool -23376: operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: -23376: friend Poly_Gen_Relation -23376: operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: -23376: friend Poly_Gen_Relation -23376: operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library:: -23376: IO_Operators::operator<<(std::ostream& s, const Poly_Gen_Relation& r); -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: -23376: flags_t get_flags() const; -23376: -23376: public: -23376: -23376: static Poly_Gen_Relation nothing(); -23376: -23376: -23376: static Poly_Gen_Relation subsumes(); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: bool implies(const Poly_Gen_Relation& y) const; -23376: -23376: -23376: bool OK() const; -23376: }; -23376: -23376: # 1 "../../src/Poly_Gen_Relation_inlines.hh" 1 -23376: # 27 "../../src/Poly_Gen_Relation_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Poly_Gen_Relation::Poly_Gen_Relation(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: inline Poly_Gen_Relation::flags_t -23376: Poly_Gen_Relation::get_flags() const { -23376: return flags; -23376: } -23376: -23376: inline Poly_Gen_Relation -23376: Poly_Gen_Relation::nothing() { -23376: return Poly_Gen_Relation(NOTHING); -23376: } -23376: -23376: inline Poly_Gen_Relation -23376: Poly_Gen_Relation::subsumes() { -23376: return Poly_Gen_Relation(SUBSUMES); -23376: } -23376: -23376: inline bool -23376: Poly_Gen_Relation::implies(flags_t x, flags_t y) { -23376: return (x & y) == y; -23376: } -23376: -23376: inline bool -23376: Poly_Gen_Relation::implies(const Poly_Gen_Relation& y) const { -23376: return implies(flags, y.flags); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) { -23376: return x.flags == y.flags; -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) { -23376: return x.flags != y.flags; -23376: } -23376: -23376: -23376: inline Poly_Gen_Relation -23376: operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) { -23376: return Poly_Gen_Relation(x.flags | y.flags); -23376: } -23376: -23376: -23376: inline Poly_Gen_Relation -23376: operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) { -23376: return Poly_Gen_Relation(x.flags & ~y.flags); -23376: } -23376: -23376: } -23376: # 138 "../../src/Poly_Gen_Relation_defs.hh" 2 -23376: # 34 "../../src/Box_templates.hh" 2 -23376: # 1 "../../src/Polyhedron_defs.hh" 1 -23376: # 45 "../../src/Polyhedron_defs.hh" -23376: # 1 "../../src/H79_Certificate_types.hh" 1 -23376: # 16 "../../src/H79_Certificate_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class H79_Certificate; -23376: -23376: } -23376: # 46 "../../src/Polyhedron_defs.hh" 2 -23376: # 54 "../../src/Polyhedron_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: # 67 "../../src/Polyhedron_defs.hh" -23376: std::ostream& -23376: operator<<(std::ostream& s, const Polyhedron& ph); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(Polyhedron& x, Polyhedron& y); -23376: # 84 "../../src/Polyhedron_defs.hh" -23376: bool operator==(const Polyhedron& x, const Polyhedron& y); -23376: # 94 "../../src/Polyhedron_defs.hh" -23376: bool operator!=(const Polyhedron& x, const Polyhedron& y); -23376: -23376: namespace Interfaces { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed_for_interfaces(const Polyhedron& ph); -23376: -23376: } -23376: -23376: } -23376: # 369 "../../src/Polyhedron_defs.hh" -23376: class Parma_Polyhedra_Library::Polyhedron { -23376: public: -23376: -23376: typedef Coefficient coefficient_type; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: -23376: static bool can_recycle_constraint_systems(); -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_congruence_systems(); -23376: -23376: protected: -23376: # 406 "../../src/Polyhedron_defs.hh" -23376: Polyhedron(Topology topol, -23376: dimension_type num_dimensions, -23376: Degenerate_Element kind); -23376: -23376: -23376: -23376: -23376: -23376: Polyhedron(const Polyhedron& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 430 "../../src/Polyhedron_defs.hh" -23376: Polyhedron(Topology topol, const Constraint_System& cs); -23376: # 451 "../../src/Polyhedron_defs.hh" -23376: Polyhedron(Topology topol, Constraint_System& cs, Recycle_Input dummy); -23376: # 467 "../../src/Polyhedron_defs.hh" -23376: Polyhedron(Topology topol, const Generator_System& gs); -23376: # 489 "../../src/Polyhedron_defs.hh" -23376: Polyhedron(Topology topol, Generator_System& gs, Recycle_Input dummy); -23376: # 505 "../../src/Polyhedron_defs.hh" -23376: template -23376: Polyhedron(Topology topol, const Box& box, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: Polyhedron& operator=(const Polyhedron& y); -23376: -23376: public: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type affine_dimension() const; -23376: -23376: -23376: const Constraint_System& constraints() const; -23376: -23376: -23376: const Constraint_System& minimized_constraints() const; -23376: -23376: -23376: const Generator_System& generators() const; -23376: -23376: -23376: const Generator_System& minimized_generators() const; -23376: -23376: -23376: Congruence_System congruences() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Congruence_System minimized_congruences() const; -23376: # 558 "../../src/Polyhedron_defs.hh" -23376: Poly_Con_Relation relation_with(const Constraint& c) const; -23376: # 567 "../../src/Polyhedron_defs.hh" -23376: Poly_Gen_Relation relation_with(const Generator& g) const; -23376: # 576 "../../src/Polyhedron_defs.hh" -23376: Poly_Con_Relation relation_with(const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_empty() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_universe() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_topologically_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_disjoint_from(const Polyhedron& y) const; -23376: -23376: -23376: bool is_discrete() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_bounded() const; -23376: -23376: -23376: -23376: -23376: -23376: bool contains_integer_point() const; -23376: # 626 "../../src/Polyhedron_defs.hh" -23376: bool constrains(Variable var) const; -23376: # 635 "../../src/Polyhedron_defs.hh" -23376: bool bounds_from_above(const Linear_Expression& expr) const; -23376: # 644 "../../src/Polyhedron_defs.hh" -23376: bool bounds_from_below(const Linear_Expression& expr) const; -23376: # 670 "../../src/Polyhedron_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const; -23376: # 701 "../../src/Polyhedron_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const; -23376: # 729 "../../src/Polyhedron_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const; -23376: # 760 "../../src/Polyhedron_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const; -23376: # 792 "../../src/Polyhedron_defs.hh" -23376: bool frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool contains(const Polyhedron& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strictly_contains(const Polyhedron& y) const; -23376: # 829 "../../src/Polyhedron_defs.hh" -23376: bool OK(bool check_not_empty = false) const; -23376: # 848 "../../src/Polyhedron_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 859 "../../src/Polyhedron_defs.hh" -23376: void add_generator(const Generator& g); -23376: # 870 "../../src/Polyhedron_defs.hh" -23376: void add_congruence(const Congruence& cg); -23376: # 884 "../../src/Polyhedron_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: # 902 "../../src/Polyhedron_defs.hh" -23376: void add_recycled_constraints(Constraint_System& cs); -23376: # 917 "../../src/Polyhedron_defs.hh" -23376: void add_generators(const Generator_System& gs); -23376: # 936 "../../src/Polyhedron_defs.hh" -23376: void add_recycled_generators(Generator_System& gs); -23376: # 950 "../../src/Polyhedron_defs.hh" -23376: void add_congruences(const Congruence_System& cgs); -23376: # 968 "../../src/Polyhedron_defs.hh" -23376: void add_recycled_congruences(Congruence_System& cgs); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void refine_with_constraint(const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void refine_with_congruence(const Congruence& cg); -23376: # 996 "../../src/Polyhedron_defs.hh" -23376: void refine_with_constraints(const Constraint_System& cs); -23376: # 1008 "../../src/Polyhedron_defs.hh" -23376: void refine_with_congruences(const Congruence_System& cgs); -23376: # 1035 "../../src/Polyhedron_defs.hh" -23376: template -23376: void refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: bool is_strict = false); -23376: # 1069 "../../src/Polyhedron_defs.hh" -23376: template -23376: void generalized_refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: Relation_Symbol relsym); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void refine_fp_interval_abstract_store( -23376: Box< Interval >& store) -23376: const; -23376: # 1095 "../../src/Polyhedron_defs.hh" -23376: void unconstrain(Variable var); -23376: # 1109 "../../src/Polyhedron_defs.hh" -23376: void unconstrain(const Variables_Set& vars); -23376: # 1118 "../../src/Polyhedron_defs.hh" -23376: void intersection_assign(const Polyhedron& y); -23376: # 1127 "../../src/Polyhedron_defs.hh" -23376: void poly_hull_assign(const Polyhedron& y); -23376: -23376: -23376: void upper_bound_assign(const Polyhedron& y); -23376: # 1141 "../../src/Polyhedron_defs.hh" -23376: void poly_difference_assign(const Polyhedron& y); -23376: -23376: -23376: void difference_assign(const Polyhedron& y); -23376: # 1155 "../../src/Polyhedron_defs.hh" -23376: bool simplify_using_context_assign(const Polyhedron& y); -23376: # 1246 "../../src/Polyhedron_defs.hh" -23376: void affine_image(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1273 "../../src/Polyhedron_defs.hh" -23376: template -23376: void affine_form_image(Variable var, -23376: const Linear_Form >& lf); -23376: # 1364 "../../src/Polyhedron_defs.hh" -23376: void affine_preimage(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1395 "../../src/Polyhedron_defs.hh" -23376: void generalized_affine_image(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1427 "../../src/Polyhedron_defs.hh" -23376: void -23376: generalized_affine_preimage(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1454 "../../src/Polyhedron_defs.hh" -23376: void generalized_affine_image(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1478 "../../src/Polyhedron_defs.hh" -23376: void generalized_affine_preimage(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1508 "../../src/Polyhedron_defs.hh" -23376: void bounded_affine_image(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1540 "../../src/Polyhedron_defs.hh" -23376: void bounded_affine_preimage(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1554 "../../src/Polyhedron_defs.hh" -23376: void time_elapse_assign(const Polyhedron& y); -23376: # 1565 "../../src/Polyhedron_defs.hh" -23376: void positive_time_elapse_assign(const Polyhedron& y); -23376: # 1613 "../../src/Polyhedron_defs.hh" -23376: void wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p = 0, -23376: unsigned complexity_threshold = 16, -23376: bool wrap_individually = true); -23376: # 1632 "../../src/Polyhedron_defs.hh" -23376: void drop_some_non_integer_points(Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1650 "../../src/Polyhedron_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: -23376: -23376: void topological_closure_assign(); -23376: # 1673 "../../src/Polyhedron_defs.hh" -23376: void BHRZ03_widening_assign(const Polyhedron& y, unsigned* tp = 0); -23376: # 1696 "../../src/Polyhedron_defs.hh" -23376: void limited_BHRZ03_extrapolation_assign(const Polyhedron& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1721 "../../src/Polyhedron_defs.hh" -23376: void bounded_BHRZ03_extrapolation_assign(const Polyhedron& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1741 "../../src/Polyhedron_defs.hh" -23376: void H79_widening_assign(const Polyhedron& y, unsigned* tp = 0); -23376: -23376: -23376: void widening_assign(const Polyhedron& y, unsigned* tp = 0); -23376: # 1767 "../../src/Polyhedron_defs.hh" -23376: void limited_H79_extrapolation_assign(const Polyhedron& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1792 "../../src/Polyhedron_defs.hh" -23376: void bounded_H79_extrapolation_assign(const Polyhedron& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1826 "../../src/Polyhedron_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 1853 "../../src/Polyhedron_defs.hh" -23376: void add_space_dimensions_and_project(dimension_type m); -23376: # 1866 "../../src/Polyhedron_defs.hh" -23376: void concatenate_assign(const Polyhedron& y); -23376: # 1878 "../../src/Polyhedron_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: # 1888 "../../src/Polyhedron_defs.hh" -23376: void remove_higher_space_dimensions(dimension_type new_dimension); -23376: # 1930 "../../src/Polyhedron_defs.hh" -23376: template -23376: void map_space_dimensions(const Partial_Function& pfunc); -23376: # 1954 "../../src/Polyhedron_defs.hh" -23376: void expand_space_dimension(Variable var, dimension_type m); -23376: # 1979 "../../src/Polyhedron_defs.hh" -23376: void fold_space_dimensions(const Variables_Set& vars, Variable dest); -23376: -23376: -23376: -23376: friend bool operator==(const Polyhedron& x, const Polyhedron& y); -23376: -23376: -23376: -23376: -23376: -23376: ~Polyhedron(); -23376: # 1998 "../../src/Polyhedron_defs.hh" -23376: void m_swap(Polyhedron& y); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int32_t hash_code() const; -23376: -23376: -23376: -23376: private: -23376: static const Representation default_con_sys_repr = DENSE; -23376: static const Representation default_gen_sys_repr = DENSE; -23376: -23376: -23376: Constraint_System con_sys; -23376: -23376: -23376: Generator_System gen_sys; -23376: -23376: -23376: Bit_Matrix sat_c; -23376: -23376: -23376: Bit_Matrix sat_g; -23376: -23376: -23376: # 1 "../../src/Ph_Status_idefs.hh" 1 -23376: # 86 "../../src/Ph_Status_idefs.hh" -23376: class Status { -23376: public: -23376: -23376: Status(); -23376: -23376: -23376: -23376: bool test_zero_dim_univ() const; -23376: void reset_zero_dim_univ(); -23376: void set_zero_dim_univ(); -23376: -23376: bool test_empty() const; -23376: void reset_empty(); -23376: void set_empty(); -23376: -23376: bool test_c_up_to_date() const; -23376: void reset_c_up_to_date(); -23376: void set_c_up_to_date(); -23376: -23376: bool test_g_up_to_date() const; -23376: void reset_g_up_to_date(); -23376: void set_g_up_to_date(); -23376: -23376: bool test_c_minimized() const; -23376: void reset_c_minimized(); -23376: void set_c_minimized(); -23376: -23376: bool test_g_minimized() const; -23376: void reset_g_minimized(); -23376: void set_g_minimized(); -23376: -23376: bool test_sat_c_up_to_date() const; -23376: void reset_sat_c_up_to_date(); -23376: void set_sat_c_up_to_date(); -23376: -23376: bool test_sat_g_up_to_date() const; -23376: void reset_sat_g_up_to_date(); -23376: void set_sat_g_up_to_date(); -23376: -23376: bool test_c_pending() const; -23376: void reset_c_pending(); -23376: void set_c_pending(); -23376: -23376: bool test_g_pending() const; -23376: void reset_g_pending(); -23376: void set_g_pending(); -23376: -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t ZERO_DIM_UNIV = 0U; -23376: static const flags_t EMPTY = 1U << 0; -23376: static const flags_t C_UP_TO_DATE = 1U << 1; -23376: static const flags_t G_UP_TO_DATE = 1U << 2; -23376: static const flags_t C_MINIMIZED = 1U << 3; -23376: static const flags_t G_MINIMIZED = 1U << 4; -23376: static const flags_t SAT_C_UP_TO_DATE = 1U << 5; -23376: static const flags_t SAT_G_UP_TO_DATE = 1U << 6; -23376: static const flags_t CS_PENDING = 1U << 7; -23376: static const flags_t GS_PENDING = 1U << 8; -23376: -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: Status(flags_t mask); -23376: -23376: -23376: bool test_all(flags_t mask) const; -23376: -23376: -23376: bool test_any(flags_t mask) const; -23376: -23376: -23376: void set(flags_t mask); -23376: -23376: -23376: void reset(flags_t mask); -23376: }; -23376: # 2043 "../../src/Polyhedron_defs.hh" 2 -23376: -23376: -23376: -23376: Status status; -23376: -23376: -23376: dimension_type space_dim; -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_necessarily_closed() const; -23376: -23376: friend bool -23376: Parma_Polyhedra_Library::Interfaces -23376: ::is_necessarily_closed_for_interfaces(const Polyhedron&); -23376: # 2071 "../../src/Polyhedron_defs.hh" -23376: void refine_no_check(const Constraint& c); -23376: # 2081 "../../src/Polyhedron_defs.hh" -23376: bool marked_empty() const; -23376: -23376: -23376: bool constraints_are_up_to_date() const; -23376: -23376: -23376: bool generators_are_up_to_date() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool constraints_are_minimized() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool generators_are_minimized() const; -23376: -23376: -23376: bool has_pending_constraints() const; -23376: -23376: -23376: bool has_pending_generators() const; -23376: -23376: -23376: -23376: -23376: -23376: bool has_something_pending() const; -23376: -23376: -23376: bool can_have_something_pending() const; -23376: -23376: -23376: -23376: -23376: -23376: bool sat_c_is_up_to_date() const; -23376: -23376: -23376: -23376: -23376: -23376: bool sat_g_is_up_to_date() const; -23376: # 2139 "../../src/Polyhedron_defs.hh" -23376: void set_zero_dim_univ(); -23376: -23376: -23376: -23376: -23376: -23376: void set_empty(); -23376: -23376: -23376: void set_constraints_up_to_date(); -23376: -23376: -23376: void set_generators_up_to_date(); -23376: -23376: -23376: void set_constraints_minimized(); -23376: -23376: -23376: void set_generators_minimized(); -23376: -23376: -23376: void set_constraints_pending(); -23376: -23376: -23376: void set_generators_pending(); -23376: -23376: -23376: void set_sat_c_up_to_date(); -23376: -23376: -23376: void set_sat_g_up_to_date(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void clear_empty(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void clear_constraints_up_to_date(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void clear_generators_up_to_date(); -23376: -23376: -23376: void clear_constraints_minimized(); -23376: -23376: -23376: void clear_generators_minimized(); -23376: -23376: -23376: void clear_pending_constraints(); -23376: -23376: -23376: void clear_pending_generators(); -23376: -23376: -23376: void clear_sat_c_up_to_date(); -23376: -23376: -23376: void clear_sat_g_up_to_date(); -23376: # 2227 "../../src/Polyhedron_defs.hh" -23376: bool process_pending() const; -23376: # 2237 "../../src/Polyhedron_defs.hh" -23376: bool process_pending_constraints() const; -23376: -23376: -23376: -23376: -23376: -23376: void process_pending_generators() const; -23376: # 2252 "../../src/Polyhedron_defs.hh" -23376: void remove_pending_to_obtain_constraints() const; -23376: # 2265 "../../src/Polyhedron_defs.hh" -23376: bool remove_pending_to_obtain_generators() const; -23376: # 2278 "../../src/Polyhedron_defs.hh" -23376: void update_constraints() const; -23376: # 2292 "../../src/Polyhedron_defs.hh" -23376: bool update_generators() const; -23376: # 2309 "../../src/Polyhedron_defs.hh" -23376: void update_sat_c() const; -23376: # 2326 "../../src/Polyhedron_defs.hh" -23376: void update_sat_g() const; -23376: # 2338 "../../src/Polyhedron_defs.hh" -23376: void obtain_sorted_constraints() const; -23376: # 2350 "../../src/Polyhedron_defs.hh" -23376: void obtain_sorted_generators() const; -23376: # 2360 "../../src/Polyhedron_defs.hh" -23376: void obtain_sorted_constraints_with_sat_c() const; -23376: # 2370 "../../src/Polyhedron_defs.hh" -23376: void obtain_sorted_generators_with_sat_g() const; -23376: # 2386 "../../src/Polyhedron_defs.hh" -23376: bool minimize() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strongly_minimize_constraints() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strongly_minimize_generators() const; -23376: -23376: -23376: Constraint_System simplified_constraints() const; -23376: -23376: -23376: -23376: enum Three_Valued_Boolean { -23376: TVB_TRUE, -23376: TVB_FALSE, -23376: TVB_DONT_KNOW -23376: }; -23376: -23376: -23376: Three_Valued_Boolean quick_equivalence_test(const Polyhedron& y) const; -23376: -23376: -23376: bool is_included_in(const Polyhedron& y) const; -23376: # 2438 "../../src/Polyhedron_defs.hh" -23376: bool bounds(const Linear_Expression& expr, bool from_above) const; -23376: # 2471 "../../src/Polyhedron_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included, -23376: Generator& g) const; -23376: # 2483 "../../src/Polyhedron_defs.hh" -23376: void select_CH78_constraints(const Polyhedron& y, -23376: Constraint_System& cs_selection) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void select_H79_constraints(const Polyhedron& y, -23376: Constraint_System& cs_selected, -23376: Constraint_System& cs_not_selected) const; -23376: -23376: bool BHRZ03_combining_constraints(const Polyhedron& y, -23376: const BHRZ03_Certificate& y_cert, -23376: const Polyhedron& H79, -23376: const Constraint_System& x_minus_H79_cs); -23376: -23376: bool BHRZ03_evolving_points(const Polyhedron& y, -23376: const BHRZ03_Certificate& y_cert, -23376: const Polyhedron& H79); -23376: -23376: bool BHRZ03_evolving_rays(const Polyhedron& y, -23376: const BHRZ03_Certificate& y_cert, -23376: const Polyhedron& H79); -23376: -23376: static void modify_according_to_evolution(Linear_Expression& ray, -23376: const Linear_Expression& x, -23376: const Linear_Expression& y); -23376: # 2542 "../../src/Polyhedron_defs.hh" -23376: template -23376: static void add_space_dimensions(Linear_System1& sys1, -23376: Linear_System2& sys2, -23376: Bit_Matrix& sat1, -23376: Bit_Matrix& sat2, -23376: dimension_type add_dim); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: static bool minimize(bool con_to_gen, -23376: Source_Linear_System& source, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: static bool add_and_minimize(bool con_to_gen, -23376: Source_Linear_System1& source1, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat, -23376: const Source_Linear_System2& source2); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: static bool add_and_minimize(bool con_to_gen, -23376: Source_Linear_System& source, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat); -23376: -23376: -23376: -23376: template -23376: static dimension_type conversion(Source_Linear_System& source, -23376: dimension_type start, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat, -23376: dimension_type num_lines_or_equalities); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: static dimension_type simplify(Linear_System1& sys, Bit_Matrix& sat); -23376: # 2610 "../../src/Polyhedron_defs.hh" -23376: static dimension_type* simplify_num_saturators_p; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static size_t simplify_num_saturators_size; -23376: -23376: template friend class Parma_Polyhedra_Library::Box; -23376: template friend class Parma_Polyhedra_Library::BD_Shape; -23376: template friend class Parma_Polyhedra_Library::Octagonal_Shape; -23376: friend class Parma_Polyhedra_Library::Grid; -23376: friend class Parma_Polyhedra_Library::BHRZ03_Certificate; -23376: friend class Parma_Polyhedra_Library::H79_Certificate; -23376: -23376: protected: -23376: # 2644 "../../src/Polyhedron_defs.hh" -23376: bool BFT00_poly_hull_assign_if_exact(const Polyhedron& y); -23376: -23376: bool BHZ09_poly_hull_assign_if_exact(const Polyhedron& y); -23376: bool BHZ09_C_poly_hull_assign_if_exact(const Polyhedron& y); -23376: bool BHZ09_NNC_poly_hull_assign_if_exact(const Polyhedron& y); -23376: -23376: -23376: -23376: -23376: -23376: protected: -23376: void throw_invalid_argument(const char* method, const char* reason) const; -23376: -23376: void throw_topology_incompatible(const char* method, -23376: const char* ph_name, -23376: const Polyhedron& ph) const; -23376: void throw_topology_incompatible(const char* method, -23376: const char* c_name, -23376: const Constraint& c) const; -23376: void throw_topology_incompatible(const char* method, -23376: const char* g_name, -23376: const Generator& g) const; -23376: void throw_topology_incompatible(const char* method, -23376: const char* cs_name, -23376: const Constraint_System& cs) const; -23376: void throw_topology_incompatible(const char* method, -23376: const char* gs_name, -23376: const Generator_System& gs) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const char* other_name, -23376: dimension_type other_dim) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* ph_name, -23376: const Polyhedron& ph) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* c_name, -23376: const Constraint& c) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* g_name, -23376: const Generator& g) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cg_name, -23376: const Congruence& cg) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cs_name, -23376: const Constraint_System& cs) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* gs_name, -23376: const Generator_System& gs) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cgs_name, -23376: const Congruence_System& cgs) const; -23376: template -23376: void throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* var_name, -23376: Variable var) const; -23376: void throw_dimension_incompatible(const char* method, -23376: dimension_type required_space_dim) const; -23376: -23376: -23376: -23376: -23376: static dimension_type -23376: check_space_dimension_overflow(dimension_type dim, dimension_type max, -23376: const Topology topol, -23376: const char* method, const char* reason); -23376: -23376: static dimension_type -23376: check_space_dimension_overflow(dimension_type dim, const Topology topol, -23376: const char* method, const char* reason); -23376: -23376: template -23376: static Object& -23376: check_obj_space_dimension_overflow(Object& input, Topology topol, -23376: const char* method, const char* reason); -23376: -23376: void throw_invalid_generator(const char* method, -23376: const char* g_name) const; -23376: -23376: void throw_invalid_generators(const char* method, -23376: const char* gs_name) const; -23376: # 2751 "../../src/Polyhedron_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set* vars_p, -23376: Complexity_Class complexity); -23376: # 2772 "../../src/Polyhedron_defs.hh" -23376: template -23376: void overapproximate_linear_form( -23376: const Linear_Form >& lf, -23376: const dimension_type lf_dimension, -23376: Linear_Form >& result); -23376: # 2797 "../../src/Polyhedron_defs.hh" -23376: template -23376: static void convert_to_integer_expression( -23376: const Linear_Form >& lf, -23376: const dimension_type lf_dimension, -23376: Linear_Expression& result); -23376: # 2829 "../../src/Polyhedron_defs.hh" -23376: template -23376: static void -23376: convert_to_integer_expressions(const Linear_Form >& -23376: lf, -23376: const dimension_type lf_dimension, -23376: Linear_Expression& res, -23376: Coefficient& res_low_coeff, -23376: Coefficient& res_hi_coeff, -23376: Coefficient& denominator); -23376: -23376: template -23376: static bool -23376: add_to_system_and_check_independence(Linear_System1& eq_sys, -23376: const Row2& eq); -23376: # 2852 "../../src/Polyhedron_defs.hh" -23376: void positive_time_elapse_assign_impl(const Polyhedron& y); -23376: }; -23376: -23376: # 1 "../../src/Ph_Status_inlines.hh" 1 -23376: # 27 "../../src/Ph_Status_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Polyhedron::Status::Status(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: inline -23376: Polyhedron::Status::Status() -23376: : flags(ZERO_DIM_UNIV) { -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_all(flags_t mask) const { -23376: return (flags & mask) == mask; -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_any(flags_t mask) const { -23376: return (flags & mask) != 0; -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set(flags_t mask) { -23376: flags |= mask; -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset(flags_t mask) { -23376: flags &= ~mask; -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_zero_dim_univ() const { -23376: return flags == ZERO_DIM_UNIV; -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_zero_dim_univ() { -23376: -23376: if (flags == ZERO_DIM_UNIV) { -23376: -23376: flags = EMPTY; -23376: } -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_zero_dim_univ() { -23376: -23376: flags = ZERO_DIM_UNIV; -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_empty() const { -23376: return test_any(EMPTY); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_empty() { -23376: reset(EMPTY); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_empty() { -23376: flags = EMPTY; -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_c_up_to_date() const { -23376: return test_any(C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_c_up_to_date() { -23376: reset(C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_c_up_to_date() { -23376: set(C_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_g_up_to_date() const { -23376: return test_any(G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_g_up_to_date() { -23376: reset(G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_g_up_to_date() { -23376: set(G_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_c_minimized() const { -23376: return test_any(C_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_c_minimized() { -23376: reset(C_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_c_minimized() { -23376: set(C_MINIMIZED); -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_g_minimized() const { -23376: return test_any(G_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_g_minimized() { -23376: reset(G_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_g_minimized() { -23376: set(G_MINIMIZED); -23376: } -23376: -23376: -23376: inline bool -23376: Polyhedron::Status::test_c_pending() const { -23376: return test_any(CS_PENDING); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_c_pending() { -23376: reset(CS_PENDING); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_c_pending() { -23376: set(CS_PENDING); -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_g_pending() const { -23376: return test_any(GS_PENDING); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_g_pending() { -23376: reset(GS_PENDING); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_g_pending() { -23376: set(GS_PENDING); -23376: } -23376: -23376: -23376: inline bool -23376: Polyhedron::Status::test_sat_c_up_to_date() const { -23376: return test_any(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_sat_c_up_to_date() { -23376: reset(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_sat_c_up_to_date() { -23376: set(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Polyhedron::Status::test_sat_g_up_to_date() const { -23376: return test_any(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::reset_sat_g_up_to_date() { -23376: reset(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Polyhedron::Status::set_sat_g_up_to_date() { -23376: set(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: } -23376: # 2856 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_inlines.hh" 1 -23376: # 32 "../../src/Polyhedron_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline memory_size_type -23376: Polyhedron::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline dimension_type -23376: Polyhedron::space_dimension() const { -23376: return space_dim; -23376: } -23376: -23376: inline int32_t -23376: Polyhedron::hash_code() const { -23376: return hash_code_from_dimension(space_dimension()); -23376: } -23376: -23376: inline dimension_type -23376: Polyhedron::max_space_dimension() { -23376: using std::min; -23376: -23376: -23376: return min(std::numeric_limits::max() - 1, -23376: min(Constraint_System::max_space_dimension(), -23376: Generator_System::max_space_dimension() -23376: ) -23376: ); -23376: } -23376: -23376: inline Topology -23376: Polyhedron::topology() const { -23376: -23376: -23376: return con_sys.topology(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::is_discrete() const { -23376: return affine_dimension() == 0; -23376: } -23376: -23376: inline bool -23376: Polyhedron::is_necessarily_closed() const { -23376: -23376: -23376: return con_sys.is_necessarily_closed(); -23376: } -23376: -23376: inline void -23376: Polyhedron::upper_bound_assign(const Polyhedron& y) { -23376: poly_hull_assign(y); -23376: } -23376: -23376: inline void -23376: Polyhedron::difference_assign(const Polyhedron& y) { -23376: poly_difference_assign(y); -23376: } -23376: -23376: inline void -23376: Polyhedron::widening_assign(const Polyhedron& y, unsigned* tp) { -23376: H79_widening_assign(y, tp); -23376: } -23376: -23376: inline -23376: Polyhedron::~Polyhedron() { -23376: } -23376: -23376: inline void -23376: Polyhedron::m_swap(Polyhedron& y) { -23376: if (topology() != y.topology()) { -23376: throw_topology_incompatible("swap(y)", "y", y); -23376: } -23376: using std::swap; -23376: swap(con_sys, y.con_sys); -23376: swap(gen_sys, y.gen_sys); -23376: swap(sat_c, y.sat_c); -23376: swap(sat_g, y.sat_g); -23376: swap(status, y.status); -23376: swap(space_dim, y.space_dim); -23376: } -23376: -23376: -23376: inline void -23376: swap(Polyhedron& x, Polyhedron& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: inline bool -23376: Polyhedron::can_recycle_constraint_systems() { -23376: return true; -23376: } -23376: -23376: inline bool -23376: Polyhedron::can_recycle_congruence_systems() { -23376: return false; -23376: } -23376: -23376: inline bool -23376: Polyhedron::marked_empty() const { -23376: return status.test_empty(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::constraints_are_up_to_date() const { -23376: return status.test_c_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::generators_are_up_to_date() const { -23376: return status.test_g_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::constraints_are_minimized() const { -23376: return status.test_c_minimized(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::generators_are_minimized() const { -23376: return status.test_g_minimized(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::sat_c_is_up_to_date() const { -23376: return status.test_sat_c_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::sat_g_is_up_to_date() const { -23376: return status.test_sat_g_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::has_pending_constraints() const { -23376: return status.test_c_pending(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::has_pending_generators() const { -23376: return status.test_g_pending(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::has_something_pending() const { -23376: return status.test_c_pending() || status.test_g_pending(); -23376: } -23376: -23376: inline bool -23376: Polyhedron::can_have_something_pending() const { -23376: return constraints_are_minimized() -23376: && generators_are_minimized() -23376: && (sat_c_is_up_to_date() || sat_g_is_up_to_date()); -23376: } -23376: -23376: inline bool -23376: Polyhedron::is_empty() const { -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: -23376: if (generators_are_up_to_date() && !has_pending_constraints()) { -23376: return false; -23376: } -23376: return !minimize(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_constraints_up_to_date() { -23376: status.set_c_up_to_date(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_generators_up_to_date() { -23376: status.set_g_up_to_date(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_constraints_minimized() { -23376: set_constraints_up_to_date(); -23376: status.set_c_minimized(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_generators_minimized() { -23376: set_generators_up_to_date(); -23376: status.set_g_minimized(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_constraints_pending() { -23376: status.set_c_pending(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_generators_pending() { -23376: status.set_g_pending(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_sat_c_up_to_date() { -23376: status.set_sat_c_up_to_date(); -23376: } -23376: -23376: inline void -23376: Polyhedron::set_sat_g_up_to_date() { -23376: status.set_sat_g_up_to_date(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_empty() { -23376: status.reset_empty(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_constraints_minimized() { -23376: status.reset_c_minimized(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_generators_minimized() { -23376: status.reset_g_minimized(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_pending_constraints() { -23376: status.reset_c_pending(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_pending_generators() { -23376: status.reset_g_pending(); -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_sat_c_up_to_date() { -23376: status.reset_sat_c_up_to_date(); -23376: -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_sat_g_up_to_date() { -23376: status.reset_sat_g_up_to_date(); -23376: -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_constraints_up_to_date() { -23376: clear_pending_constraints(); -23376: clear_constraints_minimized(); -23376: clear_sat_c_up_to_date(); -23376: clear_sat_g_up_to_date(); -23376: status.reset_c_up_to_date(); -23376: -23376: } -23376: -23376: inline void -23376: Polyhedron::clear_generators_up_to_date() { -23376: clear_pending_generators(); -23376: clear_generators_minimized(); -23376: clear_sat_c_up_to_date(); -23376: clear_sat_g_up_to_date(); -23376: status.reset_g_up_to_date(); -23376: -23376: } -23376: -23376: inline bool -23376: Polyhedron::process_pending() const { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: if (has_pending_constraints()) { -23376: return process_pending_constraints(); -23376: } -23376: -23376: ((void) 0); -23376: process_pending_generators(); -23376: return true; -23376: } -23376: -23376: inline bool -23376: Polyhedron::bounds_from_above(const Linear_Expression& expr) const { -23376: return bounds(expr, true); -23376: } -23376: -23376: inline bool -23376: Polyhedron::bounds_from_below(const Linear_Expression& expr) const { -23376: return bounds(expr, false); -23376: } -23376: -23376: inline bool -23376: Polyhedron::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, -23376: bool& maximum) const { -23376: Generator g(point()); -23376: return max_min(expr, true, sup_n, sup_d, maximum, g); -23376: } -23376: -23376: inline bool -23376: Polyhedron::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum, g); -23376: } -23376: -23376: inline bool -23376: Polyhedron::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, -23376: bool& minimum) const { -23376: Generator g(point()); -23376: return max_min(expr, false, inf_n, inf_d, minimum, g); -23376: } -23376: -23376: inline bool -23376: Polyhedron::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum, g); -23376: } -23376: -23376: inline Constraint_System -23376: Polyhedron::simplified_constraints() const { -23376: ((void) 0); -23376: Constraint_System cs(con_sys); -23376: if (cs.num_pending_rows() > 0) { -23376: cs.unset_pending_rows(); -23376: } -23376: if (has_pending_constraints() || !constraints_are_minimized()) { -23376: cs.simplify(); -23376: } -23376: return cs; -23376: } -23376: -23376: inline Congruence_System -23376: Polyhedron::congruences() const { -23376: return Congruence_System(minimized_constraints()); -23376: } -23376: -23376: inline Congruence_System -23376: Polyhedron::minimized_congruences() const { -23376: return Congruence_System(minimized_constraints()); -23376: } -23376: -23376: inline void -23376: Polyhedron::add_recycled_congruences(Congruence_System& cgs) { -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: inline void -23376: Polyhedron::generalized_refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: const Relation_Symbol relsym) { -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: refine_with_linear_form_inequality(left, right, false); -23376: refine_with_linear_form_inequality(right, left, false); -23376: break; -23376: case LESS_THAN: -23376: refine_with_linear_form_inequality(left, right, true); -23376: break; -23376: case LESS_OR_EQUAL: -23376: refine_with_linear_form_inequality(left, right, false); -23376: break; -23376: case GREATER_THAN: -23376: refine_with_linear_form_inequality(right, left, true); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_with_linear_form_inequality(right, left, false); -23376: break; -23376: case NOT_EQUAL: -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Polyhedron:: -23376: refine_fp_interval_abstract_store( -23376: Box< Interval >& store) const { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_422 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: typedef Interval FP_Interval_Type; -23376: store.intersection_assign(Box(*this)); -23376: -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Polyhedron& x, const Polyhedron& y) { -23376: return !(x == y); -23376: } -23376: -23376: inline bool -23376: Polyhedron::strictly_contains(const Polyhedron& y) const { -23376: const Polyhedron& x = *this; -23376: return x.contains(y) && !y.contains(x); -23376: } -23376: -23376: inline void -23376: Polyhedron::drop_some_non_integer_points(Complexity_Class complexity) { -23376: const Variables_Set* const p_vs = 0; -23376: drop_some_non_integer_points(p_vs, complexity); -23376: } -23376: -23376: inline void -23376: Polyhedron::drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity) { -23376: drop_some_non_integer_points(&vars, complexity); -23376: } -23376: -23376: -23376: namespace Interfaces { -23376: -23376: inline bool -23376: is_necessarily_closed_for_interfaces(const Polyhedron& ph) { -23376: return ph.is_necessarily_closed(); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 2857 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_templates.hh" 1 -23376: # 28 "../../src/Polyhedron_templates.hh" -23376: # 1 "../../src/MIP_Problem_defs.hh" 1 -23376: # 29 "../../src/MIP_Problem_defs.hh" -23376: # 1 "../../src/Matrix_defs.hh" 1 -23376: # 27 "../../src/Matrix_defs.hh" -23376: # 1 "../../src/Matrix_types.hh" 1 -23376: # 16 "../../src/Matrix_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Matrix; -23376: -23376: } -23376: # 28 "../../src/Matrix_defs.hh" 2 -23376: # 36 "../../src/Matrix_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Matrix { -23376: -23376: public: -23376: typedef typename Swapping_Vector::iterator iterator; -23376: typedef typename Swapping_Vector::const_iterator const_iterator; -23376: -23376: -23376: static dimension_type max_num_rows(); -23376: -23376: -23376: static dimension_type max_num_columns(); -23376: # 58 "../../src/Matrix_defs.hh" -23376: explicit Matrix(dimension_type n = 0); -23376: # 72 "../../src/Matrix_defs.hh" -23376: Matrix(dimension_type num_rows, dimension_type num_columns); -23376: # 82 "../../src/Matrix_defs.hh" -23376: void m_swap(Matrix& x); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type num_columns() const; -23376: -23376: -23376: -23376: dimension_type capacity() const; -23376: # 109 "../../src/Matrix_defs.hh" -23376: bool has_no_rows() const; -23376: -23376: -23376: void resize(dimension_type n); -23376: -23376: -23376: -23376: void reserve_rows(dimension_type n); -23376: # 146 "../../src/Matrix_defs.hh" -23376: void resize(dimension_type num_rows, dimension_type num_columns); -23376: # 164 "../../src/Matrix_defs.hh" -23376: void add_zero_rows_and_columns(dimension_type n, dimension_type m); -23376: # 178 "../../src/Matrix_defs.hh" -23376: void add_zero_rows(dimension_type n); -23376: # 191 "../../src/Matrix_defs.hh" -23376: void add_row(const Row& x); -23376: # 205 "../../src/Matrix_defs.hh" -23376: void add_recycled_row(Row& y); -23376: # 219 "../../src/Matrix_defs.hh" -23376: void remove_trailing_rows(dimension_type n); -23376: -23376: void remove_rows(iterator first, iterator last); -23376: # 253 "../../src/Matrix_defs.hh" -23376: void permute_columns(const std::vector& cycles); -23376: -23376: -23376: void swap_columns(dimension_type i, dimension_type j); -23376: # 269 "../../src/Matrix_defs.hh" -23376: void add_zero_columns(dimension_type n); -23376: # 290 "../../src/Matrix_defs.hh" -23376: void add_zero_columns(dimension_type n, dimension_type i); -23376: # 308 "../../src/Matrix_defs.hh" -23376: void remove_column(dimension_type i); -23376: # 326 "../../src/Matrix_defs.hh" -23376: void remove_trailing_columns(dimension_type n); -23376: -23376: -23376: void clear(); -23376: -23376: -23376: -23376: -23376: -23376: iterator begin(); -23376: -23376: -23376: -23376: -23376: -23376: iterator end(); -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator end() const; -23376: # 362 "../../src/Matrix_defs.hh" -23376: Row& operator[](dimension_type i); -23376: # 371 "../../src/Matrix_defs.hh" -23376: const Row& operator[](dimension_type i) const; -23376: # 380 "../../src/Matrix_defs.hh" -23376: bool ascii_load(std::istream& s); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: private: -23376: -23376: Swapping_Vector rows; -23376: -23376: -23376: dimension_type num_columns_; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: template -23376: void swap(Matrix& x, Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const Matrix& x, const Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const Matrix& x, const Matrix& y); -23376: -23376: } -23376: -23376: -23376: # 1 "../../src/Matrix_inlines.hh" 1 -23376: # 27 "../../src/Matrix_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline dimension_type -23376: Matrix::max_num_rows() { -23376: return std::vector().max_size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Matrix::max_num_columns() { -23376: return Row::max_size(); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::m_swap(Matrix& x) { -23376: using std::swap; -23376: swap(rows, x.rows); -23376: swap(num_columns_, x.num_columns_); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Matrix::num_rows() const { -23376: return rows.size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Matrix::num_columns() const { -23376: return num_columns_; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Matrix::capacity() const { -23376: return rows.capacity(); -23376: } -23376: -23376: template -23376: inline bool -23376: Matrix::has_no_rows() const { -23376: return num_rows() == 0; -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::resize(dimension_type n) { -23376: resize(n, n); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::reserve_rows(dimension_type requested_capacity) { -23376: -23376: rows.reserve(requested_capacity); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::add_zero_rows_and_columns(dimension_type n, dimension_type m) { -23376: resize(num_rows() + n, num_columns() + m); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::add_zero_rows(dimension_type n) { -23376: resize(num_rows() + n, num_columns()); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::add_row(const Row& x) { -23376: -23376: Row row(x); -23376: add_zero_rows(1); -23376: -23376: swap(rows.back(), row); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::add_recycled_row(Row& x) { -23376: add_zero_rows(1); -23376: swap(rows.back(), x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::remove_trailing_rows(dimension_type n) { -23376: resize(num_rows() - n, num_columns()); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::remove_rows(iterator first, iterator last) { -23376: rows.erase(first, last); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::add_zero_columns(dimension_type n) { -23376: resize(num_rows(), num_columns() + n); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::remove_trailing_columns(dimension_type n) { -23376: ((void) 0); -23376: resize(num_rows(), num_columns() - n); -23376: } -23376: -23376: template -23376: inline void -23376: Matrix::clear() { -23376: resize(0, 0); -23376: } -23376: -23376: template -23376: inline typename Matrix::iterator -23376: Matrix::begin() { -23376: return rows.begin(); -23376: } -23376: -23376: template -23376: inline typename Matrix::iterator -23376: Matrix::end() { -23376: return rows.end(); -23376: } -23376: -23376: template -23376: inline typename Matrix::const_iterator -23376: Matrix::begin() const { -23376: return rows.begin(); -23376: } -23376: -23376: template -23376: inline typename Matrix::const_iterator -23376: Matrix::end() const { -23376: return rows.end(); -23376: } -23376: -23376: template -23376: inline Row& -23376: Matrix::operator[](dimension_type i) { -23376: ((void) 0); -23376: return rows[i]; -23376: } -23376: -23376: template -23376: inline const Row& -23376: Matrix::operator[](dimension_type i) const { -23376: ((void) 0); -23376: return rows[i]; -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Matrix::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline void -23376: swap(Matrix& x, Matrix& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 435 "../../src/Matrix_defs.hh" 2 -23376: # 1 "../../src/Matrix_templates.hh" 1 -23376: # 27 "../../src/Matrix_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Matrix::Matrix(dimension_type n) -23376: : rows(n), num_columns_(n) { -23376: for (dimension_type i = 0; i < rows.size(); ++i) { -23376: rows[i].resize(num_columns_); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: Matrix::Matrix(dimension_type num_rows, dimension_type num_columns) -23376: : rows(num_rows), num_columns_(num_columns) { -23376: for (dimension_type i = 0; i < rows.size(); ++i) { -23376: rows[i].resize(num_columns_); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Matrix::resize(dimension_type num_rows, dimension_type num_columns) { -23376: const dimension_type old_num_rows = rows.size(); -23376: rows.resize(num_rows); -23376: if (old_num_rows < num_rows) { -23376: for (dimension_type i = old_num_rows; i < num_rows; ++i) { -23376: rows[i].resize(num_columns); -23376: } -23376: if (num_columns_ != num_columns) { -23376: num_columns_ = num_columns; -23376: for (dimension_type i = 0; i < old_num_rows; ++i) { -23376: rows[i].resize(num_columns); -23376: } -23376: } -23376: } -23376: else -23376: if (num_columns_ != num_columns) { -23376: num_columns_ = num_columns; -23376: for (dimension_type i = 0; i < num_rows; ++i) { -23376: rows[i].resize(num_columns); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Matrix::permute_columns(const std::vector& cycles) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item(); -23376: const dimension_type n = cycles.size(); -23376: ((void) 0); -23376: for (dimension_type k = num_rows(); k-- > 0; ) { -23376: Row& rows_k = (*this)[k]; -23376: for (dimension_type i = 0, j = 0; i < n; i = ++j) { -23376: -23376: while (cycles[j] != 0) { -23376: ++j; -23376: } -23376: -23376: ((void) 0); -23376: if (j - i == 2) { -23376: -23376: rows_k.swap_coefficients(cycles[i], cycles[i + 1]); -23376: } -23376: else { -23376: -23376: tmp = rows_k.get(cycles[j - 1]); -23376: for (dimension_type l = (j - 1); l > i; --l) { -23376: rows_k.swap_coefficients(cycles[l-1], cycles[l]); -23376: } -23376: if (tmp == 0) { -23376: rows_k.reset(cycles[i]); -23376: } -23376: else { -23376: using std::swap; -23376: swap(tmp, rows_k[cycles[i]]); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Matrix::swap_columns(dimension_type i, dimension_type j) { -23376: for (dimension_type k = num_rows(); k-- > 0; ) { -23376: (*this)[k].swap_coefficients(i, j); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Matrix::add_zero_columns(dimension_type n, dimension_type i) { -23376: for (dimension_type j = rows.size(); j-- > 0; ) { -23376: rows[j].add_zeroes_and_shift(n, i); -23376: } -23376: num_columns_ += n; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Matrix::remove_column(dimension_type i) { -23376: for (dimension_type j = rows.size(); j-- > 0; ) { -23376: rows[j].delete_element_and_shift(i); -23376: } -23376: --num_columns_; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Matrix::ascii_dump(std::ostream& s) const { -23376: s << num_rows() << " x "; -23376: s << num_columns() << "\n"; -23376: for (const_iterator i = begin(), i_end = end(); i !=i_end; ++i) { -23376: i->ascii_dump(s); -23376: } -23376: } -23376: -23376: template void Matrix::ascii_dump() const { ascii_dump(std::cerr); } template void Matrix::print() const { std::cerr << "No user level output operator defined " << "for " "Matrix" << "." << std::endl; } -23376: -23376: template -23376: bool -23376: Matrix::ascii_load(std::istream& s) { -23376: std::string str; -23376: dimension_type new_num_rows; -23376: dimension_type new_num_cols; -23376: if (!(s >> new_num_rows)) { -23376: return false; -23376: } -23376: if (!(s >> str) || str != "x") { -23376: return false; -23376: } -23376: if (!(s >> new_num_cols)) { -23376: return false; -23376: } -23376: -23376: for (iterator i = rows.begin(), i_end = rows.end(); -23376: i != i_end; ++i) { -23376: i->clear(); -23376: } -23376: -23376: resize(new_num_rows, new_num_cols); -23376: -23376: for (dimension_type row = 0; row < new_num_rows; ++row) { -23376: if (!rows[row].ascii_load(s)) { -23376: return false; -23376: } -23376: } -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: memory_size_type -23376: Matrix::external_memory_in_bytes() const { -23376: return rows.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: bool -23376: Matrix::OK() const { -23376: for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) { -23376: if (i->size() != num_columns_) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: -23376: template -23376: bool -23376: operator==(const Matrix& x, const Matrix& y) { -23376: if (x.num_rows() != y.num_rows()) { -23376: return false; -23376: } -23376: if (x.num_columns() != y.num_columns()) { -23376: return false; -23376: } -23376: for (dimension_type i = x.num_rows(); i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: -23376: template -23376: bool -23376: operator!=(const Matrix& x, const Matrix& y) { -23376: return !(x == y); -23376: } -23376: -23376: } -23376: # 436 "../../src/Matrix_defs.hh" 2 -23376: # 30 "../../src/MIP_Problem_defs.hh" 2 -23376: # 42 "../../src/MIP_Problem_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: std::ostream& -23376: operator<<(std::ostream& s, const MIP_Problem& mip); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(MIP_Problem& x, MIP_Problem& y); -23376: -23376: } -23376: # 87 "../../src/MIP_Problem_defs.hh" -23376: class Parma_Polyhedra_Library::MIP_Problem { -23376: public: -23376: # 102 "../../src/MIP_Problem_defs.hh" -23376: explicit MIP_Problem(dimension_type dim = 0); -23376: # 140 "../../src/MIP_Problem_defs.hh" -23376: template -23376: MIP_Problem(dimension_type dim, -23376: In first, In last, -23376: const Variables_Set& int_vars, -23376: const Linear_Expression& obj = Linear_Expression::zero(), -23376: Optimization_Mode mode = MAXIMIZATION); -23376: # 178 "../../src/MIP_Problem_defs.hh" -23376: template -23376: MIP_Problem(dimension_type dim, -23376: In first, In last, -23376: const Linear_Expression& obj = Linear_Expression::zero(), -23376: Optimization_Mode mode = MAXIMIZATION); -23376: # 209 "../../src/MIP_Problem_defs.hh" -23376: MIP_Problem(dimension_type dim, -23376: const Constraint_System& cs, -23376: const Linear_Expression& obj = Linear_Expression::zero(), -23376: Optimization_Mode mode = MAXIMIZATION); -23376: -23376: -23376: MIP_Problem(const MIP_Problem& y); -23376: -23376: -23376: ~MIP_Problem(); -23376: -23376: -23376: MIP_Problem& operator=(const MIP_Problem& y); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: const Variables_Set& integer_space_dimensions() const; -23376: -23376: private: -23376: -23376: typedef std::vector Constraint_Sequence; -23376: -23376: public: -23376: -23376: class const_iterator { -23376: private: -23376: typedef Constraint_Sequence::const_iterator Base; -23376: typedef std::iterator_traits Base_Traits; -23376: -23376: public: -23376: typedef Base_Traits::iterator_category iterator_category; -23376: typedef Base_Traits::difference_type difference_type; -23376: typedef const Constraint value_type; -23376: typedef const Constraint* pointer; -23376: typedef const Constraint& reference; -23376: -23376: -23376: difference_type operator-(const const_iterator& y) const; -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: const_iterator& operator--(); -23376: -23376: -23376: const_iterator operator++(int); -23376: -23376: -23376: const_iterator operator--(int); -23376: -23376: -23376: const_iterator& operator+=(difference_type n); -23376: -23376: -23376: const_iterator& operator-=(difference_type n); -23376: -23376: -23376: const_iterator operator+(difference_type n) const; -23376: -23376: -23376: const_iterator operator-(difference_type n) const; -23376: -23376: -23376: reference operator*() const; -23376: -23376: -23376: pointer operator->() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& y) const; -23376: -23376: private: -23376: -23376: explicit const_iterator(Base b); -23376: -23376: -23376: Base itr; -23376: -23376: friend class MIP_Problem; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator constraints_begin() const; -23376: -23376: -23376: -23376: -23376: -23376: const_iterator constraints_end() const; -23376: -23376: -23376: const Linear_Expression& objective_function() const; -23376: -23376: -23376: Optimization_Mode optimization_mode() const; -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: # 348 "../../src/MIP_Problem_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 358 "../../src/MIP_Problem_defs.hh" -23376: void add_to_integer_space_dimensions(const Variables_Set& i_vars); -23376: # 367 "../../src/MIP_Problem_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 377 "../../src/MIP_Problem_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void set_objective_function(const Linear_Expression& obj); -23376: -23376: -23376: void set_optimization_mode(Optimization_Mode mode); -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_satisfiable() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: MIP_Problem_Status solve() const; -23376: # 423 "../../src/MIP_Problem_defs.hh" -23376: void evaluate_objective_function(const Generator& evaluating_point, -23376: Coefficient& numer, -23376: Coefficient& denom) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: const Generator& feasible_point() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const Generator& optimizing_point() const; -23376: # 451 "../../src/MIP_Problem_defs.hh" -23376: void optimal_value(Coefficient& numer, Coefficient& denom) const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: void m_swap(MIP_Problem& y); -23376: -23376: -23376: enum Control_Parameter_Name { -23376: -23376: PRICING -23376: }; -23376: -23376: -23376: enum Control_Parameter_Value { -23376: -23376: PRICING_STEEPEST_EDGE_FLOAT, -23376: -23376: PRICING_STEEPEST_EDGE_EXACT, -23376: -23376: PRICING_TEXTBOOK -23376: }; -23376: -23376: -23376: Control_Parameter_Value -23376: get_control_parameter(Control_Parameter_Name name) const; -23376: -23376: -23376: void set_control_parameter(Control_Parameter_Value value); -23376: -23376: private: -23376: -23376: dimension_type external_space_dim; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type internal_space_dim; -23376: -23376: -23376: typedef Sparse_Row Row; -23376: -23376: -23376: -23376: -23376: -23376: Matrix tableau; -23376: -23376: typedef Row working_cost_type; -23376: -23376: -23376: working_cost_type working_cost; -23376: # 530 "../../src/MIP_Problem_defs.hh" -23376: std::vector > mapping; -23376: -23376: -23376: std::vector base; -23376: -23376: -23376: enum Status { -23376: -23376: UNSATISFIABLE, -23376: -23376: SATISFIABLE, -23376: -23376: UNBOUNDED, -23376: -23376: OPTIMIZED, -23376: -23376: -23376: -23376: -23376: -23376: PARTIALLY_SATISFIABLE -23376: }; -23376: -23376: -23376: Status status; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Control_Parameter_Value pricing; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool initialized; -23376: -23376: -23376: std::vector input_cs; -23376: # 582 "../../src/MIP_Problem_defs.hh" -23376: dimension_type inherited_constraints; -23376: -23376: -23376: dimension_type first_pending_constraint; -23376: -23376: -23376: Linear_Expression input_obj_function; -23376: -23376: -23376: Optimization_Mode opt_mode; -23376: -23376: -23376: Generator last_generator; -23376: -23376: -23376: -23376: -23376: -23376: Variables_Set i_variables; -23376: -23376: -23376: struct RAII_Temporary_Real_Relaxation { -23376: MIP_Problem& lp; -23376: Variables_Set i_vars; -23376: -23376: RAII_Temporary_Real_Relaxation(MIP_Problem& mip) -23376: : lp(mip), i_vars() { -23376: -23376: using std::swap; -23376: swap(i_vars, lp.i_variables); -23376: } -23376: -23376: ~RAII_Temporary_Real_Relaxation() { -23376: -23376: using std::swap; -23376: swap(i_vars, lp.i_variables); -23376: } -23376: }; -23376: friend struct RAII_Temporary_Real_Relaxation; -23376: -23376: -23376: struct Inherit_Constraints {}; -23376: -23376: -23376: MIP_Problem(const MIP_Problem& y, Inherit_Constraints); -23376: -23376: -23376: void add_constraint_helper(const Constraint& c); -23376: -23376: -23376: void process_pending_constraints(); -23376: -23376: -23376: -23376: -23376: -23376: void second_phase(); -23376: # 654 "../../src/MIP_Problem_defs.hh" -23376: MIP_Problem_Status -23376: compute_tableau(std::vector& worked_out_row); -23376: # 708 "../../src/MIP_Problem_defs.hh" -23376: bool parse_constraints(dimension_type& additional_tableau_rows, -23376: dimension_type& additional_slack_variables, -23376: std::deque& is_tableau_constraint, -23376: std::deque& is_satisfied_inequality, -23376: std::deque& is_nonnegative_variable, -23376: std::deque& is_remergeable_variable) const; -23376: # 725 "../../src/MIP_Problem_defs.hh" -23376: dimension_type -23376: get_exiting_base_index(dimension_type entering_var_index) const; -23376: # 743 "../../src/MIP_Problem_defs.hh" -23376: static void linear_combine(Row& x, const Row& y, const dimension_type k); -23376: # 763 "../../src/MIP_Problem_defs.hh" -23376: static void linear_combine(Dense_Row& x, const Sparse_Row& y, -23376: const dimension_type k); -23376: -23376: -23376: -23376: static bool is_unbounded_obj_function( -23376: const Linear_Expression& obj_function, -23376: const std::vector >& mapping, -23376: Optimization_Mode optimization_mode); -23376: # 782 "../../src/MIP_Problem_defs.hh" -23376: void pivot(dimension_type entering_var_index, -23376: dimension_type exiting_base_index); -23376: # 794 "../../src/MIP_Problem_defs.hh" -23376: dimension_type textbook_entering_index() const; -23376: # 821 "../../src/MIP_Problem_defs.hh" -23376: dimension_type steepest_edge_exact_entering_index() const; -23376: # 834 "../../src/MIP_Problem_defs.hh" -23376: dimension_type steepest_edge_float_entering_index() const; -23376: # 844 "../../src/MIP_Problem_defs.hh" -23376: bool compute_simplex_using_exact_pricing(); -23376: # 855 "../../src/MIP_Problem_defs.hh" -23376: bool compute_simplex_using_steepest_edge_float(); -23376: # 873 "../../src/MIP_Problem_defs.hh" -23376: void erase_artificials(dimension_type begin_artificials, -23376: dimension_type end_artificials); -23376: -23376: bool is_in_base(dimension_type var_index, -23376: dimension_type& row_index) const; -23376: -23376: -23376: -23376: -23376: -23376: void compute_generator() const; -23376: # 897 "../../src/MIP_Problem_defs.hh" -23376: dimension_type merge_split_variable(dimension_type var_index); -23376: -23376: -23376: static bool is_satisfied(const Constraint& c, const Generator& g); -23376: -23376: -23376: static bool is_saturated(const Constraint& c, const Generator& g); -23376: # 924 "../../src/MIP_Problem_defs.hh" -23376: static MIP_Problem_Status solve_mip(bool& have_incumbent_solution, -23376: mpq_class& incumbent_solution_value, -23376: Generator& incumbent_solution_point, -23376: MIP_Problem& mip, -23376: const Variables_Set& i_vars); -23376: -23376: -23376: -23376: -23376: bool is_lp_satisfiable() const; -23376: # 949 "../../src/MIP_Problem_defs.hh" -23376: static bool is_mip_satisfiable(MIP_Problem& mip, -23376: const Variables_Set& i_vars, -23376: Generator& p); -23376: # 968 "../../src/MIP_Problem_defs.hh" -23376: static bool choose_branching_variable(const MIP_Problem& mip, -23376: const Variables_Set& i_vars, -23376: dimension_type& branching_index); -23376: }; -23376: -23376: # 1 "../../src/MIP_Problem_inlines.hh" 1 -23376: # 30 "../../src/MIP_Problem_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline dimension_type -23376: MIP_Problem::max_space_dimension() { -23376: return Constraint::max_space_dimension(); -23376: } -23376: -23376: inline dimension_type -23376: MIP_Problem::space_dimension() const { -23376: return external_space_dim; -23376: } -23376: -23376: -23376: inline -23376: MIP_Problem::MIP_Problem(const MIP_Problem& y) -23376: : external_space_dim(y.external_space_dim), -23376: internal_space_dim(y.internal_space_dim), -23376: tableau(y.tableau), -23376: working_cost(y.working_cost), -23376: mapping(y.mapping), -23376: base(y.base), -23376: status(y.status), -23376: pricing(y.pricing), -23376: initialized(y.initialized), -23376: input_cs(), -23376: inherited_constraints(0), -23376: first_pending_constraint(), -23376: input_obj_function(y.input_obj_function), -23376: opt_mode(y.opt_mode), -23376: last_generator(y.last_generator), -23376: i_variables(y.i_variables) { -23376: input_cs.reserve(y.input_cs.size()); -23376: for (Constraint_Sequence::const_iterator i = y.input_cs.begin(), -23376: i_end = y.input_cs.end(); i != i_end; ++i) { -23376: add_constraint_helper(*(*i)); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: MIP_Problem::MIP_Problem(const MIP_Problem& y, Inherit_Constraints) -23376: : external_space_dim(y.external_space_dim), -23376: internal_space_dim(y.internal_space_dim), -23376: tableau(y.tableau), -23376: working_cost(y.working_cost), -23376: mapping(y.mapping), -23376: base(y.base), -23376: status(y.status), -23376: pricing(y.pricing), -23376: initialized(y.initialized), -23376: input_cs(y.input_cs), -23376: -23376: inherited_constraints(y.input_cs.size()), -23376: first_pending_constraint(y.first_pending_constraint), -23376: input_obj_function(y.input_obj_function), -23376: opt_mode(y.opt_mode), -23376: last_generator(y.last_generator), -23376: i_variables(y.i_variables) { -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: MIP_Problem::add_constraint_helper(const Constraint& c) { -23376: -23376: const dimension_type size = input_cs.size(); -23376: if (size == input_cs.capacity()) { -23376: const dimension_type max_size = input_cs.max_size(); -23376: if (size == max_size) { -23376: throw std::length_error("MIP_Problem::add_constraint(): " -23376: "too many constraints"); -23376: } -23376: -23376: input_cs.reserve(compute_capacity(size + 1, max_size)); -23376: } -23376: -23376: -23376: -23376: input_cs.push_back(new Constraint(c)); -23376: } -23376: -23376: inline -23376: MIP_Problem::~MIP_Problem() { -23376: -23376: -23376: for (Constraint_Sequence::const_iterator -23376: i = nth_iter(input_cs, inherited_constraints), -23376: i_end = input_cs.end(); i != i_end; ++i) { -23376: delete *i; -23376: } -23376: } -23376: -23376: -23376: inline void -23376: MIP_Problem::set_optimization_mode(const Optimization_Mode mode) { -23376: if (opt_mode != mode) { -23376: opt_mode = mode; -23376: if (status == UNBOUNDED || status == OPTIMIZED) { -23376: status = SATISFIABLE; -23376: } -23376: ((void) 0); -23376: } -23376: } -23376: -23376: inline const Linear_Expression& -23376: MIP_Problem::objective_function() const { -23376: return input_obj_function; -23376: } -23376: -23376: inline Optimization_Mode -23376: MIP_Problem::optimization_mode() const { -23376: return opt_mode; -23376: } -23376: -23376: inline void -23376: MIP_Problem::optimal_value(Coefficient& numer, Coefficient& denom) const { -23376: const Generator& g = optimizing_point(); -23376: evaluate_objective_function(g, numer, denom); -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::constraints_begin() const { -23376: return const_iterator(input_cs.begin()); -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::constraints_end() const { -23376: return const_iterator(input_cs.end()); -23376: } -23376: -23376: inline const Variables_Set& -23376: MIP_Problem::integer_space_dimensions() const { -23376: return i_variables; -23376: } -23376: -23376: inline MIP_Problem::Control_Parameter_Value -23376: MIP_Problem::get_control_parameter(Control_Parameter_Name name) const { -23376: (void)(name); -23376: ((void) 0); -23376: return pricing; -23376: } -23376: -23376: inline void -23376: MIP_Problem::set_control_parameter(Control_Parameter_Value value) { -23376: pricing = value; -23376: } -23376: -23376: inline void -23376: MIP_Problem::m_swap(MIP_Problem& y) { -23376: using std::swap; -23376: swap(external_space_dim, y.external_space_dim); -23376: swap(internal_space_dim, y.internal_space_dim); -23376: swap(tableau, y.tableau); -23376: swap(working_cost, y.working_cost); -23376: swap(mapping, y.mapping); -23376: swap(initialized, y.initialized); -23376: swap(base, y.base); -23376: swap(status, y.status); -23376: swap(pricing, y.pricing); -23376: swap(input_cs, y.input_cs); -23376: swap(inherited_constraints, y.inherited_constraints); -23376: swap(first_pending_constraint, y.first_pending_constraint); -23376: swap(input_obj_function, y.input_obj_function); -23376: swap(opt_mode, y.opt_mode); -23376: swap(last_generator, y.last_generator); -23376: swap(i_variables, y.i_variables); -23376: } -23376: -23376: inline MIP_Problem& -23376: MIP_Problem::operator=(const MIP_Problem& y) { -23376: MIP_Problem tmp(y); -23376: m_swap(tmp); -23376: return *this; -23376: } -23376: -23376: inline void -23376: MIP_Problem::clear() { -23376: MIP_Problem tmp; -23376: m_swap(tmp); -23376: } -23376: -23376: -23376: inline memory_size_type -23376: MIP_Problem::external_memory_in_bytes() const { -23376: memory_size_type n -23376: = working_cost.external_memory_in_bytes() -23376: + tableau.external_memory_in_bytes() -23376: + input_obj_function.external_memory_in_bytes() -23376: + last_generator.external_memory_in_bytes(); -23376: -23376: -23376: -23376: n += input_cs.capacity() * sizeof(Constraint*); -23376: for (Constraint_Sequence::const_iterator -23376: i = nth_iter(input_cs, inherited_constraints), -23376: i_end = input_cs.end(); i != i_end; ++i) { -23376: n += ((*i)->total_memory_in_bytes()); -23376: } -23376: -23376: -23376: n += base.capacity() * sizeof(dimension_type); -23376: -23376: n += mapping.capacity() * sizeof(std::pair); -23376: return n; -23376: } -23376: -23376: inline memory_size_type -23376: MIP_Problem::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline -23376: MIP_Problem::const_iterator::const_iterator(Base b) -23376: : itr(b) { -23376: } -23376: -23376: inline MIP_Problem::const_iterator::difference_type -23376: MIP_Problem::const_iterator::operator-(const const_iterator& y) const { -23376: return itr - y.itr; -23376: } -23376: -23376: inline MIP_Problem::const_iterator& -23376: MIP_Problem::const_iterator::operator++() { -23376: ++itr; -23376: return *this; -23376: } -23376: -23376: inline MIP_Problem::const_iterator& -23376: MIP_Problem::const_iterator::operator--() { -23376: --itr; -23376: return *this; -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::const_iterator::operator++(int) { -23376: const_iterator x = *this; -23376: operator++(); -23376: return x; -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::const_iterator::operator--(int) { -23376: const_iterator x = *this; -23376: operator--(); -23376: return x; -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::const_iterator::operator+(difference_type n) const { -23376: return const_iterator(itr + n); -23376: } -23376: -23376: inline MIP_Problem::const_iterator -23376: MIP_Problem::const_iterator::operator-(difference_type n) const { -23376: return const_iterator(itr - n); -23376: } -23376: -23376: inline MIP_Problem::const_iterator& -23376: MIP_Problem::const_iterator::operator+=(difference_type n) { -23376: itr += n; -23376: return *this; -23376: } -23376: -23376: inline MIP_Problem::const_iterator& -23376: MIP_Problem::const_iterator::operator-=(difference_type n) { -23376: itr -= n; -23376: return *this; -23376: } -23376: -23376: inline MIP_Problem::const_iterator::reference -23376: MIP_Problem::const_iterator::operator*() const { -23376: return *(*itr); -23376: } -23376: -23376: inline MIP_Problem::const_iterator::pointer -23376: MIP_Problem::const_iterator::operator->() const { -23376: return *itr; -23376: } -23376: -23376: inline bool -23376: MIP_Problem::const_iterator::operator==(const const_iterator& y) const { -23376: return itr == y.itr; -23376: } -23376: -23376: inline bool -23376: MIP_Problem::const_iterator::operator!=(const const_iterator& y) const { -23376: return itr != y.itr; -23376: } -23376: -23376: -23376: inline void -23376: swap(MIP_Problem& x, MIP_Problem& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 974 "../../src/MIP_Problem_defs.hh" 2 -23376: # 1 "../../src/MIP_Problem_templates.hh" 1 -23376: # 29 "../../src/MIP_Problem_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: MIP_Problem::MIP_Problem(const dimension_type dim, -23376: In first, In last, -23376: const Variables_Set& int_vars, -23376: const Linear_Expression& obj, -23376: const Optimization_Mode mode) -23376: : external_space_dim(dim), -23376: internal_space_dim(0), -23376: tableau(), -23376: working_cost(0), -23376: mapping(), -23376: base(), -23376: status(PARTIALLY_SATISFIABLE), -23376: pricing(PRICING_STEEPEST_EDGE_FLOAT), -23376: initialized(false), -23376: input_cs(), -23376: inherited_constraints(0), -23376: first_pending_constraint(0), -23376: input_obj_function(obj), -23376: opt_mode(mode), -23376: last_generator(point()), -23376: i_variables(int_vars) { -23376: -23376: -23376: if (i_variables.space_dimension() > external_space_dim) { -23376: std::ostringstream s; -23376: s << "PPL::MIP_Problem::MIP_Problem" -23376: << "(dim, first, last, int_vars, obj, mode):\n" -23376: << "dim == "<< external_space_dim << " and int_vars.space_dimension() ==" -23376: << " " << i_variables.space_dimension() << " are dimension" -23376: "incompatible."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: if (dim > max_space_dimension()) { -23376: throw std::length_error("PPL::MIP_Problem:: MIP_Problem(dim, first, " -23376: "last, int_vars, obj, mode):\n" -23376: "dim exceeds the maximum allowed" -23376: "space dimension."); -23376: } -23376: -23376: if (obj.space_dimension() > dim) { -23376: std::ostringstream s; -23376: s << "PPL::MIP_Problem::MIP_Problem(dim, first, last," -23376: << "int_vars, obj, mode):\n" -23376: << "obj.space_dimension() == "<< obj.space_dimension() -23376: << " exceeds d == "<< dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: try { -23376: for (In i = first; i != last; ++i) { -23376: if (i->is_strict_inequality()) { -23376: throw std::invalid_argument("PPL::MIP_Problem::" -23376: "MIP_Problem(dim, first, last, int_vars," -23376: "obj, mode):\nrange [first, last) contains" -23376: "a strict inequality constraint."); -23376: } -23376: if (i->space_dimension() > dim) { -23376: std::ostringstream s; -23376: s << "PPL::MIP_Problem::" -23376: << "MIP_Problem(dim, first, last, int_vars, obj, mode):\n" -23376: << "range [first, last) contains a constraint having space" -23376: << "dimension == " << i->space_dimension() << " that exceeds" -23376: "this->space_dimension == " << dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: add_constraint_helper(*i); -23376: } -23376: } catch (...) { -23376: -23376: -23376: for (Constraint_Sequence::const_iterator -23376: i = input_cs.begin(), i_end = input_cs.end(); -23376: i != i_end; ++i) { -23376: delete *i; -23376: } -23376: -23376: throw; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: MIP_Problem::MIP_Problem(dimension_type dim, -23376: In first, In last, -23376: const Linear_Expression& obj, -23376: Optimization_Mode mode) -23376: : external_space_dim(dim), -23376: internal_space_dim(0), -23376: tableau(), -23376: working_cost(0), -23376: mapping(), -23376: base(), -23376: status(PARTIALLY_SATISFIABLE), -23376: pricing(PRICING_STEEPEST_EDGE_FLOAT), -23376: initialized(false), -23376: input_cs(), -23376: inherited_constraints(0), -23376: first_pending_constraint(0), -23376: input_obj_function(obj), -23376: opt_mode(mode), -23376: last_generator(point()), -23376: i_variables() { -23376: -23376: if (dim > max_space_dimension()) { -23376: throw std::length_error("PPL::MIP_Problem::" -23376: "MIP_Problem(dim, first, last, obj, mode):\n" -23376: "dim exceeds the maximum allowed space " -23376: "dimension."); -23376: } -23376: -23376: if (obj.space_dimension() > dim) { -23376: std::ostringstream s; -23376: s << "PPL::MIP_Problem::MIP_Problem(dim, first, last," -23376: << " obj, mode):\n" -23376: << "obj.space_dimension() == "<< obj.space_dimension() -23376: << " exceeds d == "<< dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: try { -23376: for (In i = first; i != last; ++i) { -23376: if (i->is_strict_inequality()) { -23376: throw std::invalid_argument("PPL::MIP_Problem::" -23376: "MIP_Problem(dim, first, last, obj, mode):" -23376: "\n" -23376: "range [first, last) contains a strict " -23376: "inequality constraint."); -23376: } -23376: if (i->space_dimension() > dim) { -23376: std::ostringstream s; -23376: s << "PPL::MIP_Problem::" -23376: << "MIP_Problem(dim, first, last, obj, mode):\n" -23376: << "range [first, last) contains a constraint having space" -23376: << "dimension" << " == " << i->space_dimension() << " that exceeds" -23376: "this->space_dimension == " << dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: add_constraint_helper(*i); -23376: } -23376: } catch (...) { -23376: -23376: -23376: for (Constraint_Sequence::const_iterator -23376: i = input_cs.begin(), i_end = input_cs.end(); -23376: i != i_end; ++i) { -23376: delete *i; -23376: } -23376: -23376: throw; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: } -23376: # 975 "../../src/MIP_Problem_defs.hh" 2 -23376: # 29 "../../src/Polyhedron_templates.hh" 2 -23376: -23376: -23376: -23376: # 1 "../../src/Floating_Point_Expression_defs.hh" 1 -23376: # 27 "../../src/Floating_Point_Expression_defs.hh" -23376: # 1 "../../src/Floating_Point_Expression_types.hh" 1 -23376: # 16 "../../src/Floating_Point_Expression_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class Floating_Point_Expression; -23376: -23376: } -23376: # 28 "../../src/Floating_Point_Expression_defs.hh" 2 -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: # 32 "../../src/Floating_Point_Expression_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: # 54 "../../src/Floating_Point_Expression_defs.hh" -23376: template -23376: class Floating_Point_Expression { -23376: -23376: public: -23376: -23376: -23376: typedef Linear_Form FP_Linear_Form; -23376: # 70 "../../src/Floating_Point_Expression_defs.hh" -23376: typedef Box FP_Interval_Abstract_Store; -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef std::map -23376: FP_Linear_Form_Abstract_Store; -23376: -23376: -23376: typedef typename FP_Interval_Type::boundary_type boundary_type; -23376: -23376: -23376: typedef typename FP_Interval_Type::info_type info_type; -23376: -23376: -23376: virtual ~Floating_Point_Expression(); -23376: # 114 "../../src/Floating_Point_Expression_defs.hh" -23376: virtual bool linearize(const FP_Interval_Abstract_Store& int_store, -23376: const FP_Linear_Form_Abstract_Store& lf_store, -23376: FP_Linear_Form& result) const = 0; -23376: # 126 "../../src/Floating_Point_Expression_defs.hh" -23376: static FP_Interval_Type absolute_error; -23376: # 136 "../../src/Floating_Point_Expression_defs.hh" -23376: static bool overflows(const FP_Linear_Form& lf); -23376: # 163 "../../src/Floating_Point_Expression_defs.hh" -23376: static void relative_error(const FP_Linear_Form& lf, -23376: FP_Linear_Form& result); -23376: # 183 "../../src/Floating_Point_Expression_defs.hh" -23376: static void intervalize(const FP_Linear_Form& lf, -23376: const FP_Interval_Abstract_Store& store, -23376: FP_Interval_Type& result); -23376: -23376: private: -23376: # 198 "../../src/Floating_Point_Expression_defs.hh" -23376: static FP_Interval_Type compute_absolute_error(); -23376: -23376: }; -23376: -23376: -23376: template -23376: FP_Interval_Type Floating_Point_Expression -23376: ::absolute_error = compute_absolute_error(); -23376: -23376: } -23376: -23376: # 1 "../../src/Floating_Point_Expression_inlines.hh" 1 -23376: # 30 "../../src/Floating_Point_Expression_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Floating_Point_Expression -23376: ::~Floating_Point_Expression() {} -23376: -23376: template -23376: inline bool -23376: Floating_Point_Expression -23376: ::overflows(const FP_Linear_Form& lf) { -23376: if (!lf.inhomogeneous_term().is_bounded()) { -23376: return true; -23376: } -23376: -23376: dimension_type dimension = lf.space_dimension(); -23376: for (dimension_type i = 0; i < dimension; ++i) { -23376: if (!lf.coefficient(Variable(i)).is_bounded()) { -23376: return true; -23376: } -23376: } -23376: -23376: return false; -23376: } -23376: -23376: } -23376: # 210 "../../src/Floating_Point_Expression_defs.hh" 2 -23376: # 1 "../../src/Floating_Point_Expression_templates.hh" 1 -23376: # 29 "../../src/Floating_Point_Expression_templates.hh" -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: # 30 "../../src/Floating_Point_Expression_templates.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: void -23376: Floating_Point_Expression -23376: ::relative_error(const FP_Linear_Form& lf, FP_Linear_Form& result) { -23376: -23376: FP_Interval_Type error_propagator; -23376: boundary_type lb = -pow(FP_Format::BASE, -23376: -static_cast -23376: ::boundary_type>(FP_Format::MANTISSA_BITS)); -23376: error_propagator.build(i_constraint(GREATER_OR_EQUAL, lb), -23376: i_constraint(LESS_OR_EQUAL, -lb)); -23376: -23376: -23376: const FP_Interval_Type* current_term = &lf.inhomogeneous_term(); -23376: -23376: # 47 "../../src/Floating_Point_Expression_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 47 "../../src/Floating_Point_Expression_templates.hh" -23376: ; -23376: -23376: FP_Interval_Type -23376: current_multiplier(std::max(std::abs(current_term->lower()), -23376: std::abs(current_term->upper()))); -23376: FP_Linear_Form current_result_term(current_multiplier); -23376: current_result_term *= error_propagator; -23376: result = FP_Linear_Form(current_result_term); -23376: -23376: -23376: dimension_type dimension = lf.space_dimension(); -23376: for (dimension_type i = 0; i < dimension; ++i) { -23376: current_term = &lf.coefficient(Variable(i)); -23376: -23376: # 60 "../../src/Floating_Point_Expression_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 60 "../../src/Floating_Point_Expression_templates.hh" -23376: ; -23376: current_multiplier -23376: = FP_Interval_Type(std::max(std::abs(current_term->lower()), -23376: std::abs(current_term->upper()))); -23376: current_result_term = FP_Linear_Form(Variable(i)); -23376: current_result_term *= current_multiplier; -23376: current_result_term *= error_propagator; -23376: result += current_result_term; -23376: } -23376: -23376: return; -23376: } -23376: -23376: template -23376: void -23376: Floating_Point_Expression -23376: ::intervalize(const FP_Linear_Form& lf, -23376: const FP_Interval_Abstract_Store& store, -23376: FP_Interval_Type& result) { -23376: result = FP_Interval_Type(lf.inhomogeneous_term()); -23376: dimension_type dimension = lf.space_dimension(); -23376: -23376: # 81 "../../src/Floating_Point_Expression_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 81 "../../src/Floating_Point_Expression_templates.hh" -23376: ; -23376: for (dimension_type i = 0; i < dimension; ++i) { -23376: FP_Interval_Type current_addend = lf.coefficient(Variable(i)); -23376: const FP_Interval_Type& curr_int = store.get_interval(Variable(i)); -23376: current_addend *= curr_int; -23376: result += current_addend; -23376: } -23376: -23376: return; -23376: } -23376: -23376: template -23376: FP_Interval_Type -23376: Floating_Point_Expression -23376: ::compute_absolute_error() { -23376: typedef typename Floating_Point_Expression -23376: ::boundary_type Boundary; -23376: boundary_type omega; -23376: omega = std::max(pow(static_cast(FP_Format::BASE), -23376: static_cast(1 - FP_Format::EXPONENT_BIAS -23376: - FP_Format::MANTISSA_BITS)), -23376: std::numeric_limits::denorm_min()); -23376: FP_Interval_Type result; -23376: result.build(i_constraint(GREATER_OR_EQUAL, -omega), -23376: i_constraint(LESS_OR_EQUAL, omega)); -23376: return result; -23376: } -23376: -23376: } -23376: # 211 "../../src/Floating_Point_Expression_defs.hh" 2 -23376: # 33 "../../src/Polyhedron_templates.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Polyhedron::Polyhedron(Topology topol, -23376: const Box& box, -23376: Complexity_Class) -23376: : con_sys(topol, default_con_sys_repr), -23376: gen_sys(topol, default_gen_sys_repr), -23376: sat_c(), -23376: sat_g() { -23376: -23376: space_dim = box.space_dimension(); -23376: -23376: -23376: if (box.is_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: if (space_dim == 0) { -23376: set_zero_dim_univ(); -23376: return; -23376: } -23376: -23376: -23376: con_sys.set_space_dimension(space_dim); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item(); -23376: -23376: if (topol == NECESSARILY_CLOSED) { -23376: for (dimension_type k = space_dim; k-- > 0; ) { -23376: const Variable v_k = Variable(k); -23376: -23376: bool l_closed = false; -23376: bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed); -23376: -23376: bool u_closed = false; -23376: bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed); -23376: -23376: -23376: if (l_bounded && u_bounded -23376: && l_closed && u_closed -23376: && l_n == u_n && l_d == u_d) { -23376: -23376: con_sys.insert(l_d * v_k == l_n); -23376: } -23376: else { -23376: if (l_bounded) { -23376: -23376: con_sys.insert(l_d * v_k >= l_n); -23376: } -23376: if (u_bounded) { -23376: -23376: con_sys.insert(u_d * v_k <= u_n); -23376: } -23376: } -23376: } -23376: } -23376: else { -23376: -23376: for (dimension_type k = space_dim; k-- > 0; ) { -23376: const Variable v_k = Variable(k); -23376: -23376: bool l_closed = false; -23376: bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed); -23376: -23376: bool u_closed = false; -23376: bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed); -23376: -23376: -23376: if (l_bounded && u_bounded -23376: && l_closed && u_closed -23376: && l_n == u_n && l_d == u_d) { -23376: -23376: con_sys.insert(l_d * v_k == l_n); -23376: } -23376: else { -23376: -23376: if (l_bounded) { -23376: if (l_closed) { -23376: -23376: con_sys.insert(l_d * v_k >= l_n); -23376: } -23376: else { -23376: -23376: con_sys.insert(l_d * v_k > l_n); -23376: } -23376: } -23376: -23376: if (u_bounded) { -23376: if (u_closed) { -23376: -23376: con_sys.insert(u_d * v_k <= u_n); -23376: } -23376: else { -23376: -23376: con_sys.insert(u_d * v_k < u_n); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: con_sys.add_low_level_constraints(); -23376: -23376: -23376: set_constraints_up_to_date(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::map_space_dimensions(const Partial_Function& pfunc) { -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: if (pfunc.has_empty_codomain()) { -23376: -23376: if (marked_empty() -23376: || (has_pending_constraints() -23376: && !remove_pending_to_obtain_generators()) -23376: || (!generators_are_up_to_date() && !update_generators())) { -23376: -23376: space_dim = 0; -23376: con_sys.clear(); -23376: } -23376: else { -23376: -23376: set_zero_dim_univ(); -23376: } -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: const dimension_type new_space_dimension = pfunc.max_in_codomain() + 1; -23376: -23376: if (new_space_dimension == space_dim) { -23376: -23376: -23376: -23376: -23376: -23376: std::vector cycle; -23376: cycle.reserve(space_dim); -23376: -23376: -23376: std::deque visited(space_dim); -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: if (visited[i]) { -23376: continue; -23376: } -23376: -23376: dimension_type j = i; -23376: do { -23376: visited[j] = true; -23376: -23376: dimension_type k = 0; -23376: if (!pfunc.maps(j, k)) { -23376: throw_invalid_argument("map_space_dimensions(pfunc)", -23376: " pfunc is inconsistent"); -23376: } -23376: if (k == j) { -23376: break; -23376: } -23376: -23376: cycle.push_back(Variable(j)); -23376: -23376: j = k; -23376: } while (!visited[j]); -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (constraints_are_up_to_date()) { -23376: con_sys.permute_space_dimensions(cycle); -23376: } -23376: -23376: if (generators_are_up_to_date()) { -23376: gen_sys.permute_space_dimensions(cycle); -23376: } -23376: -23376: cycle.clear(); -23376: } -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const Generator_System& old_gensys = generators(); -23376: -23376: if (old_gensys.has_no_rows()) { -23376: -23376: Polyhedron new_polyhedron(topology(), new_space_dimension, EMPTY); -23376: m_swap(new_polyhedron); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: std::vector pfunc_maps(space_dim, not_a_dimension()); -23376: for (dimension_type j = space_dim; j-- > 0; ) { -23376: dimension_type pfunc_j; -23376: if (pfunc.maps(j, pfunc_j)) { -23376: pfunc_maps[j] = pfunc_j; -23376: } -23376: } -23376: -23376: Generator_System new_gensys; -23376: for (Generator_System::const_iterator i = old_gensys.begin(), -23376: old_gensys_end = old_gensys.end(); i != old_gensys_end; ++i) { -23376: const Generator& old_g = *i; -23376: const Generator::expr_type old_e = old_g.expression(); -23376: Linear_Expression expr; -23376: expr.set_space_dimension(new_space_dimension); -23376: bool all_zeroes = true; -23376: for (Generator::expr_type::const_iterator j = old_e.begin(), -23376: j_end = old_e.end(); j != j_end; ++j) { -23376: const dimension_type mapped_id = pfunc_maps[j.variable().id()]; -23376: if (mapped_id != not_a_dimension()) { -23376: add_mul_assign(expr, *j, Variable(mapped_id)); -23376: all_zeroes = false; -23376: } -23376: } -23376: switch (old_g.type()) { -23376: case Generator::LINE: -23376: if (!all_zeroes) { -23376: new_gensys.insert(line(expr)); -23376: } -23376: break; -23376: case Generator::RAY: -23376: if (!all_zeroes) { -23376: new_gensys.insert(ray(expr)); -23376: } -23376: break; -23376: case Generator::POINT: -23376: -23376: new_gensys.insert(point(expr, old_g.divisor())); -23376: break; -23376: case Generator::CLOSURE_POINT: -23376: -23376: new_gensys.insert(closure_point(expr, old_g.divisor())); -23376: break; -23376: } -23376: } -23376: Polyhedron new_polyhedron(topology(), new_gensys); -23376: m_swap(new_polyhedron); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: const bool is_strict) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_308 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: -23376: -23376: const dimension_type left_space_dim = left.space_dimension(); -23376: if (space_dim < left_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(l1, l2, s)", "l1", left); -23376: } -23376: -23376: const dimension_type right_space_dim = right.space_dimension(); -23376: if (space_dim < right_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(l1, l2, s)", "l2", right); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: typedef Interval FP_Interval_Type; -23376: typedef Linear_Form FP_Linear_Form; -23376: -23376: if (Floating_Point_Expression:: -23376: overflows(left)) { -23376: return; -23376: } -23376: -23376: if (Floating_Point_Expression:: -23376: overflows(right)) { -23376: return; -23376: } -23376: -23376: -23376: FP_Linear_Form left_minus_right(left); -23376: left_minus_right -= right; -23376: if (Floating_Point_Expression:: -23376: overflows(left_minus_right)) { -23376: return; -23376: } -23376: -23376: dimension_type lf_space_dim = left_minus_right.space_dimension(); -23376: FP_Linear_Form lf_approx; -23376: overapproximate_linear_form(left_minus_right, lf_space_dim, lf_approx); -23376: if (Floating_Point_Expression:: -23376: overflows(lf_approx)) { -23376: return; -23376: } -23376: -23376: -23376: Linear_Expression lf_approx_le; -23376: convert_to_integer_expression(lf_approx, lf_space_dim, lf_approx_le); -23376: -23376: -23376: if (!is_strict || is_necessarily_closed()) { -23376: refine_with_constraint(lf_approx_le <= 0); -23376: } -23376: else { -23376: refine_with_constraint(lf_approx_le < 0); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::affine_form_image(const Variable var, -23376: const Linear_Form >& lf) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_378 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: -23376: const dimension_type lf_space_dim = lf.space_dimension(); -23376: if (space_dim < lf_space_dim) { -23376: throw_dimension_incompatible("affine_form_image(v, l, s)", "l", lf); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("affine_form_image(v, l, s)", "v", var); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: typedef Interval FP_Interval_Type; -23376: typedef Linear_Form FP_Linear_Form; -23376: -23376: if (Floating_Point_Expression:: -23376: overflows(lf)) { -23376: *this = Polyhedron(topology(), space_dim, UNIVERSE); -23376: return; -23376: } -23376: -23376: -23376: FP_Linear_Form lf_approx; -23376: overapproximate_linear_form(lf, lf_space_dim, lf_approx); -23376: -23376: if (Floating_Point_Expression:: -23376: overflows(lf_approx)) { -23376: *this = Polyhedron(topology(), space_dim, UNIVERSE); -23376: return; -23376: } -23376: -23376: -23376: Linear_Expression lf_approx_le; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lo_coeff; Parma_Polyhedra_Library::Coefficient& lo_coeff = holder_lo_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_hi_coeff; Parma_Polyhedra_Library::Coefficient& hi_coeff = holder_hi_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denominator; Parma_Polyhedra_Library::Coefficient& denominator = holder_denominator.item(); -23376: convert_to_integer_expressions(lf_approx, lf_space_dim, lf_approx_le, -23376: lo_coeff, hi_coeff, denominator); -23376: -23376: -23376: bounded_affine_image(var, lf_approx_le + lo_coeff, lf_approx_le + hi_coeff, -23376: denominator); -23376: } -23376: -23376: template -23376: void -23376: Polyhedron -23376: ::overapproximate_linear_form(const Linear_Form >& lf, -23376: const dimension_type lf_dimension, -23376: Linear_Form >& result) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_438 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: typedef Interval FP_Interval_Type; -23376: typedef Linear_Form FP_Linear_Form; -23376: -23376: -23376: -23376: Box box(*this); -23376: -23376: result = FP_Linear_Form(lf.inhomogeneous_term()); -23376: -23376: const FP_Interval_Type aux_divisor1(static_cast(0.5)); -23376: FP_Interval_Type aux_divisor2(aux_divisor1); -23376: aux_divisor2.lower() = static_cast(-0.5); -23376: -23376: for (dimension_type i = 0; i < lf_dimension; ++i) { -23376: Variable curr_var(i); -23376: const FP_Interval_Type& curr_coeff = lf.coefficient(curr_var); -23376: ((void) 0); -23376: FP_Format curr_lb = curr_coeff.lower(); -23376: FP_Format curr_ub = curr_coeff.upper(); -23376: if (curr_lb != 0 || curr_ub != 0) { -23376: const FP_Interval_Type& curr_int = box.get_interval(curr_var); -23376: FP_Interval_Type curr_addend(curr_ub - curr_lb); -23376: curr_addend *= aux_divisor2; -23376: curr_addend *= curr_int; -23376: result += curr_addend; -23376: curr_addend = FP_Interval_Type(curr_lb + curr_ub); -23376: curr_addend *= aux_divisor1; -23376: FP_Linear_Form curr_addend_lf(curr_var); -23376: curr_addend_lf *= curr_addend; -23376: result += curr_addend_lf; -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::convert_to_integer_expression( -23376: const Linear_Form >& lf, -23376: const dimension_type lf_dimension, -23376: Linear_Expression& result) { -23376: result = Linear_Expression(); -23376: -23376: typedef Interval FP_Interval_Type; -23376: std::vector numerators(lf_dimension+1); -23376: std::vector denominators(lf_dimension+1); -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item(); -23376: lcm = 1; -23376: const FP_Interval_Type& b = lf.inhomogeneous_term(); -23376: -23376: numer_denom(b.lower(), numerators[lf_dimension], -23376: denominators[lf_dimension]); -23376: if (numerators[lf_dimension] != 0) { -23376: lcm_assign(lcm, lcm, denominators[lf_dimension]); -23376: } -23376: -23376: for (dimension_type i = 0; i < lf_dimension; ++i) { -23376: const FP_Interval_Type& curr_int = lf.coefficient(Variable(i)); -23376: numer_denom(curr_int.lower(), numerators[i], denominators[i]); -23376: if (numerators[i] != 0) { -23376: lcm_assign(lcm, lcm, denominators[i]); -23376: } -23376: } -23376: -23376: for (dimension_type i = 0; i < lf_dimension; ++i) { -23376: if (numerators[i] != 0) { -23376: exact_div_assign(denominators[i], lcm, denominators[i]); -23376: numerators[i] *= denominators[i]; -23376: result += numerators[i] * Variable(i); -23376: } -23376: } -23376: -23376: if (numerators[lf_dimension] != 0) { -23376: exact_div_assign(denominators[lf_dimension], -23376: lcm, denominators[lf_dimension]); -23376: numerators[lf_dimension] *= denominators[lf_dimension]; -23376: result += numerators[lf_dimension]; -23376: } -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::convert_to_integer_expressions( -23376: const Linear_Form >& lf, -23376: const dimension_type lf_dimension, Linear_Expression& res, -23376: Coefficient& res_low_coeff, Coefficient& res_hi_coeff, -23376: Coefficient& denominator) { -23376: res = Linear_Expression(); -23376: -23376: typedef Interval FP_Interval_Type; -23376: std::vector numerators(lf_dimension+2); -23376: std::vector denominators(lf_dimension+2); -23376: -23376: -23376: -23376: Coefficient& lcm = denominator; -23376: lcm = 1; -23376: const FP_Interval_Type& b = lf.inhomogeneous_term(); -23376: numer_denom(b.lower(), numerators[lf_dimension], denominators[lf_dimension]); -23376: -23376: if (numerators[lf_dimension] != 0) { -23376: lcm_assign(lcm, lcm, denominators[lf_dimension]); -23376: } -23376: -23376: numer_denom(b.upper(), numerators[lf_dimension+1], -23376: denominators[lf_dimension+1]); -23376: if (numerators[lf_dimension+1] != 0) { -23376: lcm_assign(lcm, lcm, denominators[lf_dimension+1]); -23376: } -23376: -23376: for (dimension_type i = 0; i < lf_dimension; ++i) { -23376: const FP_Interval_Type& curr_int = lf.coefficient(Variable(i)); -23376: numer_denom(curr_int.lower(), numerators[i], denominators[i]); -23376: if (numerators[i] != 0) { -23376: lcm_assign(lcm, lcm, denominators[i]); -23376: } -23376: } -23376: -23376: for (dimension_type i = 0; i < lf_dimension; ++i) { -23376: if (numerators[i] != 0) { -23376: exact_div_assign(denominators[i], lcm, denominators[i]); -23376: numerators[i] *= denominators[i]; -23376: res += numerators[i] * Variable(i); -23376: } -23376: } -23376: -23376: if (numerators[lf_dimension] != 0) { -23376: exact_div_assign(denominators[lf_dimension], -23376: lcm, denominators[lf_dimension]); -23376: numerators[lf_dimension] *= denominators[lf_dimension]; -23376: res_low_coeff = numerators[lf_dimension]; -23376: } -23376: else { -23376: res_low_coeff = 0; -23376: } -23376: -23376: if (numerators[lf_dimension+1] != 0) { -23376: exact_div_assign(denominators[lf_dimension+1], -23376: lcm, denominators[lf_dimension+1]); -23376: numerators[lf_dimension+1] *= denominators[lf_dimension+1]; -23376: res_hi_coeff = numerators[lf_dimension+1]; -23376: } -23376: else { -23376: res_hi_coeff = 0; -23376: } -23376: } -23376: -23376: template -23376: void -23376: Polyhedron::throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const { -23376: throw_dimension_incompatible(method, lf_name, lf.space_dimension()); -23376: } -23376: -23376: template -23376: Input& -23376: Polyhedron::check_obj_space_dimension_overflow(Input& input, -23376: const Topology topol, -23376: const char* method, -23376: const char* reason) { -23376: check_space_dimension_overflow(input.space_dimension(), -23376: max_space_dimension(), -23376: topol, method, reason); -23376: return input; -23376: } -23376: -23376: } -23376: # 2858 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_chdims_templates.hh" 1 -23376: # 28 "../../src/Polyhedron_chdims_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: void -23376: Polyhedron::add_space_dimensions(Linear_System1& sys1, -23376: Linear_System2& sys2, -23376: Bit_Matrix& sat1, -23376: Bit_Matrix& sat2, -23376: dimension_type add_dim) { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: sys1.set_space_dimension(sys1.space_dimension() + add_dim); -23376: sys2.add_universe_rows_and_space_dimensions(add_dim); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: sat1.resize(sat1.num_rows() + add_dim, sat1.num_columns()); -23376: -23376: for (dimension_type i = sat1.num_rows() - add_dim; i-- > 0; ) { -23376: swap(sat1[i], sat1[i+add_dim]); -23376: } -23376: -23376: sat2.transpose_assign(sat1); -23376: } -23376: -23376: } -23376: # 2859 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_conversion_templates.hh" 1 -23376: # 29 "../../src/Polyhedron_conversion_templates.hh" -23376: # 1 "../../src/Polyhedron_defs.hh" 1 -23376: # 30 "../../src/Polyhedron_conversion_templates.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 37 "../../src/Polyhedron_conversion_templates.hh" 2 -23376: # 52 "../../src/Polyhedron_conversion_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 367 "../../src/Polyhedron_conversion_templates.hh" -23376: template -23376: dimension_type -23376: Polyhedron::conversion(Source_Linear_System& source, -23376: const dimension_type start, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat, -23376: dimension_type num_lines_or_equalities) { -23376: typedef typename Dest_Linear_System::row_type dest_row_type; -23376: typedef typename Source_Linear_System::row_type source_row_type; -23376: -23376: -23376: -23376: ((void) 0); -23376: const dimension_type source_space_dim = source.space_dimension(); -23376: const dimension_type source_num_rows = source.num_rows(); -23376: const dimension_type source_num_columns = source_space_dim -23376: + (source.is_necessarily_closed() ? 1U : 2U); -23376: -23376: -23376: dimension_type dest_num_rows = dest.num_rows(); -23376: -23376: -23376: std::vector recyclable_dest_rows; -23376: -23376: using std::swap; -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: ((void) 0); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_normalized_sp_i; Parma_Polyhedra_Library::Coefficient& normalized_sp_i = holder_normalized_sp_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_normalized_sp_o; Parma_Polyhedra_Library::Coefficient& normalized_sp_o = holder_normalized_sp_o.item(); -23376: -23376: bool dest_sorted = dest.is_sorted(); -23376: const dimension_type dest_first_pending_row = dest.first_pending_row(); -23376: -23376: -23376: std::vector redundant_source_rows; -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp > holder_sat_num_ones; std::vector& sat_num_ones = holder_sat_num_ones.item(); -23376: sat_num_ones.resize(dest_num_rows, 0); -23376: for (dimension_type i = dest_num_rows; i-- > 0; ) { -23376: sat_num_ones[i] = sat[i].count_ones(); -23376: } -23376: -23376: -23376: -23376: -23376: for (dimension_type k = start; k < source_num_rows; ++k) { -23376: const source_row_type& source_k = source[k]; -23376: # 437 "../../src/Polyhedron_conversion_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp > holder_scalar_prod; std::vector& scalar_prod = holder_scalar_prod.item(); -23376: if (dest_num_rows > scalar_prod.size()) { -23376: scalar_prod.insert(scalar_prod.end(), -23376: dest_num_rows - scalar_prod.size(), -23376: Coefficient_zero()); -23376: } -23376: -23376: -23376: dimension_type index_non_zero = 0; -23376: for ( ; index_non_zero < dest_num_rows; ++index_non_zero) { -23376: do { } while (false); -23376: Scalar_Products::assign(scalar_prod[index_non_zero], -23376: source_k, -23376: dest.sys.rows[index_non_zero]); -23376: do { Weightwatch_Traits::weight += (17)*(source_space_dim); } while (false); -23376: if (scalar_prod[index_non_zero] != 0) { -23376: -23376: break; -23376: } -23376: -23376: -23376: -23376: maybe_abandon(); -23376: } -23376: for (dimension_type i = index_non_zero + 1; i < dest_num_rows; ++i) { -23376: do { } while (false); -23376: Scalar_Products::assign(scalar_prod[i], source_k, dest.sys.rows[i]); -23376: do { Weightwatch_Traits::weight += (25)*(source_space_dim); } while (false); -23376: -23376: -23376: -23376: maybe_abandon(); -23376: } -23376: # 478 "../../src/Polyhedron_conversion_templates.hh" -23376: if (index_non_zero < num_lines_or_equalities) { -23376: -23376: -23376: -23376: -23376: dest.sys.rows[index_non_zero].set_is_ray_or_point_or_inequality(); -23376: -23376: -23376: -23376: if (scalar_prod[index_non_zero] < 0) { -23376: -23376: -23376: neg_assign(scalar_prod[index_non_zero]); -23376: neg_assign(dest.sys.rows[index_non_zero].expr); -23376: -23376: -23376: } -23376: -23376: -23376: -23376: dest_sorted = false; -23376: --num_lines_or_equalities; -23376: if (index_non_zero != num_lines_or_equalities) { -23376: swap(dest.sys.rows[index_non_zero], -23376: dest.sys.rows[num_lines_or_equalities]); -23376: swap(scalar_prod[index_non_zero], -23376: scalar_prod[num_lines_or_equalities]); -23376: } -23376: const dest_row_type& dest_nle = dest.sys.rows[num_lines_or_equalities]; -23376: # 523 "../../src/Polyhedron_conversion_templates.hh" -23376: Coefficient& scalar_prod_nle = scalar_prod[num_lines_or_equalities]; -23376: ((void) 0); -23376: for (dimension_type -23376: i = index_non_zero; i < num_lines_or_equalities; ++i) { -23376: if (scalar_prod[i] != 0) { -23376: # 540 "../../src/Polyhedron_conversion_templates.hh" -23376: normalize2(scalar_prod[i], -23376: scalar_prod_nle, -23376: normalized_sp_i, -23376: normalized_sp_o); -23376: dest_row_type& dest_i = dest.sys.rows[i]; -23376: neg_assign(normalized_sp_i); -23376: dest_i.expr.linear_combine(dest_nle.expr, -23376: normalized_sp_o, normalized_sp_i); -23376: dest_i.strong_normalize(); -23376: -23376: -23376: scalar_prod[i] = 0; -23376: -23376: } -23376: } -23376: # 563 "../../src/Polyhedron_conversion_templates.hh" -23376: for (dimension_type -23376: i = num_lines_or_equalities + 1; i < dest_num_rows; ++i) { -23376: if (scalar_prod[i] != 0) { -23376: # 578 "../../src/Polyhedron_conversion_templates.hh" -23376: normalize2(scalar_prod[i], -23376: scalar_prod_nle, -23376: normalized_sp_i, -23376: normalized_sp_o); -23376: dest_row_type& dest_i = dest.sys.rows[i]; -23376: do { } while (false); -23376: neg_assign(normalized_sp_i); -23376: dest_i.expr.linear_combine(dest_nle.expr, -23376: normalized_sp_o, normalized_sp_i); -23376: dest_i.strong_normalize(); -23376: -23376: -23376: scalar_prod[i] = 0; -23376: -23376: do { Weightwatch_Traits::weight += (41)*(source_space_dim); } while (false); -23376: } -23376: -23376: -23376: -23376: maybe_abandon(); -23376: } -23376: -23376: -23376: -23376: -23376: Bit_Row& sat_nle = sat[num_lines_or_equalities]; -23376: if (source_k.is_ray_or_point_or_inequality()) { -23376: sat_nle.set(k - redundant_source_rows.size()); -23376: -23376: ++sat_num_ones[num_lines_or_equalities]; -23376: -23376: } -23376: else { -23376: -23376: -23376: -23376: --dest_num_rows; -23376: swap(dest.sys.rows[num_lines_or_equalities], -23376: dest.sys.rows[dest_num_rows]); -23376: recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1); -23376: swap(dest.sys.rows.back(), recyclable_dest_rows.back()); -23376: dest.sys.rows.pop_back(); -23376: ((void) 0); -23376: -23376: swap(scalar_prod_nle, scalar_prod[dest_num_rows]); -23376: swap(sat_nle, sat[dest_num_rows]); -23376: -23376: swap(sat_num_ones[num_lines_or_equalities], -23376: sat_num_ones[dest_num_rows]); -23376: -23376: -23376: } -23376: -23376: -23376: continue; -23376: } -23376: -23376: -23376: ((void) 0); -23376: # 649 "../../src/Polyhedron_conversion_templates.hh" -23376: dimension_type lines_or_equal_bound = num_lines_or_equalities; -23376: dimension_type inf_bound = dest_num_rows; -23376: -23376: -23376: while (inf_bound > lines_or_equal_bound -23376: && scalar_prod[lines_or_equal_bound] == 0) { -23376: ++lines_or_equal_bound; -23376: } -23376: dimension_type sup_bound = lines_or_equal_bound; -23376: while (inf_bound > sup_bound) { -23376: const int sp_sign = sgn(scalar_prod[sup_bound]); -23376: if (sp_sign == 0) { -23376: -23376: swap(dest.sys.rows[sup_bound], dest.sys.rows[lines_or_equal_bound]); -23376: swap(scalar_prod[sup_bound], scalar_prod[lines_or_equal_bound]); -23376: swap(sat[sup_bound], sat[lines_or_equal_bound]); -23376: -23376: swap(sat_num_ones[sup_bound], sat_num_ones[lines_or_equal_bound]); -23376: -23376: ++lines_or_equal_bound; -23376: ++sup_bound; -23376: dest_sorted = false; -23376: } -23376: else if (sp_sign < 0) { -23376: -23376: --inf_bound; -23376: swap(dest.sys.rows[sup_bound], dest.sys.rows[inf_bound]); -23376: swap(sat[sup_bound], sat[inf_bound]); -23376: swap(scalar_prod[sup_bound], scalar_prod[inf_bound]); -23376: -23376: swap(sat_num_ones[sup_bound], sat_num_ones[inf_bound]); -23376: -23376: dest_sorted = false; -23376: } -23376: else { -23376: -23376: ++sup_bound; -23376: } -23376: } -23376: -23376: if (sup_bound == dest_num_rows) { -23376: -23376: -23376: -23376: -23376: -23376: if (source_k.is_ray_or_point_or_inequality()) { -23376: redundant_source_rows.push_back(k); -23376: } -23376: else { -23376: -23376: -23376: -23376: ((void) 0); -23376: while (dest_num_rows != lines_or_equal_bound) { -23376: recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1); -23376: swap(dest.sys.rows.back(), recyclable_dest_rows.back()); -23376: dest.sys.rows.pop_back(); -23376: --dest_num_rows; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: -23376: continue; -23376: } -23376: -23376: -23376: -23376: if (sup_bound == num_lines_or_equalities) { -23376: -23376: -23376: -23376: ((void) 0); -23376: while (dest_num_rows != sup_bound) { -23376: recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1); -23376: swap(dest.sys.rows.back(), recyclable_dest_rows.back()); -23376: dest.sys.rows.pop_back(); -23376: --dest_num_rows; -23376: } -23376: ((void) 0); -23376: -23376: -23376: continue; -23376: } -23376: # 744 "../../src/Polyhedron_conversion_templates.hh" -23376: const dimension_type bound = dest_num_rows; -23376: # 755 "../../src/Polyhedron_conversion_templates.hh" -23376: const dimension_type min_saturators -23376: = source_num_columns - num_lines_or_equalities - 2; -23376: -23376: const dimension_type max_saturators = k - redundant_source_rows.size(); -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = lines_or_equal_bound; i < sup_bound; ++i) { -23376: for (dimension_type j = sup_bound; j < bound; ++j) { -23376: -23376: -23376: -23376: -23376: -23376: ((void) 0) -23376: ; -23376: ((void) 0) -23376: ; -23376: -23376: -23376: -23376: -23376: -23376: Bit_Row new_satrow(sat[i], sat[j]); -23376: # 790 "../../src/Polyhedron_conversion_templates.hh" -23376: dimension_type new_satrow_ones = new_satrow.count_ones(); -23376: -23376: -23376: -23376: const dimension_type num_common_satur -23376: = max_saturators - new_satrow_ones; -23376: if (num_common_satur < min_saturators) { -23376: -23376: continue; -23376: } -23376: # 808 "../../src/Polyhedron_conversion_templates.hh" -23376: const dimension_type max_ones_i_j -23376: = std::max(sat_num_ones[i], sat_num_ones[j]); -23376: if (max_ones_i_j + 1 == new_satrow_ones) { -23376: -23376: goto are_adjacent; -23376: } -23376: -23376: -23376: -23376: { -23376: bool redundant = false; -23376: do { } while (false); -23376: for (dimension_type l = num_lines_or_equalities; l < bound; ++l) { -23376: if (l != i && l != j -23376: && subset_or_equal(sat[l], new_satrow)) { -23376: -23376: -23376: redundant = true; -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: do { Weightwatch_Traits::weight += (15)*(bound - num_lines_or_equalities); } while (false); -23376: if (redundant) { -23376: -23376: continue; -23376: } -23376: } -23376: -23376: -23376: are_adjacent: -23376: -23376: -23376: -23376: dest_row_type new_row; -23376: if (recyclable_dest_rows.empty()) { -23376: sat.add_recycled_row(new_satrow); -23376: -23376: sat_num_ones.push_back(new_satrow_ones); -23376: -23376: } -23376: else { -23376: swap(new_row, recyclable_dest_rows.back()); -23376: recyclable_dest_rows.pop_back(); -23376: new_row.set_space_dimension_no_ok(source_space_dim); -23376: swap(sat[dest_num_rows], new_satrow); -23376: -23376: swap(sat_num_ones[dest_num_rows], new_satrow_ones); -23376: -23376: } -23376: # 871 "../../src/Polyhedron_conversion_templates.hh" -23376: normalize2(scalar_prod[i], -23376: scalar_prod[j], -23376: normalized_sp_i, -23376: normalized_sp_o); -23376: do { } while (false); -23376: -23376: neg_assign(normalized_sp_o); -23376: new_row = dest.sys.rows[j]; -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: new_row.expr.linear_combine(dest.sys.rows[i].expr, -23376: normalized_sp_i, normalized_sp_o); -23376: -23376: do { Weightwatch_Traits::weight += (86)*(source_space_dim); } while (false); -23376: new_row.strong_normalize(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: if (scalar_prod.size() <= dest_num_rows) { -23376: scalar_prod.push_back(Coefficient_zero()); -23376: } -23376: else { -23376: scalar_prod[dest_num_rows] = Coefficient_zero(); -23376: } -23376: dest.sys.rows.resize(dest.sys.rows.size() + 1); -23376: swap(dest.sys.rows.back(), new_row); -23376: -23376: ++dest_num_rows; -23376: } -23376: -23376: -23376: -23376: maybe_abandon(); -23376: } -23376: -23376: -23376: dimension_type j; -23376: if (source_k.is_ray_or_point_or_inequality()) { -23376: -23376: -23376: j = sup_bound; -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type new_k = k - redundant_source_rows.size(); -23376: for (dimension_type l = lines_or_equal_bound; -23376: l < sup_bound; ++l) { -23376: sat[l].set(new_k); -23376: -23376: ++sat_num_ones[l]; -23376: -23376: } -23376: } -23376: else { -23376: -23376: -23376: j = lines_or_equal_bound; -23376: } -23376: -23376: -23376: -23376: -23376: dimension_type i = dest_num_rows; -23376: while (j < bound && i > bound) { -23376: --i; -23376: swap(dest.sys.rows[i], dest.sys.rows[j]); -23376: swap(scalar_prod[i], scalar_prod[j]); -23376: swap(sat[i], sat[j]); -23376: -23376: swap(sat_num_ones[i], sat_num_ones[j]); -23376: -23376: ++j; -23376: dest_sorted = false; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type new_num_rows = (j == bound) ? i : j; -23376: ((void) 0); -23376: while (dest_num_rows != new_num_rows) { -23376: recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1); -23376: swap(dest.sys.rows.back(), recyclable_dest_rows.back()); -23376: dest.sys.rows.pop_back(); -23376: --dest_num_rows; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: -23376: -23376: if (redundant_source_rows.size() > 0) { -23376: source.remove_rows(redundant_source_rows); -23376: sat.remove_trailing_columns(redundant_source_rows.size()); -23376: } -23376: # 985 "../../src/Polyhedron_conversion_templates.hh" -23376: if (start > 0 && start < source.num_rows()) { -23376: source.set_sorted(compare(source[start - 1], source[start]) <= 0); -23376: } -23376: -23376: source.unset_pending_rows(); -23376: -23376: -23376: -23376: if (!recyclable_dest_rows.empty()) { -23376: const dimension_type num_removed_rows = recyclable_dest_rows.size(); -23376: sat.remove_trailing_rows(num_removed_rows); -23376: } -23376: if (dest_sorted) { -23376: -23376: -23376: -23376: for (dimension_type i = dest_first_pending_row; -23376: i < dest_num_rows; ++i) { -23376: if (compare(dest.sys.rows[i - 1], dest.sys.rows[i]) > 0) { -23376: dest_sorted = false; -23376: break; -23376: } -23376: } -23376: } -23376: # 1017 "../../src/Polyhedron_conversion_templates.hh" -23376: dest.sys.index_first_pending = dest.num_rows(); -23376: dest.set_sorted(dest_sorted); -23376: ((void) 0); -23376: -23376: return num_lines_or_equalities; -23376: } -23376: -23376: } -23376: # 2860 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_minimize_templates.hh" 1 -23376: # 31 "../../src/Polyhedron_minimize_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 69 "../../src/Polyhedron_minimize_templates.hh" -23376: template -23376: bool -23376: Polyhedron::minimize(const bool con_to_gen, -23376: Source_Linear_System& source, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat) { -23376: -23376: typedef typename Dest_Linear_System::row_type dest_row_type; -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: if (!source.is_sorted()) { -23376: source.sort_rows(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type dest_num_rows -23376: = source.topology() == NECESSARILY_CLOSED ? source.space_dimension() + 1 -23376: : source.space_dimension() + 2; -23376: -23376: dest.clear(); -23376: dest.set_space_dimension(source.space_dimension()); -23376: -23376: -23376: for (dimension_type i = 0; i < dest_num_rows; ++i) { -23376: Linear_Expression expr; -23376: expr.set_space_dimension(dest_num_rows - 1); -23376: if (i == 0) { -23376: expr += 1; -23376: } -23376: else { -23376: expr += Variable(i - 1); -23376: } -23376: dest_row_type dest_i(expr, dest_row_type::LINE_OR_EQUALITY, NECESSARILY_CLOSED); -23376: if (dest.topology() == NOT_NECESSARILY_CLOSED) { -23376: dest_i.mark_as_not_necessarily_closed(); -23376: } -23376: dest.sys.insert_no_ok(dest_i, Recycle_Input()); -23376: } -23376: -23376: -23376: dest.set_sorted(false); -23376: # 141 "../../src/Polyhedron_minimize_templates.hh" -23376: Bit_Matrix tmp_sat(dest_num_rows, source.num_rows()); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type num_lines_or_equalities -23376: = conversion(source, 0U, dest, tmp_sat, dest_num_rows); -23376: -23376: dest_num_rows = dest.num_rows(); -23376: # 166 "../../src/Polyhedron_minimize_templates.hh" -23376: dimension_type first_point; -23376: if (dest.is_necessarily_closed()) { -23376: for (first_point = num_lines_or_equalities; -23376: first_point < dest_num_rows; -23376: ++first_point) { -23376: if (dest[first_point].expr.inhomogeneous_term() > 0) { -23376: break; -23376: } -23376: } -23376: } -23376: else { -23376: for (first_point = num_lines_or_equalities; -23376: first_point < dest_num_rows; -23376: ++first_point) { -23376: if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) { -23376: break; -23376: } -23376: } -23376: } -23376: -23376: if (first_point == dest_num_rows) { -23376: if (con_to_gen) { -23376: -23376: return true; -23376: } -23376: else { -23376: # 200 "../../src/Polyhedron_minimize_templates.hh" -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: sat.transpose_assign(tmp_sat); -23376: simplify(source, sat); -23376: return false; -23376: } -23376: } -23376: # 264 "../../src/Polyhedron_minimize_templates.hh" -23376: template -23376: bool -23376: Polyhedron::add_and_minimize(const bool con_to_gen, -23376: Source_Linear_System1& source1, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat, -23376: const Source_Linear_System2& source2) { -23376: -23376: ((void) 0); -23376: -23376: -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: const dimension_type old_source1_num_rows = source1.num_rows(); -23376: -23376: dimension_type k1 = 0; -23376: dimension_type k2 = 0; -23376: dimension_type source2_num_rows = source2.num_rows(); -23376: while (k1 < old_source1_num_rows && k2 < source2_num_rows) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: const int cmp = compare(source1[k1], source2[k2]); -23376: if (cmp == 0) { -23376: -23376: ++k2; -23376: -23376: -23376: ++k1; -23376: } -23376: else if (cmp < 0) { -23376: -23376: ++k1; -23376: } -23376: else { -23376: -23376: -23376: -23376: source1.add_pending_row(source2[k2]); -23376: -23376: ++k2; -23376: } -23376: } -23376: -23376: if (k2 < source2_num_rows) { -23376: -23376: -23376: -23376: for ( ; k2 < source2_num_rows; ++k2) { -23376: source1.add_pending_row(source2[k2]); -23376: } -23376: } -23376: -23376: if (source1.num_pending_rows() == 0) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: return add_and_minimize(con_to_gen, source1, dest, sat); -23376: } -23376: # 370 "../../src/Polyhedron_minimize_templates.hh" -23376: template -23376: bool -23376: Polyhedron::add_and_minimize(const bool con_to_gen, -23376: Source_Linear_System& source, -23376: Dest_Linear_System& dest, -23376: Bit_Matrix& sat) { -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: sat.resize(dest.num_rows(), source.num_rows()); -23376: -23376: -23376: -23376: const dimension_type num_lines_or_equalities -23376: = conversion(source, source.first_pending_row(), -23376: dest, sat, -23376: dest.num_lines_or_equalities()); -23376: -23376: -23376: const dimension_type dest_num_rows = dest.num_rows(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type first_point; -23376: if (dest.is_necessarily_closed()) { -23376: for (first_point = num_lines_or_equalities; -23376: first_point < dest_num_rows; -23376: ++first_point) { -23376: if (dest[first_point].expr.inhomogeneous_term() > 0) { -23376: break; -23376: } -23376: } -23376: } -23376: else { -23376: for (first_point = num_lines_or_equalities; -23376: first_point < dest_num_rows; -23376: ++first_point) { -23376: if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) { -23376: break; -23376: } -23376: } -23376: } -23376: -23376: if (first_point == dest_num_rows) { -23376: if (con_to_gen) { -23376: -23376: return true; -23376: } -23376: else { -23376: # 434 "../../src/Polyhedron_minimize_templates.hh" -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: sat.transpose(); -23376: simplify(source, sat); -23376: -23376: sat.transpose(); -23376: return false; -23376: } -23376: } -23376: -23376: } -23376: # 2861 "../../src/Polyhedron_defs.hh" 2 -23376: # 1 "../../src/Polyhedron_simplify_templates.hh" 1 -23376: # 32 "../../src/Polyhedron_simplify_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: # 82 "../../src/Polyhedron_simplify_templates.hh" -23376: template -23376: dimension_type -23376: Polyhedron::simplify(Linear_System1& sys, Bit_Matrix& sat) { -23376: dimension_type num_rows = sys.num_rows(); -23376: const dimension_type num_cols_sat = sat.num_columns(); -23376: -23376: using std::swap; -23376: -23376: -23376: dimension_type num_lines_or_equalities = 0; -23376: while (num_lines_or_equalities < num_rows -23376: && sys[num_lines_or_equalities].is_line_or_equality()) { -23376: ++num_lines_or_equalities; -23376: } -23376: -23376: -23376: -23376: if (num_rows > simplify_num_saturators_size) { -23376: delete [] simplify_num_saturators_p; -23376: simplify_num_saturators_p = 0; -23376: simplify_num_saturators_size = 0; -23376: const size_t max_size -23376: = std::numeric_limits::max() / sizeof(dimension_type); -23376: const size_t new_size = compute_capacity(num_rows, max_size); -23376: simplify_num_saturators_p = new dimension_type[new_size]; -23376: simplify_num_saturators_size = new_size; -23376: } -23376: dimension_type* const num_saturators = simplify_num_saturators_p; -23376: -23376: bool sys_sorted = sys.is_sorted(); -23376: -23376: -23376: -23376: -23376: for (dimension_type i = num_lines_or_equalities; i < num_rows; ++i) { -23376: if (sat[i].empty()) { -23376: -23376: -23376: -23376: sys.sys.rows[i].set_is_line_or_equality(); -23376: -23376: sys.sys.rows[i].sign_normalize(); -23376: -23376: -23376: if (i != num_lines_or_equalities) { -23376: sys.sys.rows[i].m_swap(sys.sys.rows[num_lines_or_equalities]); -23376: swap(sat[i], sat[num_lines_or_equalities]); -23376: swap(num_saturators[i], num_saturators[num_lines_or_equalities]); -23376: } -23376: ++num_lines_or_equalities; -23376: -23376: sys_sorted = false; -23376: } -23376: else { -23376: -23376: -23376: -23376: num_saturators[i] = num_cols_sat - sat[i].count_ones(); -23376: } -23376: } -23376: -23376: sys.set_sorted(sys_sorted); -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type rank = sys.gauss(num_lines_or_equalities); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (rank < num_lines_or_equalities) { -23376: # 169 "../../src/Polyhedron_simplify_templates.hh" -23376: for (dimension_type redundant = rank, -23376: erasing = num_rows; -23376: redundant < num_lines_or_equalities -23376: && erasing > num_lines_or_equalities; -23376: ) { -23376: --erasing; -23376: sys.remove_row(redundant); -23376: swap(sat[redundant], sat[erasing]); -23376: swap(num_saturators[redundant], num_saturators[erasing]); -23376: ++redundant; -23376: } -23376: -23376: -23376: -23376: -23376: num_rows -= num_lines_or_equalities - rank; -23376: -23376: -23376: -23376: sys.remove_trailing_rows(sys.num_rows() - num_rows); -23376: -23376: ((void) 0); -23376: -23376: sat.remove_trailing_rows(num_lines_or_equalities - rank); -23376: -23376: -23376: num_lines_or_equalities = rank; -23376: } -23376: -23376: const dimension_type old_num_rows = sys.num_rows(); -23376: # 230 "../../src/Polyhedron_simplify_templates.hh" -23376: const dimension_type sys_num_columns -23376: = sys.topology() == NECESSARILY_CLOSED ? sys.space_dimension() + 1 -23376: : sys.space_dimension() + 2; -23376: const dimension_type min_saturators -23376: = sys_num_columns - num_lines_or_equalities - 1; -23376: for (dimension_type i = num_lines_or_equalities; i < num_rows; ) { -23376: if (num_saturators[i] < min_saturators) { -23376: -23376: --num_rows; -23376: sys.remove_row(i); -23376: swap(sat[i], sat[num_rows]); -23376: swap(num_saturators[i], num_saturators[num_rows]); -23376: } -23376: else { -23376: ++i; -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = num_lines_or_equalities; i < num_rows; ) { -23376: bool redundant = false; -23376: -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type j = num_lines_or_equalities; j < num_rows; ) { -23376: if (i == j) { -23376: -23376: ++j; -23376: } -23376: else { -23376: # 271 "../../src/Polyhedron_simplify_templates.hh" -23376: bool strict_subset; -23376: if (subset_or_equal(sat[j], sat[i], strict_subset)) { -23376: if (strict_subset) { -23376: -23376: -23376: -23376: -23376: -23376: redundant = true; -23376: break; -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: --num_rows; -23376: sys.remove_row(j); -23376: ((void) 0); -23376: swap(sat[j], sat[num_rows]); -23376: swap(num_saturators[j], num_saturators[num_rows]); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: ++j; -23376: } -23376: } -23376: } -23376: if (redundant) { -23376: -23376: --num_rows; -23376: sys.remove_row(i); -23376: ((void) 0); -23376: swap(sat[i], sat[num_rows]); -23376: swap(num_saturators[i], num_saturators[num_rows]); -23376: } -23376: else { -23376: -23376: ++i; -23376: } -23376: } -23376: -23376: -23376: -23376: sat.remove_trailing_rows(old_num_rows - num_rows); -23376: # 335 "../../src/Polyhedron_simplify_templates.hh" -23376: sys.back_substitute(num_lines_or_equalities); -23376: -23376: -23376: -23376: -23376: return num_lines_or_equalities; -23376: } -23376: -23376: } -23376: # 2862 "../../src/Polyhedron_defs.hh" 2 -23376: # 35 "../../src/Box_templates.hh" 2 -23376: # 1 "../../src/Grid_defs.hh" 1 -23376: # 37 "../../src/Grid_defs.hh" -23376: # 1 "../../src/Grid_Generator_System_defs.hh" 1 -23376: # 36 "../../src/Grid_Generator_System_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: std::ostream& operator<<(std::ostream& s, const Grid_Generator_System& gs); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(Grid_Generator_System& x, Grid_Generator_System& y); -23376: -23376: -23376: -23376: bool operator==(const Grid_Generator_System& x, -23376: const Grid_Generator_System& y); -23376: -23376: } -23376: # 175 "../../src/Grid_Generator_System_defs.hh" -23376: class Parma_Polyhedra_Library::Grid_Generator_System { -23376: public: -23376: typedef Grid_Generator row_type; -23376: -23376: static const Representation default_representation = SPARSE; -23376: -23376: -23376: explicit Grid_Generator_System(Representation r = default_representation); -23376: -23376: -23376: explicit Grid_Generator_System(const Grid_Generator& g, -23376: Representation r = default_representation); -23376: -23376: -23376: explicit Grid_Generator_System(dimension_type dim, -23376: Representation r = default_representation); -23376: -23376: -23376: -23376: Grid_Generator_System(const Grid_Generator_System& gs); -23376: -23376: -23376: Grid_Generator_System(const Grid_Generator_System& gs, Representation r); -23376: -23376: -23376: ~Grid_Generator_System(); -23376: -23376: -23376: Grid_Generator_System& operator=(const Grid_Generator_System& y); -23376: -23376: -23376: Representation representation() const; -23376: -23376: -23376: void set_representation(Representation r); -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: void clear(); -23376: # 231 "../../src/Grid_Generator_System_defs.hh" -23376: void insert(const Grid_Generator& g); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Grid_Generator& g, Recycle_Input); -23376: -23376: -23376: -23376: -23376: -23376: void insert(Grid_Generator_System& gs, Recycle_Input); -23376: -23376: -23376: static void initialize(); -23376: -23376: -23376: static void finalize(); -23376: -23376: -23376: -23376: -23376: -23376: static const Grid_Generator_System& zero_dim_univ(); -23376: # 278 "../../src/Grid_Generator_System_defs.hh" -23376: class const_iterator -23376: : public std::iterator { -23376: public: -23376: -23376: const_iterator(); -23376: -23376: -23376: const_iterator(const const_iterator& y); -23376: -23376: -23376: ~const_iterator(); -23376: -23376: -23376: const_iterator& operator=(const const_iterator& y); -23376: -23376: -23376: const Grid_Generator& operator*() const; -23376: -23376: -23376: const Grid_Generator* operator->() const; -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& y) const; -23376: -23376: private: -23376: friend class Grid_Generator_System; -23376: -23376: Linear_System::const_iterator i; -23376: -23376: -23376: const_iterator(const Linear_System::const_iterator& y); -23376: }; -23376: -23376: -23376: bool empty() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: dimension_type num_parameters() const; -23376: -23376: -23376: dimension_type num_lines() const; -23376: -23376: -23376: -23376: -23376: -23376: bool has_points() const; -23376: -23376: -23376: bool is_equal_to(const Grid_Generator_System& y) const; -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: # 375 "../../src/Grid_Generator_System_defs.hh" -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: void m_swap(Grid_Generator_System& y); -23376: -23376: private: -23376: -23376: const Grid_Generator& operator[](dimension_type k) const; -23376: # 419 "../../src/Grid_Generator_System_defs.hh" -23376: void affine_image(Variable v, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator); -23376: -23376: -23376: void set_sorted(bool b); -23376: # 441 "../../src/Grid_Generator_System_defs.hh" -23376: void add_universe_rows_and_columns(dimension_type dims); -23376: -23376: -23376: void set_space_dimension(dimension_type space_dim); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: -23376: -23376: -23376: void shift_space_dimensions(Variable v, dimension_type n); -23376: -23376: -23376: void unset_pending_rows(); -23376: # 473 "../../src/Grid_Generator_System_defs.hh" -23376: void permute_space_dimensions(const std::vector& cycle); -23376: -23376: bool has_no_rows() const; -23376: -23376: -23376: void remove_trailing_rows(dimension_type n); -23376: -23376: void insert_verbatim(const Grid_Generator& g); -23376: -23376: -23376: Topology topology() const; -23376: -23376: -23376: dimension_type first_pending_row() const; -23376: -23376: Linear_System sys; -23376: -23376: -23376: -23376: -23376: -23376: static const Grid_Generator_System* zero_dim_univ_p; -23376: -23376: friend bool -23376: operator==(const Grid_Generator_System& x, const Grid_Generator_System& y); -23376: -23376: -23376: void set_index_first_pending_row(dimension_type i); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void remove_invalid_lines_and_parameters(); -23376: -23376: friend class Polyhedron; -23376: friend class Grid; -23376: }; -23376: # 38 "../../src/Grid_defs.hh" 2 -23376: # 1 "../../src/Grid_Generator_System_inlines.hh" 1 -23376: # 29 "../../src/Grid_Generator_System_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: Grid_Generator_System::set_sorted(bool b) { -23376: sys.set_sorted(b); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::unset_pending_rows() { -23376: sys.unset_pending_rows(); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::set_index_first_pending_row(const dimension_type i) { -23376: sys.set_index_first_pending_row(i); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System -23376: ::permute_space_dimensions(const std::vector& cycle) { -23376: return sys.permute_space_dimensions(cycle); -23376: } -23376: -23376: inline bool -23376: Grid_Generator_System::is_equal_to(const Grid_Generator_System& y) const { -23376: return (sys == y.sys); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::Grid_Generator_System(Representation r) -23376: : sys(NECESSARILY_CLOSED, r) { -23376: sys.set_sorted(false); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs) -23376: : sys(gs.sys) { -23376: } -23376: -23376: inline -23376: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs, -23376: Representation r) -23376: : sys(gs.sys, r) { -23376: } -23376: -23376: inline -23376: Grid_Generator_System::Grid_Generator_System(dimension_type dim, -23376: Representation r) -23376: : sys(NECESSARILY_CLOSED, r) { -23376: sys.set_space_dimension(dim); -23376: sys.set_sorted(false); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::Grid_Generator_System(const Grid_Generator& g, -23376: Representation r) -23376: : sys(NECESSARILY_CLOSED, r) { -23376: sys.insert(g); -23376: sys.set_sorted(false); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::~Grid_Generator_System() { -23376: } -23376: -23376: inline Grid_Generator_System& -23376: Grid_Generator_System::operator=(const Grid_Generator_System& y) { -23376: Grid_Generator_System tmp = y; -23376: swap(*this, tmp); -23376: return *this; -23376: } -23376: -23376: inline Representation -23376: Grid_Generator_System::representation() const { -23376: return sys.representation(); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::set_representation(Representation r) { -23376: sys.set_representation(r); -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator_System::max_space_dimension() { -23376: -23376: return Linear_System::max_space_dimension() - 1; -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator_System::space_dimension() const { -23376: return sys.space_dimension(); -23376: } -23376: -23376: inline const Grid_Generator_System& -23376: Grid_Generator_System::zero_dim_univ() { -23376: ((void) 0); -23376: return *zero_dim_univ_p; -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::clear() { -23376: sys.clear(); -23376: sys.set_sorted(false); -23376: sys.unset_pending_rows(); -23376: ((void) 0); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::m_swap(Grid_Generator_System& y) { -23376: swap(sys, y.sys); -23376: } -23376: -23376: inline memory_size_type -23376: Grid_Generator_System::external_memory_in_bytes() const { -23376: return sys.external_memory_in_bytes(); -23376: } -23376: -23376: inline memory_size_type -23376: Grid_Generator_System::total_memory_in_bytes() const { -23376: return external_memory_in_bytes() + sizeof(*this); -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator_System::num_rows() const { -23376: return sys.num_rows(); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::const_iterator::const_iterator() -23376: : i() { -23376: } -23376: -23376: inline -23376: Grid_Generator_System::const_iterator::const_iterator(const const_iterator& y) -23376: : i(y.i) { -23376: } -23376: -23376: inline -23376: Grid_Generator_System::const_iterator::~const_iterator() { -23376: } -23376: -23376: inline Grid_Generator_System::const_iterator& -23376: Grid_Generator_System::const_iterator::operator=(const const_iterator& y) { -23376: i = y.i; -23376: return *this; -23376: } -23376: -23376: inline const Grid_Generator& -23376: Grid_Generator_System::const_iterator::operator*() const { -23376: return *i; -23376: } -23376: -23376: inline const Grid_Generator* -23376: Grid_Generator_System::const_iterator::operator->() const { -23376: return i.operator->(); -23376: } -23376: -23376: inline Grid_Generator_System::const_iterator& -23376: Grid_Generator_System::const_iterator::operator++() { -23376: ++i; -23376: return *this; -23376: } -23376: -23376: inline Grid_Generator_System::const_iterator -23376: Grid_Generator_System::const_iterator::operator++(int) { -23376: const const_iterator tmp = *this; -23376: operator++(); -23376: return tmp; -23376: } -23376: -23376: inline bool -23376: Grid_Generator_System -23376: ::const_iterator::operator==(const const_iterator& y) const { -23376: return i == y.i; -23376: } -23376: -23376: inline bool -23376: Grid_Generator_System -23376: ::const_iterator::operator!=(const const_iterator& y) const { -23376: return i != y.i; -23376: } -23376: -23376: inline bool -23376: Grid_Generator_System::empty() const { -23376: return sys.has_no_rows(); -23376: } -23376: -23376: inline -23376: Grid_Generator_System::const_iterator -23376: ::const_iterator(const Linear_System::const_iterator& y) -23376: : i(y) { -23376: } -23376: -23376: inline Grid_Generator_System::const_iterator -23376: Grid_Generator_System::begin() const { -23376: return static_cast(sys.begin()); -23376: } -23376: -23376: inline Grid_Generator_System::const_iterator -23376: Grid_Generator_System::end() const { -23376: return static_cast(sys.end()); -23376: } -23376: -23376: inline const Grid_Generator& -23376: Grid_Generator_System::operator[](const dimension_type k) const { -23376: return sys[k]; -23376: } -23376: -23376: inline bool -23376: Grid_Generator_System::has_no_rows() const { -23376: return sys.has_no_rows(); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::remove_trailing_rows(dimension_type n) { -23376: sys.remove_trailing_rows(n); -23376: } -23376: -23376: inline void -23376: Grid_Generator_System::insert_verbatim(const Grid_Generator& g) { -23376: sys.insert(g); -23376: } -23376: -23376: inline Topology -23376: Grid_Generator_System::topology() const { -23376: return sys.topology(); -23376: } -23376: -23376: inline dimension_type -23376: Grid_Generator_System::first_pending_row() const { -23376: return sys.first_pending_row(); -23376: } -23376: -23376: -23376: inline bool -23376: operator==(const Grid_Generator_System& x, -23376: const Grid_Generator_System& y) { -23376: return x.is_equal_to(y); -23376: } -23376: -23376: -23376: inline void -23376: swap(Grid_Generator_System& x, Grid_Generator_System& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 39 "../../src/Grid_defs.hh" 2 -23376: -23376: -23376: -23376: # 1 "../../src/Grid_Certificate_types.hh" 1 -23376: # 16 "../../src/Grid_Certificate_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class Grid_Certificate; -23376: -23376: } -23376: # 43 "../../src/Grid_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: # 63 "../../src/Grid_defs.hh" -23376: std::ostream& -23376: operator<<(std::ostream& s, const Grid& gr); -23376: -23376: } -23376: -23376: -23376: -23376: void swap(Grid& x, Grid& y); -23376: # 80 "../../src/Grid_defs.hh" -23376: bool operator==(const Grid& x, const Grid& y); -23376: # 90 "../../src/Grid_defs.hh" -23376: bool operator!=(const Grid& x, const Grid& y); -23376: -23376: } -23376: # 363 "../../src/Grid_defs.hh" -23376: class Parma_Polyhedra_Library::Grid { -23376: public: -23376: -23376: typedef Coefficient coefficient_type; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: -23376: static bool can_recycle_congruence_systems(); -23376: -23376: -23376: -23376: -23376: -23376: static bool can_recycle_constraint_systems(); -23376: # 395 "../../src/Grid_defs.hh" -23376: explicit Grid(dimension_type num_dimensions = 0, -23376: Degenerate_Element kind = UNIVERSE); -23376: # 409 "../../src/Grid_defs.hh" -23376: explicit Grid(const Congruence_System& cgs); -23376: # 427 "../../src/Grid_defs.hh" -23376: Grid(Congruence_System& cgs, Recycle_Input dummy); -23376: # 443 "../../src/Grid_defs.hh" -23376: explicit Grid(const Constraint_System& cs); -23376: # 464 "../../src/Grid_defs.hh" -23376: Grid(Constraint_System& cs, Recycle_Input dummy); -23376: # 480 "../../src/Grid_defs.hh" -23376: explicit Grid(const Grid_Generator_System& ggs); -23376: # 500 "../../src/Grid_defs.hh" -23376: Grid(Grid_Generator_System& ggs, Recycle_Input dummy); -23376: # 518 "../../src/Grid_defs.hh" -23376: template -23376: explicit Grid(const Box& box, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 538 "../../src/Grid_defs.hh" -23376: template -23376: explicit Grid(const BD_Shape& bd, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 558 "../../src/Grid_defs.hh" -23376: template -23376: explicit Grid(const Octagonal_Shape& os, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 580 "../../src/Grid_defs.hh" -23376: explicit Grid(const Polyhedron& ph, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: Grid(const Grid& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: Grid& operator=(const Grid& y); -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type affine_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: Constraint_System constraints() const; -23376: -23376: -23376: -23376: -23376: -23376: Constraint_System minimized_constraints() const; -23376: -23376: -23376: const Congruence_System& congruences() const; -23376: -23376: -23376: const Congruence_System& minimized_congruences() const; -23376: -23376: -23376: const Grid_Generator_System& grid_generators() const; -23376: -23376: -23376: const Grid_Generator_System& minimized_grid_generators() const; -23376: # 640 "../../src/Grid_defs.hh" -23376: Poly_Con_Relation relation_with(const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation -23376: relation_with(const Grid_Generator& g) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation -23376: relation_with(const Generator& g) const; -23376: # 668 "../../src/Grid_defs.hh" -23376: Poly_Con_Relation relation_with(const Constraint& c) const; -23376: -23376: -23376: bool is_empty() const; -23376: -23376: -23376: bool is_universe() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_topologically_closed() const; -23376: # 691 "../../src/Grid_defs.hh" -23376: bool is_disjoint_from(const Grid& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_discrete() const; -23376: -23376: -23376: bool is_bounded() const; -23376: -23376: -23376: -23376: -23376: -23376: bool contains_integer_point() const; -23376: # 717 "../../src/Grid_defs.hh" -23376: bool constrains(Variable var) const; -23376: # 726 "../../src/Grid_defs.hh" -23376: bool bounds_from_above(const Linear_Expression& expr) const; -23376: # 735 "../../src/Grid_defs.hh" -23376: bool bounds_from_below(const Linear_Expression& expr) const; -23376: # 764 "../../src/Grid_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const; -23376: # 798 "../../src/Grid_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& point) const; -23376: # 829 "../../src/Grid_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const; -23376: # 863 "../../src/Grid_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& point) const; -23376: # 897 "../../src/Grid_defs.hh" -23376: bool frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool contains(const Grid& y) const; -23376: # 915 "../../src/Grid_defs.hh" -23376: bool strictly_contains(const Grid& y) const; -23376: # 934 "../../src/Grid_defs.hh" -23376: bool OK(bool check_not_empty = false) const; -23376: # 947 "../../src/Grid_defs.hh" -23376: void add_congruence(const Congruence& cg); -23376: # 957 "../../src/Grid_defs.hh" -23376: void add_grid_generator(const Grid_Generator& g); -23376: # 968 "../../src/Grid_defs.hh" -23376: void add_congruences(const Congruence_System& cgs); -23376: # 983 "../../src/Grid_defs.hh" -23376: void add_recycled_congruences(Congruence_System& cgs); -23376: # 995 "../../src/Grid_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 1008 "../../src/Grid_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: # 1025 "../../src/Grid_defs.hh" -23376: void add_recycled_constraints(Constraint_System& cs); -23376: # 1035 "../../src/Grid_defs.hh" -23376: void refine_with_congruence(const Congruence& cg); -23376: # 1045 "../../src/Grid_defs.hh" -23376: void refine_with_congruences(const Congruence_System& cgs); -23376: # 1056 "../../src/Grid_defs.hh" -23376: void refine_with_constraint(const Constraint& c); -23376: # 1066 "../../src/Grid_defs.hh" -23376: void refine_with_constraints(const Constraint_System& cs); -23376: # 1081 "../../src/Grid_defs.hh" -23376: void add_grid_generators(const Grid_Generator_System& gs); -23376: # 1098 "../../src/Grid_defs.hh" -23376: void add_recycled_grid_generators(Grid_Generator_System& gs); -23376: # 1110 "../../src/Grid_defs.hh" -23376: void unconstrain(Variable var); -23376: # 1124 "../../src/Grid_defs.hh" -23376: void unconstrain(const Variables_Set& vars); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void intersection_assign(const Grid& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void upper_bound_assign(const Grid& y); -23376: # 1150 "../../src/Grid_defs.hh" -23376: bool upper_bound_assign_if_exact(const Grid& y); -23376: # 1162 "../../src/Grid_defs.hh" -23376: void difference_assign(const Grid& y); -23376: # 1173 "../../src/Grid_defs.hh" -23376: bool simplify_using_context_assign(const Grid& y); -23376: # 1236 "../../src/Grid_defs.hh" -23376: void affine_image(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1300 "../../src/Grid_defs.hh" -23376: void affine_preimage(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1335 "../../src/Grid_defs.hh" -23376: void -23376: generalized_affine_image(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one(), -23376: Coefficient_traits::const_reference modulus -23376: = Coefficient_zero()); -23376: # 1374 "../../src/Grid_defs.hh" -23376: void -23376: generalized_affine_preimage(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one(), -23376: Coefficient_traits::const_reference modulus -23376: = Coefficient_zero()); -23376: # 1407 "../../src/Grid_defs.hh" -23376: void -23376: generalized_affine_image(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs, -23376: Coefficient_traits::const_reference modulus -23376: = Coefficient_zero()); -23376: # 1438 "../../src/Grid_defs.hh" -23376: void -23376: generalized_affine_preimage(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs, -23376: Coefficient_traits::const_reference modulus -23376: = Coefficient_zero()); -23376: # 1471 "../../src/Grid_defs.hh" -23376: void bounded_affine_image(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1503 "../../src/Grid_defs.hh" -23376: void bounded_affine_preimage(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1516 "../../src/Grid_defs.hh" -23376: void time_elapse_assign(const Grid& y); -23376: # 1563 "../../src/Grid_defs.hh" -23376: void wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p = 0, -23376: unsigned complexity_threshold = 16, -23376: bool wrap_individually = true); -23376: # 1579 "../../src/Grid_defs.hh" -23376: void drop_some_non_integer_points(Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1594 "../../src/Grid_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: -23376: -23376: void topological_closure_assign(); -23376: # 1616 "../../src/Grid_defs.hh" -23376: void congruence_widening_assign(const Grid& y, unsigned* tp = -23376: # 1616 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1616 "../../src/Grid_defs.hh" -23376: ); -23376: # 1633 "../../src/Grid_defs.hh" -23376: void generator_widening_assign(const Grid& y, unsigned* tp = -23376: # 1633 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1633 "../../src/Grid_defs.hh" -23376: ); -23376: # 1654 "../../src/Grid_defs.hh" -23376: void widening_assign(const Grid& y, unsigned* tp = -23376: # 1654 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1654 "../../src/Grid_defs.hh" -23376: ); -23376: # 1676 "../../src/Grid_defs.hh" -23376: void limited_congruence_extrapolation_assign(const Grid& y, -23376: const Congruence_System& cgs, -23376: unsigned* tp = -23376: # 1678 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1678 "../../src/Grid_defs.hh" -23376: ); -23376: # 1700 "../../src/Grid_defs.hh" -23376: void limited_generator_extrapolation_assign(const Grid& y, -23376: const Congruence_System& cgs, -23376: unsigned* tp = -23376: # 1702 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1702 "../../src/Grid_defs.hh" -23376: ); -23376: # 1723 "../../src/Grid_defs.hh" -23376: void limited_extrapolation_assign(const Grid& y, -23376: const Congruence_System& cgs, -23376: unsigned* tp = -23376: # 1725 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 1725 "../../src/Grid_defs.hh" -23376: ); -23376: # 1758 "../../src/Grid_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 1786 "../../src/Grid_defs.hh" -23376: void add_space_dimensions_and_project(dimension_type m); -23376: # 1796 "../../src/Grid_defs.hh" -23376: void concatenate_assign(const Grid& y); -23376: # 1808 "../../src/Grid_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: # 1819 "../../src/Grid_defs.hh" -23376: void remove_higher_space_dimensions(dimension_type new_dimension); -23376: # 1868 "../../src/Grid_defs.hh" -23376: template -23376: void map_space_dimensions(const Partial_Function& pfunc); -23376: # 1894 "../../src/Grid_defs.hh" -23376: void expand_space_dimension(Variable var, dimension_type m); -23376: # 1920 "../../src/Grid_defs.hh" -23376: void fold_space_dimensions(const Variables_Set& vars, Variable dest); -23376: -23376: -23376: -23376: friend bool operator==(const Grid& x, const Grid& y); -23376: -23376: friend class Parma_Polyhedra_Library::Grid_Certificate; -23376: -23376: template friend class Parma_Polyhedra_Library::Box; -23376: -23376: -23376: -23376: -23376: -23376: ~Grid(); -23376: -23376: -23376: -23376: -23376: -23376: void m_swap(Grid& y); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int32_t hash_code() const; -23376: -23376: -23376: -23376: private: -23376: -23376: -23376: Congruence_System con_sys; -23376: -23376: -23376: Grid_Generator_System gen_sys; -23376: -23376: -23376: # 1 "../../src/Grid_Status_idefs.hh" 1 -23376: # 71 "../../src/Grid_Status_idefs.hh" -23376: class Status { -23376: public: -23376: -23376: Status(); -23376: -23376: -23376: -23376: bool test_zero_dim_univ() const; -23376: void reset_zero_dim_univ(); -23376: void set_zero_dim_univ(); -23376: -23376: bool test_empty() const; -23376: void reset_empty(); -23376: void set_empty(); -23376: -23376: bool test_c_up_to_date() const; -23376: void reset_c_up_to_date(); -23376: void set_c_up_to_date(); -23376: -23376: bool test_g_up_to_date() const; -23376: void reset_g_up_to_date(); -23376: void set_g_up_to_date(); -23376: -23376: bool test_c_minimized() const; -23376: void reset_c_minimized(); -23376: void set_c_minimized(); -23376: -23376: bool test_g_minimized() const; -23376: void reset_g_minimized(); -23376: void set_g_minimized(); -23376: -23376: bool test_sat_c_up_to_date() const; -23376: void reset_sat_c_up_to_date(); -23376: void set_sat_c_up_to_date(); -23376: -23376: bool test_sat_g_up_to_date() const; -23376: void reset_sat_g_up_to_date(); -23376: void set_sat_g_up_to_date(); -23376: -23376: bool test_c_pending() const; -23376: void reset_c_pending(); -23376: void set_c_pending(); -23376: -23376: bool test_g_pending() const; -23376: void reset_g_pending(); -23376: void set_g_pending(); -23376: -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t ZERO_DIM_UNIV = 0U; -23376: static const flags_t EMPTY = 1U << 0; -23376: static const flags_t C_UP_TO_DATE = 1U << 1; -23376: static const flags_t G_UP_TO_DATE = 1U << 2; -23376: static const flags_t C_MINIMIZED = 1U << 3; -23376: static const flags_t G_MINIMIZED = 1U << 4; -23376: static const flags_t SAT_C_UP_TO_DATE = 1U << 5; -23376: static const flags_t SAT_G_UP_TO_DATE = 1U << 6; -23376: static const flags_t CS_PENDING = 1U << 7; -23376: static const flags_t GS_PENDING = 1U << 8; -23376: -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: Status(flags_t mask); -23376: -23376: -23376: bool test_all(flags_t mask) const; -23376: -23376: -23376: bool test_any(flags_t mask) const; -23376: -23376: -23376: void set(flags_t mask); -23376: -23376: -23376: void reset(flags_t mask); -23376: }; -23376: # 1977 "../../src/Grid_defs.hh" 2 -23376: -23376: -23376: -23376: Status status; -23376: -23376: -23376: dimension_type space_dim; -23376: -23376: enum Dimension_Kind { -23376: PARAMETER = 0, -23376: LINE = 1, -23376: GEN_VIRTUAL = 2, -23376: PROPER_CONGRUENCE = PARAMETER, -23376: CON_VIRTUAL = LINE, -23376: EQUALITY = GEN_VIRTUAL -23376: }; -23376: -23376: typedef std::vector Dimension_Kinds; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Dimension_Kinds dim_kinds; -23376: # 2012 "../../src/Grid_defs.hh" -23376: void construct(dimension_type num_dimensions, Degenerate_Element kind); -23376: # 2022 "../../src/Grid_defs.hh" -23376: void construct(Congruence_System& cgs); -23376: # 2032 "../../src/Grid_defs.hh" -23376: void construct(Grid_Generator_System& ggs); -23376: # 2042 "../../src/Grid_defs.hh" -23376: bool marked_empty() const; -23376: -23376: -23376: bool congruences_are_up_to_date() const; -23376: -23376: -23376: bool generators_are_up_to_date() const; -23376: -23376: -23376: bool congruences_are_minimized() const; -23376: -23376: -23376: bool generators_are_minimized() const; -23376: # 2065 "../../src/Grid_defs.hh" -23376: void set_zero_dim_univ(); -23376: -23376: -23376: -23376: -23376: -23376: void set_empty(); -23376: -23376: -23376: void set_congruences_up_to_date(); -23376: -23376: -23376: void set_generators_up_to_date(); -23376: -23376: -23376: void set_congruences_minimized(); -23376: -23376: -23376: void set_generators_minimized(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void clear_empty(); -23376: -23376: -23376: void clear_congruences_up_to_date(); -23376: -23376: -23376: void clear_generators_up_to_date(); -23376: -23376: -23376: void clear_congruences_minimized(); -23376: -23376: -23376: void clear_generators_minimized(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void update_congruences() const; -23376: # 2122 "../../src/Grid_defs.hh" -23376: bool update_generators() const; -23376: # 2138 "../../src/Grid_defs.hh" -23376: bool minimize() const; -23376: -23376: -23376: -23376: enum Three_Valued_Boolean { -23376: TVB_TRUE, -23376: TVB_FALSE, -23376: TVB_DONT_KNOW -23376: }; -23376: -23376: -23376: Three_Valued_Boolean quick_equivalence_test(const Grid& y) const; -23376: -23376: -23376: bool is_included_in(const Grid& y) const; -23376: # 2172 "../../src/Grid_defs.hh" -23376: bool bounds(const Linear_Expression& expr, const char* method_call) const; -23376: # 2206 "../../src/Grid_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: const char* method_call, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included, -23376: Generator* point = -23376: # 2209 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 2209 "../../src/Grid_defs.hh" -23376: ) const; -23376: # 2243 "../../src/Grid_defs.hh" -23376: bool frequency_no_check(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: # 2257 "../../src/Grid_defs.hh" -23376: bool bounds_no_check(const Linear_Expression& expr) const; -23376: # 2267 "../../src/Grid_defs.hh" -23376: void add_congruence_no_check(const Congruence& cg); -23376: # 2282 "../../src/Grid_defs.hh" -23376: void add_constraint_no_check(const Constraint& c); -23376: # 2295 "../../src/Grid_defs.hh" -23376: void refine_no_check(const Constraint& c); -23376: -23376: -23376: -23376: -23376: -23376: void select_wider_congruences(const Grid& y, -23376: Congruence_System& selected_cgs) const; -23376: -23376: -23376: void select_wider_generators(const Grid& y, -23376: Grid_Generator_System& widened_ggs) const; -23376: # 2324 "../../src/Grid_defs.hh" -23376: void add_space_dimensions(Congruence_System& cgs, -23376: Grid_Generator_System& gs, -23376: dimension_type dims); -23376: # 2342 "../../src/Grid_defs.hh" -23376: void add_space_dimensions(Grid_Generator_System& gs, -23376: Congruence_System& cgs, -23376: dimension_type dims); -23376: # 2367 "../../src/Grid_defs.hh" -23376: static void -23376: normalize_divisors(Grid_Generator_System& sys, -23376: Coefficient& divisor, -23376: const Grid_Generator* first_point = -23376: # 2370 "../../src/Grid_defs.hh" 3 4 -23376: __null -23376: # 2370 "../../src/Grid_defs.hh" -23376: ); -23376: # 2381 "../../src/Grid_defs.hh" -23376: static void -23376: normalize_divisors(Grid_Generator_System& sys); -23376: # 2401 "../../src/Grid_defs.hh" -23376: static void normalize_divisors(Grid_Generator_System& sys, -23376: Grid_Generator_System& gen_sys); -23376: -23376: -23376: -23376: -23376: -23376: static void conversion(Congruence_System& source, -23376: Grid_Generator_System& dest, -23376: Dimension_Kinds& dim_kinds); -23376: -23376: -23376: -23376: -23376: -23376: static void conversion(Grid_Generator_System& source, -23376: Congruence_System& dest, -23376: Dimension_Kinds& dim_kinds); -23376: -23376: -23376: -23376: -23376: -23376: -23376: static bool simplify(Congruence_System& cgs, -23376: Dimension_Kinds& dim_kinds); -23376: -23376: -23376: -23376: -23376: -23376: static void simplify(Grid_Generator_System& ggs, -23376: Dimension_Kinds& dim_kinds); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void reduce_line_with_line(Grid_Generator& row, -23376: Grid_Generator& pivot, -23376: dimension_type column); -23376: # 2452 "../../src/Grid_defs.hh" -23376: static void reduce_equality_with_equality(Congruence& row, -23376: const Congruence& pivot, -23376: dimension_type column); -23376: # 2469 "../../src/Grid_defs.hh" -23376: template -23376: static void reduce_pc_with_pc(R& row, -23376: R& pivot, -23376: dimension_type column, -23376: dimension_type start, -23376: dimension_type end); -23376: # 2486 "../../src/Grid_defs.hh" -23376: static void reduce_parameter_with_line(Grid_Generator& row, -23376: const Grid_Generator& pivot, -23376: dimension_type column, -23376: Swapping_Vector& sys, -23376: dimension_type num_columns); -23376: # 2501 "../../src/Grid_defs.hh" -23376: static void reduce_congruence_with_equality(Congruence& row, -23376: const Congruence& pivot, -23376: dimension_type column, -23376: Swapping_Vector& sys); -23376: # 2539 "../../src/Grid_defs.hh" -23376: template -23376: -23376: -23376: -23376: -23376: static void reduce_reduced(Swapping_Vector& sys, -23376: dimension_type dim, -23376: dimension_type pivot_index, -23376: dimension_type start, dimension_type end, -23376: const Dimension_Kinds& sys_dim_kinds, -23376: bool generators = true); -23376: -23376: -23376: -23376: -23376: -23376: static void multiply_grid(const Coefficient& multiplier, -23376: Congruence& cg, -23376: Swapping_Vector& dest, -23376: dimension_type num_rows); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: static void multiply_grid(const Coefficient& multiplier, -23376: Grid_Generator& gen, -23376: Swapping_Vector& dest, -23376: dimension_type num_rows); -23376: -23376: -23376: -23376: -23376: -23376: static bool lower_triangular(const Congruence_System& sys, -23376: const Dimension_Kinds& dim_kinds); -23376: -23376: -23376: -23376: -23376: -23376: static bool upper_triangular(const Grid_Generator_System& sys, -23376: const Dimension_Kinds& dim_kinds); -23376: # 2608 "../../src/Grid_defs.hh" -23376: protected: -23376: void throw_dimension_incompatible(const char* method, -23376: const char* other_name, -23376: dimension_type other_dim) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* gr_name, -23376: const Grid& gr) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cg_name, -23376: const Congruence& cg) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* c_name, -23376: const Constraint& c) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* g_name, -23376: const Grid_Generator& g) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* g_name, -23376: const Generator& g) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cgs_name, -23376: const Congruence_System& cgs) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* cs_name, -23376: const Constraint_System& cs) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* gs_name, -23376: const Grid_Generator_System& gs) const; -23376: void throw_dimension_incompatible(const char* method, -23376: const char* var_name, -23376: Variable var) const; -23376: void throw_dimension_incompatible(const char* method, -23376: dimension_type required_space_dim) const; -23376: -23376: static void throw_invalid_argument(const char* method, -23376: const char* reason); -23376: static void throw_invalid_constraint(const char* method, -23376: const char* c_name); -23376: static void throw_invalid_constraints(const char* method, -23376: const char* cs_name); -23376: static void throw_invalid_generator(const char* method, -23376: const char* g_name); -23376: static void throw_invalid_generators(const char* method, -23376: const char* gs_name); -23376: -23376: -23376: -23376: -23376: }; -23376: -23376: # 1 "../../src/Grid_Status_inlines.hh" 1 -23376: # 27 "../../src/Grid_Status_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: Grid::Status::Status(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: inline -23376: Grid::Status::Status() -23376: : flags(ZERO_DIM_UNIV) { -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_all(flags_t mask) const { -23376: return (flags & mask) == mask; -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_any(flags_t mask) const { -23376: return (flags & mask) != 0; -23376: } -23376: -23376: inline void -23376: Grid::Status::set(flags_t mask) { -23376: flags |= mask; -23376: } -23376: -23376: inline void -23376: Grid::Status::reset(flags_t mask) { -23376: flags &= ~mask; -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_zero_dim_univ() const { -23376: return flags == ZERO_DIM_UNIV; -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_zero_dim_univ() { -23376: -23376: if (flags == ZERO_DIM_UNIV) { -23376: -23376: flags = EMPTY; -23376: } -23376: } -23376: -23376: inline void -23376: Grid::Status::set_zero_dim_univ() { -23376: -23376: flags = ZERO_DIM_UNIV; -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_empty() const { -23376: return test_any(EMPTY); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_empty() { -23376: reset(EMPTY); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_empty() { -23376: flags = EMPTY; -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_c_up_to_date() const { -23376: return test_any(C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_c_up_to_date() { -23376: reset(C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_c_up_to_date() { -23376: set(C_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_g_up_to_date() const { -23376: return test_any(G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_g_up_to_date() { -23376: reset(G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_g_up_to_date() { -23376: set(G_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_c_minimized() const { -23376: return test_any(C_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_c_minimized() { -23376: reset(C_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_c_minimized() { -23376: set(C_MINIMIZED); -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_g_minimized() const { -23376: return test_any(G_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_g_minimized() { -23376: reset(G_MINIMIZED); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_g_minimized() { -23376: set(G_MINIMIZED); -23376: } -23376: -23376: -23376: inline bool -23376: Grid::Status::test_c_pending() const { -23376: return test_any(CS_PENDING); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_c_pending() { -23376: reset(CS_PENDING); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_c_pending() { -23376: set(CS_PENDING); -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_g_pending() const { -23376: return test_any(GS_PENDING); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_g_pending() { -23376: reset(GS_PENDING); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_g_pending() { -23376: set(GS_PENDING); -23376: } -23376: -23376: -23376: inline bool -23376: Grid::Status::test_sat_c_up_to_date() const { -23376: return test_any(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_sat_c_up_to_date() { -23376: reset(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_sat_c_up_to_date() { -23376: set(SAT_C_UP_TO_DATE); -23376: } -23376: -23376: inline bool -23376: Grid::Status::test_sat_g_up_to_date() const { -23376: return test_any(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::reset_sat_g_up_to_date() { -23376: reset(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: inline void -23376: Grid::Status::set_sat_g_up_to_date() { -23376: set(SAT_G_UP_TO_DATE); -23376: } -23376: -23376: } -23376: # 2662 "../../src/Grid_defs.hh" 2 -23376: # 1 "../../src/Grid_inlines.hh" 1 -23376: # 32 "../../src/Grid_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline bool -23376: Grid::marked_empty() const { -23376: return status.test_empty(); -23376: } -23376: -23376: inline bool -23376: Grid::congruences_are_up_to_date() const { -23376: return status.test_c_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Grid::generators_are_up_to_date() const { -23376: return status.test_g_up_to_date(); -23376: } -23376: -23376: inline bool -23376: Grid::congruences_are_minimized() const { -23376: return status.test_c_minimized(); -23376: } -23376: -23376: inline bool -23376: Grid::generators_are_minimized() const { -23376: return status.test_g_minimized(); -23376: } -23376: -23376: inline void -23376: Grid::set_generators_up_to_date() { -23376: status.set_g_up_to_date(); -23376: } -23376: -23376: inline void -23376: Grid::set_congruences_up_to_date() { -23376: status.set_c_up_to_date(); -23376: } -23376: -23376: inline void -23376: Grid::set_congruences_minimized() { -23376: set_congruences_up_to_date(); -23376: status.set_c_minimized(); -23376: } -23376: -23376: inline void -23376: Grid::set_generators_minimized() { -23376: set_generators_up_to_date(); -23376: status.set_g_minimized(); -23376: } -23376: -23376: inline void -23376: Grid::clear_empty() { -23376: status.reset_empty(); -23376: } -23376: -23376: inline void -23376: Grid::clear_congruences_minimized() { -23376: status.reset_c_minimized(); -23376: } -23376: -23376: inline void -23376: Grid::clear_generators_minimized() { -23376: status.reset_g_minimized(); -23376: } -23376: -23376: inline void -23376: Grid::clear_congruences_up_to_date() { -23376: clear_congruences_minimized(); -23376: status.reset_c_up_to_date(); -23376: -23376: } -23376: -23376: inline void -23376: Grid::clear_generators_up_to_date() { -23376: clear_generators_minimized(); -23376: status.reset_g_up_to_date(); -23376: -23376: } -23376: -23376: inline dimension_type -23376: Grid::max_space_dimension() { -23376: -23376: -23376: return std::min(std::numeric_limits::max() - 1, -23376: std::min(Congruence_System::max_space_dimension(), -23376: Grid_Generator_System::max_space_dimension() -23376: ) -23376: ); -23376: } -23376: -23376: inline -23376: Grid::Grid(dimension_type num_dimensions, -23376: const Degenerate_Element kind) -23376: : con_sys(), -23376: gen_sys(check_space_dimension_overflow(num_dimensions, -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(n, k)", -23376: "n exceeds the maximum " -23376: "allowed space dimension")) { -23376: construct(num_dimensions, kind); -23376: ((void) 0); -23376: } -23376: -23376: inline -23376: Grid::Grid(const Congruence_System& cgs) -23376: : con_sys(check_space_dimension_overflow(cgs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(cgs)", -23376: "the space dimension of cgs " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(cgs.space_dimension()) { -23376: Congruence_System cgs_copy(cgs); -23376: construct(cgs_copy); -23376: } -23376: -23376: inline -23376: Grid::Grid(Congruence_System& cgs, Recycle_Input) -23376: : con_sys(check_space_dimension_overflow(cgs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(cgs, recycle)", -23376: "the space dimension of cgs " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(cgs.space_dimension()) { -23376: construct(cgs); -23376: } -23376: -23376: inline -23376: Grid::Grid(const Grid_Generator_System& ggs) -23376: : con_sys(check_space_dimension_overflow(ggs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(ggs)", -23376: "the space dimension of ggs " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(ggs.space_dimension()) { -23376: Grid_Generator_System ggs_copy(ggs); -23376: construct(ggs_copy); -23376: } -23376: -23376: inline -23376: Grid::Grid(Grid_Generator_System& ggs, Recycle_Input) -23376: : con_sys(check_space_dimension_overflow(ggs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(ggs, recycle)", -23376: "the space dimension of ggs " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(ggs.space_dimension()) { -23376: construct(ggs); -23376: } -23376: -23376: template -23376: inline -23376: Grid::Grid(const BD_Shape& bd, Complexity_Class) -23376: : con_sys(check_space_dimension_overflow(bd.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(bd)", -23376: "the space dimension of bd " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(bd.space_dimension()) { -23376: Congruence_System cgs = bd.congruences(); -23376: construct(cgs); -23376: } -23376: -23376: template -23376: inline -23376: Grid::Grid(const Octagonal_Shape& os, Complexity_Class) -23376: : con_sys(check_space_dimension_overflow(os.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(os)", -23376: "the space dimension of os " -23376: "exceeds the maximum allowed " -23376: "space dimension")), -23376: gen_sys(os.space_dimension()) { -23376: Congruence_System cgs = os.congruences(); -23376: construct(cgs); -23376: } -23376: -23376: inline -23376: Grid::~Grid() { -23376: } -23376: -23376: inline dimension_type -23376: Grid::space_dimension() const { -23376: return space_dim; -23376: } -23376: -23376: inline memory_size_type -23376: Grid::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: inline int32_t -23376: Grid::hash_code() const { -23376: return hash_code_from_dimension(space_dimension()); -23376: } -23376: -23376: inline Constraint_System -23376: Grid::constraints() const { -23376: return Constraint_System(congruences()); -23376: } -23376: -23376: inline Constraint_System -23376: Grid::minimized_constraints() const { -23376: return Constraint_System(minimized_congruences()); -23376: } -23376: -23376: inline void -23376: Grid::m_swap(Grid& y) { -23376: using std::swap; -23376: swap(con_sys, y.con_sys); -23376: swap(gen_sys, y.gen_sys); -23376: swap(status, y.status); -23376: swap(space_dim, y.space_dim); -23376: swap(dim_kinds, y.dim_kinds); -23376: } -23376: -23376: inline void -23376: Grid::add_congruence(const Congruence& cg) { -23376: -23376: if (space_dim < cg.space_dimension()) { -23376: throw_dimension_incompatible("add_congruence(cg)", "cg", cg); -23376: } -23376: -23376: if (!marked_empty()) { -23376: add_congruence_no_check(cg); -23376: } -23376: } -23376: -23376: inline void -23376: Grid::add_congruences(const Congruence_System& cgs) { -23376: -23376: -23376: if (space_dim < cgs.space_dimension()) { -23376: throw_dimension_incompatible("add_congruences(cgs)", "cgs", cgs); -23376: } -23376: -23376: if (!marked_empty()) { -23376: Congruence_System cgs_copy = cgs; -23376: add_recycled_congruences(cgs_copy); -23376: } -23376: } -23376: -23376: inline void -23376: Grid::refine_with_congruence(const Congruence& cg) { -23376: add_congruence(cg); -23376: } -23376: -23376: inline void -23376: Grid::refine_with_congruences(const Congruence_System& cgs) { -23376: add_congruences(cgs); -23376: } -23376: -23376: inline bool -23376: Grid::can_recycle_constraint_systems() { -23376: return true; -23376: } -23376: -23376: inline bool -23376: Grid::can_recycle_congruence_systems() { -23376: return true; -23376: } -23376: -23376: inline void -23376: Grid::add_constraint(const Constraint& c) { -23376: -23376: if (space_dim < c.space_dimension()) { -23376: throw_dimension_incompatible("add_constraint(c)", "c", c); -23376: } -23376: if (!marked_empty()) { -23376: add_constraint_no_check(c); -23376: } -23376: } -23376: -23376: inline void -23376: Grid::add_recycled_constraints(Constraint_System& cs) { -23376: -23376: add_constraints(cs); -23376: } -23376: -23376: inline bool -23376: Grid::bounds_from_above(const Linear_Expression& expr) const { -23376: return bounds(expr, "bounds_from_above(e)"); -23376: } -23376: -23376: inline bool -23376: Grid::bounds_from_below(const Linear_Expression& expr) const { -23376: return bounds(expr, "bounds_from_below(e)"); -23376: } -23376: -23376: inline bool -23376: Grid::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const { -23376: return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum); -23376: } -23376: -23376: inline bool -23376: Grid::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& point) const { -23376: return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum, &point); -23376: } -23376: -23376: inline bool -23376: Grid::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const { -23376: return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum); -23376: } -23376: -23376: inline bool -23376: Grid::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& point) const { -23376: return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum, &point); -23376: } -23376: -23376: inline void -23376: Grid::normalize_divisors(Grid_Generator_System& sys) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_divisor; Parma_Polyhedra_Library::Coefficient& divisor = holder_divisor.item(); -23376: divisor = 1; -23376: normalize_divisors(sys, divisor); -23376: } -23376: -23376: -23376: inline bool -23376: operator!=(const Grid& x, const Grid& y) { -23376: return !(x == y); -23376: } -23376: -23376: inline bool -23376: Grid::strictly_contains(const Grid& y) const { -23376: const Grid& x = *this; -23376: return x.contains(y) && !y.contains(x); -23376: } -23376: -23376: inline void -23376: Grid::topological_closure_assign() { -23376: } -23376: -23376: -23376: inline void -23376: swap(Grid& x, Grid& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 2663 "../../src/Grid_defs.hh" 2 -23376: # 1 "../../src/Grid_templates.hh" 1 -23376: # 33 "../../src/Grid_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Grid::Grid(const Box& box, Complexity_Class) -23376: : con_sys(), -23376: gen_sys() { -23376: space_dim = check_space_dimension_overflow(box.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Grid::", -23376: "Grid(box, from_bounding_box)", -23376: "the space dimension of box " -23376: "exceeds the maximum allowed " -23376: "space dimension"); -23376: -23376: if (box.is_empty()) { -23376: -23376: set_empty(); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (space_dim == 0) { -23376: set_zero_dim_univ(); -23376: } -23376: else { -23376: -23376: con_sys.set_space_dimension(space_dim); -23376: gen_sys.set_space_dimension(space_dim); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item(); -23376: gen_sys.insert(grid_point()); -23376: for (dimension_type k = space_dim; k-- > 0; ) { -23376: const Variable v_k = Variable(k); -23376: bool closed = false; -23376: -23376: if (box.has_lower_bound(v_k, l_n, l_d, closed)) { -23376: if (box.has_upper_bound(v_k, u_n, u_d, closed)) { -23376: if (l_n * u_d == u_n * l_d) { -23376: -23376: -23376: con_sys.insert(l_d * v_k == l_n); -23376: -23376: -23376: -23376: Grid_Generator& point = gen_sys.sys.rows[0]; -23376: -23376: -23376: -23376: const Coefficient& point_divisor = point.divisor(); -23376: gcd_assign(u_n, l_d, point_divisor); -23376: -23376: exact_div_assign(u_n, point_divisor, u_n); -23376: if (l_d < 0) { -23376: neg_assign(u_n); -23376: } -23376: -23376: point.scale_to_divisor(l_d * u_n); -23376: -23376: if (l_d < 0) { -23376: neg_assign(u_n); -23376: } -23376: -23376: point.expr.set(Variable(k), l_n * u_n); -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: -23376: continue; -23376: } -23376: } -23376: } -23376: -23376: gen_sys.insert(grid_line(v_k)); -23376: } -23376: set_congruences_up_to_date(); -23376: set_generators_up_to_date(); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Grid::map_space_dimensions(const Partial_Function& pfunc) { -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: if (pfunc.has_empty_codomain()) { -23376: -23376: if (marked_empty() -23376: || (!generators_are_up_to_date() && !update_generators())) { -23376: -23376: space_dim = 0; -23376: set_empty(); -23376: } -23376: else { -23376: -23376: set_zero_dim_univ(); -23376: } -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: dimension_type new_space_dimension = pfunc.max_in_codomain() + 1; -23376: -23376: if (new_space_dimension == space_dim) { -23376: -23376: -23376: -23376: -23376: -23376: std::vector cycle; -23376: cycle.reserve(space_dim); -23376: -23376: -23376: std::deque visited(space_dim); -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: if (!visited[i]) { -23376: dimension_type j = i; -23376: do { -23376: visited[j] = true; -23376: -23376: dimension_type k = 0; -23376: if (!pfunc.maps(j, k)) { -23376: throw_invalid_argument("map_space_dimensions(pfunc)", -23376: " pfunc is inconsistent"); -23376: } -23376: if (k == j) { -23376: break; -23376: } -23376: -23376: cycle.push_back(Variable(j)); -23376: -23376: j = k; -23376: } while (!visited[j]); -23376: -23376: -23376: -23376: -23376: -23376: if (cycle.size() >= 2) { -23376: -23376: if (congruences_are_up_to_date()) { -23376: con_sys.permute_space_dimensions(cycle); -23376: clear_congruences_minimized(); -23376: } -23376: -23376: if (generators_are_up_to_date()) { -23376: gen_sys.permute_space_dimensions(cycle); -23376: clear_generators_minimized(); -23376: } -23376: } -23376: -23376: cycle.clear(); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: const Grid_Generator_System& old_gensys = grid_generators(); -23376: -23376: if (old_gensys.has_no_rows()) { -23376: -23376: Grid new_grid(new_space_dimension, EMPTY); -23376: m_swap(new_grid); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: std::vector pfunc_maps(space_dim, not_a_dimension()); -23376: for (dimension_type j = space_dim; j-- > 0; ) { -23376: dimension_type pfunc_j; -23376: if (pfunc.maps(j, pfunc_j)) { -23376: pfunc_maps[j] = pfunc_j; -23376: } -23376: } -23376: -23376: Grid_Generator_System new_gensys; -23376: -23376: new_gensys.set_sorted(false); -23376: -23376: Grid_Generator_System::const_iterator i; -23376: Grid_Generator_System::const_iterator old_gensys_end = old_gensys.end(); -23376: for (i = old_gensys.begin(); i != old_gensys_end; ++i) { -23376: if (i->is_point()) { -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: const Coefficient& system_divisor = i->divisor(); -23376: for (i = old_gensys.begin(); i != old_gensys_end; ++i) { -23376: const Grid_Generator& old_g = *i; -23376: const Grid_Generator::expr_type old_g_e = old_g.expression(); -23376: Linear_Expression expr; -23376: expr.set_space_dimension(new_space_dimension); -23376: bool all_zeroes = true; -23376: for (Grid_Generator::expr_type::const_iterator j = old_g_e.begin(), -23376: j_end = old_g_e.end(); j != j_end; ++j) { -23376: const dimension_type mapped_id = pfunc_maps[j.variable().id()]; -23376: if (mapped_id != not_a_dimension()) { -23376: add_mul_assign(expr, *j, Variable(mapped_id)); -23376: all_zeroes = false; -23376: } -23376: } -23376: switch (old_g.type()) { -23376: case Grid_Generator::LINE: -23376: if (!all_zeroes) { -23376: new_gensys.insert(grid_line(expr)); -23376: } -23376: break; -23376: case Grid_Generator::PARAMETER: -23376: if (!all_zeroes) { -23376: new_gensys.insert(parameter(expr, system_divisor)); -23376: } -23376: break; -23376: case Grid_Generator::POINT: -23376: new_gensys.insert(grid_point(expr, old_g.divisor())); -23376: break; -23376: } -23376: } -23376: -23376: Grid new_grid(new_gensys); -23376: m_swap(new_grid); -23376: -23376: ((void) 0); -23376: } -23376: -23376: -23376: -23376: template -23376: void -23376: Grid::reduce_reduced(Swapping_Vector& rows, -23376: const dimension_type dim, -23376: const dimension_type pivot_index, -23376: const dimension_type start, -23376: const dimension_type end, -23376: const Dimension_Kinds& sys_dim_kinds, -23376: const bool generators) { -23376: -23376: typedef typename M::row_type M_row_type; -23376: -23376: const M_row_type& pivot = rows[pivot_index]; -23376: const Coefficient& pivot_dim = pivot.expr.get(dim); -23376: -23376: if (pivot_dim == 0) { -23376: return; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_pivot_dim_half; Parma_Polyhedra_Library::Coefficient& pivot_dim_half = holder_pivot_dim_half.item(); -23376: pivot_dim_half = (pivot_dim + 1) / 2; -23376: const Dimension_Kind row_kind = sys_dim_kinds[dim]; -23376: const bool row_is_line_or_equality -23376: = (row_kind == (generators ? LINE : EQUALITY)); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_num_rows_to_subtract; Parma_Polyhedra_Library::Coefficient& num_rows_to_subtract = holder_num_rows_to_subtract.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_row_dim_remainder; Parma_Polyhedra_Library::Coefficient& row_dim_remainder = holder_row_dim_remainder.item(); -23376: for (dimension_type kinds_index = dim, -23376: row_index = pivot_index; row_index-- > 0; ) { -23376: if (generators) { -23376: --kinds_index; -23376: -23376: while (sys_dim_kinds[kinds_index] == GEN_VIRTUAL) { -23376: --kinds_index; -23376: } -23376: } -23376: else { -23376: ++kinds_index; -23376: -23376: while (sys_dim_kinds[kinds_index] == CON_VIRTUAL) { -23376: ++kinds_index; -23376: } -23376: } -23376: -23376: -23376: if (row_is_line_or_equality -23376: || (row_kind == PARAMETER -23376: && sys_dim_kinds[kinds_index] == PARAMETER)) { -23376: M_row_type& row = rows[row_index]; -23376: -23376: const Coefficient& row_dim = row.expr.get(dim); -23376: -23376: num_rows_to_subtract = row_dim / pivot_dim; -23376: -23376: -23376: -23376: -23376: -23376: row_dim_remainder = row_dim % pivot_dim; -23376: if (row_dim_remainder < 0) { -23376: if (row_dim_remainder <= -pivot_dim_half) { -23376: --num_rows_to_subtract; -23376: } -23376: } -23376: else if (row_dim_remainder > 0 && row_dim_remainder > pivot_dim_half) { -23376: ++num_rows_to_subtract; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: if (num_rows_to_subtract != 0) { -23376: row.expr.linear_combine(pivot.expr, -23376: Coefficient_one(), -num_rows_to_subtract, -23376: start, end + 1); -23376: } -23376: } -23376: } -23376: } -23376: -23376: } -23376: # 2664 "../../src/Grid_defs.hh" 2 -23376: # 36 "../../src/Box_templates.hh" 2 -23376: -23376: -23376: # 1 "../../src/BD_Shape_defs.hh" 1 -23376: # 44 "../../src/BD_Shape_defs.hh" -23376: # 1 "../../src/DB_Matrix_defs.hh" 1 -23376: # 27 "../../src/DB_Matrix_defs.hh" -23376: # 1 "../../src/DB_Matrix_types.hh" 1 -23376: # 16 "../../src/DB_Matrix_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class DB_Matrix; -23376: -23376: } -23376: # 28 "../../src/DB_Matrix_defs.hh" 2 -23376: -23376: # 1 "../../src/DB_Row_defs.hh" 1 -23376: # 27 "../../src/DB_Row_defs.hh" -23376: # 1 "../../src/DB_Row_types.hh" 1 -23376: # 16 "../../src/DB_Row_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class DB_Row_Impl_Handler; -23376: -23376: template -23376: class DB_Row; -23376: -23376: } -23376: # 28 "../../src/DB_Row_defs.hh" 2 -23376: -23376: # 1 "../../src/Ptr_Iterator_defs.hh" 1 -23376: # 27 "../../src/Ptr_Iterator_defs.hh" -23376: # 1 "../../src/Ptr_Iterator_types.hh" 1 -23376: # 16 "../../src/Ptr_Iterator_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: template -23376: class Ptr_Iterator; -23376: -23376: } -23376: -23376: } -23376: # 28 "../../src/Ptr_Iterator_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: template -23376: bool operator==(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: bool operator!=(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: bool operator<(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: bool operator<=(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: bool operator>(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: bool operator>=(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: typename Ptr_Iterator

::difference_type -23376: operator-(const Ptr_Iterator

& x, const Ptr_Iterator& y); -23376: -23376: template -23376: Ptr_Iterator

operator+(typename Ptr_Iterator

::difference_type m, -23376: const Ptr_Iterator

& y); -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: class Parma_Polyhedra_Library::Implementation::Ptr_Iterator -23376: : public std::iterator::iterator_category, -23376: typename std::iterator_traits

::value_type, -23376: typename std::iterator_traits

::difference_type, -23376: typename std::iterator_traits

::pointer, -23376: typename std::iterator_traits

::reference> { -23376: public: -23376: typedef typename std::iterator_traits

::difference_type difference_type; -23376: typedef typename std::iterator_traits

::reference reference; -23376: typedef typename std::iterator_traits

::pointer pointer; -23376: -23376: -23376: Ptr_Iterator(); -23376: -23376: -23376: explicit Ptr_Iterator(const P& q); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Ptr_Iterator(const Ptr_Iterator& q); -23376: -23376: -23376: reference operator*() const; -23376: -23376: -23376: pointer operator->() const; -23376: -23376: -23376: reference operator[](const difference_type m) const; -23376: -23376: -23376: Ptr_Iterator& operator++(); -23376: -23376: -23376: Ptr_Iterator operator++(int); -23376: -23376: -23376: Ptr_Iterator& operator--(); -23376: -23376: -23376: Ptr_Iterator operator--(int); -23376: -23376: -23376: Ptr_Iterator& operator+=(const difference_type m); -23376: -23376: -23376: Ptr_Iterator& operator-=(const difference_type m); -23376: -23376: -23376: difference_type operator-(const Ptr_Iterator& y) const; -23376: -23376: -23376: Ptr_Iterator operator+(const difference_type m) const; -23376: -23376: -23376: Ptr_Iterator operator-(const difference_type m) const; -23376: -23376: private: -23376: -23376: P p; -23376: -23376: -23376: const P& base() const; -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator==(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator!=(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator<(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator<=(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator>(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library::Implementation:: -23376: operator>=(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: template -23376: friend typename Ptr_Iterator::difference_type -23376: Parma_Polyhedra_Library::Implementation:: -23376: operator-(const Ptr_Iterator& x, const Ptr_Iterator& y); -23376: -23376: friend Ptr_Iterator

-23376: Parma_Polyhedra_Library::Implementation:: -23376: operator+<>(typename Ptr_Iterator

::difference_type m, -23376: const Ptr_Iterator

& y); -23376: }; -23376: -23376: # 1 "../../src/Ptr_Iterator_inlines.hh" 1 -23376: # 27 "../../src/Ptr_Iterator_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: template -23376: inline const P& -23376: Ptr_Iterator

::base() const { -23376: return p; -23376: } -23376: -23376: template -23376: inline -23376: Ptr_Iterator

::Ptr_Iterator() -23376: : p(P()) { -23376: } -23376: -23376: template -23376: inline -23376: Ptr_Iterator

::Ptr_Iterator(const P& q) -23376: : p(q) { -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Ptr_Iterator

::Ptr_Iterator(const Ptr_Iterator& q) -23376: : p(q.base()) { -23376: } -23376: -23376: template -23376: inline typename Ptr_Iterator

::reference -23376: Ptr_Iterator

::operator*() const { -23376: return *p; -23376: } -23376: -23376: template -23376: inline typename Ptr_Iterator

::pointer -23376: Ptr_Iterator

::operator->() const { -23376: return p; -23376: } -23376: -23376: template -23376: inline typename Ptr_Iterator

::reference -23376: Ptr_Iterator

::operator[](const difference_type m) const { -23376: return p[m]; -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

& -23376: Ptr_Iterator

::operator++() { -23376: ++p; -23376: return *this; -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

-23376: Ptr_Iterator

::operator++(int) { -23376: return Ptr_Iterator(p++); -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

& -23376: Ptr_Iterator

::operator--() { -23376: --p; -23376: return *this; -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

-23376: Ptr_Iterator

::operator--(int) { -23376: return Ptr_Iterator(p--); -23376: } -23376: -23376: -23376: template -23376: inline Ptr_Iterator

& -23376: Ptr_Iterator

::operator+=(const difference_type m) { -23376: p += m; -23376: return *this; -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

& -23376: Ptr_Iterator

::operator-=(const difference_type m) { -23376: p -= m; -23376: return *this; -23376: } -23376: -23376: template -23376: inline typename Ptr_Iterator

::difference_type -23376: Ptr_Iterator

::operator-(const Ptr_Iterator& y) const { -23376: return p - y.p; -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

-23376: Ptr_Iterator

::operator+(const difference_type m) const { -23376: return Ptr_Iterator(p + m); -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

-23376: Ptr_Iterator

::operator-(const difference_type m) const { -23376: return Ptr_Iterator(p - m); -23376: } -23376: -23376: template -23376: inline bool -23376: operator==(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() == y.base(); -23376: } -23376: -23376: template -23376: inline bool -23376: operator!=(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() != y.base(); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() < y.base(); -23376: } -23376: -23376: template -23376: inline bool -23376: operator<=(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() <= y.base(); -23376: } -23376: -23376: template -23376: inline bool -23376: operator>(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() > y.base(); -23376: } -23376: -23376: template -23376: inline bool -23376: operator>=(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() >= y.base(); -23376: } -23376: -23376: template -23376: inline typename Ptr_Iterator

::difference_type -23376: operator-(const Ptr_Iterator

& x, const Ptr_Iterator& y) { -23376: return x.base() - y.base(); -23376: } -23376: -23376: template -23376: inline Ptr_Iterator

-23376: operator+(typename Ptr_Iterator

::difference_type m, -23376: const Ptr_Iterator

& y) { -23376: return Ptr_Iterator

(m + y.base()); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 171 "../../src/Ptr_Iterator_defs.hh" 2 -23376: # 30 "../../src/DB_Row_defs.hh" 2 -23376: # 57 "../../src/DB_Row_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::DB_Row_Impl_Handler { -23376: public: -23376: -23376: DB_Row_Impl_Handler(); -23376: -23376: -23376: ~DB_Row_Impl_Handler(); -23376: -23376: class Impl; -23376: -23376: -23376: Impl* impl; -23376: -23376: -23376: -23376: -23376: -23376: -23376: private: -23376: -23376: DB_Row_Impl_Handler(const DB_Row_Impl_Handler&); -23376: -23376: -23376: DB_Row_Impl_Handler& operator=(const DB_Row_Impl_Handler&); -23376: }; -23376: # 119 "../../src/DB_Row_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::DB_Row : private DB_Row_Impl_Handler { -23376: public: -23376: -23376: DB_Row(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void construct(dimension_type sz); -23376: # 145 "../../src/DB_Row_defs.hh" -23376: void construct(dimension_type sz, dimension_type capacity); -23376: # 159 "../../src/DB_Row_defs.hh" -23376: template -23376: void construct_upward_approximation(const DB_Row& y, -23376: dimension_type capacity); -23376: -23376: -23376: -23376: -23376: DB_Row(dimension_type sz); -23376: -23376: -23376: DB_Row(dimension_type sz, dimension_type capacity); -23376: -23376: -23376: DB_Row(const DB_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: DB_Row(const DB_Row& y, dimension_type capacity); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: DB_Row(const DB_Row& y, dimension_type sz, dimension_type capacity); -23376: -23376: -23376: ~DB_Row(); -23376: -23376: -23376: DB_Row& operator=(const DB_Row& y); -23376: -23376: -23376: void m_swap(DB_Row& y); -23376: -23376: -23376: void assign(DB_Row& y); -23376: # 208 "../../src/DB_Row_defs.hh" -23376: void allocate(dimension_type capacity); -23376: # 218 "../../src/DB_Row_defs.hh" -23376: void expand_within_capacity(dimension_type new_size); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void shrink(dimension_type new_size); -23376: -23376: -23376: static dimension_type max_size(); -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: -23376: -23376: T& operator[](dimension_type k); -23376: -23376: -23376: const T& operator[](dimension_type k) const; -23376: -23376: -23376: -23376: typedef Implementation::Ptr_Iterator iterator; -23376: -23376: -23376: typedef Implementation::Ptr_Iterator const_iterator; -23376: -23376: -23376: -23376: -23376: -23376: -23376: iterator begin(); -23376: -23376: -23376: iterator end(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type external_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: bool OK(dimension_type row_size, dimension_type row_capacity) const; -23376: -23376: private: -23376: template friend class Parma_Polyhedra_Library::DB_Row; -23376: -23376: -23376: void copy_construct_coefficients(const DB_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void swap(DB_Row& x, DB_Row& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void iter_swap(typename std::vector >::iterator x, -23376: typename std::vector >::iterator y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const DB_Row& x, const DB_Row& y); -23376: -23376: -23376: template -23376: bool operator!=(const DB_Row& x, const DB_Row& y); -23376: -23376: -23376: -23376: -23376: } -23376: # 351 "../../src/DB_Row_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::DB_Row_Impl_Handler::Impl { -23376: public: -23376: # 362 "../../src/DB_Row_defs.hh" -23376: static void* operator new(size_t fixed_size, dimension_type capacity); -23376: -23376: -23376: static void operator delete(void* p); -23376: -23376: -23376: -23376: -23376: -23376: static void operator delete(void* p, dimension_type capacity); -23376: -23376: -23376: -23376: Impl(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: ~Impl(); -23376: -23376: -23376: -23376: -23376: -23376: void expand_within_capacity(dimension_type new_size); -23376: -23376: -23376: -23376: -23376: -23376: void shrink(dimension_type new_size); -23376: -23376: -23376: void copy_construct_coefficients(const Impl& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void construct_upward_approximation(const U& y); -23376: -23376: -23376: static dimension_type max_size(); -23376: -23376: -23376: -23376: -23376: dimension_type size() const; -23376: -23376: -23376: void set_size(dimension_type new_sz); -23376: -23376: -23376: void bump_size(); -23376: -23376: -23376: -23376: -23376: -23376: T& operator[](dimension_type k); -23376: -23376: -23376: const T& operator[](dimension_type k) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type total_memory_in_bytes(dimension_type capacity) const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: private: -23376: friend class DB_Row; -23376: -23376: -23376: dimension_type size_; -23376: -23376: -23376: T vec_[ -23376: -23376: 0 -23376: -23376: -23376: -23376: ]; -23376: -23376: -23376: Impl(const Impl& y); -23376: -23376: -23376: Impl& operator=(const Impl&); -23376: -23376: -23376: void copy_construct(const Impl& y); -23376: }; -23376: -23376: # 1 "../../src/DB_Row_inlines.hh" 1 -23376: # 34 "../../src/DB_Row_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline void* -23376: DB_Row_Impl_Handler::Impl::operator new(const size_t fixed_size, -23376: const dimension_type capacity) { -23376: -23376: return ::operator new(fixed_size + capacity*sizeof(T)); -23376: -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row_Impl_Handler::Impl::operator delete(void* p) { -23376: ::operator delete(p); -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row_Impl_Handler::Impl::operator delete(void* p, dimension_type) { -23376: ::operator delete(p); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row_Impl_Handler::Impl -23376: ::total_memory_in_bytes(dimension_type capacity) const { -23376: return -23376: sizeof(*this) -23376: + capacity*sizeof(T) -23376: -23376: -23376: -23376: + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row_Impl_Handler::Impl::total_memory_in_bytes() const { -23376: -23376: -23376: return total_memory_in_bytes(size_); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Row_Impl_Handler::Impl::max_size() { -23376: return std::numeric_limits::max() / sizeof(T); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Row_Impl_Handler::Impl::size() const { -23376: return size_; -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row_Impl_Handler::Impl::set_size(const dimension_type new_sz) { -23376: size_ = new_sz; -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row_Impl_Handler::Impl::bump_size() { -23376: ++size_; -23376: } -23376: -23376: template -23376: inline -23376: DB_Row_Impl_Handler::Impl::Impl() -23376: : size_(0) { -23376: } -23376: -23376: template -23376: inline -23376: DB_Row_Impl_Handler::Impl::~Impl() { -23376: shrink(0); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row_Impl_Handler::DB_Row_Impl_Handler() -23376: : impl(0) { -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline -23376: DB_Row_Impl_Handler::~DB_Row_Impl_Handler() { -23376: delete impl; -23376: } -23376: -23376: template -23376: inline T& -23376: DB_Row_Impl_Handler::Impl::operator[](const dimension_type k) { -23376: ((void) 0); -23376: return vec_[k]; -23376: } -23376: -23376: template -23376: inline const T& -23376: DB_Row_Impl_Handler::Impl::operator[](const dimension_type k) const { -23376: ((void) 0); -23376: return vec_[k]; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Row::max_size() { -23376: return DB_Row_Impl_Handler::Impl::max_size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Row::size() const { -23376: return this->impl->size(); -23376: } -23376: # 166 "../../src/DB_Row_inlines.hh" -23376: template -23376: inline -23376: DB_Row::DB_Row() -23376: : DB_Row_Impl_Handler() { -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::allocate( -23376: -23376: const -23376: -23376: dimension_type capacity) { -23376: DB_Row& x = *this; -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: x.impl = new(capacity) typename DB_Row_Impl_Handler::Impl(); -23376: -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::expand_within_capacity(const dimension_type new_size) { -23376: DB_Row& x = *this; -23376: ((void) 0); -23376: -23376: -23376: -23376: x.impl->expand_within_capacity(new_size); -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::copy_construct_coefficients(const DB_Row& y) { -23376: DB_Row& x = *this; -23376: ((void) 0); -23376: -23376: -23376: -23376: x.impl->copy_construct_coefficients(*(y.impl)); -23376: } -23376: -23376: template -23376: template -23376: inline void -23376: DB_Row::construct_upward_approximation(const DB_Row& y, -23376: const dimension_type capacity) { -23376: DB_Row& x = *this; -23376: ((void) 0); -23376: allocate(capacity); -23376: ((void) 0); -23376: x.impl->construct_upward_approximation(*(y.impl)); -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::construct(const dimension_type sz, -23376: const dimension_type capacity) { -23376: ((void) 0); -23376: allocate(capacity); -23376: expand_within_capacity(sz); -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::construct(const dimension_type sz) { -23376: construct(sz, sz); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::DB_Row(const dimension_type sz, -23376: const dimension_type capacity) -23376: : DB_Row_Impl_Handler() { -23376: construct(sz, capacity); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::DB_Row(const dimension_type sz) { -23376: construct(sz); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::DB_Row(const DB_Row& y) -23376: : DB_Row_Impl_Handler() { -23376: if (y.impl != 0) { -23376: allocate(compute_capacity(y.size(), max_size())); -23376: copy_construct_coefficients(y); -23376: } -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::DB_Row(const DB_Row& y, -23376: const dimension_type capacity) -23376: : DB_Row_Impl_Handler() { -23376: ((void) 0); -23376: ((void) 0); -23376: allocate(capacity); -23376: copy_construct_coefficients(y); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::DB_Row(const DB_Row& y, -23376: const dimension_type sz, -23376: const dimension_type capacity) -23376: : DB_Row_Impl_Handler() { -23376: ((void) 0); -23376: ((void) 0); -23376: allocate(capacity); -23376: copy_construct_coefficients(y); -23376: expand_within_capacity(sz); -23376: } -23376: -23376: template -23376: inline -23376: DB_Row::~DB_Row() { -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::shrink(const dimension_type new_size) { -23376: DB_Row& x = *this; -23376: ((void) 0); -23376: x.impl->shrink(new_size); -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::m_swap(DB_Row& y) { -23376: using std::swap; -23376: DB_Row& x = *this; -23376: swap(x.impl, y.impl); -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline void -23376: DB_Row::assign(DB_Row& y) { -23376: DB_Row& x = *this; -23376: x.impl = y.impl; -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: inline DB_Row& -23376: DB_Row::operator=(const DB_Row& y) { -23376: DB_Row tmp(y); -23376: m_swap(tmp); -23376: return *this; -23376: } -23376: -23376: template -23376: inline T& -23376: DB_Row::operator[](const dimension_type k) { -23376: DB_Row& x = *this; -23376: return (*x.impl)[k]; -23376: } -23376: -23376: template -23376: inline const T& -23376: DB_Row::operator[](const dimension_type k) const { -23376: const DB_Row& x = *this; -23376: return (*x.impl)[k]; -23376: } -23376: -23376: template -23376: inline typename DB_Row::iterator -23376: DB_Row::begin() { -23376: DB_Row& x = *this; -23376: return iterator(x.impl->vec_); -23376: } -23376: -23376: template -23376: inline typename DB_Row::iterator -23376: DB_Row::end() { -23376: DB_Row& x = *this; -23376: return iterator(x.impl->vec_ + x.impl->size_); -23376: } -23376: -23376: template -23376: inline typename DB_Row::const_iterator -23376: DB_Row::begin() const { -23376: const DB_Row& x = *this; -23376: return const_iterator(x.impl->vec_); -23376: } -23376: -23376: template -23376: inline typename DB_Row::const_iterator -23376: DB_Row::end() const { -23376: const DB_Row& x = *this; -23376: return const_iterator(x.impl->vec_ + x.impl->size_); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row::external_memory_in_bytes(dimension_type capacity) const { -23376: const DB_Row& x = *this; -23376: return x.impl->total_memory_in_bytes(capacity); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row::total_memory_in_bytes(dimension_type capacity) const { -23376: return sizeof(*this) + external_memory_in_bytes(capacity); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row::external_memory_in_bytes() const { -23376: const DB_Row& x = *this; -23376: -23376: -23376: -23376: return x.impl->total_memory_in_bytes(); -23376: -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Row::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const DB_Row& x, const DB_Row& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(DB_Row& x, DB_Row& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: iter_swap(typename std::vector >::iterator x, -23376: typename std::vector >::iterator y) { -23376: swap(*x, *y); -23376: } -23376: -23376: } -23376: # 468 "../../src/DB_Row_defs.hh" 2 -23376: # 1 "../../src/DB_Row_templates.hh" 1 -23376: # 29 "../../src/DB_Row_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: template -23376: void -23376: DB_Row_Impl_Handler::Impl::construct_upward_approximation(const U& y) { -23376: const dimension_type y_size = y.size(); -23376: -23376: -23376: for (dimension_type i = 0; i < y_size; ++i) { -23376: construct(vec_[i], y[i], ROUND_UP); -23376: bump_size(); -23376: } -23376: # 53 "../../src/DB_Row_templates.hh" -23376: } -23376: -23376: template -23376: void -23376: DB_Row_Impl_Handler:: -23376: Impl::expand_within_capacity(const dimension_type new_size) { -23376: ((void) 0); -23376: # 68 "../../src/DB_Row_templates.hh" -23376: for (dimension_type i = size(); i < new_size; ++i) { -23376: new(&vec_[i]) T(PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: bump_size(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: DB_Row_Impl_Handler::Impl::shrink(dimension_type new_size) { -23376: const dimension_type old_size = size(); -23376: ((void) 0); -23376: -23376: set_size(new_size); -23376: # 89 "../../src/DB_Row_templates.hh" -23376: for (dimension_type i = old_size; i-- > new_size; ) { -23376: vec_[i].~T(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: DB_Row_Impl_Handler::Impl::copy_construct_coefficients(const Impl& y) { -23376: const dimension_type y_size = y.size(); -23376: -23376: -23376: for (dimension_type i = 0; i < y_size; ++i) { -23376: new(&vec_[i]) T(y.vec_[i]); -23376: bump_size(); -23376: } -23376: # 115 "../../src/DB_Row_templates.hh" -23376: } -23376: -23376: template -23376: memory_size_type -23376: DB_Row_Impl_Handler::Impl::external_memory_in_bytes() const { -23376: memory_size_type n = 0; -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: n += Parma_Polyhedra_Library::external_memory_in_bytes(vec_[i]); -23376: } -23376: return n; -23376: } -23376: -23376: template -23376: bool -23376: DB_Row::OK(const dimension_type row_size, -23376: const dimension_type -23376: -23376: -23376: -23376: ) const { -23376: -23376: -23376: -23376: -23376: -23376: const DB_Row& x = *this; -23376: bool is_broken = false; -23376: # 163 "../../src/DB_Row_templates.hh" -23376: if (x.size() != row_size) { -23376: -23376: -23376: -23376: -23376: -23376: is_broken = true; -23376: } -23376: # 183 "../../src/DB_Row_templates.hh" -23376: for (dimension_type i = x.size(); i-- > 0; ) { -23376: const T& element = x[i]; -23376: -23376: if (!element.OK()) { -23376: is_broken = true; -23376: break; -23376: } -23376: -23376: if (is_not_a_number(element)) { -23376: -23376: -23376: -23376: -23376: is_broken = true; -23376: break; -23376: } -23376: } -23376: -23376: return !is_broken; -23376: } -23376: -23376: -23376: template -23376: bool -23376: operator==(const DB_Row& x, const DB_Row& y) { -23376: if (x.size() != y.size()) { -23376: return false; -23376: } -23376: for (dimension_type i = x.size(); i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: } -23376: # 469 "../../src/DB_Row_defs.hh" 2 -23376: # 30 "../../src/DB_Matrix_defs.hh" 2 -23376: -23376: -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& s, const DB_Matrix& c); -23376: -23376: } -23376: -23376: } -23376: # 61 "../../src/DB_Matrix_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::DB_Matrix { -23376: public: -23376: -23376: static dimension_type max_num_rows(); -23376: -23376: -23376: static dimension_type max_num_columns(); -23376: -23376: -23376: -23376: -23376: -23376: DB_Matrix(); -23376: -23376: -23376: explicit DB_Matrix(dimension_type n_rows); -23376: -23376: -23376: DB_Matrix(const DB_Matrix& y); -23376: -23376: -23376: template -23376: explicit DB_Matrix(const DB_Matrix& y); -23376: -23376: -23376: ~DB_Matrix(); -23376: -23376: -23376: DB_Matrix& operator=(const DB_Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: class const_iterator { -23376: private: -23376: typedef typename std::vector >::const_iterator Iter; -23376: -23376: Iter i; -23376: -23376: public: -23376: typedef std::forward_iterator_tag iterator_category; -23376: typedef typename std::iterator_traits::value_type value_type; -23376: typedef typename std::iterator_traits::difference_type -23376: difference_type; -23376: typedef typename std::iterator_traits::pointer pointer; -23376: typedef typename std::iterator_traits::reference reference; -23376: -23376: -23376: const_iterator(); -23376: -23376: -23376: -23376: -23376: -23376: explicit const_iterator(const Iter& b); -23376: -23376: -23376: const_iterator(const const_iterator& y); -23376: -23376: -23376: const_iterator& operator=(const const_iterator& y); -23376: -23376: -23376: reference operator*() const; -23376: -23376: -23376: pointer operator->() const; -23376: -23376: -23376: const_iterator& operator++(); -23376: -23376: -23376: const_iterator operator++(int); -23376: -23376: -23376: -23376: -23376: -23376: bool operator==(const const_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const const_iterator& y) const; -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_iterator begin() const; -23376: -23376: -23376: const_iterator end() const; -23376: -23376: private: -23376: template friend class DB_Matrix; -23376: -23376: -23376: std::vector > rows; -23376: -23376: -23376: dimension_type row_size; -23376: -23376: -23376: -23376: -23376: -23376: dimension_type row_capacity; -23376: -23376: public: -23376: -23376: void m_swap(DB_Matrix& y); -23376: # 188 "../../src/DB_Matrix_defs.hh" -23376: void grow(dimension_type new_n_rows); -23376: # 198 "../../src/DB_Matrix_defs.hh" -23376: void resize_no_copy(dimension_type new_n_rows); -23376: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: -23376: -23376: DB_Row& operator[](dimension_type k); -23376: -23376: -23376: const DB_Row& operator[](dimension_type k) const; -23376: -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: bool OK() const; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void swap(DB_Matrix& x, DB_Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const DB_Matrix& x, const DB_Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const DB_Matrix& x, const DB_Matrix& y); -23376: # 267 "../../src/DB_Matrix_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 289 "../../src/DB_Matrix_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 311 "../../src/DB_Matrix_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: } -23376: -23376: # 1 "../../src/DB_Matrix_inlines.hh" 1 -23376: # 33 "../../src/DB_Matrix_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline void -23376: DB_Matrix::m_swap(DB_Matrix& y) { -23376: using std::swap; -23376: swap(rows, y.rows); -23376: swap(row_size, y.row_size); -23376: swap(row_capacity, y.row_capacity); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Matrix::max_num_rows() { -23376: return std::vector >().max_size(); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Matrix::max_num_columns() { -23376: return DB_Row::max_size(); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: DB_Matrix::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::const_iterator::const_iterator() -23376: : i(Iter()) { -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::const_iterator::const_iterator(const Iter& b) -23376: : i(b) { -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::const_iterator::const_iterator(const const_iterator& y) -23376: : i(y.i) { -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator& -23376: DB_Matrix::const_iterator::operator=(const const_iterator& y) { -23376: i = y.i; -23376: return *this; -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator::reference -23376: DB_Matrix::const_iterator::operator*() const { -23376: return *i; -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator::pointer -23376: DB_Matrix::const_iterator::operator->() const { -23376: return &*i; -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator& -23376: DB_Matrix::const_iterator::operator++() { -23376: ++i; -23376: return *this; -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator -23376: DB_Matrix::const_iterator::operator++(int) { -23376: return const_iterator(i++); -23376: } -23376: -23376: template -23376: inline bool -23376: DB_Matrix::const_iterator::operator==(const const_iterator& y) const { -23376: return i == y.i; -23376: } -23376: -23376: template -23376: inline bool -23376: DB_Matrix::const_iterator::operator!=(const const_iterator& y) const { -23376: return !operator==(y); -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator -23376: DB_Matrix::begin() const { -23376: return const_iterator(rows.begin()); -23376: } -23376: -23376: template -23376: inline typename DB_Matrix::const_iterator -23376: DB_Matrix::end() const { -23376: return const_iterator(rows.end()); -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::DB_Matrix() -23376: : rows(), -23376: row_size(0), -23376: row_capacity(0) { -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::~DB_Matrix() { -23376: } -23376: -23376: template -23376: inline DB_Row& -23376: DB_Matrix::operator[](const dimension_type k) { -23376: ((void) 0); -23376: return rows[k]; -23376: } -23376: -23376: template -23376: inline const DB_Row& -23376: DB_Matrix::operator[](const dimension_type k) const { -23376: ((void) 0); -23376: return rows[k]; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: DB_Matrix::num_rows() const { -23376: return rows.size(); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const DB_Matrix& x, const DB_Matrix& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline -23376: DB_Matrix::DB_Matrix(const DB_Matrix& y) -23376: : rows(y.rows), -23376: row_size(y.row_size), -23376: row_capacity(compute_capacity(y.row_size, max_num_columns())) { -23376: } -23376: -23376: template -23376: inline DB_Matrix& -23376: DB_Matrix::operator=(const DB_Matrix& y) { -23376: -23376: -23376: -23376: -23376: if (this != &y) { -23376: -23376: rows = y.rows; -23376: row_size = y.row_size; -23376: -23376: -23376: row_capacity = compute_capacity(y.row_size, max_num_columns()); -23376: } -23376: return *this; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: l_m_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: const dimension_type x_num_rows = x.num_rows(); -23376: if (x_num_rows != y.num_rows()) { -23376: return false; -23376: } -23376: assign_r(tmp0, 0, ROUND_NOT_NEEDED); -23376: for (dimension_type i = x_num_rows; i-- > 0; ) { -23376: const DB_Row& x_i = x[i]; -23376: const DB_Row& y_i = y[i]; -23376: for (dimension_type j = x_num_rows; j-- > 0; ) { -23376: const T& x_i_j = x_i[j]; -23376: const T& y_i_j = y_i[j]; -23376: if (is_plus_infinity(x_i_j)) { -23376: if (is_plus_infinity(y_i_j)) { -23376: continue; -23376: } -23376: else { -23376: pinf: -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: return true; -23376: } -23376: } -23376: else if (is_plus_infinity(y_i_j)) { -23376: goto pinf; -23376: } -23376: const Temp* tmp1p; -23376: const Temp* tmp2p; -23376: if (x_i_j > y_i_j) { -23376: maybe_assign(tmp1p, tmp1, x_i_j, dir); -23376: maybe_assign(tmp2p, tmp2, y_i_j, inverse(dir)); -23376: } -23376: else { -23376: maybe_assign(tmp1p, tmp1, y_i_j, dir); -23376: maybe_assign(tmp2p, tmp2, x_i_j, inverse(dir)); -23376: } -23376: sub_assign_r(tmp1, *tmp1p, *tmp2p, dir); -23376: ((void) 0); -23376: Specialization::combine(tmp0, tmp1, dir); -23376: } -23376: } -23376: Specialization::finalize(tmp0, dir); -23376: assign_r(r, tmp0, dir); -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const DB_Matrix& x, -23376: const DB_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline void -23376: swap(DB_Matrix& x, DB_Matrix& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 323 "../../src/DB_Matrix_defs.hh" 2 -23376: # 1 "../../src/DB_Matrix_templates.hh" 1 -23376: # 27 "../../src/DB_Matrix_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: DB_Matrix::DB_Matrix(const dimension_type n_rows) -23376: : rows(n_rows), -23376: row_size(n_rows), -23376: row_capacity(compute_capacity(n_rows, max_num_columns())) { -23376: -23376: for (dimension_type i = 0; i < n_rows; ++i) { -23376: rows[i].construct(n_rows, row_capacity); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: DB_Matrix::DB_Matrix(const DB_Matrix& y) -23376: : rows(y.rows.size()), -23376: row_size(y.row_size), -23376: row_capacity(compute_capacity(y.row_size, max_num_columns())) { -23376: -23376: for (dimension_type i = 0, n_rows = rows.size(); i < n_rows; ++i) { -23376: rows[i].construct_upward_approximation(y[i], row_capacity); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: DB_Matrix::grow(const dimension_type new_n_rows) { -23376: const dimension_type old_n_rows = rows.size(); -23376: ((void) 0); -23376: -23376: if (new_n_rows > old_n_rows) { -23376: if (new_n_rows <= row_capacity) { -23376: -23376: if (rows.capacity() < new_n_rows) { -23376: -23376: std::vector > new_rows; -23376: new_rows.reserve(compute_capacity(new_n_rows, max_num_rows())); -23376: new_rows.insert(new_rows.end(), new_n_rows, DB_Row()); -23376: -23376: dimension_type i = new_n_rows; -23376: while (i-- > old_n_rows) { -23376: new_rows[i].construct(new_n_rows, row_capacity); -23376: } -23376: -23376: ++i; -23376: while (i-- > 0) { -23376: swap(new_rows[i], rows[i]); -23376: } -23376: -23376: using std::swap; -23376: swap(rows, new_rows); -23376: } -23376: else { -23376: -23376: rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row()); -23376: for (dimension_type i = new_n_rows; i-- > old_n_rows; ) { -23376: rows[i].construct(new_n_rows, row_capacity); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: DB_Matrix new_matrix; -23376: new_matrix.rows.reserve(compute_capacity(new_n_rows, max_num_rows())); -23376: new_matrix.rows.insert(new_matrix.rows.end(), new_n_rows, DB_Row()); -23376: -23376: new_matrix.row_size = new_n_rows; -23376: new_matrix.row_capacity = compute_capacity(new_n_rows, -23376: max_num_columns()); -23376: dimension_type i = new_n_rows; -23376: while (i-- > old_n_rows) { -23376: new_matrix.rows[i].construct(new_matrix.row_size, -23376: new_matrix.row_capacity); -23376: } -23376: -23376: ++i; -23376: while (i-- > 0) { -23376: -23376: DB_Row new_row(rows[i], -23376: new_matrix.row_size, -23376: new_matrix.row_capacity); -23376: swap(new_matrix.rows[i], new_row); -23376: } -23376: -23376: m_swap(new_matrix); -23376: return; -23376: } -23376: } -23376: -23376: if (new_n_rows > row_size) { -23376: -23376: if (new_n_rows <= row_capacity) { -23376: -23376: for (dimension_type i = old_n_rows; i-- > 0; ) { -23376: rows[i].expand_within_capacity(new_n_rows); -23376: } -23376: } -23376: else { -23376: -23376: -23376: const dimension_type new_row_capacity -23376: = compute_capacity(new_n_rows, max_num_columns()); -23376: for (dimension_type i = old_n_rows; i-- > 0; ) { -23376: -23376: DB_Row new_row(rows[i], new_n_rows, new_row_capacity); -23376: swap(rows[i], new_row); -23376: } -23376: row_capacity = new_row_capacity; -23376: } -23376: -23376: row_size = new_n_rows; -23376: } -23376: } -23376: -23376: template -23376: void -23376: DB_Matrix::resize_no_copy(const dimension_type new_n_rows) { -23376: dimension_type old_n_rows = rows.size(); -23376: -23376: if (new_n_rows > old_n_rows) { -23376: -23376: if (new_n_rows <= row_capacity) { -23376: -23376: if (rows.capacity() < new_n_rows) { -23376: -23376: std::vector > new_rows; -23376: new_rows.reserve(compute_capacity(new_n_rows, max_num_rows())); -23376: new_rows.insert(new_rows.end(), new_n_rows, DB_Row()); -23376: -23376: -23376: dimension_type i = new_n_rows; -23376: while (i-- > old_n_rows) { -23376: new_rows[i].construct(new_n_rows, row_capacity); -23376: -23376: } -23376: ++i; -23376: while (i-- > 0) { -23376: swap(new_rows[i], rows[i]); -23376: } -23376: -23376: using std::swap; -23376: swap(rows, new_rows); -23376: } -23376: else { -23376: -23376: rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row()); -23376: -23376: -23376: for (dimension_type i = new_n_rows; i-- > old_n_rows; ) { -23376: rows[i].construct(new_n_rows, row_capacity); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: DB_Matrix new_matrix(new_n_rows); -23376: m_swap(new_matrix); -23376: return; -23376: } -23376: } -23376: else if (new_n_rows < old_n_rows) { -23376: -23376: rows.resize(new_n_rows); -23376: -23376: for (dimension_type i = new_n_rows; i-- > 0; ) { -23376: rows[i].shrink(new_n_rows); -23376: } -23376: old_n_rows = new_n_rows; -23376: } -23376: -23376: if (new_n_rows > row_size) { -23376: -23376: if (new_n_rows <= row_capacity) { -23376: -23376: for (dimension_type i = old_n_rows; i-- > 0; ) { -23376: rows[i].expand_within_capacity(new_n_rows); -23376: } -23376: } -23376: else { -23376: -23376: -23376: const dimension_type new_row_capacity -23376: = compute_capacity(new_n_rows, max_num_columns()); -23376: for (dimension_type i = old_n_rows; i-- > 0; ) { -23376: DB_Row new_row(new_n_rows, new_row_capacity); -23376: swap(rows[i], new_row); -23376: } -23376: row_capacity = new_row_capacity; -23376: } -23376: } -23376: -23376: row_size = new_n_rows; -23376: } -23376: -23376: template -23376: void -23376: DB_Matrix::ascii_dump(std::ostream& s) const { -23376: const DB_Matrix& x = *this; -23376: const char separator = ' '; -23376: const dimension_type nrows = x.num_rows(); -23376: s << nrows << separator << "\n"; -23376: for (dimension_type i = 0; i < nrows; ++i) { -23376: for (dimension_type j = 0; j < nrows; ++j) { -23376: using namespace IO_Operators; -23376: s << x[i][j] << separator; -23376: } -23376: s << "\n"; -23376: } -23376: } -23376: -23376: template void DB_Matrix::ascii_dump() const { ascii_dump(std::cerr); } template void DB_Matrix::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: bool -23376: DB_Matrix::ascii_load(std::istream& s) { -23376: dimension_type nrows; -23376: if (!(s >> nrows)) { -23376: return false; -23376: } -23376: resize_no_copy(nrows); -23376: DB_Matrix& x = *this; -23376: for (dimension_type i = 0; i < nrows; ++i) { -23376: for (dimension_type j = 0; j < nrows; ++j) { -23376: Result r = input(x[i][j], s, ROUND_CHECK); -23376: if (result_relation(r) != VR_EQ || is_minus_infinity(x[i][j])) { -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: operator==(const DB_Matrix& x, const DB_Matrix& y) { -23376: const dimension_type x_num_rows = x.num_rows(); -23376: if (x_num_rows != y.num_rows()) { -23376: return false; -23376: } -23376: for (dimension_type i = x_num_rows; i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: memory_size_type -23376: DB_Matrix::external_memory_in_bytes() const { -23376: memory_size_type n = rows.capacity() * sizeof(DB_Row); -23376: for (dimension_type i = num_rows(); i-- > 0; ) { -23376: n += rows[i].external_memory_in_bytes(row_capacity); -23376: } -23376: return n; -23376: } -23376: -23376: template -23376: bool -23376: DB_Matrix::OK() const { -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (num_rows() != row_size) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: const DB_Matrix& x = *this; -23376: const dimension_type n_rows = x.num_rows(); -23376: for (dimension_type i = 0; i < n_rows; ++i) { -23376: if (!x[i].OK(row_size, row_capacity)) { -23376: return false; -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const DB_Matrix& c) { -23376: const dimension_type n = c.num_rows(); -23376: for (dimension_type i = 0; i < n; ++i) { -23376: for (dimension_type j = 0; j < n; ++j) { -23376: s << c[i][j] << " "; -23376: } -23376: s << "\n"; -23376: } -23376: return s; -23376: } -23376: -23376: } -23376: # 324 "../../src/DB_Matrix_defs.hh" 2 -23376: # 45 "../../src/BD_Shape_defs.hh" 2 -23376: -23376: -23376: # 1 "../../src/WRD_coefficient_types_defs.hh" 1 -23376: # 29 "../../src/WRD_coefficient_types_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct WRD_Extended_Number_Policy { -23376: -23376: enum const_bool_value_check_overflow { check_overflow = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) }; -23376: -23376: -23376: enum const_bool_value_check_div_zero { check_div_zero = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mod { check_inf_mod = (false) }; -23376: -23376: -23376: enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) }; -23376: -23376: -23376: enum const_bool_value_has_nan { has_nan = (true) }; -23376: -23376: -23376: enum const_bool_value_has_infinity { has_infinity = (true) }; -23376: -23376: -23376: -23376: -23376: -23376: enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) }; -23376: -23376: -23376: enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) }; -23376: # 87 "../../src/WRD_coefficient_types_defs.hh" -23376: static void handle_result(Result r); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: struct Debug_WRD_Extended_Number_Policy { -23376: -23376: enum const_bool_value_check_overflow { check_overflow = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (true) }; -23376: -23376: -23376: enum const_bool_value_check_div_zero { check_div_zero = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (true) }; -23376: -23376: -23376: enum const_bool_value_check_inf_mod { check_inf_mod = (true) }; -23376: -23376: -23376: enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (true) }; -23376: -23376: -23376: enum const_bool_value_has_nan { has_nan = (true) }; -23376: -23376: -23376: enum const_bool_value_has_infinity { has_infinity = (true) }; -23376: -23376: -23376: -23376: -23376: -23376: enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) }; -23376: -23376: -23376: enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) }; -23376: # 146 "../../src/WRD_coefficient_types_defs.hh" -23376: static void handle_result(Result r); -23376: }; -23376: -23376: } -23376: -23376: # 1 "../../src/WRD_coefficient_types_inlines.hh" 1 -23376: # 27 "../../src/WRD_coefficient_types_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline void -23376: WRD_Extended_Number_Policy::handle_result(Result r) { -23376: if (result_class(r) == VC_NAN) { -23376: throw_result_exception(r); -23376: } -23376: } -23376: -23376: inline void -23376: Debug_WRD_Extended_Number_Policy::handle_result(Result r) { -23376: if (result_class(r) == VC_NAN) { -23376: throw_result_exception(r); -23376: } -23376: } -23376: -23376: } -23376: # 152 "../../src/WRD_coefficient_types_defs.hh" 2 -23376: # 48 "../../src/BD_Shape_defs.hh" 2 -23376: # 56 "../../src/BD_Shape_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: # 68 "../../src/BD_Shape_defs.hh" -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& s, const BD_Shape& bds); -23376: -23376: } -23376: -23376: -23376: -23376: template -23376: void swap(BD_Shape& x, BD_Shape& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const BD_Shape& x, const BD_Shape& y); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const BD_Shape& x, const BD_Shape& y); -23376: # 106 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 123 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 140 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 160 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 177 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 194 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 214 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 231 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir); -23376: # 248 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: -23376: -23376: class BD_Shape_Helpers { -23376: public: -23376: # 294 "../../src/BD_Shape_defs.hh" -23376: static bool extract_bounded_difference(const Constraint& c, -23376: dimension_type& c_num_vars, -23376: dimension_type& c_first_var, -23376: dimension_type& c_second_var, -23376: Coefficient& c_coeff); -23376: }; -23376: -23376: -23376: -23376: -23376: -23376: void compute_leader_indices(const std::vector& predecessor, -23376: std::vector& indices); -23376: -23376: } -23376: # 411 "../../src/BD_Shape_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::BD_Shape { -23376: private: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef Checked_Number N; -23376: -23376: -23376: public: -23376: -23376: typedef T coefficient_type_base; -23376: -23376: -23376: -23376: -23376: -23376: typedef N coefficient_type; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_constraint_systems(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_congruence_systems(); -23376: # 458 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(dimension_type num_dimensions = 0, -23376: Degenerate_Element kind = UNIVERSE); -23376: -23376: -23376: -23376: -23376: -23376: BD_Shape(const BD_Shape& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit BD_Shape(const BD_Shape& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 487 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(const Constraint_System& cs); -23376: # 500 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(const Congruence_System& cgs); -23376: # 510 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(const Generator_System& gs); -23376: # 519 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(const Polyhedron& ph, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 538 "../../src/BD_Shape_defs.hh" -23376: template -23376: explicit BD_Shape(const Box& box, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 558 "../../src/BD_Shape_defs.hh" -23376: explicit BD_Shape(const Grid& grid, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 577 "../../src/BD_Shape_defs.hh" -23376: template -23376: explicit BD_Shape(const Octagonal_Shape& os, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: BD_Shape& operator=(const BD_Shape& y); -23376: -23376: -23376: -23376: -23376: -23376: void m_swap(BD_Shape& y); -23376: -23376: -23376: ~BD_Shape(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type affine_dimension() const; -23376: -23376: -23376: Constraint_System constraints() const; -23376: -23376: -23376: Constraint_System minimized_constraints() const; -23376: -23376: -23376: Congruence_System congruences() const; -23376: -23376: -23376: -23376: -23376: -23376: Congruence_System minimized_congruences() const; -23376: # 633 "../../src/BD_Shape_defs.hh" -23376: bool bounds_from_above(const Linear_Expression& expr) const; -23376: # 642 "../../src/BD_Shape_defs.hh" -23376: bool bounds_from_below(const Linear_Expression& expr) const; -23376: # 668 "../../src/BD_Shape_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const; -23376: # 699 "../../src/BD_Shape_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const; -23376: # 727 "../../src/BD_Shape_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const; -23376: # 758 "../../src/BD_Shape_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const; -23376: # 790 "../../src/BD_Shape_defs.hh" -23376: bool frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool contains(const BD_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strictly_contains(const BD_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_disjoint_from(const BD_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Constraint& c) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation relation_with(const Generator& g) const; -23376: -23376: -23376: bool is_empty() const; -23376: -23376: -23376: bool is_universe() const; -23376: -23376: -23376: bool is_discrete() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_topologically_closed() const; -23376: -23376: -23376: bool is_bounded() const; -23376: -23376: -23376: -23376: -23376: -23376: bool contains_integer_point() const; -23376: # 868 "../../src/BD_Shape_defs.hh" -23376: bool constrains(Variable var) const; -23376: -23376: -23376: -23376: -23376: -23376: bool OK() const; -23376: # 892 "../../src/BD_Shape_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 904 "../../src/BD_Shape_defs.hh" -23376: void add_congruence(const Congruence& cg); -23376: # 918 "../../src/BD_Shape_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: # 937 "../../src/BD_Shape_defs.hh" -23376: void add_recycled_constraints(Constraint_System& cs); -23376: # 951 "../../src/BD_Shape_defs.hh" -23376: void add_congruences(const Congruence_System& cgs); -23376: # 969 "../../src/BD_Shape_defs.hh" -23376: void add_recycled_congruences(Congruence_System& cgs); -23376: # 981 "../../src/BD_Shape_defs.hh" -23376: void refine_with_constraint(const Constraint& c); -23376: # 994 "../../src/BD_Shape_defs.hh" -23376: void refine_with_congruence(const Congruence& cg); -23376: # 1007 "../../src/BD_Shape_defs.hh" -23376: void refine_with_constraints(const Constraint_System& cs); -23376: # 1020 "../../src/BD_Shape_defs.hh" -23376: void refine_with_congruences(const Congruence_System& cgs); -23376: # 1043 "../../src/BD_Shape_defs.hh" -23376: template -23376: void refine_with_linear_form_inequality( -23376: const Linear_Form >& left, -23376: const Linear_Form >& right); -23376: # 1076 "../../src/BD_Shape_defs.hh" -23376: template -23376: void generalized_refine_with_linear_form_inequality( -23376: const Linear_Form >& left, -23376: const Linear_Form >& right, -23376: Relation_Symbol relsym); -23376: # 1112 "../../src/BD_Shape_defs.hh" -23376: template -23376: void export_interval_constraints(U& dest) const; -23376: # 1125 "../../src/BD_Shape_defs.hh" -23376: void unconstrain(Variable var); -23376: # 1139 "../../src/BD_Shape_defs.hh" -23376: void unconstrain(const Variables_Set& vars); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void intersection_assign(const BD_Shape& y); -23376: # 1155 "../../src/BD_Shape_defs.hh" -23376: void upper_bound_assign(const BD_Shape& y); -23376: # 1165 "../../src/BD_Shape_defs.hh" -23376: bool upper_bound_assign_if_exact(const BD_Shape& y); -23376: # 1181 "../../src/BD_Shape_defs.hh" -23376: bool integer_upper_bound_assign_if_exact(const BD_Shape& y); -23376: # 1190 "../../src/BD_Shape_defs.hh" -23376: void difference_assign(const BD_Shape& y); -23376: # 1201 "../../src/BD_Shape_defs.hh" -23376: bool simplify_using_context_assign(const BD_Shape& y); -23376: # 1222 "../../src/BD_Shape_defs.hh" -23376: void affine_image(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1244 "../../src/BD_Shape_defs.hh" -23376: template -23376: void affine_form_image(Variable var, -23376: const Linear_Form >& lf); -23376: # 1267 "../../src/BD_Shape_defs.hh" -23376: void affine_preimage(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1296 "../../src/BD_Shape_defs.hh" -23376: void generalized_affine_image(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1321 "../../src/BD_Shape_defs.hh" -23376: void generalized_affine_image(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1349 "../../src/BD_Shape_defs.hh" -23376: void generalized_affine_preimage(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator = Coefficient_one()); -23376: # 1374 "../../src/BD_Shape_defs.hh" -23376: void generalized_affine_preimage(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1404 "../../src/BD_Shape_defs.hh" -23376: void bounded_affine_image(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1436 "../../src/BD_Shape_defs.hh" -23376: void bounded_affine_preimage(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void time_elapse_assign(const BD_Shape& y); -23376: # 1496 "../../src/BD_Shape_defs.hh" -23376: void wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p = 0, -23376: unsigned complexity_threshold = 16, -23376: bool wrap_individually = true); -23376: # 1515 "../../src/BD_Shape_defs.hh" -23376: void drop_some_non_integer_points(Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1533 "../../src/BD_Shape_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: -23376: -23376: void topological_closure_assign(); -23376: # 1555 "../../src/BD_Shape_defs.hh" -23376: void CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp = 0); -23376: # 1578 "../../src/BD_Shape_defs.hh" -23376: template -23376: void CC76_extrapolation_assign(const BD_Shape& y, -23376: Iterator first, Iterator last, -23376: unsigned* tp = 0); -23376: # 1598 "../../src/BD_Shape_defs.hh" -23376: void BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp = 0); -23376: # 1620 "../../src/BD_Shape_defs.hh" -23376: void limited_BHMZ05_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1643 "../../src/BD_Shape_defs.hh" -23376: void CC76_narrowing_assign(const BD_Shape& y); -23376: # 1665 "../../src/BD_Shape_defs.hh" -23376: void limited_CC76_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1684 "../../src/BD_Shape_defs.hh" -23376: void H79_widening_assign(const BD_Shape& y, unsigned* tp = 0); -23376: -23376: -23376: void widening_assign(const BD_Shape& y, unsigned* tp = 0); -23376: # 1708 "../../src/BD_Shape_defs.hh" -23376: void limited_H79_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1735 "../../src/BD_Shape_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 1758 "../../src/BD_Shape_defs.hh" -23376: void add_space_dimensions_and_project(dimension_type m); -23376: # 1768 "../../src/BD_Shape_defs.hh" -23376: void concatenate_assign(const BD_Shape& y); -23376: # 1779 "../../src/BD_Shape_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: # 1789 "../../src/BD_Shape_defs.hh" -23376: void remove_higher_space_dimensions(dimension_type new_dimension); -23376: # 1828 "../../src/BD_Shape_defs.hh" -23376: template -23376: void map_space_dimensions(const Partial_Function& pfunc); -23376: # 1852 "../../src/BD_Shape_defs.hh" -23376: void expand_space_dimension(Variable var, dimension_type m); -23376: # 1877 "../../src/BD_Shape_defs.hh" -23376: void fold_space_dimensions(const Variables_Set& vars, Variable dest); -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void refine_fp_interval_abstract_store(Box >& -23376: store) const; -23376: -23376: -23376: -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int32_t hash_code() const; -23376: -23376: friend bool operator==(const BD_Shape& x, const BD_Shape& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: -23376: private: -23376: template friend class Parma_Polyhedra_Library::BD_Shape; -23376: template friend class Parma_Polyhedra_Library::Box; -23376: -23376: -23376: DB_Matrix dbm; -23376: -23376: -23376: # 1 "../../src/BDS_Status_idefs.hh" 1 -23376: # 50 "../../src/BDS_Status_idefs.hh" -23376: class Status { -23376: public: -23376: -23376: Status(); -23376: -23376: -23376: -23376: bool test_zero_dim_univ() const; -23376: void reset_zero_dim_univ(); -23376: void set_zero_dim_univ(); -23376: -23376: bool test_empty() const; -23376: void reset_empty(); -23376: void set_empty(); -23376: -23376: bool test_shortest_path_closed() const; -23376: void reset_shortest_path_closed(); -23376: void set_shortest_path_closed(); -23376: -23376: bool test_shortest_path_reduced() const; -23376: void reset_shortest_path_reduced(); -23376: void set_shortest_path_reduced(); -23376: -23376: -23376: -23376: bool OK() const; -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t ZERO_DIM_UNIV = 0U; -23376: static const flags_t EMPTY = 1U << 0; -23376: static const flags_t SHORTEST_PATH_CLOSED = 1U << 1; -23376: static const flags_t SHORTEST_PATH_REDUCED = 1U << 2; -23376: -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: Status(flags_t mask); -23376: -23376: -23376: bool test_all(flags_t mask) const; -23376: -23376: -23376: bool test_any(flags_t mask) const; -23376: -23376: -23376: void set(flags_t mask); -23376: -23376: -23376: void reset(flags_t mask); -23376: }; -23376: # 1944 "../../src/BD_Shape_defs.hh" 2 -23376: -23376: -23376: -23376: Status status; -23376: -23376: -23376: Bit_Matrix redundancy_dbm; -23376: -23376: -23376: bool marked_zero_dim_univ() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool marked_empty() const; -23376: # 1970 "../../src/BD_Shape_defs.hh" -23376: bool marked_shortest_path_closed() const; -23376: # 1979 "../../src/BD_Shape_defs.hh" -23376: bool marked_shortest_path_reduced() const; -23376: -23376: -23376: void set_empty(); -23376: -23376: -23376: void set_zero_dim_univ(); -23376: -23376: -23376: void set_shortest_path_closed(); -23376: -23376: -23376: void set_shortest_path_reduced(); -23376: -23376: -23376: void reset_shortest_path_closed(); -23376: -23376: -23376: void reset_shortest_path_reduced(); -23376: -23376: -23376: void shortest_path_closure_assign() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: void shortest_path_reduction_assign() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_shortest_path_reduced() const; -23376: # 2027 "../../src/BD_Shape_defs.hh" -23376: void incremental_shortest_path_closure_assign(Variable var) const; -23376: # 2046 "../../src/BD_Shape_defs.hh" -23376: bool bounds(const Linear_Expression& expr, bool from_above) const; -23376: # 2079 "../../src/BD_Shape_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included, -23376: Generator& g) const; -23376: # 2110 "../../src/BD_Shape_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included) const; -23376: # 2128 "../../src/BD_Shape_defs.hh" -23376: bool BFT00_upper_bound_assign_if_exact(const BD_Shape& y); -23376: # 2146 "../../src/BD_Shape_defs.hh" -23376: template -23376: bool BHZ09_upper_bound_assign_if_exact(const BD_Shape& y); -23376: # 2159 "../../src/BD_Shape_defs.hh" -23376: void refine_no_check(const Constraint& c); -23376: # 2173 "../../src/BD_Shape_defs.hh" -23376: void refine_no_check(const Congruence& cg); -23376: -23376: -23376: void add_dbm_constraint(dimension_type i, dimension_type j, const N& k); -23376: -23376: -23376: void add_dbm_constraint(dimension_type i, dimension_type j, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void refine(Variable var, Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: -23376: -23376: void forget_all_dbm_constraints(dimension_type v); -23376: -23376: void forget_binary_dbm_constraints(dimension_type v); -23376: # 2214 "../../src/BD_Shape_defs.hh" -23376: void deduce_v_minus_u_bounds(dimension_type v, -23376: dimension_type last_v, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& ub_v); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void inhomogeneous_affine_form_image(const dimension_type& var_id, -23376: const Interval& b); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: one_variable_affine_form_image(const dimension_type& var_id, -23376: const Interval& b, -23376: const Interval& w_coeff, -23376: const dimension_type& w_id, -23376: const dimension_type& space_dim); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: two_variables_affine_form_image(const dimension_type& var_id, -23376: const Linear_Form >& lf, -23376: const dimension_type& space_dim); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: left_inhomogeneous_refine(const dimension_type& right_t, -23376: const dimension_type& right_w_id, -23376: const Linear_Form >& left, -23376: const Linear_Form >& right); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void -23376: left_one_var_refine(const dimension_type& left_w_id, -23376: const dimension_type& right_t, -23376: const dimension_type& right_w_id, -23376: const Linear_Form >& left, -23376: const Linear_Form >& right); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void general_refine(const dimension_type& left_w_id, -23376: const dimension_type& right_w_id, -23376: const Linear_Form >& left, -23376: const Linear_Form >& right); -23376: -23376: template -23376: void linear_form_upper_bound(const Linear_Form >& -23376: lf, -23376: N& result) const; -23376: # 2304 "../../src/BD_Shape_defs.hh" -23376: void deduce_u_minus_v_bounds(dimension_type v, -23376: dimension_type last_v, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& minus_lb_v); -23376: -23376: -23376: -23376: -23376: -23376: void get_limiting_shape(const Constraint_System& cs, -23376: BD_Shape& limiting_shape) const; -23376: -23376: -23376: -23376: -23376: -23376: void compute_predecessors(std::vector& predecessor) const; -23376: -23376: -23376: -23376: -23376: -23376: void compute_leaders(std::vector& leaders) const; -23376: -23376: void drop_some_non_integer_points_helper(N& elem); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators -23376: ::operator<<<>(std::ostream& s, const BD_Shape& c); -23376: -23376: -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const BD_Shape& y) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Generator& g) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const; -23376: -23376: template -23376: void -23376: throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form >& -23376: lf) const; -23376: -23376: static void throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le); -23376: -23376: static void throw_invalid_argument(const char* method, const char* reason); -23376: -23376: }; -23376: -23376: # 1 "../../src/BDS_Status_inlines.hh" 1 -23376: # 27 "../../src/BDS_Status_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: BD_Shape::Status::Status(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::Status::Status() -23376: : flags(ZERO_DIM_UNIV) { -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_all(flags_t mask) const { -23376: return (flags & mask) == mask; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_any(flags_t mask) const { -23376: return (flags & mask) != 0; -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::set(flags_t mask) { -23376: flags |= mask; -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::reset(flags_t mask) { -23376: flags &= ~mask; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_zero_dim_univ() const { -23376: return flags == ZERO_DIM_UNIV; -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::reset_zero_dim_univ() { -23376: -23376: if (flags == ZERO_DIM_UNIV) { -23376: -23376: flags = EMPTY; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::set_zero_dim_univ() { -23376: -23376: flags = ZERO_DIM_UNIV; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_empty() const { -23376: return test_any(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::reset_empty() { -23376: reset(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::set_empty() { -23376: flags = EMPTY; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_shortest_path_closed() const { -23376: return test_any(SHORTEST_PATH_CLOSED); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::reset_shortest_path_closed() { -23376: -23376: reset(SHORTEST_PATH_CLOSED | SHORTEST_PATH_REDUCED); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::set_shortest_path_closed() { -23376: set(SHORTEST_PATH_CLOSED); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::Status::test_shortest_path_reduced() const { -23376: return test_any(SHORTEST_PATH_REDUCED); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::reset_shortest_path_reduced() { -23376: reset(SHORTEST_PATH_REDUCED); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::Status::set_shortest_path_reduced() { -23376: ((void) 0); -23376: set(SHORTEST_PATH_REDUCED); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::Status::OK() const { -23376: if (test_zero_dim_univ()) { -23376: -23376: return true; -23376: } -23376: -23376: if (test_empty()) { -23376: Status copy = *this; -23376: copy.reset_empty(); -23376: if (copy.test_zero_dim_univ()) { -23376: return true; -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: if (test_shortest_path_reduced()) { -23376: if (test_shortest_path_closed()) { -23376: return true; -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: -23376: namespace Implementation { -23376: -23376: namespace BD_Shapes { -23376: -23376: -23376: extern const char* zero_dim_univ; -23376: extern const char* empty; -23376: extern const char* sp_closed; -23376: extern const char* sp_reduced; -23376: const char yes = '+'; -23376: const char no = '-'; -23376: const char separator = ' '; -23376: # 207 "../../src/BDS_Status_inlines.hh" -23376: inline bool -23376: get_field(std::istream& s, const char* keyword, bool& positive) { -23376: std::string str; -23376: if (!(s >> str) -23376: || (str[0] != yes && str[0] != no) -23376: || str.substr(1) != keyword) { -23376: return false; -23376: } -23376: positive = (str[0] == yes); -23376: return true; -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::Status::ascii_dump(std::ostream& s) const { -23376: using namespace Implementation::BD_Shapes; -23376: s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ << separator -23376: << (test_empty() ? yes : no) << empty << separator -23376: << separator -23376: << (test_shortest_path_closed() ? yes : no) << sp_closed << separator -23376: << (test_shortest_path_reduced() ? yes : no) << sp_reduced << separator; -23376: } -23376: -23376: template void BD_Shape::Status::ascii_dump() const { ascii_dump(std::cerr); } template void BD_Shape::Status::print() const { std::cerr << "No user level output operator defined " << "for " "BD_Shape::Status" << "." << std::endl; } -23376: -23376: template -23376: bool -23376: BD_Shape::Status::ascii_load(std::istream& s) { -23376: using namespace Implementation::BD_Shapes; -23376: bool positive = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: if (!get_field(s, zero_dim_univ, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_zero_dim_univ(); -23376: } -23376: -23376: if (!get_field(s, empty, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_empty(); -23376: } -23376: -23376: if (!get_field(s, sp_closed, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_shortest_path_closed(); -23376: } -23376: else { -23376: reset_shortest_path_closed(); -23376: } -23376: -23376: if (!get_field(s, sp_reduced, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_shortest_path_reduced(); -23376: } -23376: else { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: } -23376: # 2371 "../../src/BD_Shape_defs.hh" 2 -23376: # 1 "../../src/BD_Shape_inlines.hh" 1 -23376: # 29 "../../src/BD_Shape_inlines.hh" -23376: # 1 "../../src/C_Polyhedron_defs.hh" 1 -23376: # 27 "../../src/C_Polyhedron_defs.hh" -23376: # 1 "../../src/C_Polyhedron_types.hh" 1 -23376: # 16 "../../src/C_Polyhedron_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class C_Polyhedron; -23376: -23376: } -23376: # 28 "../../src/C_Polyhedron_defs.hh" 2 -23376: # 1 "../../src/NNC_Polyhedron_types.hh" 1 -23376: # 16 "../../src/NNC_Polyhedron_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: class NNC_Polyhedron; -23376: -23376: } -23376: # 29 "../../src/C_Polyhedron_defs.hh" 2 -23376: # 59 "../../src/C_Polyhedron_defs.hh" -23376: class Parma_Polyhedra_Library::C_Polyhedron : public Polyhedron { -23376: public: -23376: # 75 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(dimension_type num_dimensions = 0, -23376: Degenerate_Element kind = UNIVERSE); -23376: # 88 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(const Constraint_System& cs); -23376: # 106 "../../src/C_Polyhedron_defs.hh" -23376: C_Polyhedron(Constraint_System& cs, Recycle_Input dummy); -23376: # 119 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(const Generator_System& gs); -23376: # 138 "../../src/C_Polyhedron_defs.hh" -23376: C_Polyhedron(Generator_System& gs, Recycle_Input dummy); -23376: # 147 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(const Congruence_System& cgs); -23376: # 163 "../../src/C_Polyhedron_defs.hh" -23376: C_Polyhedron(Congruence_System& cgs, Recycle_Input dummy); -23376: # 175 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(const NNC_Polyhedron& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 194 "../../src/C_Polyhedron_defs.hh" -23376: template -23376: explicit C_Polyhedron(const Box& box, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 210 "../../src/C_Polyhedron_defs.hh" -23376: template -23376: explicit C_Polyhedron(const BD_Shape& bd, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 226 "../../src/C_Polyhedron_defs.hh" -23376: template -23376: explicit C_Polyhedron(const Octagonal_Shape& os, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 242 "../../src/C_Polyhedron_defs.hh" -23376: explicit C_Polyhedron(const Grid& grid, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: C_Polyhedron(const C_Polyhedron& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: C_Polyhedron& operator=(const C_Polyhedron& y); -23376: -23376: -23376: C_Polyhedron& operator=(const NNC_Polyhedron& y); -23376: -23376: -23376: ~C_Polyhedron(); -23376: # 272 "../../src/C_Polyhedron_defs.hh" -23376: bool poly_hull_assign_if_exact(const C_Polyhedron& y); -23376: -23376: -23376: bool upper_bound_assign_if_exact(const C_Polyhedron& y); -23376: # 286 "../../src/C_Polyhedron_defs.hh" -23376: void positive_time_elapse_assign(const Polyhedron& y); -23376: }; -23376: -23376: # 1 "../../src/C_Polyhedron_inlines.hh" 1 -23376: # 30 "../../src/C_Polyhedron_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: inline -23376: C_Polyhedron::~C_Polyhedron() { -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(dimension_type num_dimensions, -23376: Degenerate_Element kind) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_space_dimension_overflow(num_dimensions, -23376: NECESSARILY_CLOSED, -23376: "C_Polyhedron(n, k)", -23376: "n exceeds the maximum " -23376: "allowed space dimension"), -23376: kind) { -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(const Constraint_System& cs) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED, -23376: "C_Polyhedron(cs)", -23376: "the space dimension of cs " -23376: "exceeds the maximum allowed " -23376: "space dimension")) { -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(Constraint_System& cs, Recycle_Input) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED, -23376: "C_Polyhedron(cs, recycle)", -23376: "the space dimension of cs " -23376: "exceeds the maximum allowed " -23376: "space dimension"), -23376: Recycle_Input()) { -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(const Generator_System& gs) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED, -23376: "C_Polyhedron(gs)", -23376: "the space dimension of gs " -23376: "exceeds the maximum allowed " -23376: "space dimension")) { -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(Generator_System& gs, Recycle_Input) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED, -23376: "C_Polyhedron(gs, recycle)", -23376: "the space dimension of gs " -23376: "exceeds the maximum allowed " -23376: "space dimension"), -23376: Recycle_Input()) { -23376: } -23376: -23376: template -23376: inline -23376: C_Polyhedron::C_Polyhedron(const Box& box, Complexity_Class) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_obj_space_dimension_overflow(box, NECESSARILY_CLOSED, -23376: "C_Polyhedron(box)", -23376: "the space dimension of box " -23376: "exceeds the maximum allowed " -23376: "space dimension")) { -23376: } -23376: -23376: template -23376: inline -23376: C_Polyhedron::C_Polyhedron(const BD_Shape& bd, Complexity_Class) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_space_dimension_overflow(bd.space_dimension(), -23376: NECESSARILY_CLOSED, -23376: "C_Polyhedron(bd)", -23376: "the space dimension of bd " -23376: "exceeds the maximum allowed " -23376: "space dimension"), -23376: UNIVERSE) { -23376: add_constraints(bd.constraints()); -23376: } -23376: -23376: template -23376: inline -23376: C_Polyhedron::C_Polyhedron(const Octagonal_Shape& os, Complexity_Class) -23376: : Polyhedron(NECESSARILY_CLOSED, -23376: check_space_dimension_overflow(os.space_dimension(), -23376: NECESSARILY_CLOSED, -23376: "C_Polyhedron(os)", -23376: "the space dimension of os " -23376: "exceeds the maximum allowed " -23376: "space dimension"), -23376: UNIVERSE) { -23376: add_constraints(os.constraints()); -23376: } -23376: -23376: inline -23376: C_Polyhedron::C_Polyhedron(const C_Polyhedron& y, Complexity_Class) -23376: : Polyhedron(y) { -23376: } -23376: -23376: inline C_Polyhedron& -23376: C_Polyhedron::operator=(const C_Polyhedron& y) { -23376: Polyhedron::operator=(y); -23376: return *this; -23376: } -23376: -23376: inline C_Polyhedron& -23376: C_Polyhedron::operator=(const NNC_Polyhedron& y) { -23376: C_Polyhedron c_y(y); -23376: m_swap(c_y); -23376: return *this; -23376: } -23376: -23376: inline bool -23376: C_Polyhedron::upper_bound_assign_if_exact(const C_Polyhedron& y) { -23376: return poly_hull_assign_if_exact(y); -23376: } -23376: -23376: } -23376: # 290 "../../src/C_Polyhedron_defs.hh" 2 -23376: # 30 "../../src/BD_Shape_inlines.hh" 2 -23376: -23376: # 1 "../../src/Octagonal_Shape_defs.hh" 1 -23376: # 36 "../../src/Octagonal_Shape_defs.hh" -23376: # 1 "../../src/OR_Matrix_defs.hh" 1 -23376: # 27 "../../src/OR_Matrix_defs.hh" -23376: # 1 "../../src/OR_Matrix_types.hh" 1 -23376: # 16 "../../src/OR_Matrix_types.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: class OR_Matrix; -23376: -23376: } -23376: # 28 "../../src/OR_Matrix_defs.hh" 2 -23376: # 50 "../../src/OR_Matrix_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator==(const OR_Matrix& x, const OR_Matrix& y); -23376: -23376: namespace IO_Operators { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& s, const OR_Matrix& m); -23376: -23376: } -23376: -23376: } -23376: # 104 "../../src/OR_Matrix_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::OR_Matrix { -23376: private: -23376: -23376: -23376: -23376: -23376: template -23376: class Pseudo_Row { -23376: public: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: Pseudo_Row(const Pseudo_Row& y); -23376: -23376: -23376: ~Pseudo_Row(); -23376: -23376: -23376: U& operator[](dimension_type k) const; -23376: -23376: -23376: Pseudo_Row(); -23376: -23376: -23376: Pseudo_Row& operator=(const Pseudo_Row& y); -23376: -23376: -23376: private: -23376: # 149 "../../src/OR_Matrix_defs.hh" -23376: explicit Pseudo_Row(U& y); -23376: -23376: -23376: -23376: -23376: U* first; -23376: # 181 "../../src/OR_Matrix_defs.hh" -23376: template friend class Pseudo_Row; -23376: template friend class any_row_iterator; -23376: -23376: -23376: friend class OR_Matrix; -23376: }; -23376: -23376: public: -23376: -23376: typedef Pseudo_Row row_reference_type; -23376: -23376: -23376: typedef Pseudo_Row const_row_reference_type; -23376: -23376: private: -23376: -23376: -23376: -23376: -23376: template -23376: class any_row_iterator { -23376: public: -23376: typedef std::random_access_iterator_tag iterator_category; -23376: typedef Pseudo_Row value_type; -23376: typedef long difference_type; -23376: typedef const Pseudo_Row* pointer; -23376: typedef const Pseudo_Row& reference; -23376: -23376: -23376: any_row_iterator(dimension_type n_rows); -23376: -23376: -23376: -23376: -23376: -23376: explicit any_row_iterator(U& base); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: any_row_iterator(const any_row_iterator& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: any_row_iterator& operator=(const any_row_iterator& y); -23376: -23376: -23376: reference operator*() const; -23376: -23376: -23376: pointer operator->() const; -23376: -23376: -23376: any_row_iterator& operator++(); -23376: -23376: -23376: any_row_iterator operator++(int); -23376: -23376: -23376: any_row_iterator& operator--(); -23376: -23376: -23376: any_row_iterator operator--(int); -23376: -23376: -23376: reference operator[](difference_type m) const; -23376: -23376: -23376: any_row_iterator& operator+=(difference_type m); -23376: -23376: -23376: template -23376: typename Enable_If<(static_cast(-1) > 0), any_row_iterator&>::type -23376: operator+=(Unsigned m); -23376: -23376: -23376: any_row_iterator& operator-=(difference_type m); -23376: -23376: -23376: difference_type operator-(const any_row_iterator& y) const; -23376: -23376: -23376: any_row_iterator operator+(difference_type m) const; -23376: -23376: -23376: template -23376: typename Enable_If<(static_cast(-1) > 0), any_row_iterator>::type -23376: operator+(Unsigned m) const; -23376: -23376: -23376: any_row_iterator operator-(difference_type m) const; -23376: -23376: -23376: bool operator==(const any_row_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator!=(const any_row_iterator& y) const; -23376: -23376: -23376: bool operator<(const any_row_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator<=(const any_row_iterator& y) const; -23376: -23376: -23376: bool operator>(const any_row_iterator& y) const; -23376: -23376: -23376: -23376: -23376: -23376: bool operator>=(const any_row_iterator& y) const; -23376: -23376: dimension_type row_size() const; -23376: -23376: dimension_type index() const; -23376: -23376: private: -23376: -23376: Pseudo_Row value; -23376: -23376: -23376: dimension_type e; -23376: -23376: -23376: dimension_type i; -23376: # 326 "../../src/OR_Matrix_defs.hh" -23376: template friend class any_row_iterator; -23376: -23376: }; -23376: -23376: public: -23376: -23376: typedef any_row_iterator row_iterator; -23376: -23376: -23376: typedef any_row_iterator const_row_iterator; -23376: -23376: -23376: typedef typename DB_Row::iterator element_iterator; -23376: -23376: -23376: typedef typename DB_Row::const_iterator const_element_iterator; -23376: -23376: public: -23376: -23376: static dimension_type max_num_rows(); -23376: # 355 "../../src/OR_Matrix_defs.hh" -23376: OR_Matrix(dimension_type num_dimensions); -23376: -23376: -23376: OR_Matrix(const OR_Matrix& y); -23376: -23376: -23376: template -23376: explicit OR_Matrix(const OR_Matrix& y); -23376: -23376: -23376: ~OR_Matrix(); -23376: -23376: -23376: OR_Matrix& operator=(const OR_Matrix& y); -23376: -23376: private: -23376: template friend class OR_Matrix; -23376: # 381 "../../src/OR_Matrix_defs.hh" -23376: DB_Row vec; -23376: -23376: -23376: dimension_type space_dim; -23376: -23376: -23376: dimension_type vec_capacity; -23376: -23376: -23376: OR_Matrix(); -23376: -23376: -23376: -23376: -23376: -23376: static dimension_type row_first_element_index(dimension_type k); -23376: -23376: public: -23376: -23376: static dimension_type row_size(dimension_type k); -23376: -23376: -23376: void m_swap(OR_Matrix& y); -23376: # 417 "../../src/OR_Matrix_defs.hh" -23376: void grow(dimension_type new_dim); -23376: # 427 "../../src/OR_Matrix_defs.hh" -23376: void shrink(dimension_type new_dim); -23376: # 441 "../../src/OR_Matrix_defs.hh" -23376: void resize_no_copy(dimension_type new_dim); -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: dimension_type num_rows() const; -23376: -23376: -23376: -23376: -23376: row_reference_type operator[](dimension_type k); -23376: -23376: -23376: const_row_reference_type operator[](dimension_type k) const; -23376: # 464 "../../src/OR_Matrix_defs.hh" -23376: row_iterator row_begin(); -23376: -23376: -23376: row_iterator row_end(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_row_iterator row_begin() const; -23376: -23376: -23376: const_row_iterator row_end() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: element_iterator element_begin(); -23376: -23376: -23376: element_iterator element_end(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: const_element_iterator element_begin() const; -23376: -23376: -23376: const_element_iterator element_end() const; -23376: -23376: -23376: void clear(); -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: friend bool operator==(const OR_Matrix& x, const OR_Matrix& y); -23376: -23376: -23376: bool OK() const; -23376: }; -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void swap(OR_Matrix& x, OR_Matrix& y); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: bool operator!=(const OR_Matrix& x, const OR_Matrix& y); -23376: # 552 "../../src/OR_Matrix_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 574 "../../src/OR_Matrix_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 596 "../../src/OR_Matrix_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: } -23376: -23376: # 1 "../../src/OR_Matrix_inlines.hh" 1 -23376: # 35 "../../src/OR_Matrix_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline dimension_type -23376: OR_Matrix::row_first_element_index(const dimension_type k) { -23376: return ((k + 1)*(k + 1))/2; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: OR_Matrix::row_size(const dimension_type k) { -23376: return k + 2 - k % 2; -23376: } -23376: # 60 "../../src/OR_Matrix_inlines.hh" -23376: template -23376: template -23376: inline -23376: OR_Matrix::Pseudo_Row::Pseudo_Row() -23376: : first(0) -23376: -23376: -23376: -23376: { -23376: } -23376: -23376: template -23376: template -23376: inline -23376: OR_Matrix::Pseudo_Row::Pseudo_Row(U& y -23376: -23376: -23376: -23376: ) -23376: : first(&y) -23376: -23376: -23376: -23376: { -23376: } -23376: -23376: template -23376: template -23376: template -23376: inline -23376: OR_Matrix::Pseudo_Row::Pseudo_Row(const Pseudo_Row& y) -23376: : first(y.first) -23376: -23376: -23376: -23376: { -23376: } -23376: -23376: template -23376: template -23376: inline OR_Matrix::Pseudo_Row& -23376: OR_Matrix::Pseudo_Row::operator=(const Pseudo_Row& y) { -23376: first = y.first; -23376: -23376: -23376: -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: inline -23376: OR_Matrix::Pseudo_Row::~Pseudo_Row() { -23376: } -23376: -23376: template -23376: template -23376: inline U& -23376: OR_Matrix::Pseudo_Row::operator[](const dimension_type k) const { -23376: -23376: -23376: -23376: return *(first + k); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: OR_Matrix::any_row_iterator -23376: ::any_row_iterator(const dimension_type n_rows) -23376: : value(), -23376: e(n_rows) -23376: -23376: { -23376: -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: template -23376: inline -23376: OR_Matrix::any_row_iterator::any_row_iterator(U& base) -23376: : value(base -23376: -23376: -23376: -23376: ), -23376: e(0), -23376: i(0) { -23376: } -23376: -23376: template -23376: template -23376: template -23376: inline -23376: OR_Matrix::any_row_iterator -23376: ::any_row_iterator(const any_row_iterator& y) -23376: : value(y.value), -23376: e(y.e), -23376: i(y.i) { -23376: } -23376: -23376: template -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator& -23376: OR_Matrix::any_row_iterator::operator=(const any_row_iterator& y) { -23376: value = y.value; -23376: e = y.e; -23376: i = y.i; -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator::reference -23376: OR_Matrix::any_row_iterator::operator*() const { -23376: return value; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator::pointer -23376: OR_Matrix::any_row_iterator::operator->() const { -23376: return &value; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator& -23376: OR_Matrix::any_row_iterator::operator++() { -23376: ++e; -23376: dimension_type increment = e; -23376: if (e % 2 != 0) { -23376: ++increment; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: i += increment; -23376: value.first += increment; -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator -23376: OR_Matrix::any_row_iterator::operator++(int) { -23376: any_row_iterator old = *this; -23376: ++(*this); -23376: return old; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator& -23376: OR_Matrix::any_row_iterator::operator--() { -23376: dimension_type decrement = e + 1; -23376: --e; -23376: if (e % 2 != 0) { -23376: ++decrement; -23376: -23376: -23376: -23376: } -23376: i -= decrement; -23376: value.first -= decrement; -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator -23376: OR_Matrix::any_row_iterator::operator--(int) { -23376: any_row_iterator old = *this; -23376: --(*this); -23376: return old; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator& -23376: OR_Matrix::any_row_iterator::operator+=(const difference_type m) { -23376: difference_type e_dt = static_cast(e); -23376: difference_type i_dt = static_cast(i); -23376: difference_type increment = m + (m * m) / 2 + m * e_dt; -23376: if (e_dt % 2 == 0 && m % 2 != 0) { -23376: ++increment; -23376: } -23376: e_dt += m; -23376: i_dt += increment; -23376: e = static_cast(e_dt); -23376: i = static_cast(i_dt); -23376: value.first += increment; -23376: -23376: -23376: -23376: -23376: -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: template -23376: inline typename -23376: Enable_If<(static_cast(-1) > 0), -23376: typename OR_Matrix::template any_row_iterator& >::type -23376: OR_Matrix::any_row_iterator::operator+=(Unsigned m) { -23376: dimension_type n = m; -23376: dimension_type increment = n + (n*n)/2 + n*e; -23376: if (e % 2 == 0 && n % 2 != 0) { -23376: ++increment; -23376: } -23376: e += n; -23376: i += increment; -23376: value.first += increment; -23376: -23376: -23376: -23376: return *this; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator& -23376: OR_Matrix::any_row_iterator::operator-=(difference_type m) { -23376: return *this += -m; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator::difference_type -23376: OR_Matrix::any_row_iterator::operator-(const any_row_iterator& y) const { -23376: return e - y.e; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator -23376: OR_Matrix::any_row_iterator::operator+(difference_type m) const { -23376: any_row_iterator r = *this; -23376: r += m; -23376: return r; -23376: } -23376: -23376: template -23376: template -23376: template -23376: inline typename -23376: Enable_If<(static_cast(-1) > 0), -23376: typename OR_Matrix::template any_row_iterator >::type -23376: OR_Matrix::any_row_iterator::operator+(Unsigned m) const { -23376: any_row_iterator r = *this; -23376: r += m; -23376: return r; -23376: } -23376: -23376: template -23376: template -23376: inline typename OR_Matrix::template any_row_iterator -23376: OR_Matrix::any_row_iterator::operator-(const difference_type m) const { -23376: any_row_iterator r = *this; -23376: r -= m; -23376: return r; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator -23376: ::operator==(const any_row_iterator& y) const { -23376: return e == y.e; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator -23376: ::operator!=(const any_row_iterator& y) const { -23376: return e != y.e; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator::operator<(const any_row_iterator& y) const { -23376: return e < y.e; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator -23376: ::operator<=(const any_row_iterator& y) const { -23376: return e <= y.e; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator::operator>(const any_row_iterator& y) const { -23376: return e > y.e; -23376: } -23376: -23376: template -23376: template -23376: inline bool -23376: OR_Matrix::any_row_iterator -23376: ::operator>=(const any_row_iterator& y) const { -23376: return e >= y.e; -23376: } -23376: -23376: template -23376: template -23376: inline dimension_type -23376: OR_Matrix::any_row_iterator::row_size() const { -23376: return OR_Matrix::row_size(e); -23376: } -23376: -23376: template -23376: template -23376: inline dimension_type -23376: OR_Matrix::any_row_iterator::index() const { -23376: return e; -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::row_iterator -23376: OR_Matrix::row_begin() { -23376: return num_rows() == 0 ? row_iterator(0) : row_iterator(vec[0]); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::row_iterator -23376: OR_Matrix::row_end() { -23376: return row_iterator(num_rows()); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::const_row_iterator -23376: OR_Matrix::row_begin() const { -23376: return num_rows() == 0 ? const_row_iterator(0) : const_row_iterator(vec[0]); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::const_row_iterator -23376: OR_Matrix::row_end() const { -23376: return const_row_iterator(num_rows()); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::element_iterator -23376: OR_Matrix::element_begin() { -23376: return vec.begin(); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::element_iterator -23376: OR_Matrix::element_end() { -23376: return vec.end(); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::const_element_iterator -23376: OR_Matrix::element_begin() const { -23376: return vec.begin(); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::const_element_iterator -23376: OR_Matrix::element_end() const { -23376: return vec.end(); -23376: } -23376: -23376: template -23376: inline void -23376: OR_Matrix::m_swap(OR_Matrix& y) { -23376: using std::swap; -23376: swap(vec, y.vec); -23376: swap(space_dim, y.space_dim); -23376: swap(vec_capacity, y.vec_capacity); -23376: } -23376: -23376: -23376: -23376: -23376: inline dimension_type -23376: isqrt(dimension_type x) { -23376: dimension_type r = 0; -23376: const dimension_type FIRST_BIT_MASK = 0x40000000U; -23376: for (dimension_type t = FIRST_BIT_MASK; t != 0; t >>= 2) { -23376: const dimension_type s = r + t; -23376: if (s <= x) { -23376: x -= s; -23376: r = s + t; -23376: } -23376: r >>= 1; -23376: } -23376: return r; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: OR_Matrix::max_num_rows() { -23376: -23376: -23376: const dimension_type k = isqrt(2*DB_Row::max_size() + 1); -23376: return (k - 1) - (k - 1) % 2; -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: OR_Matrix::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline -23376: OR_Matrix::OR_Matrix(const dimension_type num_dimensions) -23376: : vec(2*num_dimensions*(num_dimensions + 1)), -23376: space_dim(num_dimensions), -23376: vec_capacity(vec.size()) { -23376: } -23376: -23376: template -23376: inline -23376: OR_Matrix::~OR_Matrix() { -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::row_reference_type -23376: OR_Matrix::operator[](dimension_type k) { -23376: return row_reference_type(vec[row_first_element_index(k)] -23376: -23376: -23376: -23376: ); -23376: } -23376: -23376: template -23376: inline typename OR_Matrix::const_row_reference_type -23376: OR_Matrix::operator[](dimension_type k) const { -23376: return const_row_reference_type(vec[row_first_element_index(k)] -23376: -23376: -23376: -23376: ); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: OR_Matrix::space_dimension() const { -23376: return space_dim; -23376: } -23376: -23376: template -23376: inline dimension_type -23376: OR_Matrix::num_rows() const { -23376: return 2*space_dimension(); -23376: } -23376: -23376: template -23376: inline void -23376: OR_Matrix::clear() { -23376: OR_Matrix(0).m_swap(*this); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const OR_Matrix& x, const OR_Matrix& y) { -23376: return x.space_dim == y.space_dim && x.vec == y.vec; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const OR_Matrix& x, const OR_Matrix& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline -23376: OR_Matrix::OR_Matrix(const OR_Matrix& y) -23376: : vec(y.vec), -23376: space_dim(y.space_dim), -23376: vec_capacity(compute_capacity(y.vec.size(), -23376: DB_Row::max_size())) { -23376: } -23376: -23376: template -23376: template -23376: inline -23376: OR_Matrix::OR_Matrix(const OR_Matrix& y) -23376: : vec(), -23376: space_dim(y.space_dim), -23376: vec_capacity(compute_capacity(y.vec.size(), -23376: DB_Row::max_size())) { -23376: vec.construct_upward_approximation(y.vec, vec_capacity); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline OR_Matrix& -23376: OR_Matrix::operator=(const OR_Matrix& y) { -23376: vec = y.vec; -23376: space_dim = y.space_dim; -23376: vec_capacity = compute_capacity(y.vec.size(), DB_Row::max_size()); -23376: return *this; -23376: } -23376: -23376: template -23376: inline void -23376: OR_Matrix::grow(const dimension_type new_dim) { -23376: ((void) 0); -23376: if (new_dim > space_dim) { -23376: const dimension_type new_size = 2*new_dim*(new_dim + 1); -23376: if (new_size <= vec_capacity) { -23376: -23376: vec.expand_within_capacity(new_size); -23376: space_dim = new_dim; -23376: } -23376: else { -23376: -23376: OR_Matrix new_matrix(new_dim); -23376: element_iterator j = new_matrix.element_begin(); -23376: for (element_iterator i = element_begin(), -23376: mend = element_end(); i != mend; ++i, ++j) { -23376: assign_or_swap(*j, *i); -23376: } -23376: m_swap(new_matrix); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: OR_Matrix::shrink(const dimension_type new_dim) { -23376: ((void) 0); -23376: const dimension_type new_size = 2*new_dim*(new_dim + 1); -23376: vec.shrink(new_size); -23376: space_dim = new_dim; -23376: } -23376: -23376: template -23376: inline void -23376: OR_Matrix::resize_no_copy(const dimension_type new_dim) { -23376: if (new_dim > space_dim) { -23376: const dimension_type new_size = 2*new_dim*(new_dim + 1); -23376: if (new_size <= vec_capacity) { -23376: -23376: vec.expand_within_capacity(new_size); -23376: space_dim = new_dim; -23376: } -23376: else { -23376: -23376: OR_Matrix new_matrix(new_dim); -23376: m_swap(new_matrix); -23376: } -23376: } -23376: else if (new_dim < space_dim) { -23376: shrink(new_dim); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: l_m_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: if (x.num_rows() != y.num_rows()) { -23376: return false; -23376: } -23376: assign_r(tmp0, 0, ROUND_NOT_NEEDED); -23376: for (typename OR_Matrix::const_element_iterator -23376: i = x.element_begin(), j = y.element_begin(), -23376: mat_end = x.element_end(); i != mat_end; ++i, ++j) { -23376: const T& x_i = *i; -23376: const T& y_i = *j; -23376: if (is_plus_infinity(x_i)) { -23376: if (is_plus_infinity(y_i)) { -23376: continue; -23376: } -23376: else { -23376: pinf: -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: return true; -23376: } -23376: } -23376: else if (is_plus_infinity(y_i)) { -23376: goto pinf; -23376: } -23376: const Temp* tmp1p; -23376: const Temp* tmp2p; -23376: if (x_i > y_i) { -23376: maybe_assign(tmp1p, tmp1, x_i, dir); -23376: maybe_assign(tmp2p, tmp2, y_i, inverse(dir)); -23376: } -23376: else { -23376: maybe_assign(tmp1p, tmp1, y_i, dir); -23376: maybe_assign(tmp2p, tmp2, x_i, inverse(dir)); -23376: } -23376: sub_assign_r(tmp1, *tmp1p, *tmp2p, dir); -23376: ((void) 0); -23376: Specialization::combine(tmp0, tmp1, dir); -23376: } -23376: -23376: Specialization::finalize(tmp0, dir); -23376: assign_r(r, tmp0, dir); -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const OR_Matrix& x, -23376: const OR_Matrix& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: return -23376: l_m_distance_assign >(r, x, y, -23376: dir, -23376: tmp0, -23376: tmp1, -23376: tmp2); -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(OR_Matrix& x, OR_Matrix& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 608 "../../src/OR_Matrix_defs.hh" 2 -23376: # 1 "../../src/OR_Matrix_templates.hh" 1 -23376: # 29 "../../src/OR_Matrix_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: memory_size_type -23376: OR_Matrix::external_memory_in_bytes() const{ -23376: return vec.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: bool -23376: OR_Matrix::OK() const { -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type dim = space_dimension(); -23376: if (vec.size() != 2*dim*(dim + 1)) { -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: -23376: -23376: if (!vec.OK(vec.size(), vec_capacity)) { -23376: return false; -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: OR_Matrix::ascii_dump(std::ostream& s) const { -23376: const OR_Matrix& x = *this; -23376: const char separator = ' '; -23376: dimension_type space = x.space_dimension(); -23376: s << space << separator << "\n"; -23376: for (const_row_iterator i = x.row_begin(), -23376: x_row_end = x.row_end(); i != x_row_end; ++i) { -23376: const_row_reference_type r = *i; -23376: dimension_type rs = i.row_size(); -23376: for (dimension_type j = 0; j < rs; ++j) { -23376: using namespace IO_Operators; -23376: s << r[j] << separator; -23376: } -23376: s << "\n"; -23376: } -23376: } -23376: -23376: template void OR_Matrix::ascii_dump() const { ascii_dump(std::cerr); } template void OR_Matrix::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: bool -23376: OR_Matrix::ascii_load(std::istream& s) { -23376: dimension_type space; -23376: if (!(s >> space)) { -23376: return false; -23376: } -23376: resize_no_copy(space); -23376: for (row_iterator i = row_begin(), -23376: this_row_end = row_end(); i != this_row_end; ++i) { -23376: row_reference_type r_i = *i; -23376: const dimension_type rs = i.row_size(); -23376: for (dimension_type j = 0; j < rs; ++j) { -23376: Result r = input(r_i[j], s, ROUND_CHECK); -23376: if (result_relation(r) != VR_EQ || is_minus_infinity(r_i[j])) { -23376: return false; -23376: } -23376: } -23376: } -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const OR_Matrix& m) { -23376: for (typename OR_Matrix::const_row_iterator m_iter = m.row_begin(), -23376: m_end = m.row_end(); m_iter != m_end; ++m_iter) { -23376: typename OR_Matrix::const_row_reference_type r_m = *m_iter; -23376: const dimension_type mr_size = m_iter.row_size(); -23376: for (dimension_type j = 0; j < mr_size; ++j) { -23376: s << r_m[j] << " "; -23376: } -23376: s << "\n"; -23376: } -23376: return s; -23376: } -23376: -23376: } -23376: # 609 "../../src/OR_Matrix_defs.hh" 2 -23376: # 37 "../../src/Octagonal_Shape_defs.hh" 2 -23376: # 52 "../../src/Octagonal_Shape_defs.hh" -23376: # 1 "/usr/include/c++/8/climits" 1 3 -23376: # 39 "/usr/include/c++/8/climits" 3 -23376: -23376: # 40 "/usr/include/c++/8/climits" 3 -23376: -23376: -23376: # 1 "/usr/lib/gcc/arm-linux-gnueabihf/8/include-fixed/limits.h" 1 3 4 -23376: # 43 "/usr/include/c++/8/climits" 2 3 -23376: # 53 "../../src/Octagonal_Shape_defs.hh" 2 -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace IO_Operators { -23376: # 67 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: std::ostream& -23376: operator<<(std::ostream& s, const Octagonal_Shape& oct); -23376: -23376: } -23376: -23376: -23376: -23376: template -23376: void swap(Octagonal_Shape& x, Octagonal_Shape& y); -23376: # 85 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool operator==(const Octagonal_Shape& x, const Octagonal_Shape& y); -23376: # 95 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool operator!=(const Octagonal_Shape& x, const Octagonal_Shape& y); -23376: # 109 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 126 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 143 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 163 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 180 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 197 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: # 217 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 234 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir); -23376: # 251 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: bool l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2); -23376: -23376: -23376: -23376: class Octagonal_Shape_Helper { -23376: public: -23376: # 304 "../../src/Octagonal_Shape_defs.hh" -23376: static bool extract_octagonal_difference(const Constraint& c, -23376: dimension_type c_space_dim, -23376: dimension_type& c_num_vars, -23376: dimension_type& c_first_var, -23376: dimension_type& c_second_var, -23376: Coefficient& c_coeff, -23376: Coefficient& c_term); -23376: }; -23376: -23376: } -23376: # 419 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: class Parma_Polyhedra_Library::Octagonal_Shape { -23376: private: -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef Checked_Number N; -23376: -23376: -23376: public: -23376: -23376: -23376: typedef T coefficient_type_base; -23376: -23376: -23376: -23376: -23376: -23376: typedef N coefficient_type; -23376: -23376: -23376: static dimension_type max_space_dimension(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_constraint_systems(); -23376: -23376: -23376: -23376: -23376: static bool can_recycle_congruence_systems(); -23376: # 467 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(dimension_type num_dimensions = 0, -23376: Degenerate_Element kind = UNIVERSE); -23376: -23376: -23376: -23376: -23376: -23376: Octagonal_Shape(const Octagonal_Shape& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: template -23376: explicit Octagonal_Shape(const Octagonal_Shape& y, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 496 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(const Constraint_System& cs); -23376: # 509 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(const Congruence_System& cgs); -23376: # 519 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(const Generator_System& gs); -23376: # 528 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(const Polyhedron& ph, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 547 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: explicit Octagonal_Shape(const Box& box, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 567 "../../src/Octagonal_Shape_defs.hh" -23376: explicit Octagonal_Shape(const Grid& grid, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: # 586 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: explicit Octagonal_Shape(const BD_Shape& bd, -23376: Complexity_Class complexity = ANY_COMPLEXITY); -23376: -23376: -23376: -23376: -23376: -23376: Octagonal_Shape& operator=(const Octagonal_Shape& y); -23376: -23376: -23376: -23376: -23376: -23376: void m_swap(Octagonal_Shape& y); -23376: -23376: -23376: ~Octagonal_Shape(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type space_dimension() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: dimension_type affine_dimension() const; -23376: -23376: -23376: Constraint_System constraints() const; -23376: -23376: -23376: Constraint_System minimized_constraints() const; -23376: -23376: -23376: Congruence_System congruences() const; -23376: -23376: -23376: -23376: -23376: -23376: Congruence_System minimized_congruences() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool contains(const Octagonal_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool strictly_contains(const Octagonal_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool is_disjoint_from(const Octagonal_Shape& y) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Constraint& c) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Con_Relation relation_with(const Congruence& cg) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Poly_Gen_Relation relation_with(const Generator& g) const; -23376: -23376: -23376: bool is_empty() const; -23376: -23376: -23376: bool is_universe() const; -23376: -23376: -23376: bool is_discrete() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_bounded() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_topologically_closed() const; -23376: -23376: -23376: -23376: -23376: -23376: bool contains_integer_point() const; -23376: # 715 "../../src/Octagonal_Shape_defs.hh" -23376: bool constrains(Variable var) const; -23376: # 724 "../../src/Octagonal_Shape_defs.hh" -23376: bool bounds_from_above(const Linear_Expression& expr) const; -23376: # 733 "../../src/Octagonal_Shape_defs.hh" -23376: bool bounds_from_below(const Linear_Expression& expr) const; -23376: # 759 "../../src/Octagonal_Shape_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const; -23376: # 790 "../../src/Octagonal_Shape_defs.hh" -23376: bool maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const; -23376: # 818 "../../src/Octagonal_Shape_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const; -23376: # 849 "../../src/Octagonal_Shape_defs.hh" -23376: bool minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const; -23376: # 881 "../../src/Octagonal_Shape_defs.hh" -23376: bool frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const; -23376: -23376: -23376: bool OK() const; -23376: # 904 "../../src/Octagonal_Shape_defs.hh" -23376: void add_constraint(const Constraint& c); -23376: # 918 "../../src/Octagonal_Shape_defs.hh" -23376: void add_constraints(const Constraint_System& cs); -23376: # 937 "../../src/Octagonal_Shape_defs.hh" -23376: void add_recycled_constraints(Constraint_System& cs); -23376: # 949 "../../src/Octagonal_Shape_defs.hh" -23376: void add_congruence(const Congruence& cg); -23376: # 962 "../../src/Octagonal_Shape_defs.hh" -23376: void add_congruences(const Congruence_System& cgs); -23376: # 980 "../../src/Octagonal_Shape_defs.hh" -23376: void add_recycled_congruences(Congruence_System& cgs); -23376: # 992 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_with_constraint(const Constraint& c); -23376: # 1005 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_with_congruence(const Congruence& cg); -23376: # 1018 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_with_constraints(const Constraint_System& cs); -23376: # 1031 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_with_congruences(const Congruence_System& cgs); -23376: # 1054 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right); -23376: # 1087 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void generalized_refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: Relation_Symbol relsym); -23376: # 1103 "../../src/Octagonal_Shape_defs.hh" -23376: void unconstrain(Variable var); -23376: # 1117 "../../src/Octagonal_Shape_defs.hh" -23376: void unconstrain(const Variables_Set& vars); -23376: -23376: -23376: -23376: -23376: -23376: -23376: void intersection_assign(const Octagonal_Shape& y); -23376: # 1133 "../../src/Octagonal_Shape_defs.hh" -23376: void upper_bound_assign(const Octagonal_Shape& y); -23376: # 1145 "../../src/Octagonal_Shape_defs.hh" -23376: bool upper_bound_assign_if_exact(const Octagonal_Shape& y); -23376: # 1168 "../../src/Octagonal_Shape_defs.hh" -23376: bool integer_upper_bound_assign_if_exact(const Octagonal_Shape& y); -23376: # 1177 "../../src/Octagonal_Shape_defs.hh" -23376: void difference_assign(const Octagonal_Shape& y); -23376: # 1188 "../../src/Octagonal_Shape_defs.hh" -23376: bool simplify_using_context_assign(const Octagonal_Shape& y); -23376: # 1208 "../../src/Octagonal_Shape_defs.hh" -23376: void affine_image(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1234 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void affine_form_image(Variable var, -23376: const Linear_Form< Interval >& lf); -23376: # 1256 "../../src/Octagonal_Shape_defs.hh" -23376: void affine_preimage(Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1285 "../../src/Octagonal_Shape_defs.hh" -23376: void generalized_affine_image(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1310 "../../src/Octagonal_Shape_defs.hh" -23376: void generalized_affine_image(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1340 "../../src/Octagonal_Shape_defs.hh" -23376: void bounded_affine_image(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1370 "../../src/Octagonal_Shape_defs.hh" -23376: void generalized_affine_preimage(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator = Coefficient_one()); -23376: # 1395 "../../src/Octagonal_Shape_defs.hh" -23376: void generalized_affine_preimage(const Linear_Expression& lhs, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& rhs); -23376: # 1425 "../../src/Octagonal_Shape_defs.hh" -23376: void bounded_affine_preimage(Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: # 1438 "../../src/Octagonal_Shape_defs.hh" -23376: void time_elapse_assign(const Octagonal_Shape& y); -23376: # 1486 "../../src/Octagonal_Shape_defs.hh" -23376: void wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p = 0, -23376: unsigned complexity_threshold = 16, -23376: bool wrap_individually = true); -23376: # 1505 "../../src/Octagonal_Shape_defs.hh" -23376: void drop_some_non_integer_points(Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: # 1523 "../../src/Octagonal_Shape_defs.hh" -23376: void drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class complexity -23376: = ANY_COMPLEXITY); -23376: -23376: -23376: void topological_closure_assign(); -23376: # 1545 "../../src/Octagonal_Shape_defs.hh" -23376: void CC76_extrapolation_assign(const Octagonal_Shape& y, unsigned* tp = 0); -23376: # 1568 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void CC76_extrapolation_assign(const Octagonal_Shape& y, -23376: Iterator first, Iterator last, -23376: unsigned* tp = 0); -23376: # 1588 "../../src/Octagonal_Shape_defs.hh" -23376: void BHMZ05_widening_assign(const Octagonal_Shape& y, unsigned* tp = 0); -23376: -23376: -23376: void widening_assign(const Octagonal_Shape& y, unsigned* tp = 0); -23376: # 1613 "../../src/Octagonal_Shape_defs.hh" -23376: void limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1627 "../../src/Octagonal_Shape_defs.hh" -23376: void CC76_narrowing_assign(const Octagonal_Shape& y); -23376: # 1649 "../../src/Octagonal_Shape_defs.hh" -23376: void limited_CC76_extrapolation_assign(const Octagonal_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp = 0); -23376: # 1676 "../../src/Octagonal_Shape_defs.hh" -23376: void add_space_dimensions_and_embed(dimension_type m); -23376: # 1699 "../../src/Octagonal_Shape_defs.hh" -23376: void add_space_dimensions_and_project(dimension_type m); -23376: # 1709 "../../src/Octagonal_Shape_defs.hh" -23376: void concatenate_assign(const Octagonal_Shape& y); -23376: # 1720 "../../src/Octagonal_Shape_defs.hh" -23376: void remove_space_dimensions(const Variables_Set& vars); -23376: # 1730 "../../src/Octagonal_Shape_defs.hh" -23376: void remove_higher_space_dimensions(dimension_type new_dimension); -23376: # 1768 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void map_space_dimensions(const Partial_Function& pfunc); -23376: # 1792 "../../src/Octagonal_Shape_defs.hh" -23376: void expand_space_dimension(Variable var, dimension_type m); -23376: # 1817 "../../src/Octagonal_Shape_defs.hh" -23376: void fold_space_dimensions(const Variables_Set& vars, Variable dest); -23376: # 1849 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void export_interval_constraints(U& dest) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: template -23376: void refine_fp_interval_abstract_store( -23376: Box< Interval >& store) const; -23376: -23376: -23376: -23376: void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: -23376: memory_size_type total_memory_in_bytes() const; -23376: -23376: -23376: memory_size_type external_memory_in_bytes() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: int32_t hash_code() const; -23376: -23376: friend bool -23376: operator==(const Octagonal_Shape& x, const Octagonal_Shape& y); -23376: -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: template -23376: friend bool Parma_Polyhedra_Library -23376: ::l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2); -23376: -23376: private: -23376: template friend class Parma_Polyhedra_Library::Octagonal_Shape; -23376: template friend class Parma_Polyhedra_Library::Box; -23376: -23376: -23376: OR_Matrix matrix; -23376: -23376: -23376: dimension_type space_dim; -23376: # 1928 "../../src/Octagonal_Shape_defs.hh" -23376: # 1 "../../src/Og_Status_idefs.hh" 1 -23376: # 45 "../../src/Og_Status_idefs.hh" -23376: class Status { -23376: public: -23376: -23376: Status(); -23376: -23376: -23376: -23376: bool test_zero_dim_univ() const; -23376: void reset_zero_dim_univ(); -23376: void set_zero_dim_univ(); -23376: -23376: bool test_empty() const; -23376: void reset_empty(); -23376: void set_empty(); -23376: -23376: bool test_strongly_closed() const; -23376: void reset_strongly_closed(); -23376: void set_strongly_closed(); -23376: -23376: -23376: -23376: bool OK() const; -23376: -23376: -23376: -23376: -23376: -23376: void ascii_dump(std::ostream& s) const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool ascii_load(std::istream& s); -23376: -23376: private: -23376: -23376: typedef unsigned int flags_t; -23376: -23376: -23376: -23376: static const flags_t ZERO_DIM_UNIV = 0U; -23376: static const flags_t EMPTY = 1U << 0; -23376: static const flags_t STRONGLY_CLOSED = 1U << 1; -23376: -23376: -23376: -23376: flags_t flags; -23376: -23376: -23376: Status(flags_t mask); -23376: -23376: -23376: bool test_all(flags_t mask) const; -23376: -23376: -23376: bool test_any(flags_t mask) const; -23376: -23376: -23376: void set(flags_t mask); -23376: -23376: -23376: void reset(flags_t mask); -23376: -23376: }; -23376: # 1929 "../../src/Octagonal_Shape_defs.hh" 2 -23376: -23376: -23376: -23376: Status status; -23376: -23376: -23376: bool marked_zero_dim_univ() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: bool marked_empty() const; -23376: # 1951 "../../src/Octagonal_Shape_defs.hh" -23376: bool marked_strongly_closed() const; -23376: -23376: -23376: void set_zero_dim_univ(); -23376: -23376: -23376: void set_empty(); -23376: -23376: -23376: void set_strongly_closed(); -23376: -23376: -23376: void reset_strongly_closed(); -23376: -23376: N& matrix_at(dimension_type i, dimension_type j); -23376: const N& matrix_at(dimension_type i, dimension_type j) const; -23376: # 1978 "../../src/Octagonal_Shape_defs.hh" -23376: template -23376: void linear_form_upper_bound( -23376: const Linear_Form< Interval >& lf, -23376: N& result) const; -23376: -23376: -23376: static void interval_coefficient_upper_bound(const N& var_ub, -23376: const N& minus_var_ub, -23376: const N& int_ub, const N& int_lb, -23376: N& result); -23376: # 1999 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_no_check(const Constraint& c); -23376: # 2013 "../../src/Octagonal_Shape_defs.hh" -23376: void refine_no_check(const Congruence& cg); -23376: -23376: -23376: void add_octagonal_constraint(dimension_type i, -23376: dimension_type j, -23376: const N& k); -23376: -23376: -23376: void add_octagonal_constraint(dimension_type i, -23376: dimension_type j, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: void refine(Variable var, -23376: Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator -23376: = Coefficient_one()); -23376: -23376: -23376: void forget_all_octagonal_constraints(dimension_type v_id); -23376: -23376: -23376: void forget_binary_octagonal_constraints(dimension_type v_id); -23376: # 2071 "../../src/Octagonal_Shape_defs.hh" -23376: void deduce_v_pm_u_bounds(dimension_type v_id, -23376: dimension_type last_id, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& ub_v); -23376: # 2105 "../../src/Octagonal_Shape_defs.hh" -23376: void deduce_minus_v_pm_u_bounds(dimension_type v_id, -23376: dimension_type last_id, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& minus_lb_v); -23376: -23376: -23376: -23376: -23376: -23376: void get_limiting_octagon(const Constraint_System& cs, -23376: Octagonal_Shape& limiting_octagon) const; -23376: -23376: -23376: -23376: -23376: void compute_successors(std::vector& successor) const; -23376: -23376: -23376: -23376: -23376: -23376: void compute_leaders(std::vector& successor, -23376: std::vector& no_sing_leaders, -23376: bool& exist_sing_class, -23376: dimension_type& sing_leader) const; -23376: -23376: -23376: -23376: -23376: -23376: void compute_leaders(std::vector& leaders) const; -23376: # 2146 "../../src/Octagonal_Shape_defs.hh" -23376: void non_redundant_matrix_entries(std::vector& non_redundant) const; -23376: -23376: -23376: void strong_reduction_assign() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_strongly_reduced() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_strong_coherent() const; -23376: -23376: bool tight_coherence_would_make_empty() const; -23376: # 2172 "../../src/Octagonal_Shape_defs.hh" -23376: void strong_closure_assign() const; -23376: -23376: -23376: void strong_coherence_assign(); -23376: # 2185 "../../src/Octagonal_Shape_defs.hh" -23376: void tight_closure_assign(); -23376: # 2198 "../../src/Octagonal_Shape_defs.hh" -23376: void incremental_strong_closure_assign(Variable var) const; -23376: # 2217 "../../src/Octagonal_Shape_defs.hh" -23376: bool bounds(const Linear_Expression& expr, bool from_above) const; -23376: # 2245 "../../src/Octagonal_Shape_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included) const; -23376: # 2280 "../../src/Octagonal_Shape_defs.hh" -23376: bool max_min(const Linear_Expression& expr, -23376: bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, bool& included, -23376: Generator& g) const; -23376: -23376: void drop_some_non_integer_points_helper(N& elem); -23376: -23376: friend std::ostream& -23376: Parma_Polyhedra_Library::IO_Operators -23376: ::operator<<<>(std::ostream& s, const Octagonal_Shape& c); -23376: -23376: -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Octagonal_Shape& y) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const Generator& g) const; -23376: -23376: void throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const; -23376: -23376: template -23376: void throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const; -23376: -23376: static void throw_constraint_incompatible(const char* method); -23376: -23376: static void throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le); -23376: -23376: static void throw_invalid_argument(const char* method, const char* reason); -23376: -23376: }; -23376: -23376: # 1 "../../src/Og_Status_inlines.hh" 1 -23376: # 27 "../../src/Og_Status_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Status::Status(flags_t mask) -23376: : flags(mask) { -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Status::Status() -23376: : flags(ZERO_DIM_UNIV) { -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::test_all(flags_t mask) const { -23376: return (flags & mask) == mask; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::test_any(flags_t mask) const { -23376: return (flags & mask) != 0; -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::set(flags_t mask) { -23376: flags |= mask; -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::reset(flags_t mask) { -23376: flags &= ~mask; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::test_zero_dim_univ() const { -23376: return flags == ZERO_DIM_UNIV; -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::reset_zero_dim_univ() { -23376: -23376: if (flags == ZERO_DIM_UNIV) { -23376: -23376: flags = EMPTY; -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::set_zero_dim_univ() { -23376: -23376: flags = ZERO_DIM_UNIV; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::test_empty() const { -23376: return test_any(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::reset_empty() { -23376: reset(EMPTY); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::set_empty() { -23376: flags = EMPTY; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::test_strongly_closed() const { -23376: return test_any(STRONGLY_CLOSED); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::reset_strongly_closed() { -23376: reset(STRONGLY_CLOSED); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::set_strongly_closed() { -23376: set(STRONGLY_CLOSED); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::OK() const { -23376: if (test_zero_dim_univ()) { -23376: -23376: return true; -23376: } -23376: -23376: if (test_empty()) { -23376: Status copy = *this; -23376: copy.reset_empty(); -23376: if (copy.test_zero_dim_univ()) { -23376: return true; -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: -23376: namespace Implementation { -23376: -23376: namespace Octagonal_Shapes { -23376: -23376: extern const char* zero_dim_univ; -23376: extern const char* empty; -23376: extern const char* strong_closed; -23376: const char yes = '+'; -23376: const char no = '-'; -23376: const char separator = ' '; -23376: # 170 "../../src/Og_Status_inlines.hh" -23376: inline bool -23376: get_field(std::istream& s, const char* keyword, bool& positive) { -23376: std::string str; -23376: if (!(s >> str) -23376: || (str[0] != yes && str[0] != no) -23376: || str.substr(1) != keyword) { -23376: return false; -23376: } -23376: positive = (str[0] == yes); -23376: return true; -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::Status::ascii_dump(std::ostream& s) const { -23376: using namespace Implementation::Octagonal_Shapes; -23376: s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ -23376: << separator -23376: << (test_empty() ? yes : no) << empty -23376: << separator -23376: << separator -23376: << (test_strongly_closed() ? yes : no) << strong_closed -23376: << separator; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::Status::ascii_load(std::istream& s) { -23376: using namespace Implementation::Octagonal_Shapes; -23376: bool positive = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: if (!get_field(s, zero_dim_univ, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_zero_dim_univ(); -23376: } -23376: -23376: if (!get_field(s, empty, positive)) { -23376: return false; -23376: } -23376: -23376: if (positive) { -23376: set_empty(); -23376: } -23376: -23376: if (!get_field(s, strong_closed, positive)) { -23376: return false; -23376: } -23376: if (positive) { -23376: set_strongly_closed(); -23376: } -23376: else { -23376: reset_strongly_closed(); -23376: } -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: } -23376: # 2327 "../../src/Octagonal_Shape_defs.hh" 2 -23376: # 1 "../../src/Octagonal_Shape_inlines.hh" 1 -23376: # 31 "../../src/Octagonal_Shape_inlines.hh" -23376: # 1 "../../src/BD_Shape_defs.hh" 1 -23376: # 32 "../../src/Octagonal_Shape_inlines.hh" 2 -23376: -23376: -23376: # 1 "../../src/wrap_assign.hh" 1 -23376: # 33 "../../src/wrap_assign.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: struct Wrap_Dim_Translations { -23376: Variable var; -23376: Coefficient first_quadrant; -23376: Coefficient last_quadrant; -23376: Wrap_Dim_Translations(Variable v, -23376: Coefficient_traits::const_reference f, -23376: Coefficient_traits::const_reference l) -23376: : var(v), first_quadrant(f), last_quadrant(l) { -23376: } -23376: }; -23376: -23376: typedef std::vector Wrap_Translations; -23376: -23376: template -23376: void -23376: wrap_assign_ind(PSET& pointset, -23376: Variables_Set& vars, -23376: Wrap_Translations::const_iterator first, -23376: Wrap_Translations::const_iterator end, -23376: Bounded_Integer_Type_Width w, -23376: Coefficient_traits::const_reference min_value, -23376: Coefficient_traits::const_reference max_value, -23376: const Constraint_System& cs, -23376: Coefficient& tmp1, -23376: Coefficient& tmp2) { -23376: const dimension_type space_dim = pointset.space_dimension(); -23376: for (Wrap_Translations::const_iterator i = first; i != end; ++i) { -23376: const Wrap_Dim_Translations& wrap_dim_translations = *i; -23376: const Variable x(wrap_dim_translations.var); -23376: const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant; -23376: const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant; -23376: Coefficient& quadrant = tmp1; -23376: Coefficient& shift = tmp2; -23376: PSET hull(space_dim, EMPTY); -23376: for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) { -23376: PSET p(pointset); -23376: if (quadrant != 0) { -23376: mul_2exp_assign(shift, quadrant, w); -23376: p.affine_image(x, x - shift, 1); -23376: } -23376: -23376: vars.erase(x.id()); -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: p.refine_with_constraints(cs); -23376: } -23376: else { -23376: for (Constraint_System::const_iterator j = cs.begin(), -23376: cs_end = cs.end(); j != cs_end; ++j) { -23376: if (j->expression().all_zeroes(vars)) { -23376: -23376: p.refine_with_constraint(*j); -23376: } -23376: } -23376: } -23376: p.refine_with_constraint(min_value <= x); -23376: p.refine_with_constraint(x <= max_value); -23376: hull.upper_bound_assign(p); -23376: } -23376: pointset.m_swap(hull); -23376: } -23376: } -23376: -23376: template -23376: void -23376: wrap_assign_col(PSET& dest, -23376: const PSET& src, -23376: const Variables_Set& vars, -23376: Wrap_Translations::const_iterator first, -23376: Wrap_Translations::const_iterator end, -23376: Bounded_Integer_Type_Width w, -23376: Coefficient_traits::const_reference min_value, -23376: Coefficient_traits::const_reference max_value, -23376: const Constraint_System* cs_p, -23376: Coefficient& tmp) { -23376: if (first == end) { -23376: PSET p(src); -23376: if (cs_p != 0) { -23376: p.refine_with_constraints(*cs_p); -23376: } -23376: for (Variables_Set::const_iterator i = vars.begin(), -23376: vars_end = vars.end(); i != vars_end; ++i) { -23376: const Variable x(*i); -23376: p.refine_with_constraint(min_value <= x); -23376: p.refine_with_constraint(x <= max_value); -23376: } -23376: dest.upper_bound_assign(p); -23376: } -23376: else { -23376: const Wrap_Dim_Translations& wrap_dim_translations = *first; -23376: const Variable x(wrap_dim_translations.var); -23376: const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant; -23376: const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant; -23376: Coefficient& shift = tmp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_quadrant; Parma_Polyhedra_Library::Coefficient& quadrant = holder_quadrant.item(); -23376: for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) { -23376: if (quadrant != 0) { -23376: mul_2exp_assign(shift, quadrant, w); -23376: PSET p(src); -23376: p.affine_image(x, x - shift, 1); -23376: wrap_assign_col(dest, p, vars, first+1, end, w, min_value, max_value, -23376: cs_p, tmp); -23376: } -23376: else { -23376: wrap_assign_col(dest, src, vars, first+1, end, w, min_value, max_value, -23376: cs_p, tmp); -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: wrap_assign(PSET& pointset, -23376: const Variables_Set& vars, -23376: const Bounded_Integer_Type_Width w, -23376: const Bounded_Integer_Type_Representation r, -23376: const Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p, -23376: const unsigned complexity_threshold, -23376: const bool wrap_individually, -23376: const char* class_name) { -23376: -23376: -23376: -23376: -23376: if (cs_p != 0) { -23376: const dimension_type vars_space_dim = vars.space_dimension(); -23376: if (cs_p->space_dimension() > vars_space_dim) { -23376: std::ostringstream s; -23376: s << "PPL::" << class_name << "::wrap_assign(..., cs_p, ...):" -23376: << std::endl -23376: << "vars.space_dimension() == " << vars_space_dim -23376: << ", cs_p->space_dimension() == " << cs_p->space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: # 191 "../../src/wrap_assign.hh" -23376: } -23376: -23376: -23376: if (vars.empty()) { -23376: if (cs_p != 0) { -23376: pointset.refine_with_constraints(*cs_p); -23376: } -23376: return; -23376: } -23376: -23376: -23376: const dimension_type space_dim = pointset.space_dimension(); -23376: if (vars.space_dimension() > space_dim) { -23376: std::ostringstream s; -23376: s << "PPL::" << class_name << "::wrap_assign(vs, ...):" << std::endl -23376: << "this->space_dimension() == " << space_dim -23376: << ", required space dimension == " << vars.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: if (pointset.is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item(); -23376: if (r == UNSIGNED) { -23376: min_value = 0; -23376: mul_2exp_assign(max_value, Coefficient_one(), w); -23376: --max_value; -23376: } -23376: else { -23376: ((void) 0); -23376: mul_2exp_assign(max_value, Coefficient_one(), w-1); -23376: neg_assign(min_value, max_value); -23376: --max_value; -23376: } -23376: -23376: -23376: -23376: -23376: Wrap_Translations translations; -23376: -23376: -23376: -23376: Variables_Set dimensions_to_be_translated; -23376: -23376: -23376: -23376: -23376: -23376: -23376: unsigned collective_wrap_complexity = 1; -23376: -23376: -23376: -23376: bool collective_wrap_too_complex = false; -23376: -23376: if (!wrap_individually) { -23376: translations.reserve(space_dim); -23376: } -23376: -23376: -23376: -23376: Constraint_System full_range_bounds; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item(); -23376: -23376: for (Variables_Set::const_iterator i = vars.begin(), -23376: vars_end = vars.end(); i != vars_end; ++i) { -23376: -23376: const Variable x(*i); -23376: -23376: bool extremum; -23376: -23376: if (!pointset.minimize(x, l_n, l_d, extremum)) { -23376: set_full_range: -23376: pointset.unconstrain(x); -23376: full_range_bounds.insert(min_value <= x); -23376: full_range_bounds.insert(x <= max_value); -23376: continue; -23376: } -23376: -23376: if (!pointset.maximize(x, u_n, u_d, extremum)) { -23376: goto set_full_range; -23376: } -23376: -23376: div_assign_r(l_n, l_n, l_d, ROUND_DOWN); -23376: div_assign_r(u_n, u_n, u_d, ROUND_DOWN); -23376: l_n -= min_value; -23376: u_n -= min_value; -23376: div_2exp_assign_r(l_n, l_n, w, ROUND_DOWN); -23376: div_2exp_assign_r(u_n, u_n, w, ROUND_DOWN); -23376: Coefficient& first_quadrant = l_n; -23376: const Coefficient& last_quadrant = u_n; -23376: -23376: -23376: if (first_quadrant == 0 && last_quadrant == 0) { -23376: continue; -23376: } -23376: -23376: -23376: if (o == OVERFLOW_IMPOSSIBLE) { -23376: if (first_quadrant < 0) { -23376: full_range_bounds.insert(min_value <= x); -23376: } -23376: if (last_quadrant > 0) { -23376: full_range_bounds.insert(x <= max_value); -23376: } -23376: continue; -23376: } -23376: -23376: if (o == OVERFLOW_UNDEFINED || collective_wrap_too_complex) { -23376: goto set_full_range; -23376: } -23376: -23376: Coefficient& quadrants = u_d; -23376: quadrants = last_quadrant - first_quadrant + 1; -23376: -23376: unsigned extension = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: Result res = assign_r(extension, quadrants, ROUND_IGNORE); -23376: if (result_overflow(res) != 0 || extension > complexity_threshold) { -23376: goto set_full_range; -23376: } -23376: -23376: if (!wrap_individually && !collective_wrap_too_complex) { -23376: res = mul_assign_r(collective_wrap_complexity, -23376: collective_wrap_complexity, extension, ROUND_IGNORE); -23376: if (result_overflow(res) != 0 -23376: || collective_wrap_complexity > complexity_threshold) { -23376: collective_wrap_too_complex = true; -23376: } -23376: if (collective_wrap_too_complex) { -23376: -23376: for (Wrap_Translations::const_iterator j = translations.begin(), -23376: translations_end = translations.end(); -23376: j != translations_end; -23376: ++j) { -23376: const Variable y(j->var); -23376: pointset.unconstrain(y); -23376: full_range_bounds.insert(min_value <= y); -23376: full_range_bounds.insert(y <= max_value); -23376: } -23376: } -23376: } -23376: -23376: if (wrap_individually && cs_p == 0) { -23376: Coefficient& quadrant = first_quadrant; -23376: -23376: -23376: Coefficient& shift = l_d; -23376: PSET hull(space_dim, EMPTY); -23376: for ( ; quadrant <= last_quadrant; ++quadrant) { -23376: PSET p(pointset); -23376: if (quadrant != 0) { -23376: mul_2exp_assign(shift, quadrant, w); -23376: p.affine_image(x, x - shift, 1); -23376: } -23376: p.refine_with_constraint(min_value <= x); -23376: p.refine_with_constraint(x <= max_value); -23376: hull.upper_bound_assign(p); -23376: } -23376: pointset.m_swap(hull); -23376: } -23376: else if (wrap_individually || !collective_wrap_too_complex) { -23376: ((void) 0); -23376: dimensions_to_be_translated.insert(x); -23376: translations -23376: .push_back(Wrap_Dim_Translations(x, first_quadrant, last_quadrant)); -23376: } -23376: } -23376: -23376: if (!translations.empty()) { -23376: if (wrap_individually) { -23376: ((void) 0); -23376: wrap_assign_ind(pointset, dimensions_to_be_translated, -23376: translations.begin(), translations.end(), -23376: w, min_value, max_value, *cs_p, l_n, l_d); -23376: } -23376: else { -23376: PSET hull(space_dim, EMPTY); -23376: wrap_assign_col(hull, pointset, dimensions_to_be_translated, -23376: translations.begin(), translations.end(), -23376: w, min_value, max_value, cs_p, l_n); -23376: pointset.m_swap(hull); -23376: } -23376: } -23376: -23376: if (cs_p != 0) { -23376: pointset.refine_with_constraints(*cs_p); -23376: } -23376: pointset.refine_with_constraints(full_range_bounds); -23376: } -23376: -23376: } -23376: -23376: } -23376: # 35 "../../src/Octagonal_Shape_inlines.hh" 2 -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: namespace Implementation { -23376: -23376: namespace Octagonal_Shapes { -23376: -23376: -23376: -23376: -23376: -23376: inline dimension_type -23376: coherent_index(const dimension_type i) { -23376: return (i % 2 != 0) ? (i-1) : (i+1); -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Octagonal_Shape::max_space_dimension() { -23376: return OR_Matrix::max_num_rows()/2; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::marked_zero_dim_univ() const { -23376: return status.test_zero_dim_univ(); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::marked_strongly_closed() const { -23376: return status.test_strongly_closed(); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::marked_empty() const { -23376: return status.test_empty(); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::set_zero_dim_univ() { -23376: status.set_zero_dim_univ(); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::set_empty() { -23376: status.set_empty(); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::set_strongly_closed() { -23376: status.set_strongly_closed(); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::reset_strongly_closed() { -23376: status.reset_strongly_closed(); -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const dimension_type num_dimensions, -23376: const Degenerate_Element kind) -23376: : matrix(num_dimensions), space_dim(num_dimensions), status() { -23376: if (kind == EMPTY) { -23376: set_empty(); -23376: } -23376: else if (num_dimensions > 0) { -23376: -23376: set_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Octagonal_Shape& y, Complexity_Class) -23376: : matrix(y.matrix), space_dim(y.space_dim), status(y.status) { -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Octagonal_Shape& y, -23376: Complexity_Class) -23376: -23376: -23376: : matrix((y.strong_closure_assign(), y.matrix)), -23376: space_dim(y.space_dim), -23376: status() { -23376: -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: } -23376: else if (y.marked_zero_dim_univ()) { -23376: set_zero_dim_univ(); -23376: } -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Constraint_System& cs) -23376: : matrix(cs.space_dimension()), -23376: space_dim(cs.space_dimension()), -23376: status() { -23376: if (cs.space_dimension() > 0) { -23376: -23376: set_strongly_closed(); -23376: } -23376: add_constraints(cs); -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Congruence_System& cgs) -23376: : matrix(cgs.space_dimension()), -23376: space_dim(cgs.space_dimension()), -23376: status() { -23376: if (cgs.space_dimension() > 0) { -23376: -23376: set_strongly_closed(); -23376: } -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Box& box, -23376: Complexity_Class) -23376: : matrix(box.space_dimension()), -23376: space_dim(box.space_dimension()), -23376: status() { -23376: -23376: if (box.is_empty()) { -23376: set_empty(); -23376: } -23376: else if (box.space_dimension() > 0) { -23376: -23376: set_strongly_closed(); -23376: refine_with_constraints(box.constraints()); -23376: } -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const Grid& grid, -23376: Complexity_Class) -23376: : matrix(grid.space_dimension()), -23376: space_dim(grid.space_dimension()), -23376: status() { -23376: if (grid.space_dimension() > 0) { -23376: -23376: set_strongly_closed(); -23376: } -23376: -23376: refine_with_congruences(grid.minimized_congruences()); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Octagonal_Shape::Octagonal_Shape(const BD_Shape& bd, -23376: Complexity_Class) -23376: : matrix(bd.space_dimension()), -23376: space_dim(bd.space_dimension()), -23376: status() { -23376: -23376: if (bd.is_empty()) { -23376: set_empty(); -23376: } -23376: else if (bd.space_dimension() > 0) { -23376: -23376: set_strongly_closed(); -23376: refine_with_constraints(bd.constraints()); -23376: } -23376: } -23376: -23376: template -23376: inline Congruence_System -23376: Octagonal_Shape::congruences() const { -23376: return minimized_congruences(); -23376: } -23376: -23376: template -23376: inline Octagonal_Shape& -23376: Octagonal_Shape::operator=(const Octagonal_Shape& y) { -23376: matrix = y.matrix; -23376: space_dim = y.space_dim; -23376: status = y.status; -23376: return *this; -23376: } -23376: -23376: template -23376: inline -23376: Octagonal_Shape::~Octagonal_Shape() { -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::m_swap(Octagonal_Shape& y) { -23376: using std::swap; -23376: swap(matrix, y.matrix); -23376: swap(space_dim, y.space_dim); -23376: swap(status, y.status); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: Octagonal_Shape::space_dimension() const { -23376: return space_dim; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::is_discrete() const { -23376: return affine_dimension() == 0; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::is_empty() const { -23376: strong_closure_assign(); -23376: return marked_empty(); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::bounds_from_above(const Linear_Expression& expr) const { -23376: return bounds(expr, true); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::bounds_from_below(const Linear_Expression& expr) const { -23376: return bounds(expr, false); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, -23376: bool& maximum) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, -23376: bool& maximum, -23376: Generator& g) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, -23376: bool& minimum) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, -23376: bool& minimum, -23376: Generator& g) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::is_topologically_closed() const { -23376: return true; -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::topological_closure_assign() { -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const Octagonal_Shape& x, const Octagonal_Shape& y) { -23376: if (x.space_dim != y.space_dim) { -23376: -23376: return false; -23376: } -23376: -23376: if (x.space_dim == 0) { -23376: if (x.marked_empty()) { -23376: return y.marked_empty(); -23376: } -23376: else { -23376: return !y.marked_empty(); -23376: } -23376: } -23376: -23376: x.strong_closure_assign(); -23376: y.strong_closure_assign(); -23376: -23376: -23376: if (x.marked_empty()) { -23376: return y.marked_empty(); -23376: } -23376: if (y.marked_empty()) { -23376: return false; -23376: } -23376: -23376: return x.matrix == y.matrix; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const Octagonal_Shape& x, const Octagonal_Shape& y) { -23376: return !(x == y); -23376: } -23376: -23376: template -23376: inline const typename Octagonal_Shape::coefficient_type& -23376: Octagonal_Shape::matrix_at(const dimension_type i, -23376: const dimension_type j) const { -23376: ((void) 0); -23376: using namespace Implementation::Octagonal_Shapes; -23376: return (j < matrix.row_size(i)) -23376: ? matrix[i][j] -23376: : matrix[coherent_index(j)][coherent_index(i)]; -23376: } -23376: -23376: template -23376: inline typename Octagonal_Shape::coefficient_type& -23376: Octagonal_Shape::matrix_at(const dimension_type i, -23376: const dimension_type j) { -23376: ((void) 0); -23376: using namespace Implementation::Octagonal_Shapes; -23376: return (j < matrix.row_size(i)) -23376: ? matrix[i][j] -23376: : matrix[coherent_index(j)][coherent_index(i)]; -23376: } -23376: -23376: template -23376: inline Constraint_System -23376: Octagonal_Shape::minimized_constraints() const { -23376: strong_reduction_assign(); -23376: return constraints(); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::add_octagonal_constraint(const dimension_type i, -23376: const dimension_type j, -23376: const N& k) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: N& r_i_j = matrix[i][j]; -23376: if (r_i_j > k) { -23376: r_i_j = k; -23376: if (marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape -23376: ::add_octagonal_constraint(const dimension_type i, -23376: const dimension_type j, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_k; N& k = holder_k.item(); -23376: div_round_up(k, numer, denom); -23376: add_octagonal_constraint(i, j, k); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::add_constraints(const Constraint_System& cs) { -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: i_end = cs.end(); i != i_end; ++i) { -23376: add_constraint(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::add_recycled_constraints(Constraint_System& cs) { -23376: add_constraints(cs); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::add_recycled_congruences(Congruence_System& cgs) { -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::add_congruences(const Congruence_System& cgs) { -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); i != cgs_end; ++i) { -23376: add_congruence(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::refine_with_constraint(const Constraint& c) { -23376: -23376: if (c.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_constraint(c)", c); -23376: } -23376: -23376: if (!marked_empty()) { -23376: refine_no_check(c); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::refine_with_constraints(const Constraint_System& cs) { -23376: -23376: if (cs.space_dimension() > space_dimension()) { -23376: throw_invalid_argument("refine_with_constraints(cs)", -23376: "cs and *this are space-dimension incompatible"); -23376: } -23376: -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::refine_with_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: if (cg_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_congruence(cg)", cg); -23376: } -23376: if (!marked_empty()) { -23376: refine_no_check(cg); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::refine_with_congruences(const Congruence_System& cgs) { -23376: -23376: if (cgs.space_dimension() > space_dimension()) { -23376: throw_invalid_argument("refine_with_congruences(cgs)", -23376: "cgs and *this are space-dimension incompatible"); -23376: } -23376: -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::refine_no_check(const Congruence& cg) { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: if (cg.is_proper_congruence()) { -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: } -23376: -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: Constraint c(cg); -23376: refine_no_check(c); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::can_recycle_constraint_systems() { -23376: return false; -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::can_recycle_congruence_systems() { -23376: return false; -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape -23376: ::remove_higher_space_dimensions(const dimension_type new_dimension) { -23376: -23376: if (new_dimension > space_dim) { -23376: throw_dimension_incompatible("remove_higher_space_dimension(nd)", -23376: new_dimension); -23376: } -23376: -23376: -23376: -23376: if (new_dimension == space_dim) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: matrix.shrink(new_dimension); -23376: -23376: -23376: if (new_dimension == 0 && !marked_empty()) { -23376: set_zero_dim_univ(); -23376: } -23376: space_dim = new_dimension; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p, -23376: unsigned complexity_threshold, -23376: bool wrap_individually) { -23376: Implementation::wrap_assign(*this, -23376: vars, w, r, o, cs_p, -23376: complexity_threshold, wrap_individually, -23376: "Octagonal_Shape"); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::widening_assign(const Octagonal_Shape& y, unsigned* tp) { -23376: BHMZ05_widening_assign(y, tp); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::CC76_extrapolation_assign(const Octagonal_Shape& y, -23376: unsigned* tp) { -23376: static N stop_points[] = { -23376: N(-2, ROUND_UP), -23376: N(-1, ROUND_UP), -23376: N( 0, ROUND_UP), -23376: N( 1, ROUND_UP), -23376: N( 2, ROUND_UP) -23376: }; -23376: CC76_extrapolation_assign(y, -23376: stop_points, -23376: stop_points -23376: + sizeof(stop_points)/sizeof(stop_points[0]), -23376: tp); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::time_elapse_assign(const Octagonal_Shape& y) { -23376: -23376: if (space_dimension() != y.space_dimension()) { -23376: throw_dimension_incompatible("time_elapse_assign(y)", y); -23376: } -23376: -23376: -23376: C_Polyhedron ph_x(constraints()); -23376: C_Polyhedron ph_y(y.constraints()); -23376: ph_x.time_elapse_assign(ph_y); -23376: Octagonal_Shape x(ph_x); -23376: m_swap(x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline bool -23376: Octagonal_Shape::strictly_contains(const Octagonal_Shape& y) const { -23376: const Octagonal_Shape& x = *this; -23376: return x.contains(y) && !y.contains(x); -23376: } -23376: -23376: template -23376: template -23376: inline void -23376: Octagonal_Shape::generalized_refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right, -23376: const Relation_Symbol relsym) { -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: refine_with_linear_form_inequality(left, right); -23376: refine_with_linear_form_inequality(right, left); -23376: break; -23376: case LESS_THAN: -23376: case LESS_OR_EQUAL: -23376: refine_with_linear_form_inequality(left, right); -23376: break; -23376: case GREATER_THAN: -23376: case GREATER_OR_EQUAL: -23376: refine_with_linear_form_inequality(right, left); -23376: break; -23376: case NOT_EQUAL: -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline void -23376: Octagonal_Shape:: -23376: refine_fp_interval_abstract_store( -23376: Box< Interval >& store) const { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_683 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: typedef Interval FP_Interval_Type; -23376: store.intersection_assign(Box(*this)); -23376: -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: -23376: if (x.space_dim != y.space_dim) { -23376: return false; -23376: } -23376: -23376: if (x.space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.strong_closure_assign(); -23376: y.strong_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return rectilinear_distance_assign(r, x.matrix, y.matrix, dir, -23376: tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: return rectilinear_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: -23376: if (x.space_dim != y.space_dim) { -23376: return false; -23376: } -23376: -23376: -23376: if (x.space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.strong_closure_assign(); -23376: y.strong_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return euclidean_distance_assign(r, x.matrix, y.matrix, dir, -23376: tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: return euclidean_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: -23376: if (x.space_dim != y.space_dim) { -23376: return false; -23376: } -23376: -23376: if (x.space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.strong_closure_assign(); -23376: y.strong_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return l_infinity_distance_assign(r, x.matrix, y.matrix, dir, -23376: tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const Octagonal_Shape& x, -23376: const Octagonal_Shape& y, -23376: const Rounding_Dir dir) { -23376: return l_infinity_distance_assign(r, x, y, dir); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Octagonal_Shape::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline int32_t -23376: Octagonal_Shape::hash_code() const { -23376: return hash_code_from_dimension(space_dimension()); -23376: } -23376: -23376: template -23376: inline void -23376: Octagonal_Shape::drop_some_non_integer_points_helper(N& elem) { -23376: if (!is_integer(elem)) { -23376: -23376: -23376: -23376: floor_assign_r(elem, elem, ROUND_DOWN); -23376: ((void) 0); -23376: reset_strongly_closed(); -23376: } -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(Octagonal_Shape& x, Octagonal_Shape& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 2328 "../../src/Octagonal_Shape_defs.hh" 2 -23376: # 1 "../../src/Octagonal_Shape_templates.hh" 1 -23376: # 43 "../../src/Octagonal_Shape_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Octagonal_Shape::Octagonal_Shape(const Polyhedron& ph, -23376: const Complexity_Class complexity) -23376: : matrix(0), space_dim(0), status() { -23376: const dimension_type num_dimensions = ph.space_dimension(); -23376: -23376: if (ph.marked_empty()) { -23376: *this = Octagonal_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: -23376: if (num_dimensions == 0) { -23376: *this = Octagonal_Shape(num_dimensions, UNIVERSE); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (complexity == ANY_COMPLEXITY -23376: || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) { -23376: *this = Octagonal_Shape(ph.generators()); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: -23376: if (!ph.has_something_pending() && ph.constraints_are_minimized()) { -23376: -23376: -23376: if (ph.is_universe()) { -23376: *this = Octagonal_Shape(num_dimensions, UNIVERSE); -23376: return; -23376: } -23376: } -23376: -23376: -23376: for (Constraint_System::const_iterator i = ph.con_sys.begin(), -23376: cs_end = ph.con_sys.end(); i != cs_end; ++i) { -23376: if (i->is_inconsistent()) { -23376: *this = Octagonal_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: } -23376: -23376: -23376: -23376: if (complexity == SIMPLEX_COMPLEXITY) { -23376: MIP_Problem lp(num_dimensions); -23376: lp.set_optimization_mode(MAXIMIZATION); -23376: -23376: const Constraint_System& ph_cs = ph.constraints(); -23376: if (!ph_cs.has_strict_inequalities()) { -23376: lp.add_constraints(ph_cs); -23376: } -23376: else { -23376: -23376: for (Constraint_System::const_iterator i = ph_cs.begin(), -23376: ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) { -23376: const Constraint& c = *i; -23376: if (c.is_strict_inequality()) { -23376: Linear_Expression expr(c.expression()); -23376: lp.add_constraint(expr >= 0); -23376: } -23376: else { -23376: lp.add_constraint(c); -23376: } -23376: } -23376: } -23376: -23376: -23376: if (!lp.is_satisfiable()) { -23376: *this = Octagonal_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: -23376: -23376: *this = Octagonal_Shape(num_dimensions, UNIVERSE); -23376: -23376: Generator g(point()); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: for (dimension_type i = 0; i < num_dimensions; ++i) { -23376: Variable x(i); -23376: -23376: lp.set_objective_function(x); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: numer *= 2; -23376: div_round_up(matrix[2*i + 1][2*i], numer, denom); -23376: } -23376: -23376: for (dimension_type j = 0; j < i; ++j) { -23376: Variable y(j); -23376: lp.set_objective_function(x + y); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(matrix[2*i + 1][2*j], numer, denom); -23376: } -23376: } -23376: -23376: for (dimension_type j = 0; j < num_dimensions; ++j) { -23376: if (i == j) { -23376: continue; -23376: } -23376: Variable y(j); -23376: lp.set_objective_function(x - y); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(((i < j) ? -23376: matrix[2*j][2*i] -23376: : matrix[2*i + 1][2*j + 1]), -23376: numer, denom); -23376: } -23376: } -23376: -23376: for (dimension_type j = 0; j < num_dimensions; ++j) { -23376: if (i == j) { -23376: continue; -23376: } -23376: Variable y(j); -23376: lp.set_objective_function(x - y); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(((i < j) -23376: ? matrix[2*j][2*i] -23376: : matrix[2*i + 1][2*j + 1]), -23376: numer, denom); -23376: } -23376: } -23376: -23376: for (dimension_type j = 0; j < i; ++j) { -23376: Variable y(j); -23376: lp.set_objective_function(-x - y); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(matrix[2*i][2*j + 1], numer, denom); -23376: } -23376: } -23376: -23376: lp.set_objective_function(-x); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: numer *= 2; -23376: div_round_up(matrix[2*i][2*i + 1], numer, denom); -23376: } -23376: } -23376: set_strongly_closed(); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: *this = Octagonal_Shape(num_dimensions, UNIVERSE); -23376: refine_with_constraints(ph.constraints()); -23376: } -23376: -23376: template -23376: Octagonal_Shape::Octagonal_Shape(const Generator_System& gs) -23376: : matrix(gs.space_dimension()), -23376: space_dim(gs.space_dimension()), -23376: status() { -23376: const Generator_System::const_iterator gs_begin = gs.begin(); -23376: const Generator_System::const_iterator gs_end = gs.end(); -23376: if (gs_begin == gs_end) { -23376: -23376: set_empty(); -23376: return; -23376: } -23376: -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typename OR_Matrix::row_iterator mat_begin = matrix.row_begin(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: bool mat_initialized = false; -23376: bool point_seen = false; -23376: -23376: for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) { -23376: const Generator& g = *k; -23376: switch (g.type()) { -23376: case Generator::POINT: -23376: point_seen = true; -23376: -23376: case Generator::CLOSURE_POINT: -23376: if (!mat_initialized) { -23376: -23376: mat_initialized = true; -23376: const Coefficient& d = g.divisor(); -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: const Coefficient& g_i = g.coefficient(Variable(i)); -23376: const dimension_type di = 2*i; -23376: row_reference x_i = *(mat_begin + di); -23376: row_reference x_ii = *(mat_begin + (di + 1)); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: const Coefficient& g_j = g.coefficient(Variable(j)); -23376: const dimension_type dj = 2*j; -23376: -23376: -23376: -23376: -23376: div_round_up(x_i[dj], g_j - g_i, d); -23376: div_round_up(x_ii[dj + 1], g_i - g_j, d); -23376: -23376: div_round_up(x_i[dj + 1], -g_j - g_i, d); -23376: div_round_up(x_ii[dj], g_i + g_j, d); -23376: } -23376: -23376: div_round_up(x_i[di + 1], -g_i - g_i, d); -23376: div_round_up(x_ii[di], g_i + g_i, d); -23376: } -23376: } -23376: else { -23376: -23376: -23376: const Coefficient& d = g.divisor(); -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: const Coefficient& g_i = g.coefficient(Variable(i)); -23376: const dimension_type di = 2*i; -23376: row_reference x_i = *(mat_begin + di); -23376: row_reference x_ii = *(mat_begin + (di + 1)); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: const Coefficient& g_j = g.coefficient(Variable(j)); -23376: const dimension_type dj = 2*j; -23376: -23376: -23376: -23376: -23376: div_round_up(tmp, g_j - g_i, d); -23376: max_assign(x_i[dj], tmp); -23376: div_round_up(tmp, g_i - g_j, d); -23376: max_assign(x_ii[dj + 1], tmp); -23376: -23376: div_round_up(tmp, -g_j - g_i, d); -23376: max_assign(x_i[dj + 1], tmp); -23376: div_round_up(tmp, g_i + g_j, d); -23376: max_assign(x_ii[dj], tmp); -23376: } -23376: -23376: div_round_up(tmp, -g_i - g_i, d); -23376: max_assign(x_i[di + 1], tmp); -23376: div_round_up(tmp, g_i + g_i, d); -23376: max_assign(x_ii[di], tmp); -23376: } -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: -23376: if (!point_seen) { -23376: -23376: throw_invalid_argument("Octagonal_Shape(gs)", -23376: "the non-empty generator system gs " -23376: "contains no points."); -23376: } -23376: -23376: -23376: for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) { -23376: const Generator& g = *k; -23376: switch (g.type()) { -23376: case Generator::LINE: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: const Coefficient& g_i = g.coefficient(Variable(i)); -23376: const dimension_type di = 2*i; -23376: row_reference x_i = *(mat_begin + di); -23376: row_reference x_ii = *(mat_begin + (di + 1)); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: const Coefficient& g_j = g.coefficient(Variable(j)); -23376: const dimension_type dj = 2*j; -23376: -23376: if (g_i != g_j) { -23376: -23376: assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: if (g_i != -g_j) { -23376: -23376: assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: if (g_i != 0) { -23376: -23376: assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: break; -23376: case Generator::RAY: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: const Coefficient& g_i = g.coefficient(Variable(i)); -23376: const dimension_type di = 2*i; -23376: row_reference x_i = *(mat_begin + di); -23376: row_reference x_ii = *(mat_begin + (di + 1)); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: const Coefficient& g_j = g.coefficient(Variable(j)); -23376: const dimension_type dj = 2*j; -23376: -23376: -23376: if (g_i < g_j) { -23376: -23376: assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: if (g_i > g_j) { -23376: -23376: assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: if (g_i < -g_j) { -23376: -23376: assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: if (g_i > -g_j) { -23376: -23376: assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: if (g_i < 0) { -23376: -23376: assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: if (g_i > 0) { -23376: -23376: assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: set_strongly_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::add_constraint(const Constraint& c) { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: -23376: if (c_space_dim > space_dim) { -23376: throw_dimension_incompatible("add_constraint(c)", c); -23376: } -23376: -23376: if (c.is_strict_inequality()) { -23376: if (c.is_inconsistent()) { -23376: set_empty(); -23376: return; -23376: } -23376: if (c.is_tautological()) { -23376: return; -23376: } -23376: -23376: throw_invalid_argument("add_constraint(c)", -23376: "strict inequalities are not allowed"); -23376: } -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item(); -23376: -23376: if (!Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, c_space_dim, num_vars, -23376: i, j, coeff, term)) { -23376: throw_invalid_argument("add_constraint(c)", -23376: "c is not an octagonal constraint"); -23376: } -23376: -23376: if (num_vars == 0) { -23376: -23376: if (c.inhomogeneous_term() < 0 -23376: || (c.is_equality() && c.inhomogeneous_term() != 0)) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: typename OR_Matrix::row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::row_reference_type m_i = *i_iter; -23376: N& m_i_j = m_i[j]; -23376: -23376: if (coeff < 0) { -23376: neg_assign(coeff); -23376: } -23376: -23376: bool is_oct_changed = false; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, term, coeff); -23376: if (m_i_j > d) { -23376: m_i_j = d; -23376: is_oct_changed = true; -23376: } -23376: -23376: if (c.is_equality()) { -23376: -23376: if (i % 2 == 0) { -23376: ++i_iter; -23376: } -23376: else { -23376: --i_iter; -23376: } -23376: -23376: typename OR_Matrix::row_reference_type m_ci = *i_iter; -23376: using namespace Implementation::Octagonal_Shapes; -23376: dimension_type cj = coherent_index(j); -23376: N& m_ci_cj = m_ci[cj]; -23376: -23376: neg_assign(term); -23376: div_round_up(d, term, coeff); -23376: if (m_ci_cj > d) { -23376: m_ci_cj = d; -23376: is_oct_changed = true; -23376: } -23376: } -23376: -23376: -23376: if (is_oct_changed && marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::add_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: -23376: if (space_dimension() < cg_space_dim) { -23376: throw_dimension_incompatible("add_congruence(cg)", cg); -23376: } -23376: -23376: -23376: if (cg.is_proper_congruence()) { -23376: if (cg.is_tautological()) { -23376: return; -23376: } -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: throw_invalid_argument("add_congruence(cg)", -23376: "cg is a non-trivial, proper congruence"); -23376: } -23376: -23376: ((void) 0); -23376: Constraint c(cg); -23376: add_constraint(c); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape::refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_534 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: const dimension_type left_space_dim = left.space_dimension(); -23376: if (space_dim < left_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(left, right)", "left", left); -23376: } -23376: -23376: const dimension_type right_space_dim = right.space_dimension(); -23376: if (space_dim < right_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(left, right)", "right", right); -23376: } -23376: -23376: -23376: dimension_type left_t = 0; -23376: -23376: dimension_type left_w_id = 0; -23376: -23376: -23376: dimension_type right_t = 0; -23376: -23376: dimension_type right_w_id = 0; -23376: -23376: -23376: for (dimension_type i = left_space_dim; i-- > 0; ) { -23376: if (left.coefficient(Variable(i)) != 0) { -23376: if (left_t++ == 1) { -23376: break; -23376: } -23376: else { -23376: left_w_id = i; -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = right_space_dim; i-- > 0; ) { -23376: if (right.coefficient(Variable(i)) != 0) { -23376: if (right_t++ == 1) { -23376: break; -23376: } -23376: else { -23376: right_w_id = i; -23376: } -23376: } -23376: } -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef Interval FP_Interval_Type; -23376: -23376: -23376: -23376: -23376: if (left_t == 0) { -23376: if (right_t == 0) { -23376: -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (right_t == 1) { -23376: -23376: -23376: const FP_Interval_Type& right_w_coeff = -23376: right.coefficient(Variable(right_w_id)); -23376: if (right_w_coeff == 1) { -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_b = right.inhomogeneous_term(); -23376: sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(), -23376: ROUND_UP); -23376: mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1, -23376: ROUND_UP); -23376: add_octagonal_constraint(n_right, n_right + 1, b_plus_minus_a_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (right_w_coeff == -1) { -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_b = right.inhomogeneous_term(); -23376: sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(), -23376: ROUND_UP); -23376: mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1, -23376: ROUND_UP); -23376: add_octagonal_constraint(n_right + 1, n_right, b_plus_minus_a_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: } -23376: else if (left_t == 1) { -23376: if (right_t == 0) { -23376: -23376: -23376: const FP_Interval_Type& left_w_coeff = -23376: left.coefficient(Variable(left_w_id)); -23376: if (left_w_coeff == 1) { -23376: const dimension_type n_left = left_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1, -23376: ROUND_UP); -23376: add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (left_w_coeff == -1) { -23376: const dimension_type n_left = left_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1, -23376: ROUND_UP); -23376: add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: -23376: if (right_t == 1) { -23376: -23376: -23376: -23376: -23376: const FP_Interval_Type& left_w_coeff = -23376: left.coefficient(Variable(left_w_id)); -23376: const FP_Interval_Type& right_w_coeff = -23376: right.coefficient(Variable(right_w_id)); -23376: bool is_left_coeff_one = (left_w_coeff == 1); -23376: bool is_left_coeff_minus_one = (left_w_coeff == -1); -23376: bool is_right_coeff_one = (right_w_coeff == 1); -23376: bool is_right_coeff_minus_one = (right_w_coeff == -1); -23376: if (left_w_id == right_w_id) { -23376: if ((is_left_coeff_one && is_right_coeff_one) -23376: || (is_left_coeff_minus_one && is_right_coeff_minus_one)) { -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: if (is_left_coeff_one && is_right_coeff_minus_one) { -23376: -23376: -23376: const dimension_type n_left = left_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: if (is_left_coeff_minus_one && is_right_coeff_one) { -23376: -23376: -23376: const dimension_type n_left = left_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: else if (is_left_coeff_one && is_right_coeff_one) { -23376: const dimension_type n_left = left_w_id * 2; -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: if (left_w_id < right_w_id) { -23376: add_octagonal_constraint(n_right, n_left, c_plus_minus_a_minus); -23376: } -23376: else { -23376: add_octagonal_constraint(n_left + 1, n_right + 1, -23376: c_plus_minus_a_minus); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: if (is_left_coeff_one && is_right_coeff_minus_one) { -23376: const dimension_type n_left = left_w_id * 2; -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: if (left_w_id < right_w_id) { -23376: add_octagonal_constraint(n_right + 1, n_left, c_plus_minus_a_minus); -23376: } -23376: else { -23376: add_octagonal_constraint(n_left + 1, n_right, c_plus_minus_a_minus); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: if (is_left_coeff_minus_one && is_right_coeff_one) { -23376: const dimension_type n_left = left_w_id * 2; -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: if (left_w_id < right_w_id) { -23376: add_octagonal_constraint(n_right, n_left + 1, c_plus_minus_a_minus); -23376: } -23376: else { -23376: add_octagonal_constraint(n_left, n_right + 1, c_plus_minus_a_minus); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: if (is_left_coeff_minus_one && is_right_coeff_minus_one) { -23376: const dimension_type n_left = left_w_id * 2; -23376: const dimension_type n_right = right_w_id * 2; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: if (left_w_id < right_w_id) { -23376: add_octagonal_constraint(n_right + 1, n_left + 1, -23376: c_plus_minus_a_minus); -23376: } -23376: else { -23376: add_octagonal_constraint(n_left, n_right, c_plus_minus_a_minus); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_low_coeff; N& low_coeff = holder_low_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_high_coeff; N& high_coeff = holder_high_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; N& upper_bound = holder_upper_bound.item(); -23376: -23376: Linear_Form right_minus_left(right); -23376: right_minus_left -= left; -23376: -23376: dimension_type max_w_id = std::max(left_w_id, right_w_id); -23376: for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) { -23376: for (dimension_type second_v = first_v + 1; -23376: second_v <= max_w_id; ++second_v) { -23376: const FP_Interval_Type& lfv_coefficient = -23376: left.coefficient(Variable(first_v)); -23376: const FP_Interval_Type& lsv_coefficient = -23376: left.coefficient(Variable(second_v)); -23376: const FP_Interval_Type& rfv_coefficient = -23376: right.coefficient(Variable(first_v)); -23376: const FP_Interval_Type& rsv_coefficient = -23376: right.coefficient(Variable(second_v)); -23376: -23376: -23376: bool do_update = false; -23376: assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: } -23376: else { -23376: assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (do_update) { -23376: Variable first(first_v); -23376: Variable second(second_v); -23376: dimension_type n_first_var = first_v * 2; -23376: dimension_type n_second_var = second_v * 2; -23376: linear_form_upper_bound(right_minus_left - first + second, -23376: upper_bound); -23376: add_octagonal_constraint(n_second_var + 1, n_first_var + 1, -23376: upper_bound); -23376: linear_form_upper_bound(right_minus_left + first + second, -23376: upper_bound); -23376: add_octagonal_constraint(n_second_var + 1, n_first_var, upper_bound); -23376: linear_form_upper_bound(right_minus_left - first - second, -23376: upper_bound); -23376: add_octagonal_constraint(n_second_var, n_first_var + 1, upper_bound); -23376: linear_form_upper_bound(right_minus_left + first - second, -23376: upper_bound); -23376: add_octagonal_constraint(n_second_var, n_first_var, upper_bound); -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type v = 0; v <= max_w_id; ++v) { -23376: const FP_Interval_Type& lv_coefficient = -23376: left.coefficient(Variable(v)); -23376: const FP_Interval_Type& rv_coefficient = -23376: right.coefficient(Variable(v)); -23376: -23376: -23376: bool do_update = false; -23376: assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: -23376: if (do_update) { -23376: Variable var(v); -23376: dimension_type n_var = 2 * v; -23376: -23376: -23376: -23376: -23376: -23376: linear_form_upper_bound(right_minus_left + var, upper_bound); -23376: mul_2exp_assign_r(matrix[n_var + 1][n_var + 1], upper_bound, 1, -23376: ROUND_UP); -23376: linear_form_upper_bound(right_minus_left - var, upper_bound); -23376: mul_2exp_assign_r(matrix[n_var][n_var], upper_bound, 1, -23376: ROUND_UP); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: row_iterator m_ite = matrix.row_begin(); -23376: row_iterator m_end = matrix.row_end(); -23376: for (dimension_type i = 0; m_ite != m_end; i += 2) { -23376: row_reference upper = *m_ite; -23376: N& ul = upper[i]; -23376: add_octagonal_constraint(i, i + 1, ul); -23376: assign_r(ul, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: ++m_ite; -23376: row_reference lower = *m_ite; -23376: N& lr = lower[i + 1]; -23376: add_octagonal_constraint(i + 1, i, lr); -23376: assign_r(lr, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: ++m_ite; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::refine_no_check(const Constraint& c) { -23376: ((void) 0); -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: ((void) 0); -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item(); -23376: -23376: if (!Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, c_space_dim, num_vars, -23376: i, j, coeff, term)) { -23376: return; -23376: } -23376: -23376: if (num_vars == 0) { -23376: const Coefficient& c_inhomo = c.inhomogeneous_term(); -23376: -23376: if (c_inhomo < 0 -23376: || (c_inhomo != 0 && c.is_equality()) -23376: || (c_inhomo == 0 && c.is_strict_inequality())) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: typename OR_Matrix::row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::row_reference_type m_i = *i_iter; -23376: N& m_i_j = m_i[j]; -23376: -23376: if (coeff < 0) { -23376: neg_assign(coeff); -23376: } -23376: -23376: bool is_oct_changed = false; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, term, coeff); -23376: if (m_i_j > d) { -23376: m_i_j = d; -23376: is_oct_changed = true; -23376: } -23376: -23376: if (c.is_equality()) { -23376: -23376: if (i % 2 == 0) { -23376: ++i_iter; -23376: } -23376: else { -23376: --i_iter; -23376: } -23376: -23376: typename OR_Matrix::row_reference_type m_ci = *i_iter; -23376: using namespace Implementation::Octagonal_Shapes; -23376: dimension_type cj = coherent_index(j); -23376: N& m_ci_cj = m_ci[cj]; -23376: -23376: neg_assign(term); -23376: div_round_up(d, term, coeff); -23376: if (m_ci_cj > d) { -23376: m_ci_cj = d; -23376: is_oct_changed = true; -23376: } -23376: } -23376: -23376: -23376: if (is_oct_changed && marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: dimension_type -23376: Octagonal_Shape::affine_dimension() const { -23376: const dimension_type n_rows = matrix.num_rows(); -23376: -23376: if (n_rows == 0) { -23376: return 0; -23376: } -23376: -23376: -23376: -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: return 0; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: std::vector leaders; -23376: compute_leaders(leaders); -23376: -23376: -23376: -23376: dimension_type affine_dim = 0; -23376: for (dimension_type i = 0; i < n_rows; i += 2) { -23376: -23376: if (leaders[i] == i && leaders[i + 1] == i + 1) { -23376: ++affine_dim; -23376: } -23376: } -23376: -23376: return affine_dim; -23376: } -23376: -23376: template -23376: Congruence_System -23376: Octagonal_Shape::minimized_congruences() const { -23376: -23376: -23376: strong_closure_assign(); -23376: Congruence_System cgs(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cgs = Congruence_System::zero_dim_empty(); -23376: } -23376: return cgs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cgs.insert(Congruence::zero_dim_false()); -23376: return cgs; -23376: } -23376: -23376: -23376: -23376: -23376: std::vector leaders; -23376: compute_leaders(leaders); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: for (dimension_type i = 0, i_end = 2*space_dim; i != i_end; i += 2) { -23376: const dimension_type lead_i = leaders[i]; -23376: if (i == lead_i) { -23376: if (leaders[i + 1] == i) { -23376: -23376: goto singular; -23376: } -23376: else { -23376: -23376: continue; -23376: } -23376: } -23376: else { -23376: -23376: if (leaders[i + 1] == lead_i) { -23376: -23376: goto singular; -23376: } -23376: else { -23376: -23376: goto non_singular; -23376: } -23376: } -23376: -23376: singular: -23376: -23376: -23376: { -23376: const Variable x(i/2); -23376: const N& c_ii_i = matrix[i + 1][i]; -23376: -23376: -23376: -23376: -23376: numer_denom(c_ii_i, numer, denom); -23376: denom *= 2; -23376: cgs.insert(denom*x == numer); -23376: } -23376: continue; -23376: -23376: non_singular: -23376: -23376: -23376: { -23376: const N& c_i_li = matrix[i][lead_i]; -23376: -23376: -23376: -23376: -23376: -23376: const Variable x(lead_i/2); -23376: const Variable y(i/2); -23376: numer_denom(c_i_li, numer, denom); -23376: if (lead_i % 2 == 0) { -23376: cgs.insert(denom*x - denom*y == numer); -23376: } -23376: else { -23376: cgs.insert(denom*x + denom*y + numer == 0); -23376: } -23376: } -23376: continue; -23376: } -23376: return cgs; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::concatenate_assign(const Octagonal_Shape& y) { -23376: -23376: -23376: if (y.space_dim == 0) { -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0 && marked_empty()) { -23376: add_space_dimensions_and_embed(y.space_dim); -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type old_num_rows = matrix.num_rows(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: add_space_dimensions_and_embed(y.space_dim); -23376: typename OR_Matrix::const_element_iterator -23376: y_it = y.matrix.element_begin(); -23376: for (typename OR_Matrix::row_iterator -23376: i = matrix.row_begin() + old_num_rows, -23376: matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) { -23376: typename OR_Matrix::row_reference_type r = *i; -23376: dimension_type rs_i = i.row_size(); -23376: for (dimension_type j = old_num_rows; j < rs_i; ++j, ++y_it) { -23376: r[j] = *y_it; -23376: } -23376: } -23376: -23376: -23376: if (marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::contains(const Octagonal_Shape& y) const { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("contains(y)", y); -23376: } -23376: -23376: if (space_dim == 0) { -23376: -23376: -23376: -23376: -23376: return marked_empty() ? y.marked_empty() : true; -23376: } -23376: -23376: -23376: y.strong_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: -23376: for (typename OR_Matrix::const_element_iterator -23376: i = matrix.element_begin(), j = y.matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; ++i, ++j) { -23376: if (*i < *j) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::is_disjoint_from(const Octagonal_Shape& y) const { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("is_disjoint_from(y)", y); -23376: } -23376: -23376: -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: y.strong_closure_assign(); -23376: if (y.marked_empty()) { -23376: return true; -23376: } -23376: # 1257 "../../src/Octagonal_Shape_templates.hh" -23376: const dimension_type n_rows = matrix.num_rows(); -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: -23376: const row_iterator y_begin = y.matrix.row_begin(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_y_ci_cj; N& neg_y_ci_cj = holder_neg_y_ci_cj.item(); -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) { -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type i = i_iter.index(); -23376: const dimension_type ci = coherent_index(i); -23376: const dimension_type rs_i = i_iter.row_size(); -23376: row_reference m_i = *i_iter; -23376: for (dimension_type j = 0; j < n_rows; ++j) { -23376: const dimension_type cj = coherent_index(j); -23376: row_reference m_cj = *(m_begin + cj); -23376: const N& m_i_j = (j < rs_i) ? m_i[j] : m_cj[ci]; -23376: row_reference y_ci = *(y_begin + ci); -23376: row_reference y_j = *(y_begin + j); -23376: const N& y_ci_cj = (j < rs_i) ? y_ci[cj] : y_j[i]; -23376: neg_assign_r(neg_y_ci_cj, y_ci_cj, ROUND_UP); -23376: if (m_i_j < neg_y_ci_cj) { -23376: return true; -23376: } -23376: } -23376: } -23376: return false; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::is_universe() const { -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: for (typename OR_Matrix::const_element_iterator -23376: i = matrix.element_begin(), matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; -23376: ++i) { -23376: if (!is_plus_infinity(*i)) { -23376: return false; -23376: } -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::is_bounded() const { -23376: strong_closure_assign(); -23376: -23376: if (marked_empty() || space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: for (typename OR_Matrix::const_row_iterator i = matrix.row_begin(), -23376: matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) { -23376: typename OR_Matrix::const_row_reference_type x_i = *i; -23376: const dimension_type i_index = i.index(); -23376: for (dimension_type j = i.row_size(); j-- > 0; ) { -23376: if (i_index != j) { -23376: if (is_plus_infinity(x_i[j])) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::contains_integer_point() const { -23376: -23376: if (is_empty()) { -23376: return false; -23376: } -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: if (std::numeric_limits::is_integer) { -23376: return !tight_coherence_would_make_empty(); -23376: } -23376: -23376: -23376: -23376: -23376: Octagonal_Shape oct_z(space_dim); -23376: oct_z.reset_strongly_closed(); -23376: -23376: typedef Octagonal_Shape::N Z; -23376: bool all_integers = true; -23376: typename OR_Matrix::const_element_iterator x_i = matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator -23376: z_i = oct_z.matrix.element_begin(), -23376: z_end = oct_z.matrix.element_end(); z_i != z_end; ++z_i, ++x_i) { -23376: const N& d = *x_i; -23376: if (is_plus_infinity(d)) { -23376: continue; -23376: } -23376: if (is_integer(d)) { -23376: assign_r(*z_i, d, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: all_integers = false; -23376: assign_r(*z_i, d, ROUND_DOWN); -23376: } -23376: } -23376: -23376: if (all_integers) { -23376: -23376: oct_z.set_strongly_closed(); -23376: } -23376: else { -23376: -23376: oct_z.strong_closure_assign(); -23376: if (oct_z.marked_empty()) { -23376: return false; -23376: } -23376: } -23376: return !oct_z.tight_coherence_would_make_empty(); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const { -23376: -23376: if (space_dim < expr.space_dimension()) { -23376: throw_dimension_incompatible("frequency(e, ...)", "e", expr); -23376: } -23376: # 1415 "../../src/Octagonal_Shape_templates.hh" -23376: if (space_dim == 0) { -23376: if (is_empty()) { -23376: return false; -23376: } -23376: freq_n = 0; -23376: freq_d = 1; -23376: val_n = expr.inhomogeneous_term(); -23376: val_d = 1; -23376: return true; -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_j; Parma_Polyhedra_Library::Coefficient& coeff_j = holder_coeff_j.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Linear_Expression le = expr; -23376: -23376: -23376: -23376: bool constant_v = false; -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item(); -23376: val_denom = 1; -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) { -23376: constant_v = false; -23376: dimension_type i = i_iter.index(); -23376: const Variable v(i/2); -23376: coeff = le.coefficient(v); -23376: if (coeff == 0) { -23376: constant_v = true; -23376: continue; -23376: } -23376: -23376: row_reference m_i = *i_iter; -23376: row_reference m_ii = *(i_iter + 1); -23376: const N& m_i_ii = m_i[i + 1]; -23376: const N& m_ii_i = m_ii[i]; -23376: if ((!is_plus_infinity(m_i_ii) && !is_plus_infinity(m_ii_i)) -23376: && (is_additive_inverse(m_i_ii, m_ii_i))) { -23376: -23376: numer_denom(m_i_ii, numer, denom); -23376: denom *= 2; -23376: le -= coeff*v; -23376: le *= denom; -23376: le -= numer*coeff; -23376: val_denom *= denom; -23376: constant_v = true; -23376: continue; -23376: } -23376: -23376: -23376: else { -23376: ((void) 0); -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type ci = coherent_index(i); -23376: for (row_iterator j_iter = i_iter; j_iter != m_end; j_iter += 2) { -23376: dimension_type j = j_iter.index(); -23376: const Variable vj(j/2); -23376: coeff_j = le.coefficient(vj); -23376: if (coeff_j == 0) { -23376: -23376: continue; -23376: } -23376: const dimension_type cj = coherent_index(j); -23376: const dimension_type cjj = coherent_index(j + 1); -23376: -23376: row_reference m_j = *(m_begin + j); -23376: row_reference m_cj = *(m_begin + cj); -23376: const N& m_j_i = m_j[i]; -23376: const N& m_i_j = m_cj[ci]; -23376: if ((!is_plus_infinity(m_i_j) && !is_plus_infinity(m_j_i)) -23376: && (is_additive_inverse(m_i_j, m_j_i))) { -23376: -23376: -23376: -23376: numer_denom(m_i_j, numer, denom); -23376: le -= coeff*v; -23376: le += coeff*vj; -23376: le *= denom; -23376: le -= numer*coeff; -23376: val_denom *= denom; -23376: constant_v = true; -23376: break; -23376: } -23376: -23376: m_j = *(m_begin + (j + 1)); -23376: m_cj = *(m_begin + cjj); -23376: const N& m_j_i1 = m_j[i]; -23376: const N& m_i_j1 = m_cj[ci]; -23376: if ((!is_plus_infinity(m_i_j1) && !is_plus_infinity(m_j_i1)) -23376: && (is_additive_inverse(m_i_j1, m_j_i1))) { -23376: -23376: -23376: -23376: numer_denom(m_i_j1, numer, denom); -23376: le -= coeff*v; -23376: le -= coeff*vj; -23376: le *= denom; -23376: le -= numer*coeff; -23376: val_denom *= denom; -23376: constant_v = true; -23376: break; -23376: } -23376: } -23376: if (!constant_v) { -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: if (!constant_v) { -23376: -23376: return false; -23376: } -23376: -23376: -23376: freq_n = 0; -23376: freq_d = 1; -23376: -23376: -23376: normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::constrains(const Variable var) const { -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dimension() < var_space_dim) { -23376: throw_dimension_incompatible("constrains(v)", "v", var); -23376: } -23376: -23376: -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: const dimension_type n_v = 2*(var_space_dim - 1); -23376: typename OR_Matrix::const_row_iterator m_iter = matrix.row_begin() + n_v; -23376: typename OR_Matrix::const_row_reference_type r_v = *m_iter; -23376: typename OR_Matrix::const_row_reference_type r_cv = *(++m_iter); -23376: for (dimension_type h = m_iter.row_size(); h-- > 0; ) { -23376: if (!is_plus_infinity(r_v[h]) || !is_plus_infinity(r_cv[h])) { -23376: return true; -23376: } -23376: } -23376: ++m_iter; -23376: for (typename OR_Matrix::const_row_iterator m_end = matrix.row_end(); -23376: m_iter != m_end; ++m_iter) { -23376: typename OR_Matrix::const_row_reference_type r = *m_iter; -23376: if (!is_plus_infinity(r[n_v]) || !is_plus_infinity(r[n_v + 1])) { -23376: return true; -23376: } -23376: } -23376: -23376: -23376: -23376: return is_empty(); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::is_strong_coherent() const { -23376: -23376: -23376: const dimension_type num_rows = matrix.num_rows(); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_semi_sum; N& semi_sum = holder_semi_sum.item(); -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = num_rows; i-- > 0; ) { -23376: typename OR_Matrix::const_row_iterator iter = matrix.row_begin() + i; -23376: typename OR_Matrix::const_row_reference_type m_i = *iter; -23376: using namespace Implementation::Octagonal_Shapes; -23376: const N& m_i_ci = m_i[coherent_index(i)]; -23376: for (dimension_type j = matrix.row_size(i); j-- > 0; ) { -23376: -23376: if (i != j) { -23376: const N& m_cj_j = matrix[coherent_index(j)][j]; -23376: if (!is_plus_infinity(m_i_ci) -23376: && !is_plus_infinity(m_cj_j)) { -23376: -23376: -23376: add_assign_r(semi_sum, m_i_ci, m_cj_j, ROUND_UP); -23376: div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP); -23376: if (m_i[j] > semi_sum) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::is_strongly_reduced() const { -23376: -23376: -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: Octagonal_Shape x = *this; -23376: -23376: -23376: for (typename OR_Matrix::const_row_iterator iter = matrix.row_begin(), -23376: matrix_row_end = matrix.row_end(); iter != matrix_row_end; ++iter) { -23376: typename OR_Matrix::const_row_reference_type m_i = *iter; -23376: const dimension_type i = iter.index(); -23376: for (dimension_type j = iter.row_size(); j-- > 0; ) { -23376: if (!is_plus_infinity(m_i[j])) { -23376: Octagonal_Shape x_copy = *this; -23376: assign_r(x_copy.matrix[i][j], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: if (x == x_copy) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::bounds(const Linear_Expression& expr, -23376: const bool from_above) const { -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((from_above -23376: ? "bounds_from_above(e)" -23376: : "bounds_from_below(e)"), "e", expr); -23376: } -23376: strong_closure_assign(); -23376: -23376: -23376: if (space_dim == 0 || marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: -23376: const Constraint& c = (from_above) ? expr <= 0 : expr >= 0; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item(); -23376: if (Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, c.space_dimension(), num_vars, -23376: i, j, coeff, term)) { -23376: if (num_vars == 0) { -23376: return true; -23376: } -23376: -23376: typename OR_Matrix::const_row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::const_row_reference_type m_i = *i_iter; -23376: return !is_plus_infinity(m_i[j]); -23376: } -23376: else { -23376: -23376: Optimization_Mode mode_bounds = -23376: from_above ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, mode_bounds); -23376: return mip.solve() == OPTIMIZED_MIP_PROBLEM; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included) const { -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((maximize -23376: ? "maximize(e, ...)" -23376: : "minimize(e, ...)"), "e", expr); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: else { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: return true; -23376: } -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: -23376: const Constraint& c = (maximize) ? expr <= 0 : expr >= 0; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item(); -23376: if (!Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, c.space_dimension(), num_vars, -23376: i, j, coeff, term)) { -23376: -23376: Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, max_min); -23376: if (mip.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: mip.optimal_value(ext_n, ext_d); -23376: included = true; -23376: return true; -23376: } -23376: else { -23376: -23376: return false; -23376: } -23376: } -23376: else { -23376: -23376: if (num_vars == 0) { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: return true; -23376: } -23376: -23376: -23376: typename OR_Matrix::const_row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::const_row_reference_type m_i = *i_iter; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: if (!is_plus_infinity(m_i[j])) { -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = maximize ? b : minus_b; -23376: assign_r(d, sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item(); -23376: const Coefficient& coeff_i = expr.coefficient(Variable(i/2)); -23376: const int sign_i = sgn(coeff_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_expr, coeff_i, ROUND_UP); -23376: } -23376: else { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item(); -23376: neg_assign(minus_coeff_i, coeff_i); -23376: assign_r(coeff_expr, minus_coeff_i, ROUND_UP); -23376: } -23376: -23376: if (num_vars == 1) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_m_i_j; N& m_i_j = holder_m_i_j.item(); -23376: div_2exp_assign_r(m_i_j, m_i[j], 1, ROUND_UP); -23376: add_mul_assign_r(d, coeff_expr, m_i_j, ROUND_UP); -23376: } -23376: else { -23376: add_mul_assign_r(d, coeff_expr, m_i[j], ROUND_UP); -23376: } -23376: numer_denom(d, ext_n, ext_d); -23376: if (!maximize) { -23376: neg_assign(ext_n); -23376: } -23376: included = true; -23376: return true; -23376: } -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included, Generator& g) const { -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((maximize -23376: ? "maximize(e, ...)" -23376: : "minimize(e, ...)"), "e", expr); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: else { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: g = point(); -23376: return true; -23376: } -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: if (!is_universe()) { -23376: -23376: -23376: Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, max_min); -23376: if (mip.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = mip.optimizing_point(); -23376: mip.evaluate_objective_function(g, ext_n, ext_d); -23376: included = true; -23376: return true; -23376: } -23376: } -23376: -23376: return false; -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: Octagonal_Shape::relation_with(const Congruence& cg) const { -23376: dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: -23376: if (cg_space_dim > space_dim) { -23376: throw_dimension_incompatible("relation_with(cg)", cg); -23376: } -23376: -23376: -23376: -23376: if (cg.is_equality()) { -23376: Constraint c(cg); -23376: return relation_with(c); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (cg.is_inconsistent()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: -23376: -23376: Linear_Expression le(cg.expression()); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool bounded_below = minimize(le, min_numer, min_denom, min_included); -23376: -23376: -23376: -23376: if (!bounded_below) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: bool bounded_above = maximize(le, max_numer, max_denom, max_included); -23376: -23376: -23376: -23376: if (!bounded_above) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item(); -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item(); -23376: min_value = min_numer / min_denom; -23376: const Coefficient& modulus = cg.modulus(); -23376: signed_distance = min_value % modulus; -23376: min_value -= signed_distance; -23376: if (min_value * min_denom < min_numer) { -23376: min_value += modulus; -23376: } -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item(); -23376: max_value = max_numer / max_denom; -23376: signed_distance = max_value % modulus; -23376: max_value += signed_distance; -23376: if (max_value * max_denom > max_numer) { -23376: max_value -= modulus; -23376: } -23376: -23376: -23376: -23376: -23376: if (max_value < min_value) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: Octagonal_Shape::relation_with(const Constraint& c) const { -23376: dimension_type c_space_dim = c.space_dimension(); -23376: -23376: -23376: if (c_space_dim > space_dim) { -23376: throw_dimension_incompatible("relation_with(c)", c); -23376: } -23376: -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: -23376: if (space_dim == 0) { -23376: -23376: if ((c.is_equality() && c.inhomogeneous_term() != 0) -23376: || (c.is_inequality() && c.inhomogeneous_term() < 0)) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) { -23376: -23376: -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: -23376: -23376: else if (c.is_equality() || c.inhomogeneous_term() == 0) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: else { -23376: -23376: -23376: -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_term; Parma_Polyhedra_Library::Coefficient& c_term = holder_c_term.item(); -23376: if (!Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, c_space_dim, num_vars, -23376: i, j, coeff, c_term)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression le; -23376: le.set_space_dimension(c.space_dimension()); -23376: le.linear_combine(c.expr, Coefficient_one(), Coefficient_one(), -23376: 1, c_space_dim + 1); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool bounded_above = maximize(le, max_numer, max_denom, max_included); -23376: bool bounded_below = minimize(le, min_numer, min_denom, min_included); -23376: if (!bounded_above) { -23376: if (!bounded_below) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: min_numer += c.inhomogeneous_term() * min_denom; -23376: switch (sgn(min_numer)) { -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (c.is_strict_inequality() || c.is_equality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case -1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: if (!bounded_below) { -23376: max_numer += c.inhomogeneous_term() * max_denom; -23376: switch (sgn(max_numer)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: else { -23376: max_numer += c.inhomogeneous_term() * max_denom; -23376: min_numer += c.inhomogeneous_term() * min_denom; -23376: switch (sgn(max_numer)) { -23376: case 1: -23376: switch (sgn(min_numer)) { -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case -1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: case 0: -23376: if (min_numer == 0) { -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: return Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: } -23376: -23376: if (num_vars == 0) { -23376: -23376: switch (sgn(c.inhomogeneous_term())) { -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: case 0: -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: } -23376: -23376: -23376: typename OR_Matrix::const_row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::const_row_reference_type m_i = *i_iter; -23376: const N& m_i_j = m_i[j]; -23376: -23376: if (coeff < 0) { -23376: neg_assign(coeff); -23376: } -23376: -23376: -23376: -23376: if (i % 2 == 0) { -23376: ++i_iter; -23376: } -23376: else { -23376: --i_iter; -23376: } -23376: typename OR_Matrix::const_row_reference_type m_ci = *i_iter; -23376: using namespace Implementation::Octagonal_Shapes; -23376: const N& m_ci_cj = m_ci[coherent_index(j)]; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_x; mpq_class& q_x = holder_q_x.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_y; mpq_class& q_y = holder_q_y.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; mpq_class& d = holder_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d1; mpq_class& d1 = holder_d1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_denom; mpq_class& c_denom = holder_c_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_denom; mpq_class& q_denom = holder_q_denom.item(); -23376: assign_r(c_denom, coeff, ROUND_NOT_NEEDED); -23376: assign_r(d, c_term, ROUND_NOT_NEEDED); -23376: neg_assign_r(d1, d, ROUND_NOT_NEEDED); -23376: div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED); -23376: div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED); -23376: -23376: if (is_plus_infinity(m_i_j)) { -23376: if (!is_plus_infinity(m_ci_cj)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_ci_cj, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_y, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED); -23376: if (q_y < d1) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (q_y == d1 && c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: -23376: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: -23376: numer_denom(m_i_j, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_x, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED); -23376: -23376: if (!is_plus_infinity(m_ci_cj)) { -23376: numer_denom(m_ci_cj, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_y, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED); -23376: if (q_x == d && q_y == d1) { -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: -23376: if (q_y < d1) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (q_y == d1 && c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: if (d > q_x) { -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: if (d == q_x && c.is_nonstrict_inequality()) { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: template -23376: Poly_Gen_Relation -23376: Octagonal_Shape::relation_with(const Generator& g) const { -23376: const dimension_type g_space_dim = g.space_dimension(); -23376: -23376: -23376: if (space_dim < g_space_dim) { -23376: throw_dimension_incompatible("relation_with(g)", g); -23376: } -23376: -23376: -23376: -23376: strong_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: -23376: const bool is_line = g.is_line(); -23376: const bool is_line_or_ray = g.is_line_or_ray(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item(); -23376: -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) { -23376: dimension_type i = i_iter.index(); -23376: row_reference m_i = *i_iter; -23376: row_reference m_ii = *(i_iter + 1); -23376: const N& m_i_ii = m_i[i + 1]; -23376: const N& m_ii_i = m_ii[i]; -23376: -23376: const Variable x(i/2); -23376: const Coefficient& g_coeff_x -23376: = (x.space_dimension() > g_space_dim) -23376: ? Coefficient_zero() -23376: : g.coefficient(x); -23376: if (is_additive_inverse(m_i_ii, m_ii_i)) { -23376: -23376: -23376: -23376: -23376: numer_denom(m_ii_i, numer, denom); -23376: denom *= 2; -23376: product = denom * g_coeff_x; -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: -23376: else { -23376: if (!is_plus_infinity(m_i_ii)) { -23376: -23376: -23376: -23376: numer_denom(m_i_ii, numer, denom); -23376: denom *= -2; -23376: product = denom * g_coeff_x; -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else -23376: -23376: -23376: -23376: -23376: if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: if (!is_plus_infinity(m_ii_i)) { -23376: -23376: numer_denom(m_ii_i, numer, denom); -23376: denom *= 2; -23376: product = denom * g_coeff_x; -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer , g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: for (row_iterator i_iter = m_begin ; i_iter != m_end; i_iter += 2) { -23376: dimension_type i = i_iter.index(); -23376: row_reference m_i = *i_iter; -23376: row_reference m_ii = *(i_iter + 1); -23376: for (dimension_type j = 0; j < i; j += 2) { -23376: const N& m_i_j = m_i[j]; -23376: const N& m_ii_jj = m_ii[j + 1]; -23376: const N& m_ii_j = m_ii[j]; -23376: const N& m_i_jj = m_i[j + 1]; -23376: const Variable x(j/2); -23376: const Variable y(i/2); -23376: const Coefficient& g_coeff_x -23376: = (x.space_dimension() > g_space_dim) -23376: ? Coefficient_zero() -23376: : g.coefficient(x); -23376: const Coefficient& g_coeff_y -23376: = (y.space_dimension() > g_space_dim) -23376: ? Coefficient_zero() -23376: : g.coefficient(y); -23376: -23376: const bool difference_is_equality = is_additive_inverse(m_ii_jj, m_i_j); -23376: if (difference_is_equality) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_i_j, numer, denom); -23376: product = denom * g_coeff_x; -23376: neg_assign(denom); -23376: add_mul_assign(product, denom, g_coeff_y); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else { -23376: if (!is_plus_infinity(m_i_j)) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_i_j, numer, denom); -23376: product = denom * g_coeff_x; -23376: neg_assign(denom); -23376: add_mul_assign(product, denom, g_coeff_y); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: if (!is_plus_infinity(m_ii_jj)) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_ii_jj, numer, denom); -23376: product = denom * g_coeff_y; -23376: neg_assign(denom); -23376: add_mul_assign(product, denom, g_coeff_x); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: -23376: const bool sum_is_equality = is_additive_inverse(m_i_jj, m_ii_j); -23376: if (sum_is_equality) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_ii_j, numer, denom); -23376: product = denom * g_coeff_x; -23376: add_mul_assign(product, denom, g_coeff_y); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else { -23376: if (!is_plus_infinity(m_i_jj)) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_i_jj, numer, denom); -23376: neg_assign(denom); -23376: product = denom * g_coeff_x; -23376: add_mul_assign(product, denom, g_coeff_y); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: if (!is_plus_infinity(m_ii_j)) { -23376: -23376: -23376: -23376: -23376: -23376: numer_denom(m_ii_j, numer, denom); -23376: product = denom * g_coeff_x; -23376: add_mul_assign(product, denom, g_coeff_y); -23376: -23376: -23376: if (!is_line_or_ray) { -23376: neg_assign(numer); -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line && product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: else if (product > 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::strong_closure_assign() const { -23376: -23376: if (marked_empty() || marked_strongly_closed() || space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: Octagonal_Shape& x = const_cast&>(*this); -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: -23376: const dimension_type n_rows = x.matrix.num_rows(); -23376: const row_iterator m_begin = x.matrix.row_begin(); -23376: const row_iterator m_end = x.matrix.row_end(); -23376: -23376: -23376: for (row_iterator i = m_begin; i != m_end; ++i) { -23376: ((void) 0); -23376: assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED); -23376: } -23376: # 2581 "../../src/Octagonal_Shape_templates.hh" -23376: typename OR_Matrix::element_iterator iter_ij; -23376: std::vector vec_k(n_rows); -23376: std::vector vec_ck(n_rows); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum1; N& sum1 = holder_sum1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum2; N& sum2 = holder_sum2.item(); -23376: row_reference x_k; -23376: row_reference x_ck; -23376: row_reference x_i; -23376: row_reference x_ci; -23376: -23376: -23376: -23376: for (int twice = 0; twice < 2; ++twice) { -23376: -23376: row_iterator x_k_iter = m_begin; -23376: row_iterator x_i_iter = m_begin; -23376: for (dimension_type k = 0; k < n_rows; k += 2) { -23376: const dimension_type ck = k + 1; -23376: -23376: iter_ij = x.matrix.element_begin(); -23376: -23376: x_k = *x_k_iter; -23376: ++x_k_iter; -23376: x_ck = *x_k_iter; -23376: ++x_k_iter; -23376: -23376: for (dimension_type i = 0; i <= k; i += 2) { -23376: const dimension_type ci = i + 1; -23376: -23376: vec_k[i] = x_k[i]; -23376: -23376: vec_k[ci] = x_k[ci]; -23376: -23376: vec_ck[i] = x_ck[i]; -23376: -23376: vec_ck[ci] = x_ck[ci]; -23376: } -23376: x_i_iter = x_k_iter; -23376: for (dimension_type i = k + 2; i < n_rows; i += 2) { -23376: const dimension_type ci = i + 1; -23376: x_i = *x_i_iter; -23376: ++x_i_iter; -23376: x_ci = *x_i_iter; -23376: ++x_i_iter; -23376: -23376: vec_k[i] = x_ci[ck]; -23376: -23376: vec_k[ci] = x_i[ck]; -23376: -23376: vec_ck[i] = x_ci[k]; -23376: -23376: vec_ck[ci] = x_i[k]; -23376: } -23376: -23376: for (dimension_type i = 0; i < n_rows; ++i) { -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type ci = coherent_index(i); -23376: const N& vec_k_ci = vec_k[ci]; -23376: const N& vec_ck_ci = vec_ck[ci]; -23376: -23376: -23376: for (dimension_type j = 0; j <= i; ) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP); -23376: add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP); -23376: min_assign(sum1, sum2); -23376: min_assign(*iter_ij, sum1); -23376: -23376: ++j; -23376: ++iter_ij; -23376: -23376: add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP); -23376: add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP); -23376: min_assign(sum1, sum2); -23376: min_assign(*iter_ij, sum1); -23376: -23376: ++j; -23376: ++iter_ij; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (row_iterator i = m_begin; i != m_end; ++i) { -23376: N& x_i_i = (*i)[i.index()]; -23376: if (sgn(x_i_i) < 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: -23376: x.strong_coherence_assign(); -23376: -23376: x.set_strongly_closed(); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::strong_coherence_assign() { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_semi_sum; N& semi_sum = holder_semi_sum.item(); -23376: for (typename OR_Matrix::row_iterator i_iter = matrix.row_begin(), -23376: i_end = matrix.row_end(); i_iter != i_end; ++i_iter) { -23376: typename OR_Matrix::row_reference_type x_i = *i_iter; -23376: const dimension_type i = i_iter.index(); -23376: using namespace Implementation::Octagonal_Shapes; -23376: const N& x_i_ci = x_i[coherent_index(i)]; -23376: -23376: if (!is_plus_infinity(x_i_ci)) { -23376: for (dimension_type j = 0, rs_i = i_iter.row_size(); -23376: j < rs_i; ++j) { -23376: if (i != j) { -23376: const N& x_cj_j = matrix[coherent_index(j)][j]; -23376: if (!is_plus_infinity(x_cj_j)) { -23376: add_assign_r(semi_sum, x_i_ci, x_cj_j, ROUND_UP); -23376: div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP); -23376: min_assign(x_i[j], semi_sum); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::tight_coherence_would_make_empty() const { -23376: ((void) 0); -23376: ((void) 0); -23376: for (dimension_type i = 0; i < 2*space_dim; i += 2) { -23376: const dimension_type ci = i + 1; -23376: const N& mat_i_ci = matrix[i][ci]; -23376: if (!is_plus_infinity(mat_i_ci) -23376: -23376: && !is_even(mat_i_ci) -23376: -23376: && is_additive_inverse(mat_i_ci, matrix[ci][i])) { -23376: return true; -23376: } -23376: } -23376: return false; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::tight_closure_assign() { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2746 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits::is_integer)>) } -23376: -23376: ; -23376: -23376: -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: if (tight_coherence_would_make_empty()) { -23376: set_empty(); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_one; N& temp_one = holder_temp_one.item(); -23376: assign_r(temp_one, 1, ROUND_NOT_NEEDED); -23376: for (dimension_type i = 0; i < 2*space_dim; i += 2) { -23376: const dimension_type ci = i + 1; -23376: N& mat_i_ci = matrix[i][ci]; -23376: if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) { -23376: sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP); -23376: } -23376: N& mat_ci_i = matrix[ci][i]; -23376: if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) { -23376: sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP); -23376: } -23376: } -23376: -23376: strong_coherence_assign(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::incremental_strong_closure_assign(const Variable var) const { -23376: -23376: if (var.id() >= space_dim) { -23376: throw_dimension_incompatible("incremental_strong_closure_assign(v)", -23376: var.id()); -23376: } -23376: -23376: -23376: if (marked_empty() || marked_strongly_closed()) { -23376: return; -23376: } -23376: -23376: Octagonal_Shape& x = const_cast&>(*this); -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: -23376: const row_iterator m_begin = x.matrix.row_begin(); -23376: const row_iterator m_end = x.matrix.row_end(); -23376: -23376: -23376: for (row_iterator i = m_begin; i != m_end; ++i) { -23376: ((void) 0); -23376: assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED); -23376: } -23376: -23376: -23376: -23376: const dimension_type v = 2*var.id(); -23376: const dimension_type cv = v + 1; -23376: row_iterator v_iter = m_begin + v; -23376: row_iterator cv_iter = v_iter + 1; -23376: row_reference x_v = *v_iter; -23376: row_reference x_cv = *cv_iter; -23376: const dimension_type rs_v = v_iter.row_size(); -23376: const dimension_type n_rows = x.matrix.num_rows(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: using namespace Implementation::Octagonal_Shapes; -23376: for (row_iterator k_iter = m_begin; k_iter != m_end; ++k_iter) { -23376: const dimension_type k = k_iter.index(); -23376: const dimension_type ck = coherent_index(k); -23376: const dimension_type rs_k = k_iter.row_size(); -23376: row_reference x_k = *k_iter; -23376: row_reference x_ck = (k % 2 != 0) ? *(k_iter-1) : *(k_iter + 1); -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) { -23376: const dimension_type i = i_iter.index(); -23376: const dimension_type ci = coherent_index(i); -23376: const dimension_type rs_i = i_iter.row_size(); -23376: row_reference x_i = *i_iter; -23376: row_reference x_ci = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1); -23376: -23376: const N& x_i_k = (k < rs_i) ? x_i[k] : x_ck[ci]; -23376: if (!is_plus_infinity(x_i_k)) { -23376: const N& x_k_v = (v < rs_k) ? x_k[v] : x_cv[ck]; -23376: if (!is_plus_infinity(x_k_v)) { -23376: add_assign_r(sum, x_i_k, x_k_v, ROUND_UP); -23376: N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci]; -23376: min_assign(x_i_v, sum); -23376: } -23376: const N& x_k_cv = (cv < rs_k) ? x_k[cv] : x_v[ck]; -23376: if (!is_plus_infinity(x_k_cv)) { -23376: add_assign_r(sum, x_i_k, x_k_cv, ROUND_UP); -23376: N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci]; -23376: min_assign(x_i_cv, sum); -23376: } -23376: } -23376: const N& x_k_i = (i < rs_k) ? x_k[i] : x_ci[ck]; -23376: if (!is_plus_infinity(x_k_i)) { -23376: const N& x_v_k = (k < rs_v) ? x_v[k] : x_ck[cv]; -23376: if (!is_plus_infinity(x_v_k)) { -23376: N& x_v_i = (i < rs_v) ? x_v[i] : x_ci[cv]; -23376: add_assign_r(sum, x_v_k, x_k_i, ROUND_UP); -23376: min_assign(x_v_i, sum); -23376: } -23376: const N& x_cv_k = (k < rs_v) ? x_cv[k] : x_ck[v]; -23376: if (!is_plus_infinity(x_cv_k)) { -23376: N& x_cv_i = (i < rs_v) ? x_cv[i] : x_ci[v]; -23376: add_assign_r(sum, x_cv_k, x_k_i, ROUND_UP); -23376: min_assign(x_cv_i, sum); -23376: } -23376: } -23376: -23376: } -23376: } -23376: -23376: -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) { -23376: const dimension_type i = i_iter.index(); -23376: const dimension_type ci = coherent_index(i); -23376: const dimension_type rs_i = i_iter.row_size(); -23376: row_reference x_i = *i_iter; -23376: const N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci]; -23376: -23376: -23376: -23376: for (dimension_type j = 0; j < n_rows; ++j) { -23376: const dimension_type cj = coherent_index(j); -23376: row_reference x_cj = *(m_begin + cj); -23376: N& x_i_j = (j < rs_i) ? x_i[j] : x_cj[ci]; -23376: if (!is_plus_infinity(x_i_v)) { -23376: const N& x_v_j = (j < rs_v) ? x_v[j] : x_cj[cv]; -23376: if (!is_plus_infinity(x_v_j)) { -23376: add_assign_r(sum, x_i_v, x_v_j, ROUND_UP); -23376: min_assign(x_i_j, sum); -23376: } -23376: } -23376: const N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci]; -23376: if (!is_plus_infinity(x_i_cv)) { -23376: const N& x_cv_j = (j < rs_v) ? x_cv[j] : x_cj[v]; -23376: if (!is_plus_infinity(x_cv_j)) { -23376: add_assign_r(sum, x_i_cv, x_cv_j, ROUND_UP); -23376: min_assign(x_i_j, sum); -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (row_iterator i = m_begin; i != m_end; ++i) { -23376: N& x_i_i = (*i)[i.index()]; -23376: if (sgn(x_i_i) < 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: else { -23376: -23376: ((void) 0); -23376: assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: -23376: x.strong_coherence_assign(); -23376: -23376: x.set_strongly_closed(); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::compute_successors(std::vector& successor) const { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: const dimension_type successor_size = matrix.num_rows(); -23376: -23376: successor.reserve(successor_size); -23376: for (dimension_type i = 0; i < successor_size; ++i) { -23376: successor.push_back(i); -23376: } -23376: -23376: for (dimension_type i = successor_size; i-- > 0; ) { -23376: typename OR_Matrix::const_row_iterator i_iter = matrix.row_begin() + i; -23376: typename OR_Matrix::const_row_reference_type m_i = *i_iter; -23376: typename OR_Matrix::const_row_reference_type m_ci -23376: = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: -23376: -23376: using namespace Implementation::Octagonal_Shapes; -23376: dimension_type cj = coherent_index(j); -23376: if (is_additive_inverse(m_ci[cj], m_i[j])) { -23376: -23376: successor[j] = i; -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::compute_leaders(std::vector& leaders) const { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: const dimension_type leader_size = matrix.num_rows(); -23376: -23376: leaders.reserve(leader_size); -23376: for (dimension_type i = 0; i < leader_size; ++i) { -23376: leaders.push_back(i); -23376: } -23376: -23376: for (typename OR_Matrix::const_row_iterator i_iter = matrix.row_begin(), -23376: matrix_row_end = matrix.row_end(); -23376: i_iter != matrix_row_end; ++i_iter) { -23376: typename OR_Matrix::const_row_reference_type m_i = *i_iter; -23376: dimension_type i = i_iter.index(); -23376: typename OR_Matrix::const_row_reference_type m_ci -23376: = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1); -23376: for (dimension_type j = 0; j < i; ++j) { -23376: using namespace Implementation::Octagonal_Shapes; -23376: dimension_type cj = coherent_index(j); -23376: if (is_additive_inverse(m_ci[cj], m_i[j])) { -23376: -23376: leaders[i] = leaders[j]; -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::compute_leaders(std::vector& successor, -23376: std::vector& no_sing_leaders, -23376: bool& exist_sing_class, -23376: dimension_type& sing_leader) const { -23376: ((void) 0); -23376: ((void) 0); -23376: dimension_type successor_size = successor.size(); -23376: std::deque dealt_with(successor_size, false); -23376: for (dimension_type i = 0; i < successor_size; ++i) { -23376: dimension_type next_i = successor[i]; -23376: if (!dealt_with[i]) { -23376: -23376: -23376: using namespace Implementation::Octagonal_Shapes; -23376: if (next_i == coherent_index(i)) { -23376: exist_sing_class = true; -23376: sing_leader = i; -23376: } -23376: else { -23376: no_sing_leaders.push_back(i); -23376: } -23376: } -23376: -23376: dealt_with[next_i] = true; -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::strong_reduction_assign() const { -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: std::vector non_red; -23376: non_redundant_matrix_entries(non_red); -23376: -23376: -23376: Octagonal_Shape& x = const_cast&>(*this); -23376: -23376: -23376: -23376: typename OR_Matrix::element_iterator x_i = x.matrix.element_begin(); -23376: for (dimension_type i = 0; i < 2 * space_dim; ++i) { -23376: const Bit_Row& non_red_i = non_red[i]; -23376: for (dimension_type j = 0, -23376: j_end = OR_Matrix::row_size(i); j < j_end; ++j, ++x_i) { -23376: if (!non_red_i[j]) { -23376: assign_r(*x_i, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: x.reset_strongly_closed(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::non_redundant_matrix_entries(std::vector& non_redundant) const { -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: non_redundant.resize(2*space_dim); -23376: -23376: -23376: -23376: -23376: -23376: std::vector no_sing_leaders; -23376: dimension_type sing_leader = 0; -23376: bool exist_sing_class = false; -23376: std::vector successor; -23376: compute_successors(successor); -23376: compute_leaders(successor, no_sing_leaders, exist_sing_class, sing_leader); -23376: const dimension_type num_no_sing_leaders = no_sing_leaders.size(); -23376: -23376: -23376: -23376: -23376: for (dimension_type li = 0; li < num_no_sing_leaders; ++li) { -23376: const dimension_type i = no_sing_leaders[li]; -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type ci = coherent_index(i); -23376: typename OR_Matrix::const_row_reference_type -23376: m_i = *(matrix.row_begin() + i); -23376: if (i % 2 == 0) { -23376: -23376: -23376: -23376: -23376: -23376: if (i != successor[i]) { -23376: dimension_type j = i; -23376: dimension_type next_j = successor[j]; -23376: while (j != next_j) { -23376: non_redundant[next_j].set(j); -23376: j = next_j; -23376: next_j = successor[j]; -23376: } -23376: const dimension_type cj = coherent_index(j); -23376: non_redundant[cj].set(ci); -23376: } -23376: } -23376: -23376: dimension_type rs_li = (li % 2 != 0) ? li : (li + 1); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: for (dimension_type lj = 0 ; lj <= rs_li; ++lj) { -23376: const dimension_type j = no_sing_leaders[lj]; -23376: const dimension_type cj = coherent_index(j); -23376: const N& m_i_j = m_i[j]; -23376: const N& m_i_ci = m_i[ci]; -23376: bool to_add = true; -23376: -23376: -23376: -23376: if (j != ci) { -23376: add_assign_r(tmp, m_i_ci, matrix[cj][j], ROUND_UP); -23376: div_2exp_assign_r(tmp, tmp, 1, ROUND_UP); -23376: if (m_i_j >= tmp) { -23376: -23376: continue; -23376: } -23376: } -23376: # 3140 "../../src/Octagonal_Shape_templates.hh" -23376: for (dimension_type lk = 0; lk < num_no_sing_leaders; ++lk) { -23376: const dimension_type k = no_sing_leaders[lk]; -23376: if (k != i && k != j) { -23376: dimension_type ck = coherent_index(k); -23376: if (k < j) { -23376: -23376: add_assign_r(tmp, m_i[k], matrix[cj][ck], ROUND_UP); -23376: } -23376: else if (k < i) { -23376: -23376: add_assign_r(tmp, m_i[k], matrix[k][j], ROUND_UP); -23376: } -23376: else { -23376: -23376: add_assign_r(tmp, matrix[ck][ci], matrix[k][j], ROUND_UP); -23376: } -23376: -23376: if (m_i_j >= tmp) { -23376: to_add = false; -23376: break; -23376: } -23376: } -23376: } -23376: -23376: if (to_add) { -23376: -23376: non_redundant[i].set(j); -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: if (exist_sing_class) { -23376: non_redundant[sing_leader].set(sing_leader + 1); -23376: if (successor[sing_leader + 1] != sing_leader + 1) { -23376: dimension_type j = sing_leader; -23376: dimension_type next_j = successor[j + 1]; -23376: while (next_j != j + 1) { -23376: non_redundant[next_j].set(j); -23376: j = next_j; -23376: next_j = successor[j + 1]; -23376: } -23376: non_redundant[j + 1].set(j); -23376: } -23376: else { -23376: non_redundant[sing_leader + 1].set(sing_leader); -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::upper_bound_assign(const Octagonal_Shape& y) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("upper_bound_assign(y)", y); -23376: } -23376: -23376: -23376: y.strong_closure_assign(); -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: *this = y; -23376: return; -23376: } -23376: -23376: -23376: typename OR_Matrix::const_element_iterator j = y.matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; ++i, ++j) { -23376: max_assign(*i, *j); -23376: } -23376: -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::difference_assign(const Octagonal_Shape& y) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("difference_assign(y)", y); -23376: } -23376: -23376: Octagonal_Shape& x = *this; -23376: -23376: -23376: -23376: x.strong_closure_assign(); -23376: -23376: if (x.marked_empty()) { -23376: return; -23376: } -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: if (x.space_dim == 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (y.contains(x)) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: Octagonal_Shape new_oct(space_dim, EMPTY); -23376: -23376: -23376: -23376: const Constraint_System& y_cs = y.constraints(); -23376: for (Constraint_System::const_iterator i = y_cs.begin(), -23376: y_cs_end = y_cs.end(); i != y_cs_end; ++i) { -23376: const Constraint& c = *i; -23376: -23376: -23376: -23376: -23376: if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) { -23376: continue; -23376: } -23376: Octagonal_Shape z = x; -23376: const Linear_Expression e(c.expression()); -23376: z.add_constraint(e <= 0); -23376: if (!z.is_empty()) { -23376: new_oct.upper_bound_assign(z); -23376: } -23376: if (c.is_equality()) { -23376: z = x; -23376: z.add_constraint(e >= 0); -23376: if (!z.is_empty()) { -23376: new_oct.upper_bound_assign(z); -23376: } -23376: } -23376: } -23376: *this = new_oct; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::simplify_using_context_assign(const Octagonal_Shape& y) { -23376: Octagonal_Shape& x = *this; -23376: const dimension_type dim = x.space_dimension(); -23376: -23376: if (dim != y.space_dimension()) { -23376: throw_dimension_incompatible("simplify_using_context_assign(y)", y); -23376: } -23376: -23376: -23376: if (dim == 0) { -23376: if (y.marked_empty()) { -23376: x.set_zero_dim_univ(); -23376: return false; -23376: } -23376: else { -23376: return !x.marked_empty(); -23376: } -23376: } -23376: -23376: -23376: -23376: if (x.contains(y)) { -23376: Octagonal_Shape res(dim, UNIVERSE); -23376: x.m_swap(res); -23376: return false; -23376: } -23376: -23376: -23376: x.strong_closure_assign(); -23376: if (x.marked_empty()) { -23376: -23376: dimension_type i; -23376: dimension_type j; -23376: -23376: for (i = 0; i < 2*dim; i += 2) { -23376: -23376: -23376: -23376: -23376: if (!is_plus_infinity(y.matrix_at(i, i + 1))) { -23376: j = i + 1; -23376: goto found; -23376: } -23376: -23376: if (!is_plus_infinity(y.matrix_at(i + 1, i))) { -23376: j = i; -23376: ++i; -23376: goto found; -23376: } -23376: } -23376: -23376: -23376: for (i = 2; i < 2*dim; ++i) { -23376: for (j = 0; j < i; ++j) { -23376: -23376: if (!is_plus_infinity(y.matrix_at(i, j))) { -23376: goto found; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: return false; -23376: -23376: found: -23376: -23376: ((void) 0); -23376: Octagonal_Shape res(dim, UNIVERSE); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: assign_r(tmp, 1, ROUND_UP); -23376: add_assign_r(tmp, tmp, y.matrix_at(i, j), ROUND_UP); -23376: -23376: neg_assign_r(res.matrix_at(j, i), tmp, ROUND_DOWN); -23376: ((void) 0); -23376: x.m_swap(res); -23376: return false; -23376: } -23376: -23376: -23376: -23376: -23376: Octagonal_Shape target = x; -23376: target.intersection_assign(y); -23376: const bool bool_result = !target.is_empty(); -23376: -23376: -23376: -23376: std::vector x_non_redundant; -23376: x.non_redundant_matrix_entries(x_non_redundant); -23376: -23376: dimension_type x_num_non_redundant = 0; -23376: for (size_t i = x_non_redundant.size(); i-- > 0 ; ) { -23376: x_num_non_redundant += x_non_redundant[i].count_ones(); -23376: } -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: Octagonal_Shape yy = y; -23376: -23376: -23376: Octagonal_Shape res(dim, UNIVERSE); -23376: -23376: dimension_type res_num_non_redundant = 0; -23376: -23376: -23376: std::vector x_leaders; -23376: x.compute_leaders(x_leaders); -23376: -23376: -23376: -23376: dimension_type sing_leader; -23376: for (sing_leader = 0; sing_leader < 2*dim; sing_leader += 2) { -23376: if (sing_leader == x_leaders[sing_leader]) { -23376: const N& x_s_ss = x.matrix_at(sing_leader, sing_leader + 1); -23376: const N& x_ss_s = x.matrix_at(sing_leader + 1, sing_leader); -23376: if (is_additive_inverse(x_s_ss, x_ss_s)) { -23376: -23376: break; -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = sing_leader; i < 2*dim; i += 2) { -23376: if (x_leaders[i] != sing_leader) { -23376: continue; -23376: } -23376: -23376: -23376: const N& x_i_ii = x.matrix_at(i, i + 1); -23376: N& yy_i_ii = yy.matrix_at(i, i + 1); -23376: if (x_i_ii < yy_i_ii) { -23376: -23376: res.matrix_at(i, i + 1) = x_i_ii; -23376: ++res_num_non_redundant; -23376: -23376: yy_i_ii = x_i_ii; -23376: yy.reset_strongly_closed(); -23376: } -23376: const N& x_ii_i = x.matrix_at(i + 1, i); -23376: N& yy_ii_i = yy.matrix_at(i + 1, i); -23376: if (x_ii_i < yy_ii_i) { -23376: -23376: res.matrix_at(i + 1, i) = x_ii_i; -23376: ++res_num_non_redundant; -23376: -23376: yy_ii_i = x_ii_i; -23376: yy.reset_strongly_closed(); -23376: } -23376: -23376: if (!yy.marked_strongly_closed()) { -23376: Variable var_i(i/2); -23376: yy.incremental_strong_closure_assign(var_i); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_strongly_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = 0; i < 2*dim; ++i) { -23376: const dimension_type j = x_leaders[i]; -23376: if (j == i || j == sing_leader) { -23376: continue; -23376: } -23376: const N& x_i_j = x.matrix_at(i, j); -23376: ((void) 0); -23376: N& yy_i_j = yy.matrix_at(i, j); -23376: if (x_i_j < yy_i_j) { -23376: res.matrix_at(i, j) = x_i_j; -23376: ++res_num_non_redundant; -23376: -23376: yy_i_j = x_i_j; -23376: yy.reset_strongly_closed(); -23376: } -23376: const N& x_j_i = x.matrix_at(j, i); -23376: N& yy_j_i = yy.matrix_at(j, i); -23376: ((void) 0); -23376: if (x_j_i < yy_j_i) { -23376: res.matrix_at(j, i) = x_j_i; -23376: ++res_num_non_redundant; -23376: -23376: yy_j_i = x_j_i; -23376: yy.reset_strongly_closed(); -23376: } -23376: -23376: if (!yy.marked_strongly_closed()) { -23376: Variable var_j(j/2); -23376: yy.incremental_strong_closure_assign(var_j); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_strongly_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < 2*dim; ++i) { -23376: if (i != x_leaders[i]) { -23376: continue; -23376: } -23376: const Bit_Row& x_non_redundant_i = x_non_redundant[i]; -23376: for (dimension_type j = 0; j < 2*dim; ++j) { -23376: if (j != x_leaders[j]) { -23376: continue; -23376: } -23376: if (i >= j) { -23376: if (!x_non_redundant_i[j]) { -23376: continue; -23376: } -23376: } -23376: else if (!x_non_redundant[j][i]) { -23376: continue; -23376: } -23376: N& yy_i_j = yy.matrix_at(i, j); -23376: const N& x_i_j = x.matrix_at(i, j); -23376: if (x_i_j < yy_i_j) { -23376: res.matrix_at(i, j) = x_i_j; -23376: ++res_num_non_redundant; -23376: -23376: yy_i_j = x_i_j; -23376: yy.reset_strongly_closed(); -23376: Variable var(i/2); -23376: yy.incremental_strong_closure_assign(var); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_strongly_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: } -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::add_space_dimensions_and_embed(dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: -23376: const dimension_type new_dim = space_dim + m; -23376: const bool was_zero_dim_univ = !marked_empty() && space_dim == 0; -23376: -23376: -23376: -23376: matrix.grow(new_dim); -23376: space_dim = new_dim; -23376: -23376: -23376: if (was_zero_dim_univ) { -23376: set_strongly_closed(); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::add_space_dimensions_and_project(dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: -23376: const dimension_type n = matrix.num_rows(); -23376: -23376: -23376: -23376: add_space_dimensions_and_embed(m); -23376: -23376: -23376: for (typename OR_Matrix::row_iterator i = matrix.row_begin() + n, -23376: matrix_row_end = matrix.row_end(); i != matrix_row_end; i += 2) { -23376: typename OR_Matrix::row_reference_type x_i = *i; -23376: typename OR_Matrix::row_reference_type x_ci = *(i + 1); -23376: const dimension_type ind = i.index(); -23376: assign_r(x_i[ind + 1], 0, ROUND_NOT_NEEDED); -23376: assign_r(x_ci[ind], 0, ROUND_NOT_NEEDED); -23376: } -23376: -23376: if (marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::remove_space_dimensions(const Variables_Set& vars) { -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dim < min_space_dim) { -23376: throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim); -23376: } -23376: -23376: const dimension_type new_space_dim = space_dim - vars.size(); -23376: -23376: strong_closure_assign(); -23376: -23376: -23376: if (new_space_dim == 0) { -23376: matrix.shrink(0); -23376: if (!marked_empty()) { -23376: -23376: set_zero_dim_univ(); -23376: } -23376: space_dim = 0; -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: typedef typename OR_Matrix::element_iterator Elem_Iter; -23376: typedef typename std::iterator_traits::difference_type diff_t; -23376: -23376: dimension_type first = *vars.begin(); -23376: const dimension_type first_size = 2 * first * (first + 1); -23376: Elem_Iter iter = matrix.element_begin() + static_cast(first_size); -23376: -23376: for (dimension_type i = first + 1; i < space_dim; ++i) { -23376: if (vars.count(i) == 0) { -23376: typename OR_Matrix::row_iterator row_iter = matrix.row_begin() + 2*i; -23376: typename OR_Matrix::row_reference_type row_ref = *row_iter; -23376: typename OR_Matrix::row_reference_type row_ref1 = *(++row_iter); -23376: -23376: -23376: -23376: -23376: for (dimension_type j = 0; j <= i; ++j) { -23376: if (vars.count(j) == 0) { -23376: assign_or_swap(*(iter++), row_ref[2*j]); -23376: assign_or_swap(*(iter++), row_ref[2*j + 1]); -23376: } -23376: } -23376: for (dimension_type j = 0; j <= i; ++j) { -23376: if (vars.count(j) == 0) { -23376: assign_or_swap(*(iter++), row_ref1[2*j]); -23376: assign_or_swap(*(iter++), row_ref1[2*j + 1]); -23376: } -23376: } -23376: } -23376: } -23376: -23376: matrix.shrink(new_space_dim); -23376: space_dim = new_space_dim; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape::map_space_dimensions(const Partial_Function& pfunc) { -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: if (pfunc.has_empty_codomain()) { -23376: -23376: remove_higher_space_dimensions(0); -23376: return; -23376: } -23376: -23376: const dimension_type new_space_dim = pfunc.max_in_codomain() + 1; -23376: -23376: -23376: if (new_space_dim < space_dim) { -23376: strong_closure_assign(); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: remove_higher_space_dimensions(new_space_dim); -23376: return; -23376: } -23376: -23376: -23376: OR_Matrix x(new_space_dim); -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: -23376: row_iterator m_begin = x.row_begin(); -23376: -23376: for (row_iterator i_iter = matrix.row_begin(), i_end = matrix.row_end(); -23376: i_iter != i_end; i_iter += 2) { -23376: dimension_type new_i; -23376: dimension_type i = i_iter.index()/2; -23376: -23376: -23376: -23376: if (pfunc.maps(i, new_i)) { -23376: row_reference r_i = *i_iter; -23376: row_reference r_ii = *(i_iter + 1); -23376: dimension_type double_new_i = 2*new_i; -23376: row_iterator x_iter = m_begin + double_new_i; -23376: row_reference x_i = *x_iter; -23376: row_reference x_ii = *(x_iter + 1); -23376: for (dimension_type j = 0; j <= i; ++j) { -23376: dimension_type new_j; -23376: -23376: if (pfunc.maps(j, new_j)) { -23376: dimension_type dj = 2*j; -23376: dimension_type double_new_j = 2*new_j; -23376: -23376: -23376: -23376: -23376: if (new_i >= new_j) { -23376: assign_or_swap(x_i[double_new_j], r_i[dj]); -23376: assign_or_swap(x_ii[double_new_j], r_ii[dj]); -23376: assign_or_swap(x_ii[double_new_j + 1], r_ii[dj + 1]); -23376: assign_or_swap(x_i[double_new_j + 1], r_i[dj + 1]); -23376: } -23376: else { -23376: row_iterator x_j_iter = m_begin + double_new_j; -23376: row_reference x_j = *x_j_iter; -23376: row_reference x_jj = *(x_j_iter + 1); -23376: assign_or_swap(x_jj[double_new_i + 1], r_i[dj]); -23376: assign_or_swap(x_jj[double_new_i], r_ii[dj]); -23376: assign_or_swap(x_j[double_new_i + 1], r_i[dj + 1]); -23376: assign_or_swap(x_j[double_new_i], r_ii[dj + 1]); -23376: } -23376: -23376: } -23376: } -23376: } -23376: } -23376: -23376: using std::swap; -23376: swap(matrix, x); -23376: space_dim = new_space_dim; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::intersection_assign(const Octagonal_Shape& y) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("intersection_assign(y)", y); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: bool changed = false; -23376: -23376: typename OR_Matrix::const_element_iterator j = y.matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; -23376: ++i, ++j) { -23376: N& elem = *i; -23376: const N& y_elem = *j; -23376: if (y_elem < elem) { -23376: elem = y_elem; -23376: changed = true; -23376: } -23376: } -23376: -23376: -23376: if (changed && marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape::CC76_extrapolation_assign(const Octagonal_Shape& y, -23376: Iterator first, Iterator last, -23376: unsigned* tp) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("CC76_extrapolation_assign(y)", y); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: y.strong_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: if (tp != 0 && *tp > 0) { -23376: Octagonal_Shape x_tmp(*this); -23376: x_tmp.CC76_extrapolation_assign(y, first, last, 0); -23376: -23376: if (!contains(x_tmp)) { -23376: --(*tp); -23376: } -23376: return; -23376: } -23376: # 3858 "../../src/Octagonal_Shape_templates.hh" -23376: typename OR_Matrix::const_element_iterator j = y.matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; -23376: ++i, ++j) { -23376: const N& y_elem = *j; -23376: N& elem = *i; -23376: if (y_elem < elem) { -23376: Iterator k = std::lower_bound(first, last, elem); -23376: if (k != last) { -23376: if (elem < *k) { -23376: assign_r(elem, *k, ROUND_UP); -23376: } -23376: } -23376: else { -23376: assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: -23376: reset_strongly_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::get_limiting_octagon(const Constraint_System& cs, -23376: Octagonal_Shape& limiting_octagon) const { -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: -23376: ((void) 0); -23376: -23376: strong_closure_assign(); -23376: bool is_oct_changed = false; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: -23376: for (Constraint_System::const_iterator cs_i = cs.begin(), -23376: cs_end = cs.end(); cs_i != cs_end; ++cs_i) { -23376: const Constraint& c = *cs_i; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: -23376: if (!Octagonal_Shape_Helper -23376: ::extract_octagonal_difference(c, cs_space_dim, num_vars, i, j, -23376: coeff, term)) { -23376: continue; -23376: } -23376: -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: Row_iterator m_begin = matrix.row_begin(); -23376: -23376: Row_iterator i_iter = m_begin + i; -23376: Row_reference m_i = *i_iter; -23376: OR_Matrix& lo_mat = limiting_octagon.matrix; -23376: row_iterator lo_iter = lo_mat.row_begin() + i; -23376: row_reference lo_m_i = *lo_iter; -23376: N& lo_m_i_j = lo_m_i[j]; -23376: if (coeff < 0) { -23376: neg_assign(coeff); -23376: } -23376: -23376: div_round_up(d, term, coeff); -23376: if (m_i[j] <= d) { -23376: if (c.is_inequality()) { -23376: if (lo_m_i_j > d) { -23376: lo_m_i_j = d; -23376: is_oct_changed = true; -23376: } -23376: else { -23376: -23376: if (i % 2 == 0) { -23376: ++i_iter; -23376: ++lo_iter; -23376: } -23376: else { -23376: --i_iter; -23376: --lo_iter; -23376: } -23376: Row_reference m_ci = *i_iter; -23376: row_reference lo_m_ci = *lo_iter; -23376: -23376: using namespace Implementation::Octagonal_Shapes; -23376: dimension_type cj = coherent_index(j); -23376: N& lo_m_ci_cj = lo_m_ci[cj]; -23376: neg_assign(term); -23376: div_round_up(d, term, coeff); -23376: if (m_ci[cj] <= d && lo_m_ci_cj > d) { -23376: lo_m_ci_cj = d; -23376: is_oct_changed = true; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: if (is_oct_changed && limiting_octagon.marked_strongly_closed()) { -23376: limiting_octagon.reset_strongly_closed(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::limited_CC76_extrapolation_assign(const Octagonal_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)", -23376: y); -23376: } -23376: -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: if (space_dim < cs_space_dim) { -23376: throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)"); -23376: } -23376: -23376: -23376: if (cs.has_strict_inequalities()) { -23376: throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)"); -23376: } -23376: -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: Octagonal_Shape limiting_octagon(space_dim, UNIVERSE); -23376: get_limiting_octagon(cs, limiting_octagon); -23376: CC76_extrapolation_assign(y, tp); -23376: intersection_assign(limiting_octagon); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::BHMZ05_widening_assign(const Octagonal_Shape& y, -23376: unsigned* tp) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("BHMZ05_widening_assign(y)", y); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: const dimension_type y_affine_dim = y.affine_dimension(); -23376: -23376: -23376: -23376: if (y_affine_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: -23376: const dimension_type x_affine_dim = affine_dimension(); -23376: ((void) 0); -23376: if (x_affine_dim != y_affine_dim) { -23376: return; -23376: } -23376: -23376: if (tp != 0 && *tp > 0) { -23376: Octagonal_Shape x_tmp(*this); -23376: x_tmp.BHMZ05_widening_assign(y, 0); -23376: -23376: if (!contains(x_tmp)) { -23376: --(*tp); -23376: } -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: y.strong_reduction_assign(); -23376: -23376: -23376: typename OR_Matrix::const_element_iterator j = y.matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; -23376: ++i, ++j) { -23376: N& elem = *i; -23376: -23376: -23376: -23376: if (*j != elem) { -23376: assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: reset_strongly_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)", -23376: y); -23376: } -23376: -23376: -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: if (space_dim < cs_space_dim) { -23376: throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)"); -23376: } -23376: -23376: -23376: if (cs.has_strict_inequalities()) { -23376: throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)"); -23376: } -23376: -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: Octagonal_Shape limiting_octagon(space_dim, UNIVERSE); -23376: get_limiting_octagon(cs, limiting_octagon); -23376: BHMZ05_widening_assign(y, tp); -23376: intersection_assign(limiting_octagon); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::CC76_narrowing_assign(const Octagonal_Shape& y) { -23376: -23376: if (space_dim != y.space_dim) { -23376: throw_dimension_incompatible("CC76_narrowing_assign(y)", y); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: y.strong_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: bool is_oct_changed = false; -23376: typename OR_Matrix::const_element_iterator j = y.matrix.element_begin(); -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: matrix_element_end = matrix.element_end(); -23376: i != matrix_element_end; -23376: ++i, ++j) { -23376: if (!is_plus_infinity(*i) -23376: && !is_plus_infinity(*j) -23376: && *i != *j) { -23376: *i = *j; -23376: is_oct_changed = true; -23376: } -23376: } -23376: -23376: if (is_oct_changed && marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::deduce_v_pm_u_bounds(const dimension_type v_id, -23376: const dimension_type last_id, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& ub_v) { -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item(); -23376: assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED); -23376: -23376: -23376: const dimension_type n_v = 2*v_id; -23376: typename OR_Matrix::row_reference_type m_cv = matrix[n_v + 1]; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_q; mpq_class& minus_q = holder_minus_q.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub_u; mpq_class& ub_u = holder_ub_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lb_u; mpq_class& lb_u = holder_lb_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_up_approx; N& up_approx = holder_up_approx.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item(); -23376: -23376: for (Linear_Expression::const_iterator u = sc_expr.begin(), -23376: u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) { -23376: const dimension_type u_id = u.variable().id(); -23376: -23376: if (u_id == v_id) { -23376: continue; -23376: } -23376: const Coefficient& expr_u = *u; -23376: -23376: const dimension_type n_u = u_id*2; -23376: -23376: if (expr_u > 0) { -23376: if (expr_u >= sc_denom) { -23376: -23376: -23376: -23376: -23376: div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP); -23376: N& m_v_minus_u = (n_v < n_u) ? matrix[n_u][n_v] : m_cv[n_u + 1]; -23376: sub_assign_r(m_v_minus_u, ub_v, half, ROUND_UP); -23376: } -23376: else { -23376: -23376: typename OR_Matrix::row_reference_type m_u = matrix[n_u]; -23376: const N& m_u_cu = m_u[n_u + 1]; -23376: if (!is_plus_infinity(m_u_cu)) { -23376: -23376: -23376: -23376: -23376: assign_r(minus_lb_u, m_u_cu, ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED); -23376: assign_r(q, expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED); -23376: -23376: sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, minus_lb_u, ROUND_UP); -23376: -23376: N& m_v_minus_u = (n_v < n_u) ? m_u[n_v] : m_cv[n_u + 1]; -23376: add_assign_r(m_v_minus_u, ub_v, up_approx, ROUND_UP); -23376: } -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: neg_assign(minus_expr_u, expr_u); -23376: if (minus_expr_u >= sc_denom) { -23376: -23376: -23376: -23376: -23376: div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP); -23376: N& m_v_plus_u = (n_v < n_u) ? matrix[n_u + 1][n_v] : m_cv[n_u]; -23376: sub_assign_r(m_v_plus_u, ub_v, half, ROUND_UP); -23376: } -23376: else { -23376: -23376: typename OR_Matrix::row_reference_type m_cu = matrix[n_u + 1]; -23376: const N& m_cu_u = m_cu[n_u]; -23376: if (!is_plus_infinity(m_cu_u)) { -23376: -23376: -23376: -23376: -23376: assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED); -23376: assign_r(minus_q, minus_expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(minus_q, minus_q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(lb_u, lb_u, 1, ROUND_NOT_NEEDED); -23376: neg_assign_r(lb_u, lb_u, ROUND_NOT_NEEDED); -23376: -23376: sub_assign_r(lb_u, lb_u, ub_u, ROUND_NOT_NEEDED); -23376: -23376: add_mul_assign_r(ub_u, minus_q, lb_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, ub_u, ROUND_UP); -23376: -23376: N& m_v_plus_u = (n_v < n_u) ? m_cu[n_v] : m_cv[n_u]; -23376: add_assign_r(m_v_plus_u, ub_v, up_approx, ROUND_UP); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::deduce_minus_v_pm_u_bounds(const dimension_type v_id, -23376: const dimension_type last_id, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& minus_lb_v) { -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item(); -23376: assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED); -23376: -23376: -23376: const dimension_type n_v = 2*v_id; -23376: typename OR_Matrix::row_reference_type m_v = matrix[n_v]; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub_u; mpq_class& ub_u = holder_ub_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_up_approx; N& up_approx = holder_up_approx.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item(); -23376: -23376: for (Linear_Expression::const_iterator u = sc_expr.begin(), -23376: u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) { -23376: const dimension_type u_id = u.variable().id(); -23376: -23376: if (u_id == v_id) { -23376: continue; -23376: } -23376: const Coefficient& expr_u = *u; -23376: -23376: const dimension_type n_u = u_id*2; -23376: -23376: if (expr_u > 0) { -23376: if (expr_u >= sc_denom) { -23376: -23376: -23376: -23376: -23376: -23376: div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP); -23376: N& m_u_minus_v = (n_v < n_u) ? matrix[n_u + 1][n_v + 1] : m_v[n_u]; -23376: sub_assign_r(m_u_minus_v, minus_lb_v, half, ROUND_UP); -23376: } -23376: else { -23376: -23376: typename OR_Matrix::row_reference_type m_cu = matrix[n_u + 1]; -23376: const N& m_cu_u = m_cu[n_u]; -23376: if (!is_plus_infinity(m_cu_u)) { -23376: -23376: -23376: -23376: -23376: assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED); -23376: assign_r(q, expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(minus_lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(minus_lb_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED); -23376: -23376: sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, ub_u, ROUND_UP); -23376: -23376: N& m_u_minus_v = (n_v < n_u) ? m_cu[n_v + 1] : m_v[n_u]; -23376: add_assign_r(m_u_minus_v, minus_lb_v, up_approx, ROUND_UP); -23376: } -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: neg_assign(minus_expr_u, expr_u); -23376: if (minus_expr_u >= sc_denom) { -23376: -23376: -23376: -23376: -23376: div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP); -23376: N& m_minus_v_minus_u = (n_v < n_u) -23376: ? matrix[n_u][n_v + 1] -23376: : m_v[n_u + 1]; -23376: sub_assign_r(m_minus_v_minus_u, minus_lb_v, half, ROUND_UP); -23376: } -23376: else { -23376: -23376: typename OR_Matrix::row_reference_type m_u = matrix[n_u]; -23376: const N& m_u_cu = m_u[n_u + 1]; -23376: if (!is_plus_infinity(m_u_cu)) { -23376: -23376: -23376: -23376: -23376: assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED); -23376: assign_r(q, expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(minus_lb_u, m_u[n_u + 1], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED); -23376: -23376: add_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, minus_lb_u, ROUND_UP); -23376: -23376: N& m_minus_v_minus_u = (n_v < n_u) ? m_u[n_v + 1] : m_v[n_u + 1]; -23376: add_assign_r(m_minus_v_minus_u, minus_lb_v, up_approx, ROUND_UP); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::forget_all_octagonal_constraints(const dimension_type v_id) { -23376: ((void) 0); -23376: const dimension_type n_v = 2*v_id; -23376: typename OR_Matrix::row_iterator m_iter = matrix.row_begin() + n_v; -23376: typename OR_Matrix::row_reference_type r_v = *m_iter; -23376: typename OR_Matrix::row_reference_type r_cv = *(++m_iter); -23376: for (dimension_type h = m_iter.row_size(); h-- > 0; ) { -23376: assign_r(r_v[h], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(r_cv[h], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: ++m_iter; -23376: for (typename OR_Matrix::row_iterator m_end = matrix.row_end(); -23376: m_iter != m_end; ++m_iter) { -23376: typename OR_Matrix::row_reference_type r = *m_iter; -23376: assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::forget_binary_octagonal_constraints(const dimension_type v_id) { -23376: ((void) 0); -23376: const dimension_type n_v = 2*v_id; -23376: typename OR_Matrix::row_iterator m_iter = matrix.row_begin() + n_v; -23376: typename OR_Matrix::row_reference_type r_v = *m_iter; -23376: typename OR_Matrix::row_reference_type r_cv = *(++m_iter); -23376: for (dimension_type k = n_v; k-- > 0; ) { -23376: assign_r(r_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(r_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: ++m_iter; -23376: for (typename OR_Matrix::row_iterator m_end = matrix.row_end(); -23376: m_iter != m_end; ++m_iter) { -23376: typename OR_Matrix::row_reference_type r = *m_iter; -23376: assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::unconstrain(const Variable var) { -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dimension() < var_id + 1) { -23376: throw_dimension_incompatible("unconstrain(var)", var_id + 1); -23376: } -23376: -23376: -23376: strong_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::unconstrain(const Variables_Set& vars) { -23376: -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dimension() < min_space_dim) { -23376: throw_dimension_incompatible("unconstrain(vs)", min_space_dim); -23376: } -23376: -23376: -23376: strong_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: for (Variables_Set::const_iterator vsi = vars.begin(), -23376: vsi_end = vars.end(); vsi != vsi_end; ++vsi) { -23376: forget_all_octagonal_constraints(*vsi); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::refine(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type var_id = var.id(); -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: -23376: dimension_type w_id = expr.last_nonzero(); -23376: -23376: if (w_id != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w_id)) { -23376: ++t; -23376: } -23376: --w_id; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const dimension_type n_var = 2*var_id; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign(minus_denom, denominator); -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (t == 1 && expr.coefficient(Variable(w_id)) != denominator -23376: && expr.coefficient(Variable(w_id)) != minus_denom) { -23376: t = 2; -23376: } -23376: if (t == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item(); -23376: two_b = 2*b; -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: add_octagonal_constraint(n_var + 1, n_var, two_b, denominator); -23376: add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom); -23376: break; -23376: case LESS_OR_EQUAL: -23376: -23376: add_octagonal_constraint(n_var + 1, n_var, two_b, denominator); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else if (t == 1) { -23376: -23376: const Coefficient& w_coeff = expr.coefficient(Variable(w_id)); -23376: const dimension_type n_w = 2*w_id; -23376: switch (relsym) { -23376: case EQUAL: -23376: if (w_coeff == denominator) { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var, b, denominator); -23376: add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator); -23376: add_octagonal_constraint(n_var, n_w, b, minus_denom); -23376: } -23376: } -23376: else { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var, b, denominator); -23376: add_octagonal_constraint(n_w, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w, b, denominator); -23376: add_octagonal_constraint(n_var, n_w + 1, b, minus_denom); -23376: } -23376: } -23376: break; -23376: case LESS_OR_EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: -23376: -23376: if (w_coeff == denominator) { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var, d); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w + 1, d); -23376: } -23376: } -23376: else if (w_coeff == minus_denom) { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var, d); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w, d); -23376: } -23376: } -23376: break; -23376: } -23376: -23376: case GREATER_OR_EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, minus_denom); -23376: -23376: -23376: if (w_coeff == denominator) { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var + 1, d); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w, d); -23376: } -23376: } -23376: else if (w_coeff == minus_denom) { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var + 1, d); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w + 1, d); -23376: } -23376: } -23376: break; -23376: } -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else { -23376: -23376: -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: -23376: dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pinf_count = 0; -23376: -23376: switch (relsym) { -23376: case EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_sum; N& neg_sum = holder_neg_sum.item(); -23376: -23376: dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type neg_pinf_count = 0; -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: assign_r(neg_sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item(); -23376: -23376: -23376: for (Row_iterator m_iter = m_begin, -23376: m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: Row_reference m_i = *m_iter; -23376: ++m_iter; -23376: Row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (pinf_count <= 1) { -23376: const N& double_approx_i = m_ci[n_i]; -23376: if (!is_plus_infinity(double_approx_i)) { -23376: -23376: div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++pinf_count; -23376: pinf_index = id; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_approx_minus_i = m_i[n_i + 1]; -23376: if (!is_plus_infinity(double_approx_minus_i)) { -23376: -23376: div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: else if (sign_i < 0) { -23376: neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED); -23376: assign_r(minus_coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (pinf_count <= 1) { -23376: const N& double_approx_minus_i = m_i[n_i + 1]; -23376: if (!is_plus_infinity(double_approx_minus_i)) { -23376: -23376: div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, minus_coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++pinf_count; -23376: pinf_index = id; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_approx_i = m_ci[n_i]; -23376: if (!is_plus_infinity(double_approx_i)) { -23376: -23376: div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (pinf_count > 1 && neg_pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: reset_strongly_closed(); -23376: -23376: -23376: if (pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_sum; N& double_sum = holder_double_sum.item(); -23376: mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP); -23376: matrix[n_var + 1][n_var] = double_sum; -23376: -23376: deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum); -23376: } -23376: else { -23376: -23376: if (pinf_index != var_id) { -23376: const Coefficient& ppi -23376: = sc_expr.coefficient(Variable(pinf_index)); -23376: if (ppi == sc_denom) { -23376: -23376: if (var_id < pinf_index) { -23376: matrix[2*pinf_index][n_var] = sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pinf_index + 1] = sum; -23376: } -23376: } -23376: else { -23376: if (ppi == minus_sc_denom) { -23376: -23376: if (var_id < pinf_index) { -23376: matrix[2*pinf_index + 1][n_var] = sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pinf_index] = sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: if (neg_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (neg_pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item(); -23376: mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP); -23376: matrix[n_var][n_var + 1] = double_neg_sum; -23376: -23376: deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, -23376: neg_sum); -23376: } -23376: else { -23376: -23376: if (neg_pinf_index != var_id) { -23376: const Coefficient& npi -23376: = sc_expr.coefficient(Variable(neg_pinf_index)); -23376: if (npi == sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum; -23376: } -23376: } -23376: else { -23376: if (npi == minus_sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index + 1] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index][n_var + 1] = neg_sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: case LESS_OR_EQUAL: -23376: { -23376: -23376: -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_approx_i; N& approx_i = holder_approx_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: for (row_iterator m_iter = m_begin, -23376: m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: row_reference m_i = *m_iter; -23376: ++m_iter; -23376: row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i == 0) { -23376: continue; -23376: } -23376: -23376: const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1]; -23376: if (is_plus_infinity(double_approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = id; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_sum; N& double_sum = holder_double_sum.item(); -23376: mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP); -23376: add_octagonal_constraint(n_var + 1, n_var, double_sum); -23376: -23376: deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: dimension_type pinf_ind = 2*pinf_index; -23376: if (expr.coefficient(Variable(pinf_index)) == denominator ) { -23376: -23376: if (var_id < pinf_index) { -23376: add_octagonal_constraint(pinf_ind, n_var, sum); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, pinf_ind + 1, sum); -23376: } -23376: } -23376: else { -23376: if (expr.coefficient(Variable(pinf_index)) == minus_denom) { -23376: -23376: if (var_id < pinf_index) { -23376: add_octagonal_constraint(pinf_ind + 1, n_var, sum); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, pinf_ind, sum); -23376: } -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: case GREATER_OR_EQUAL: -23376: { -23376: -23376: -23376: -23376: -23376: -23376: assign_r(sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_approx_i; N& approx_i = holder_approx_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: for (row_iterator m_iter = m_begin, -23376: m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: row_reference m_i = *m_iter; -23376: ++m_iter; -23376: row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i == 0) { -23376: continue; -23376: } -23376: -23376: const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i]; -23376: if (is_plus_infinity(double_approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = id; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_sum; N& double_sum = holder_double_sum.item(); -23376: mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP); -23376: add_octagonal_constraint(n_var, n_var + 1, double_sum); -23376: -23376: deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom, -23376: sum); -23376: } -23376: else if (pinf_count == 1) { -23376: dimension_type pinf_ind = 2*pinf_index; -23376: if (expr.coefficient(Variable(pinf_index)) == denominator) { -23376: -23376: -23376: if (pinf_index < var_id) { -23376: add_octagonal_constraint(n_var, pinf_ind, sum); -23376: } -23376: else { -23376: add_octagonal_constraint(pinf_ind + 1, n_var, sum); -23376: } -23376: } -23376: else { -23376: if (expr.coefficient(Variable(pinf_index)) == minus_denom) { -23376: -23376: -23376: if (pinf_index < var_id) { -23376: add_octagonal_constraint(n_var, pinf_ind + 1, sum); -23376: } -23376: else { -23376: add_octagonal_constraint(pinf_ind, n_var + 1, sum); -23376: } -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::affine_image(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_image(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", "e", expr); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", var_id + 1); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w_id = expr.last_nonzero(); -23376: -23376: if (w_id != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w_id)) { -23376: ++t; -23376: } -23376: --w_id; -23376: } -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: using std::swap; -23376: -23376: const dimension_type n_var = 2*var_id; -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED); -23376: # 5179 "../../src/Octagonal_Shape_templates.hh" -23376: if (t == 0) { -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item(); -23376: two_b = 2*b; -23376: -23376: add_octagonal_constraint(n_var + 1, n_var, two_b, denominator); -23376: add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& w_coeff = expr.coefficient(Variable(w_id)); -23376: if (w_coeff == denominator || w_coeff == minus_denom) { -23376: -23376: if (w_id == var_id) { -23376: -23376: const bool sign_symmetry = (w_coeff != denominator); -23376: if (!sign_symmetry && b == 0) { -23376: -23376: return; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_d; N& minus_d = holder_minus_d.item(); -23376: div_round_up(minus_d, b, minus_denom); -23376: if (sign_symmetry) { -23376: swap(d, minus_d); -23376: } -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: row_iterator m_iter = m_begin + n_var; -23376: row_reference m_v = *m_iter; -23376: ++m_iter; -23376: row_reference m_cv = *m_iter; -23376: ++m_iter; -23376: -23376: for (dimension_type j = n_var; j-- > 0; ) { -23376: N& m_v_j = m_v[j]; -23376: add_assign_r(m_v_j, m_v_j, minus_d, ROUND_UP); -23376: N& m_cv_j = m_cv[j]; -23376: add_assign_r(m_cv_j, m_cv_j, d, ROUND_UP); -23376: if (sign_symmetry) { -23376: swap(m_v_j, m_cv_j); -23376: } -23376: } -23376: for ( ; m_iter != m_end; ++m_iter) { -23376: row_reference m_i = *m_iter; -23376: N& m_i_v = m_i[n_var]; -23376: add_assign_r(m_i_v, m_i_v, d, ROUND_UP); -23376: N& m_i_cv = m_i[n_var + 1]; -23376: add_assign_r(m_i_cv, m_i_cv, minus_d, ROUND_UP); -23376: if (sign_symmetry) { -23376: swap(m_i_v, m_i_cv); -23376: } -23376: } -23376: -23376: mul_2exp_assign_r(d, d, 1, ROUND_UP); -23376: N& m_cv_v = m_cv[n_var]; -23376: add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP); -23376: mul_2exp_assign_r(minus_d, minus_d, 1, ROUND_UP); -23376: N& m_v_cv = m_v[n_var + 1]; -23376: add_assign_r(m_v_cv, m_v_cv, minus_d, ROUND_UP); -23376: if (sign_symmetry) { -23376: swap(m_cv_v, m_v_cv); -23376: } -23376: -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: const dimension_type n_w = 2*w_id; -23376: -23376: if (w_coeff == denominator) { -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var, b, denominator); -23376: add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator); -23376: add_octagonal_constraint(n_var, n_w, b, minus_denom); -23376: } -23376: } -23376: else { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var, b, denominator); -23376: add_octagonal_constraint(n_w, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w, b, denominator); -23376: add_octagonal_constraint(n_var, n_w + 1, b, minus_denom); -23376: } -23376: } -23376: incremental_strong_closure_assign(var); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: # 5299 "../../src/Octagonal_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign_r(minus_b, b, ROUND_NOT_NEEDED); -23376: -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_pos_sum; N& pos_sum = holder_pos_sum.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_sum; N& neg_sum = holder_neg_sum.item(); -23376: -23376: dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pos_pinf_count = 0; -23376: dimension_type neg_pinf_count = 0; -23376: -23376: -23376: assign_r(pos_sum, sc_b, ROUND_UP); -23376: assign_r(neg_sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: Row_reference m_i = *m_iter; -23376: ++m_iter; -23376: Row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& double_up_approx_i = m_ci[n_i]; -23376: if (!is_plus_infinity(double_up_approx_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(pos_sum, coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = id; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_up_approx_minus_i = m_i[n_i + 1]; -23376: if (!is_plus_infinity(double_up_approx_minus_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: else if (sign_i < 0) { -23376: neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED); -23376: assign_r(minus_coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& double_up_approx_minus_i = m_i[n_i + 1]; -23376: if (!is_plus_infinity(double_up_approx_minus_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP); -23376: add_mul_assign_r(pos_sum, minus_coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = id; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_up_approx_i = m_ci[n_i]; -23376: if (!is_plus_infinity(double_up_approx_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: -23376: if (pos_pinf_count > 1 && neg_pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: reset_strongly_closed(); -23376: -23376: -23376: if (pos_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pos_pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_pos_sum; N& double_pos_sum = holder_double_pos_sum.item(); -23376: mul_2exp_assign_r(double_pos_sum, pos_sum, 1, ROUND_UP); -23376: matrix[n_var + 1][n_var] = double_pos_sum; -23376: -23376: deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, pos_sum); -23376: } -23376: else { -23376: -23376: if (pos_pinf_index != var_id) { -23376: const Coefficient& ppi = sc_expr.coefficient(Variable(pos_pinf_index)); -23376: if (ppi == sc_denom) { -23376: -23376: if (var_id < pos_pinf_index) { -23376: matrix[2*pos_pinf_index][n_var] = pos_sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pos_pinf_index + 1] = pos_sum; -23376: } -23376: } -23376: else { -23376: if (ppi == minus_sc_denom) { -23376: -23376: if (var_id < pos_pinf_index) { -23376: matrix[2*pos_pinf_index + 1][n_var] = pos_sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pos_pinf_index] = pos_sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: if (neg_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (neg_pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item(); -23376: mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP); -23376: matrix[n_var][n_var + 1] = double_neg_sum; -23376: -23376: deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum); -23376: } -23376: else { -23376: -23376: if (neg_pinf_index != var_id) { -23376: const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index)); -23376: if (npi == sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum; -23376: } -23376: } -23376: else { -23376: if (npi == minus_sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index + 1] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index][n_var + 1] = neg_sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: incremental_strong_closure_assign(var); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape::affine_form_image(const Variable var, -23376: const Linear_Form< Interval >& lf) { -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5533 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: -23376: -23376: const dimension_type lf_space_dim = lf.space_dimension(); -23376: if (space_dim < lf_space_dim) { -23376: throw_dimension_incompatible("affine_form_image(v, l)", "l", lf); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("affine_form_image(v, l)", var.id() + 1); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w_id = 0; -23376: -23376: -23376: for (dimension_type i = lf_space_dim; i-- > 0; ) { -23376: if (lf.coefficient(Variable(i)) != 0) { -23376: if (t++ == 1) { -23376: break; -23376: } -23376: else { -23376: w_id = i; -23376: } -23376: } -23376: } -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef Interval FP_Interval_Type; -23376: using std::swap; -23376: -23376: const dimension_type n_var = 2*var_id; -23376: const FP_Interval_Type& b = lf.inhomogeneous_term(); -23376: # 5588 "../../src/Octagonal_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_ub; N& b_ub = holder_b_ub.item(); -23376: assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_mlb; N& b_mlb = holder_b_mlb.item(); -23376: neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED); -23376: -23376: if (t == 0) { -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP); -23376: mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP); -23376: -23376: add_octagonal_constraint(n_var + 1, n_var, b_ub); -23376: add_octagonal_constraint(n_var, n_var + 1, b_mlb); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: bool is_b_zero = (b_mlb == 0 && b_ub == 0); -23376: -23376: if (t == 1) { -23376: -23376: const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id)); -23376: -23376: bool is_w_coeff_one = (w_coeff == 1); -23376: -23376: bool is_w_coeff_minus_one = (w_coeff == -1); -23376: if (is_w_coeff_one || is_w_coeff_minus_one) { -23376: -23376: if (w_id == var_id) { -23376: -23376: if (is_w_coeff_one && is_b_zero) { -23376: -23376: return; -23376: } -23376: -23376: -23376: if (is_w_coeff_minus_one) { -23376: swap(b_ub, b_mlb); -23376: } -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: row_iterator m_iter = m_begin + n_var; -23376: row_reference m_v = *m_iter; -23376: ++m_iter; -23376: row_reference m_cv = *m_iter; -23376: ++m_iter; -23376: -23376: for (dimension_type j = n_var; j-- > 0; ) { -23376: N& m_v_j = m_v[j]; -23376: add_assign_r(m_v_j, m_v_j, b_mlb, ROUND_UP); -23376: N& m_cv_j = m_cv[j]; -23376: add_assign_r(m_cv_j, m_cv_j, b_ub, ROUND_UP); -23376: if (is_w_coeff_minus_one) { -23376: swap(m_v_j, m_cv_j); -23376: } -23376: } -23376: for ( ; m_iter != m_end; ++m_iter) { -23376: row_reference m_i = *m_iter; -23376: N& m_i_v = m_i[n_var]; -23376: add_assign_r(m_i_v, m_i_v, b_ub, ROUND_UP); -23376: N& m_i_cv = m_i[n_var + 1]; -23376: add_assign_r(m_i_cv, m_i_cv, b_mlb, ROUND_UP); -23376: if (is_w_coeff_minus_one) { -23376: swap(m_i_v, m_i_cv); -23376: } -23376: } -23376: -23376: mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP); -23376: N& m_cv_v = m_cv[n_var]; -23376: add_assign_r(m_cv_v, m_cv_v, b_ub, ROUND_UP); -23376: mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP); -23376: N& m_v_cv = m_v[n_var + 1]; -23376: add_assign_r(m_v_cv, m_v_cv, b_mlb, ROUND_UP); -23376: if (is_w_coeff_minus_one) { -23376: swap(m_cv_v, m_v_cv); -23376: } -23376: -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: const dimension_type n_w = 2*w_id; -23376: if (is_w_coeff_one) { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var, b_ub); -23376: add_octagonal_constraint(n_w + 1, n_var + 1, b_mlb); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w + 1, b_ub); -23376: add_octagonal_constraint(n_var, n_w, b_mlb); -23376: } -23376: } -23376: else { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var, b_ub); -23376: add_octagonal_constraint(n_w, n_var + 1, b_mlb); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w, b_ub); -23376: add_octagonal_constraint(n_var, n_w + 1, b_mlb); -23376: } -23376: } -23376: incremental_strong_closure_assign(var); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: reset_strongly_closed(); -23376: -23376: Linear_Form minus_lf(lf); -23376: minus_lf.negate(); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; N& upper_bound = holder_upper_bound.item(); -23376: -23376: row_iterator m_iter = matrix.row_begin(); -23376: m_iter += n_var; -23376: row_reference var_ite = *m_iter; -23376: ++m_iter; -23376: row_reference var_cv_ite = *m_iter; -23376: ++m_iter; -23376: row_iterator m_end = matrix.row_end(); -23376: -23376: -23376: for (dimension_type curr_var = var_id, -23376: n_curr_var = n_var - 2; curr_var-- > 0; ) { -23376: Variable current(curr_var); -23376: linear_form_upper_bound(lf + current, upper_bound); -23376: assign_r(var_cv_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(lf - current, upper_bound); -23376: assign_r(var_cv_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf + current, upper_bound); -23376: assign_r(var_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf - current, upper_bound); -23376: assign_r(var_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED); -23376: n_curr_var -= 2; -23376: } -23376: for (dimension_type curr_var = var_id + 1; m_iter != m_end; ++m_iter) { -23376: row_reference m_v_ite = *m_iter; -23376: ++m_iter; -23376: row_reference m_cv_ite = *m_iter; -23376: Variable current(curr_var); -23376: linear_form_upper_bound(lf + current, upper_bound); -23376: assign_r(m_cv_ite[n_var], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(lf - current, upper_bound); -23376: assign_r(m_v_ite[n_var], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf + current, upper_bound); -23376: assign_r(m_cv_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf - current, upper_bound); -23376: assign_r(m_v_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED); -23376: ++curr_var; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lf_ub; N& lf_ub = holder_lf_ub.item(); -23376: linear_form_upper_bound(lf, lf_ub); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item(); -23376: linear_form_upper_bound(minus_lf, minus_lf_ub); -23376: mul_2exp_assign_r(lf_ub, lf_ub, 1, ROUND_UP); -23376: assign_r(matrix[n_var + 1][n_var], lf_ub, ROUND_NOT_NEEDED); -23376: mul_2exp_assign_r(minus_lf_ub, minus_lf_ub, 1, ROUND_UP); -23376: assign_r(matrix[n_var][n_var + 1], minus_lf_ub, ROUND_NOT_NEEDED); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape:: -23376: linear_form_upper_bound(const Linear_Form< Interval >& lf, -23376: N& result) const { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5779 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: const dimension_type lf_space_dimension = lf.space_dimension(); -23376: ((void) 0); -23376: -23376: typedef Interval FP_Interval_Type; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_lb; N& curr_lb = holder_curr_lb.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_ub; N& curr_ub = holder_curr_ub.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_negator; N& negator = holder_negator.item(); -23376: -23376: assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED); -23376: -23376: for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension; -23376: ++curr_var) { -23376: const FP_Interval_Type& curr_coefficient = -23376: lf.coefficient(Variable(curr_var)); -23376: assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (curr_lb != 0 || curr_ub != 0) { -23376: assign_r(curr_var_ub, matrix[n_var + 1][n_var], ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(curr_var_ub, curr_var_ub, 1, ROUND_UP); -23376: neg_assign_r(curr_minus_var_ub, matrix[n_var][n_var + 1], -23376: ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(curr_minus_var_ub, curr_minus_var_ub, 1, ROUND_DOWN); -23376: -23376: if (curr_lb == 1 && curr_ub == 1) { -23376: add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub), -23376: ROUND_UP); -23376: } -23376: else if (curr_lb == -1 && curr_ub == -1) { -23376: neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub), -23376: ROUND_NOT_NEEDED); -23376: add_assign_r(result, result, negator, ROUND_UP); -23376: } -23376: else { -23376: -23376: assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub, -23376: ROUND_UP); -23376: add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(result, result, first_comparison_term, ROUND_UP); -23376: } -23376: } -23376: -23376: n_var += 2; -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape:: -23376: interval_coefficient_upper_bound(const N& var_ub, const N& minus_var_ub, -23376: const N& int_ub, const N& int_lb, -23376: N& result) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5862 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_third_comparison_term; N& third_comparison_term = holder_third_comparison_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_fourth_comparison_term; N& fourth_comparison_term = holder_fourth_comparison_term.item(); -23376: -23376: assign_r(result, 0, ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: assign_r(third_comparison_term, 0, ROUND_NOT_NEEDED); -23376: assign_r(fourth_comparison_term, 0, ROUND_NOT_NEEDED); -23376: -23376: add_mul_assign_r(result, var_ub, int_ub, ROUND_UP); -23376: add_mul_assign_r(second_comparison_term, minus_var_ub, int_ub, ROUND_UP); -23376: add_mul_assign_r(third_comparison_term, var_ub, int_lb, ROUND_UP); -23376: add_mul_assign_r(fourth_comparison_term, minus_var_ub, int_lb, ROUND_UP); -23376: -23376: assign_r(result, std::max(result, second_comparison_term), ROUND_NOT_NEEDED); -23376: assign_r(result, std::max(result, third_comparison_term), ROUND_NOT_NEEDED); -23376: assign_r(result, std::max(result, fourth_comparison_term), ROUND_NOT_NEEDED); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::affine_preimage(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_preimage(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr); -23376: } -23376: -23376: -23376: dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", var_id + 1); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: -23376: dimension_type w_id = expr.last_nonzero(); -23376: -23376: if (w_id != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w_id)) { -23376: ++t; -23376: } -23376: --w_id; -23376: } -23376: # 5942 "../../src/Octagonal_Shape_templates.hh" -23376: if (t == 0) { -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& w_coeff = expr.coefficient(Variable(w_id)); -23376: if (w_coeff == denominator || w_coeff == -denominator) { -23376: -23376: if (w_id == var_id) { -23376: -23376: affine_image(var, denominator*var - b, w_coeff); -23376: } -23376: else { -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: ((void) 0); -23376: } -23376: return; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: const Coefficient& coeff_v = expr.coefficient(var); -23376: if (coeff_v != 0) { -23376: if (coeff_v > 0) { -23376: -23376: Linear_Expression inverse = ((coeff_v + denominator)*var); -23376: inverse -= expr; -23376: affine_image(var, inverse, coeff_v); -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_v; Parma_Polyhedra_Library::Coefficient& minus_coeff_v = holder_minus_coeff_v.item(); -23376: neg_assign(minus_coeff_v, coeff_v); -23376: Linear_Expression inverse = ((minus_coeff_v - denominator)*var); -23376: inverse += expr; -23376: affine_image(var, inverse, minus_coeff_v); -23376: } -23376: } -23376: else { -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: ((void) 0); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::generalized_affine_image(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr , -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", "e", -23376: expr); -23376: } -23376: -23376: -23376: dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", -23376: var_id + 1); -23376: } -23376: -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: if (relsym == EQUAL) { -23376: -23376: -23376: affine_image(var, expr, denominator); -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w_id = expr.last_nonzero(); -23376: -23376: if (w_id != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w_id)) { -23376: ++t; -23376: } -23376: --w_id; -23376: } -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: const dimension_type n_var = 2*var_id; -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED); -23376: # 6082 "../../src/Octagonal_Shape_templates.hh" -23376: if (t == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item(); -23376: two_b = 2*b; -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: -23376: reset_strongly_closed(); -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: -23376: add_octagonal_constraint(n_var + 1, n_var, two_b, denominator); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& w_coeff = expr.coefficient(Variable(w_id)); -23376: if (w_coeff == denominator || w_coeff == minus_denom) { -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: if (w_id == var_id) { -23376: -23376: -23376: reset_strongly_closed(); -23376: if (w_coeff == denominator) { -23376: -23376: -23376: -23376: row_iterator m_iter = m_begin + n_var; -23376: row_reference m_v = *m_iter; -23376: N& m_v_cv = m_v[n_var + 1]; -23376: ++m_iter; -23376: row_reference m_cv = *m_iter; -23376: N& m_cv_v = m_cv[n_var]; -23376: ++m_iter; -23376: -23376: for ( ; m_iter != m_end; ++m_iter) { -23376: row_reference m_i = *m_iter; -23376: N& m_i_v = m_i[n_var]; -23376: add_assign_r(m_i_v, m_i_v, d, ROUND_UP); -23376: assign_r(m_i[n_var + 1], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: for (dimension_type k = n_var; k-- > 0; ) { -23376: assign_r(m_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: add_assign_r(m_cv[k], m_cv[k], d, ROUND_UP); -23376: } -23376: mul_2exp_assign_r(d, d, 1, ROUND_UP); -23376: add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP); -23376: assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: -23376: -23376: N& m_v_cv = matrix[n_var][n_var + 1]; -23376: mul_2exp_assign_r(d, d, 1, ROUND_UP); -23376: add_assign_r(matrix[n_var + 1][n_var], m_v_cv, d, ROUND_UP); -23376: assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: forget_binary_octagonal_constraints(var_id); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: const dimension_type n_w = 2*w_id; -23376: if (w_coeff == denominator) { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var, b, denominator); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator); -23376: } -23376: } -23376: else { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var, b, denominator); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var + 1, n_w, b, denominator); -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: case GREATER_OR_EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, minus_denom); -23376: if (w_id == var_id) { -23376: -23376: -23376: reset_strongly_closed(); -23376: if (w_coeff == denominator) { -23376: -23376: -23376: -23376: row_iterator m_iter = m_begin + n_var; -23376: row_reference m_v = *m_iter; -23376: N& m_v_cv = m_v[n_var + 1]; -23376: ++m_iter; -23376: row_reference m_cv = *m_iter; -23376: N& m_cv_v = m_cv[n_var]; -23376: ++m_iter; -23376: -23376: for ( ; m_iter != m_end; ++m_iter) { -23376: row_reference m_i = *m_iter; -23376: assign_r(m_i[n_var], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: add_assign_r(m_i[n_var + 1], m_i[n_var + 1], d, ROUND_UP); -23376: } -23376: for (dimension_type k = n_var; k-- > 0; ) { -23376: add_assign_r(m_v[k], m_v[k], d, ROUND_UP); -23376: assign_r(m_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: mul_2exp_assign_r(d, d, 1, ROUND_UP); -23376: add_assign_r(m_v_cv, m_v_cv, d, ROUND_UP); -23376: assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: -23376: -23376: N& m_cv_v = matrix[n_var + 1][n_var]; -23376: mul_2exp_assign_r(d, d, 1, ROUND_UP); -23376: add_assign_r(matrix[n_var][n_var + 1], m_cv_v, d, ROUND_UP); -23376: assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: forget_binary_octagonal_constraints(var_id); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: const dimension_type n_w = 2*w_id; -23376: -23376: -23376: -23376: -23376: if (w_coeff == denominator) { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w, b, minus_denom); -23376: } -23376: } -23376: else { -23376: -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w + 1, b, minus_denom); -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: # 6281 "../../src/Octagonal_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: -23376: dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pinf_count = 0; -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: { -23376: -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_approx_i; N& approx_i = holder_approx_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: Row_reference m_i = *m_iter; -23376: ++m_iter; -23376: Row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i == 0) { -23376: continue; -23376: } -23376: -23376: const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1]; -23376: if (is_plus_infinity(double_approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = id; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: reset_strongly_closed(); -23376: -23376: if (pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_sum; N& double_sum = holder_double_sum.item(); -23376: mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP); -23376: matrix[n_var + 1][n_var] = double_sum; -23376: -23376: deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (pinf_index != var_id) { -23376: const Coefficient& pi = expr.coefficient(Variable(pinf_index)); -23376: if (pi == denominator ) { -23376: -23376: if (var_id < pinf_index) { -23376: matrix[2*pinf_index][n_var] = sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pinf_index + 1] = sum; -23376: } -23376: } -23376: else { -23376: if (pi == minus_denom) { -23376: -23376: if (var_id < pinf_index) { -23376: matrix[2*pinf_index + 1][n_var] = sum; -23376: } -23376: else { -23376: matrix[n_var + 1][2*pinf_index] = sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: case GREATER_OR_EQUAL: -23376: { -23376: -23376: -23376: -23376: -23376: -23376: assign_r(sum, minus_sc_b, ROUND_UP); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_approx_i; N& approx_i = holder_approx_i.item(); -23376: -23376: for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: Row_reference m_i = *m_iter; -23376: ++m_iter; -23376: Row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i == 0) { -23376: continue; -23376: } -23376: -23376: const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i]; -23376: if (is_plus_infinity(double_approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = id; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: reset_strongly_closed(); -23376: -23376: if (pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_sum; N& double_sum = holder_double_sum.item(); -23376: mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP); -23376: matrix[n_var][n_var + 1] = double_sum; -23376: -23376: deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (pinf_index != var_id) { -23376: const Coefficient& pi = expr.coefficient(Variable(pinf_index)); -23376: if (pi == denominator) { -23376: -23376: -23376: if (pinf_index < var_id) { -23376: matrix[n_var][2*pinf_index] = sum; -23376: } -23376: else { -23376: matrix[2*pinf_index + 1][n_var + 1] = sum; -23376: } -23376: } -23376: else { -23376: if (pi == minus_denom) { -23376: -23376: -23376: if (pinf_index < var_id) { -23376: matrix[n_var][2*pinf_index + 1] = sum; -23376: } -23376: else { -23376: matrix[2*pinf_index][n_var + 1] = sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: break; -23376: } -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: incremental_strong_closure_assign(var); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::generalized_affine_image(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: dimension_type lhs_space_dim = lhs.space_dimension(); -23376: if (space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type t_lhs = 0; -23376: -23376: dimension_type j_lhs = lhs.last_nonzero(); -23376: -23376: if (j_lhs != 0) { -23376: ++t_lhs; -23376: if (!lhs.all_zeroes(1, j_lhs)) { -23376: ++t_lhs; -23376: } -23376: --j_lhs; -23376: } -23376: -23376: const Coefficient& b_lhs = lhs.inhomogeneous_term(); -23376: -23376: if (t_lhs == 0) { -23376: # 6583 "../../src/Octagonal_Shape_templates.hh" -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: -23376: else if (t_lhs == 1) { -23376: -23376: -23376: -23376: Variable v(j_lhs); -23376: -23376: const Coefficient& denom = lhs.coefficient(v); -23376: Relation_Symbol new_relsym = relsym; -23376: if (denom < 0) { -23376: if (relsym == LESS_OR_EQUAL) { -23376: new_relsym = GREATER_OR_EQUAL; -23376: } -23376: else if (relsym == GREATER_OR_EQUAL) { -23376: new_relsym = LESS_OR_EQUAL; -23376: } -23376: } -23376: Linear_Expression expr = rhs - b_lhs; -23376: generalized_affine_image(v, new_relsym, expr, denom); -23376: } -23376: else { -23376: -23376: -23376: std::vector lhs_vars; -23376: for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end(); -23376: i != i_end; ++i) { -23376: lhs_vars.push_back(i.variable()); -23376: } -23376: -23376: const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim); -23376: if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) { -23376: -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: dimension_type lhs_vars_i = lhs_vars[i].id(); -23376: forget_all_octagonal_constraints(lhs_vars_i); -23376: } -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: dimension_type lhs_vars_i = lhs_vars[i].id(); -23376: forget_all_octagonal_constraints(lhs_vars_i); -23376: } -23376: # 6711 "../../src/Octagonal_Shape_templates.hh" -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::bounded_affine_image(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: var_id + 1); -23376: } -23376: -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w_id = lb_expr.last_nonzero(); -23376: -23376: if (w_id != 0) { -23376: ++t; -23376: if (!lb_expr.all_zeroes(1, w_id)) { -23376: ++t; -23376: } -23376: --w_id; -23376: } -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const dimension_type n_var = 2*var_id; -23376: const Coefficient& b = lb_expr.inhomogeneous_term(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED); -23376: # 6788 "../../src/Octagonal_Shape_templates.hh" -23376: if (t == 0) { -23376: -23376: generalized_affine_image(var, -23376: LESS_OR_EQUAL, -23376: ub_expr, -23376: denominator); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item(); -23376: two_b = 2*b; -23376: -23376: add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& w_coeff = lb_expr.coefficient(Variable(w_id)); -23376: if (w_coeff == denominator || w_coeff == minus_denom) { -23376: -23376: if (w_id == var_id) { -23376: -23376: -23376: const Variable new_var(space_dim); -23376: add_space_dimensions_and_embed(1); -23376: -23376: -23376: affine_image(new_var, lb_expr, denominator); -23376: -23376: strong_closure_assign(); -23376: ((void) 0); -23376: -23376: generalized_affine_image(var, -23376: LESS_OR_EQUAL, -23376: ub_expr, -23376: denominator); -23376: -23376: refine_no_check(var >= new_var); -23376: -23376: remove_higher_space_dimensions(space_dim-1); -23376: return; -23376: } -23376: else { -23376: -23376: generalized_affine_image(var, -23376: LESS_OR_EQUAL, -23376: ub_expr, -23376: denominator); -23376: -23376: -23376: const dimension_type n_w = 2*w_id; -23376: -23376: if (w_coeff == denominator) { -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w, b, minus_denom); -23376: } -23376: } -23376: else { -23376: -23376: if (var_id < w_id) { -23376: add_octagonal_constraint(n_w, n_var + 1, b, minus_denom); -23376: } -23376: else { -23376: add_octagonal_constraint(n_var, n_w + 1, b, minus_denom); -23376: } -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: } -23376: # 6874 "../../src/Octagonal_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign_r(minus_b, b, ROUND_NOT_NEEDED); -23376: -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -lb_expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? lb_expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_sum; N& neg_sum = holder_neg_sum.item(); -23376: -23376: dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type neg_pinf_count = 0; -23376: -23376: -23376: assign_r(neg_sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2); -23376: m_iter != m_iter_end; ) { -23376: const dimension_type n_i = m_iter.index(); -23376: const dimension_type id = n_i/2; -23376: Row_reference m_i = *m_iter; -23376: ++m_iter; -23376: Row_reference m_ci = *m_iter; -23376: ++m_iter; -23376: const Coefficient& sc_i = sc_expr.coefficient(Variable(id)); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_up_approx_minus_i = m_i[n_i + 1]; -23376: if (!is_plus_infinity(double_up_approx_minus_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: else if (sign_i < 0) { -23376: neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED); -23376: assign_r(minus_coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& double_up_approx_i = m_ci[n_i]; -23376: if (!is_plus_infinity(double_up_approx_i)) { -23376: -23376: div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP); -23376: add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = id; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: generalized_affine_image(var, -23376: LESS_OR_EQUAL, -23376: ub_expr, -23376: denominator); -23376: -23376: -23376: if (neg_pinf_count > 1) { -23376: return; -23376: } -23376: -23376: -23376: reset_strongly_closed(); -23376: -23376: -23376: if (neg_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (neg_pinf_count == 0) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item(); -23376: mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP); -23376: matrix[n_var][n_var + 1] = double_neg_sum; -23376: -23376: deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum); -23376: } -23376: else -23376: -23376: if (neg_pinf_index != var_id) { -23376: const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index)); -23376: if (npi == sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum; -23376: } -23376: } -23376: else { -23376: if (npi == minus_sc_denom) { -23376: -23376: -23376: if (neg_pinf_index < var_id) { -23376: matrix[n_var][2*neg_pinf_index + 1] = neg_sum; -23376: } -23376: else { -23376: matrix[2*neg_pinf_index][n_var + 1] = neg_sum; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::generalized_affine_preimage(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: "e", expr); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: var_id + 1); -23376: } -23376: -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: if (relsym == EQUAL) { -23376: -23376: -23376: affine_preimage(var, expr, denominator); -23376: return; -23376: } -23376: -23376: -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: const Coefficient& expr_v = expr.coefficient(var); -23376: if (expr_v != 0) { -23376: const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL) -23376: ? GREATER_OR_EQUAL : LESS_OR_EQUAL; -23376: const Linear_Expression inverse -23376: = expr - (expr_v + denominator)*var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item(); -23376: neg_assign(inverse_denom, expr_v); -23376: const Relation_Symbol inverse_relsym -23376: = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym; -23376: generalized_affine_image(var, inverse_relsym, inverse, inverse_denom); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: refine(var, relsym, expr, denominator); -23376: -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: forget_all_octagonal_constraints(var_id); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::generalized_affine_preimage(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: dimension_type lhs_space_dim = lhs.space_dimension(); -23376: if (space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_preimage(e1, r, e2)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_preimage(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: dimension_type t_lhs = 0; -23376: -23376: dimension_type j_lhs = lhs.last_nonzero(); -23376: -23376: if (j_lhs != 0) { -23376: ++t_lhs; -23376: if (!lhs.all_zeroes(1, j_lhs)) { -23376: ++t_lhs; -23376: } -23376: --j_lhs; -23376: } -23376: -23376: const Coefficient& b_lhs = lhs.inhomogeneous_term(); -23376: -23376: -23376: -23376: if (t_lhs == 0) { -23376: generalized_affine_image(lhs, relsym, rhs); -23376: return; -23376: } -23376: -23376: else if (t_lhs == 1) { -23376: -23376: -23376: -23376: Variable v(j_lhs); -23376: -23376: const Coefficient& denom = lhs.coefficient(v); -23376: Relation_Symbol new_relsym = relsym; -23376: if (denom < 0) { -23376: if (relsym == LESS_OR_EQUAL) { -23376: new_relsym = GREATER_OR_EQUAL; -23376: } -23376: else if (relsym == GREATER_OR_EQUAL) { -23376: new_relsym = LESS_OR_EQUAL; -23376: } -23376: } -23376: Linear_Expression expr = rhs - b_lhs; -23376: generalized_affine_preimage(v, new_relsym, expr, denom); -23376: } -23376: -23376: else { -23376: -23376: -23376: std::vector lhs_vars; -23376: for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end(); -23376: i != i_end; ++i) { -23376: lhs_vars.push_back(i.variable()); -23376: } -23376: -23376: const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim); -23376: if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) { -23376: -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: dimension_type lhs_vars_i = lhs_vars[i].id(); -23376: forget_all_octagonal_constraints(lhs_vars_i); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: -23376: -23376: const Variable new_var(space_dim); -23376: add_space_dimensions_and_embed(1); -23376: -23376: -23376: -23376: -23376: affine_image(new_var, lhs); -23376: -23376: -23376: strong_closure_assign(); -23376: ((void) 0); -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: dimension_type lhs_vars_i = lhs_vars[i].id(); -23376: forget_all_octagonal_constraints(lhs_vars_i); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(new_var <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(new_var == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(new_var >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: remove_higher_space_dimensions(space_dim-1); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::bounded_affine_preimage(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type var_id = var.id(); -23376: if (space_dim < var_id + 1) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: var_id + 1); -23376: } -23376: -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: if (ub_expr.coefficient(var) == 0) { -23376: refine(var, LESS_OR_EQUAL, ub_expr, denominator); -23376: generalized_affine_preimage(var, GREATER_OR_EQUAL, -23376: lb_expr, denominator); -23376: return; -23376: } -23376: if (lb_expr.coefficient(var) == 0) { -23376: refine(var, GREATER_OR_EQUAL, lb_expr, denominator); -23376: generalized_affine_preimage(var, LESS_OR_EQUAL, -23376: ub_expr, denominator); -23376: return; -23376: } -23376: -23376: const Coefficient& expr_v = lb_expr.coefficient(var); -23376: -23376: -23376: const Variable new_var(space_dim); -23376: add_space_dimensions_and_embed(1); -23376: const Linear_Expression lb_inverse -23376: = lb_expr - (expr_v + denominator)*var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item(); -23376: neg_assign(inverse_denom, expr_v); -23376: affine_image(new_var, lb_inverse, inverse_denom); -23376: strong_closure_assign(); -23376: ((void) 0); -23376: generalized_affine_preimage(var, LESS_OR_EQUAL, -23376: ub_expr, denominator); -23376: if (sgn(denominator) == sgn(inverse_denom)) { -23376: refine_no_check(var >= new_var) ; -23376: } -23376: else { -23376: refine_no_check(var <= new_var); -23376: } -23376: -23376: remove_higher_space_dimensions(space_dim-1); -23376: } -23376: -23376: template -23376: Constraint_System -23376: Octagonal_Shape::constraints() const { -23376: Constraint_System cs; -23376: cs.set_space_dimension(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cs = Constraint_System::zero_dim_empty(); -23376: } -23376: return cs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cs.insert(Constraint::zero_dim_false()); -23376: return cs; -23376: } -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: -23376: row_iterator m_begin = matrix.row_begin(); -23376: row_iterator m_end = matrix.row_end(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item(); -23376: -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ) { -23376: const dimension_type i = i_iter.index(); -23376: const Variable x(i/2); -23376: const N& c_i_ii = (*i_iter)[i + 1]; -23376: ++i_iter; -23376: const N& c_ii_i = (*i_iter)[i]; -23376: ++i_iter; -23376: -23376: if (is_additive_inverse(c_i_ii, c_ii_i)) { -23376: -23376: numer_denom(c_ii_i, b, a); -23376: a *= 2; -23376: cs.insert(a*x == b); -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_ii)) { -23376: numer_denom(c_i_ii, b, a); -23376: a *= 2; -23376: cs.insert(-a*x <= b); -23376: } -23376: if (!is_plus_infinity(c_ii_i)) { -23376: numer_denom(c_ii_i, b, a); -23376: a *= 2; -23376: cs.insert(a*x <= b); -23376: } -23376: } -23376: } -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ) { -23376: const dimension_type i = i_iter.index(); -23376: row_reference r_i = *i_iter; -23376: ++i_iter; -23376: row_reference r_ii = *i_iter; -23376: ++i_iter; -23376: const Variable y(i/2); -23376: for (dimension_type j = 0; j < i; j += 2) { -23376: const N& c_i_j = r_i[j]; -23376: const N& c_ii_jj = r_ii[j + 1]; -23376: const Variable x(j/2); -23376: if (is_additive_inverse(c_ii_jj, c_i_j)) { -23376: -23376: numer_denom(c_i_j, b, a); -23376: cs.insert(a*x - a*y == b); -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_j)) { -23376: numer_denom(c_i_j, b, a); -23376: cs.insert(a*x - a*y <= b); -23376: } -23376: if (!is_plus_infinity(c_ii_jj)) { -23376: numer_denom(c_ii_jj, b, a); -23376: cs.insert(a*y - a*x <= b); -23376: } -23376: } -23376: -23376: const N& c_ii_j = r_ii[j]; -23376: const N& c_i_jj = r_i[j + 1]; -23376: if (is_additive_inverse(c_i_jj, c_ii_j)) { -23376: -23376: numer_denom(c_ii_j, b, a); -23376: cs.insert(a*x + a*y == b); -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_jj)) { -23376: numer_denom(c_i_jj, b, a); -23376: cs.insert(-a*x - a*y <= b); -23376: } -23376: if (!is_plus_infinity(c_ii_j)) { -23376: numer_denom(c_ii_j, b, a); -23376: cs.insert(a*x + a*y <= b); -23376: } -23376: } -23376: } -23376: } -23376: return cs; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::expand_space_dimension(Variable var, dimension_type m) { -23376: -23376: const dimension_type var_id = var.id(); -23376: if (var_id + 1 > space_dim) { -23376: throw_dimension_incompatible("expand_space_dimension(v, m)", var_id + 1); -23376: } -23376: -23376: -23376: -23376: if (m > max_space_dimension() - space_dim) { -23376: throw_invalid_argument("expand_dimension(v, m)", -23376: "adding m new space dimensions exceeds " -23376: "the maximum allowed space dimension"); -23376: } -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: -23376: const dimension_type old_num_rows = matrix.num_rows(); -23376: -23376: -23376: add_space_dimensions_and_embed(m); -23376: -23376: -23376: -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: typedef typename OR_Matrix::const_row_iterator Row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type Row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: const row_iterator m_end = matrix.row_end(); -23376: const dimension_type n_var = 2*var_id; -23376: Row_iterator v_iter = m_begin + n_var; -23376: Row_reference m_v = *v_iter; -23376: Row_reference m_cv = *(v_iter + 1); -23376: -23376: for (row_iterator i_iter = m_begin + old_num_rows; i_iter != m_end; -23376: i_iter += 2) { -23376: row_reference m_i = *i_iter; -23376: row_reference m_ci = *(i_iter + 1); -23376: const dimension_type i = i_iter.index(); -23376: const dimension_type ci = i + 1; -23376: m_i[ci] = m_v[n_var + 1]; -23376: m_ci[i] = m_cv[n_var]; -23376: for (dimension_type j = 0; j < n_var; ++j) { -23376: m_i[j] = m_v[j]; -23376: m_ci[j] = m_cv[j]; -23376: } -23376: for (dimension_type j = n_var + 2; j < old_num_rows; ++j) { -23376: row_iterator j_iter = m_begin + j; -23376: row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1); -23376: m_i[j] = m_cj[n_var + 1]; -23376: m_ci[j] = m_cj[n_var]; -23376: } -23376: } -23376: -23376: -23376: if (marked_strongly_closed()) { -23376: reset_strongly_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::fold_space_dimensions(const Variables_Set& vars, -23376: Variable dest) { -23376: -23376: if (dest.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest); -23376: } -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: if (vars.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", -23376: vars.space_dimension()); -23376: } -23376: -23376: -23376: if (vars.find(dest.id()) != vars.end()) { -23376: throw_invalid_argument("fold_space_dimensions(vs, v)", -23376: "v should not occur in vs"); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: typedef typename OR_Matrix::row_iterator row_iterator; -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: -23376: const row_iterator m_begin = matrix.row_begin(); -23376: -23376: strong_closure_assign(); -23376: const dimension_type n_rows = matrix.num_rows(); -23376: const dimension_type n_dest = 2*dest.id(); -23376: row_iterator v_iter = m_begin + n_dest; -23376: row_reference m_v = *v_iter; -23376: row_reference m_cv = *(v_iter + 1); -23376: for (Variables_Set::const_iterator i = vars.begin(), -23376: vs_end = vars.end(); i != vs_end; ++i) { -23376: const dimension_type tbf_id = *i; -23376: const dimension_type tbf_var = 2*tbf_id; -23376: row_iterator tbf_iter = m_begin + tbf_var; -23376: row_reference m_tbf = *tbf_iter; -23376: row_reference m_ctbf = *(tbf_iter + 1); -23376: max_assign(m_v[n_dest + 1], m_tbf[tbf_var + 1]); -23376: max_assign(m_cv[n_dest], m_ctbf[tbf_var]); -23376: -23376: const dimension_type min_id = std::min(n_dest, tbf_var); -23376: const dimension_type max_id = std::max(n_dest, tbf_var); -23376: -23376: using namespace Implementation::Octagonal_Shapes; -23376: for (dimension_type j = 0; j < min_id; ++j) { -23376: const dimension_type cj = coherent_index(j); -23376: max_assign(m_v[j], m_tbf[j]); -23376: max_assign(m_cv[j], m_ctbf[j]); -23376: max_assign(m_cv[cj], m_ctbf[cj]); -23376: max_assign(m_v[cj], m_tbf[cj]); -23376: } -23376: for (dimension_type j = min_id + 2; j < max_id; ++j) { -23376: const dimension_type cj = coherent_index(j); -23376: row_iterator j_iter = m_begin + j; -23376: row_reference m_j = *j_iter; -23376: row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1); -23376: if (n_dest == min_id) { -23376: max_assign(m_cj[n_dest + 1], m_tbf[j]); -23376: max_assign(m_cj[n_dest], m_ctbf[j]); -23376: max_assign(m_j[n_dest], m_ctbf[cj]); -23376: max_assign(m_j[n_dest + 1], m_tbf[cj]); -23376: } -23376: else { -23376: max_assign(m_v[j], m_cj[tbf_var + 1]); -23376: max_assign(m_cv[j], m_cj[tbf_var]); -23376: max_assign(m_cv[cj], m_j[tbf_var]); -23376: max_assign(m_v[cj], m_j[tbf_var + 1]); -23376: } -23376: } -23376: for (dimension_type j = max_id + 2; j < n_rows; ++j) { -23376: row_iterator j_iter = m_begin + j; -23376: row_reference m_j = *j_iter; -23376: row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1); -23376: max_assign(m_cj[n_dest + 1], m_cj[tbf_var + 1]); -23376: max_assign(m_cj[n_dest], m_cj[tbf_var]); -23376: max_assign(m_j[n_dest], m_j[tbf_var]); -23376: max_assign(m_j[n_dest + 1], m_j[tbf_var + 1]); -23376: } -23376: } -23376: remove_space_dimensions(vars); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::upper_bound_assign_if_exact(const Octagonal_Shape& y) { -23376: -23376: -23376: -23376: const Octagonal_Shape& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y); -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: upper_bound_assign(y); -23376: return true; -23376: } -23376: -23376: if (x.marked_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: else if (y.is_empty()) { -23376: return true; -23376: } -23376: else if (x.is_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: Octagonal_Shape ub(x); -23376: ub.upper_bound_assign(y); -23376: -23376: -23376: -23376: std::vector x_non_red; -23376: x.non_redundant_matrix_entries(x_non_red); -23376: std::vector y_non_red; -23376: y.non_redundant_matrix_entries(y_non_red); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs; N& lhs = holder_lhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_rhs; N& rhs = holder_rhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_zero; N& temp_zero = holder_temp_zero.item(); -23376: assign_r(temp_zero, 0, ROUND_NOT_NEEDED); -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: const dimension_type n_rows = x.matrix.num_rows(); -23376: const row_iterator x_m_begin = x.matrix.row_begin(); -23376: const row_iterator y_m_begin = y.matrix.row_begin(); -23376: const row_iterator ub_m_begin = ub.matrix.row_begin(); -23376: -23376: for (dimension_type i = n_rows; i-- > 0; ) { -23376: const Bit_Row& x_non_red_i = x_non_red[i]; -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type ci = coherent_index(i); -23376: const dimension_type row_size_i = OR_Matrix::row_size(i); -23376: row_reference x_i = *(x_m_begin + i); -23376: row_reference y_i = *(y_m_begin + i); -23376: row_reference ub_i = *(ub_m_begin + i); -23376: const N& ub_i_ci = ub_i[ci]; -23376: for (dimension_type j = row_size_i; j-- > 0; ) { -23376: -23376: if (!x_non_red_i[j]) { -23376: continue; -23376: } -23376: const N& x_i_j = x_i[j]; -23376: -23376: if (x_i_j >= y_i[j]) { -23376: continue; -23376: } -23376: -23376: const dimension_type cj = coherent_index(j); -23376: const dimension_type row_size_cj = OR_Matrix::row_size(cj); -23376: row_reference ub_cj = *(ub_m_begin + cj); -23376: const N& ub_cj_j = ub_cj[j]; -23376: for (dimension_type k = 0; k < n_rows; ++k) { -23376: const Bit_Row& y_non_red_k = y_non_red[k]; -23376: const dimension_type ck = coherent_index(k); -23376: const dimension_type row_size_k = OR_Matrix::row_size(k); -23376: row_reference x_k = *(x_m_begin + k); -23376: row_reference y_k = *(y_m_begin + k); -23376: row_reference ub_k = *(ub_m_begin + k); -23376: const N& ub_k_ck = ub_k[ck]; -23376: -23376: -23376: -23376: const N& ub_k_j -23376: = (k == j) -23376: ? temp_zero -23376: : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]); -23376: const N& ub_i_ck -23376: = (i == ck) -23376: ? temp_zero -23376: : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]); -23376: -23376: for (dimension_type ell = row_size_k; ell-- > 0; ) { -23376: -23376: if (!y_non_red_k[ell]) { -23376: continue; -23376: } -23376: const N& y_k_ell = y_k[ell]; -23376: -23376: if (y_k_ell >= x_k[ell]) { -23376: continue; -23376: } -23376: const dimension_type cell = coherent_index(ell); -23376: row_reference ub_cell = *(ub_m_begin + cell); -23376: const N& ub_i_ell -23376: = (i == ell) -23376: ? temp_zero -23376: : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]); -23376: const N& ub_cj_ell -23376: = (cj == ell) -23376: ? temp_zero -23376: : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]); -23376: -23376: add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP); -23376: add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP); -23376: if (lhs >= rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_UP); -23376: if (lhs >= rhs) { -23376: continue; -23376: } -23376: -23376: assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED); -23376: add_assign_r(lhs, lhs_copy, x_i_j, ROUND_UP); -23376: add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_UP); -23376: add_assign_r(rhs, rhs, ub_cj_j, ROUND_UP); -23376: if (lhs >= rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_UP); -23376: add_assign_r(rhs, rhs, ub_i_ci, ROUND_UP); -23376: if (lhs >= rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(lhs, lhs_copy, y_k_ell, ROUND_UP); -23376: add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_UP); -23376: add_assign_r(rhs, rhs, ub_k_ck, ROUND_UP); -23376: if (lhs >= rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_UP); -23376: add_assign_r(rhs, rhs, ub_cell[ell], ROUND_UP); -23376: if (lhs < rhs) { -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: m_swap(ub); -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape -23376: ::integer_upper_bound_assign_if_exact(const Octagonal_Shape& y) { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_7801 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits::is_integer)>) } -23376: -23376: -23376: ; -23376: -23376: const Octagonal_Shape& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y); -23376: } -23376: -23376: if (x_space_dim == 0) { -23376: upper_bound_assign(y); -23376: return true; -23376: } -23376: -23376: -23376: -23376: if (x.marked_empty()) { -23376: *this = y; -23376: tight_closure_assign(); -23376: return true; -23376: } -23376: else if (y.marked_empty()) { -23376: tight_closure_assign(); -23376: return true; -23376: } -23376: else if (x.is_empty() || x.tight_coherence_would_make_empty()) { -23376: *this = y; -23376: tight_closure_assign(); -23376: return true; -23376: } -23376: else if (y.is_empty() || y.tight_coherence_would_make_empty()) { -23376: tight_closure_assign(); -23376: return true; -23376: } -23376: -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: Octagonal_Shape tx(x); -23376: tx.tight_closure_assign(); -23376: Octagonal_Shape ty(y); -23376: ty.tight_closure_assign(); -23376: Octagonal_Shape ub(tx); -23376: ub.upper_bound_assign(ty); -23376: -23376: -23376: -23376: -23376: -23376: std::vector tx_non_red; -23376: tx.non_redundant_matrix_entries(tx_non_red); -23376: std::vector ty_non_red; -23376: ty.non_redundant_matrix_entries(ty_non_red); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs_i_j; N& lhs_i_j = holder_lhs_i_j.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs_k_ell; N& lhs_k_ell = holder_lhs_k_ell.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs; N& lhs = holder_lhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_rhs; N& rhs = holder_rhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_zero; N& temp_zero = holder_temp_zero.item(); -23376: assign_r(temp_zero, 0, ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_one; N& temp_one = holder_temp_one.item(); -23376: assign_r(temp_one, 1, ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_two; N& temp_two = holder_temp_two.item(); -23376: assign_r(temp_two, 2, ROUND_NOT_NEEDED); -23376: -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: const dimension_type n_rows = tx.matrix.num_rows(); -23376: const row_iterator tx_m_begin = tx.matrix.row_begin(); -23376: const row_iterator ty_m_begin = ty.matrix.row_begin(); -23376: const row_iterator ub_m_begin = ub.matrix.row_begin(); -23376: -23376: for (dimension_type i = n_rows; i-- > 0; ) { -23376: const Bit_Row& tx_non_red_i = tx_non_red[i]; -23376: using namespace Implementation::Octagonal_Shapes; -23376: const dimension_type ci = coherent_index(i); -23376: const dimension_type row_size_i = OR_Matrix::row_size(i); -23376: row_reference tx_i = *(tx_m_begin + i); -23376: row_reference ty_i = *(ty_m_begin + i); -23376: row_reference ub_i = *(ub_m_begin + i); -23376: const N& ub_i_ci = ub_i[ci]; -23376: for (dimension_type j = row_size_i; j-- > 0; ) { -23376: -23376: if (!tx_non_red_i[j]) { -23376: continue; -23376: } -23376: const N& tx_i_j = tx_i[j]; -23376: const dimension_type cj = coherent_index(j); -23376: const N& eps_i_j = (i == cj) ? temp_two : temp_one; -23376: -23376: add_assign_r(lhs_i_j, tx_i_j, eps_i_j, ROUND_NOT_NEEDED); -23376: if (lhs_i_j > ty_i[j]) { -23376: continue; -23376: } -23376: const dimension_type row_size_cj = OR_Matrix::row_size(cj); -23376: row_reference ub_cj = *(ub_m_begin + cj); -23376: const N& ub_cj_j = ub_cj[j]; -23376: for (dimension_type k = 0; k < n_rows; ++k) { -23376: const Bit_Row& ty_non_red_k = ty_non_red[k]; -23376: const dimension_type ck = coherent_index(k); -23376: const dimension_type row_size_k = OR_Matrix::row_size(k); -23376: row_reference tx_k = *(tx_m_begin + k); -23376: row_reference ty_k = *(ty_m_begin + k); -23376: row_reference ub_k = *(ub_m_begin + k); -23376: const N& ub_k_ck = ub_k[ck]; -23376: -23376: -23376: -23376: const N& ub_k_j -23376: = (k == j) -23376: ? temp_zero -23376: : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]); -23376: const N& ub_i_ck -23376: = (i == ck) -23376: ? temp_zero -23376: : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]); -23376: -23376: for (dimension_type ell = row_size_k; ell-- > 0; ) { -23376: -23376: if (!ty_non_red_k[ell]) { -23376: continue; -23376: } -23376: const N& ty_k_ell = ty_k[ell]; -23376: const dimension_type cell = coherent_index(ell); -23376: const N& eps_k_ell = (k == cell) ? temp_two : temp_one; -23376: -23376: add_assign_r(lhs_k_ell, ty_k_ell, eps_k_ell, ROUND_NOT_NEEDED); -23376: if (lhs_k_ell > tx_k[ell]) { -23376: continue; -23376: } -23376: row_reference ub_cell = *(ub_m_begin + cell); -23376: const N& ub_i_ell -23376: = (i == ell) -23376: ? temp_zero -23376: : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]); -23376: const N& ub_cj_ell -23376: = (cj == ell) -23376: ? temp_zero -23376: : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]); -23376: -23376: add_assign_r(lhs, lhs_i_j, lhs_k_ell, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_NOT_NEEDED); -23376: if (lhs > rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_NOT_NEEDED); -23376: if (lhs > rhs) { -23376: continue; -23376: } -23376: -23376: assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED); -23376: add_assign_r(lhs, lhs, lhs_i_j, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, rhs, ub_cj_j, ROUND_NOT_NEEDED); -23376: if (lhs > rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, rhs, ub_i_ci, ROUND_NOT_NEEDED); -23376: if (lhs > rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(lhs, lhs_copy, lhs_k_ell, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, rhs, ub_k_ck, ROUND_NOT_NEEDED); -23376: if (lhs > rhs) { -23376: continue; -23376: } -23376: -23376: add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_NOT_NEEDED); -23376: add_assign_r(rhs, rhs, ub_cell[ell], ROUND_NOT_NEEDED); -23376: if (lhs <= rhs) { -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: m_swap(ub); -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::drop_some_non_integer_points(Complexity_Class) { -23376: if (std::numeric_limits::is_integer) { -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: if (space_dim == 0 || marked_empty()) { -23376: return; -23376: } -23376: -23376: for (typename OR_Matrix::element_iterator i = matrix.element_begin(), -23376: i_end = matrix.element_end(); i != i_end; ++i) { -23376: drop_some_non_integer_points_helper(*i); -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_one; N& temp_one = holder_temp_one.item(); -23376: assign_r(temp_one, 1, ROUND_NOT_NEEDED); -23376: for (dimension_type i = 0; i < 2*space_dim; i += 2) { -23376: const dimension_type ci = i + 1; -23376: N& mat_i_ci = matrix[i][ci]; -23376: if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) { -23376: sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP); -23376: reset_strongly_closed(); -23376: } -23376: N& mat_ci_i = matrix[ci][i]; -23376: if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) { -23376: sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP); -23376: reset_strongly_closed(); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class) { -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dimension() < min_space_dim) { -23376: throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)", -23376: min_space_dim); -23376: } -23376: -23376: if (std::numeric_limits::is_integer || min_space_dim == 0) { -23376: return; -23376: } -23376: -23376: strong_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_one; N& temp_one = holder_temp_one.item(); -23376: assign_r(temp_one, 1, ROUND_NOT_NEEDED); -23376: -23376: const Variables_Set::const_iterator v_begin = vars.begin(); -23376: const Variables_Set::const_iterator v_end = vars.end(); -23376: ((void) 0); -23376: typedef typename OR_Matrix::row_reference_type row_reference; -23376: for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) { -23376: const dimension_type i = 2 * (*v_i); -23376: const dimension_type ci = i + 1; -23376: row_reference m_i = matrix[i]; -23376: row_reference m_ci = matrix[ci]; -23376: -23376: -23376: N& m_i_ci = m_i[ci]; -23376: if (!is_plus_infinity(m_i_ci)) { -23376: drop_some_non_integer_points_helper(m_i_ci); -23376: if (!is_even(m_i_ci)) { -23376: sub_assign_r(m_i_ci, m_i_ci, temp_one, ROUND_UP); -23376: reset_strongly_closed(); -23376: } -23376: } -23376: N& m_ci_i = m_ci[i]; -23376: if (!is_plus_infinity(m_ci_i)) { -23376: drop_some_non_integer_points_helper(m_ci_i); -23376: if (!is_even(m_ci_i)) { -23376: sub_assign_r(m_ci_i, m_ci_i, temp_one, ROUND_UP); -23376: reset_strongly_closed(); -23376: } -23376: } -23376: -23376: -23376: for (Variables_Set::const_iterator v_j = v_begin; v_j != v_i; ++v_j) { -23376: const dimension_type j = 2 * (*v_j); -23376: const dimension_type cj = j + 1; -23376: drop_some_non_integer_points_helper(m_i[j]); -23376: drop_some_non_integer_points_helper(m_i[cj]); -23376: drop_some_non_integer_points_helper(m_ci[j]); -23376: drop_some_non_integer_points_helper(m_ci[cj]); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape -23376: ::export_interval_constraints(U& dest) const { -23376: if (space_dim > dest.space_dimension()) { -23376: throw std::invalid_argument( -23376: "Octagonal_Shape::export_interval_constraints"); -23376: } -23376: -23376: strong_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: dest.set_empty(); -23376: return; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lb; N& lb = holder_lb.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub; N& ub = holder_ub.item(); -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: const dimension_type ii = 2*i; -23376: const dimension_type cii = ii + 1; -23376: -23376: -23376: const N& twice_ub = matrix[cii][ii]; -23376: if (!is_plus_infinity(twice_ub)) { -23376: assign_r(ub, twice_ub, ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(ub, ub, 1, ROUND_UP); -23376: -23376: if (!dest.restrict_upper(i, ub.raw_value())) { -23376: return; -23376: } -23376: } -23376: -23376: -23376: const N& twice_lb = matrix[ii][cii]; -23376: if (!is_plus_infinity(twice_lb)) { -23376: assign_r(lb, twice_lb, ROUND_NOT_NEEDED); -23376: neg_assign_r(lb, lb, ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(lb, lb, 1, ROUND_DOWN); -23376: -23376: if (!dest.restrict_lower(i, lb.raw_value())) { -23376: return; -23376: } -23376: } -23376: } -23376: -23376: } -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const Octagonal_Shape& oct) { -23376: -23376: if (oct.marked_empty()) { -23376: s << "false"; -23376: return s; -23376: } -23376: if (oct.is_universe()) { -23376: s << "true"; -23376: return s; -23376: } -23376: -23376: typedef typename Octagonal_Shape::coefficient_type N; -23376: typedef typename OR_Matrix::const_row_iterator row_iterator; -23376: typedef typename OR_Matrix::const_row_reference_type row_reference; -23376: -23376: -23376: bool first = true; -23376: -23376: row_iterator m_begin = oct.matrix.row_begin(); -23376: row_iterator m_end = oct.matrix.row_end(); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_negation; N& negation = holder_negation.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_half; N& half = holder_half.item(); -23376: -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ) { -23376: const dimension_type i = i_iter.index(); -23376: const Variable v_i(i/2); -23376: const N& c_i_ii = (*i_iter)[i + 1]; -23376: ++i_iter; -23376: const N& c_ii_i = (*i_iter)[i]; -23376: ++i_iter; -23376: -23376: if (is_additive_inverse(c_i_ii, c_ii_i)) { -23376: -23376: ((void) 0); -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: -23376: -23376: if (div_2exp_assign_r(half, c_ii_i, 1, -23376: ROUND_UP | ROUND_STRICT_RELATION) -23376: == V_EQ) { -23376: s << v_i << " = " << half; -23376: } -23376: else { -23376: s << "2*" << v_i << " = " << c_ii_i; -23376: } -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_ii)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: neg_assign_r(negation, c_i_ii, ROUND_NOT_NEEDED); -23376: -23376: -23376: if (div_2exp_assign_r(half, negation, 1, -23376: ROUND_UP | ROUND_STRICT_RELATION) -23376: == V_EQ) { -23376: s << v_i << " >= " << half; -23376: } -23376: else { -23376: s << "2*" << v_i << " >= " << negation; -23376: } -23376: } -23376: if (!is_plus_infinity(c_ii_i)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: -23376: -23376: if (div_2exp_assign_r(half, c_ii_i, 1, -23376: ROUND_UP | ROUND_STRICT_RELATION) -23376: == V_EQ) { -23376: s << v_i << " <= " << half; -23376: } -23376: else { -23376: s << "2*" << v_i << " <= " << c_ii_i; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (row_iterator i_iter = m_begin; i_iter != m_end; ) { -23376: const dimension_type i = i_iter.index(); -23376: const Variable v_i(i/2); -23376: row_reference r_i = *i_iter; -23376: ++i_iter; -23376: row_reference r_ii = *i_iter; -23376: ++i_iter; -23376: -23376: for (dimension_type j = 0; j < i; j += 2) { -23376: const Variable v_j(j/2); -23376: -23376: const N& c_ii_jj = r_ii[j + 1]; -23376: const N& c_i_j = r_i[j]; -23376: -23376: if (is_additive_inverse(c_ii_jj, c_i_j)) { -23376: -23376: ((void) 0); -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (sgn(c_i_j) >= 0) { -23376: s << v_j << " - " << v_i << " = " << c_i_j; -23376: } -23376: else { -23376: s << v_i << " - " << v_j << " = " << c_ii_jj; -23376: } -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_j)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (sgn(c_i_j) >= 0) { -23376: s << v_j << " - " << v_i << " <= " << c_i_j; -23376: } -23376: else { -23376: neg_assign_r(negation, c_i_j, ROUND_DOWN); -23376: s << v_i << " - " << v_j << " >= " << negation; -23376: } -23376: } -23376: if (!is_plus_infinity(c_ii_jj)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (sgn(c_ii_jj) >= 0) { -23376: s << v_i << " - " << v_j << " <= " << c_ii_jj; -23376: } -23376: else { -23376: neg_assign_r(negation, c_ii_jj, ROUND_DOWN); -23376: s << v_j << " - " << v_i << " >= " << negation; -23376: } -23376: } -23376: } -23376: -23376: const N& c_i_jj = r_i[j + 1]; -23376: const N& c_ii_j = r_ii[j]; -23376: -23376: if (is_additive_inverse(c_i_jj, c_ii_j)) { -23376: -23376: ((void) 0); -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: s << v_j << " + " << v_i << " = " << c_ii_j; -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_i_jj)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: neg_assign_r(negation, c_i_jj, ROUND_DOWN); -23376: s << v_j << " + " << v_i << " >= " << negation; -23376: } -23376: if (!is_plus_infinity(c_ii_j)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: s << v_j << " + " << v_i << " <= " << c_ii_j; -23376: } -23376: } -23376: } -23376: } -23376: return s; -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::ascii_dump(std::ostream& s) const { -23376: s << "space_dim " -23376: << space_dim -23376: << "\n"; -23376: status.ascii_dump(s); -23376: s << "\n"; -23376: matrix.ascii_dump(s); -23376: } -23376: -23376: template void Octagonal_Shape::ascii_dump() const { ascii_dump(std::cerr); } template void Octagonal_Shape::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::ascii_load(std::istream& s) { -23376: std::string str; -23376: -23376: if (!(s >> str) || str != "space_dim") { -23376: return false; -23376: } -23376: -23376: if (!(s >> space_dim)) { -23376: return false; -23376: } -23376: -23376: if (!status.ascii_load(s)) { -23376: return false; -23376: } -23376: -23376: if (!matrix.ascii_load(s)) { -23376: return false; -23376: } -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: memory_size_type -23376: Octagonal_Shape::external_memory_in_bytes() const { -23376: return matrix.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: bool -23376: Octagonal_Shape::OK() const { -23376: -23376: if (!matrix.OK()) { -23376: return false; -23376: } -23376: -23376: -23376: if (!status.OK()) { -23376: return false; -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: for (typename OR_Matrix::const_row_iterator i = matrix.row_begin(), -23376: matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) { -23376: typename OR_Matrix::const_row_reference_type x_i = *i; -23376: for (dimension_type j = i.row_size(); j-- > 0; ) { -23376: if (is_minus_infinity(x_i[j])) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: -23376: for (typename OR_Matrix::const_row_iterator i = matrix.row_begin(), -23376: m_end = matrix.row_end(); i != m_end; ++i) { -23376: typename OR_Matrix::const_row_reference_type r = *i; -23376: const N& m_i_i = r[i.index()]; -23376: if (!is_plus_infinity(m_i_i)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: if (std::numeric_limits::is_exact) { -23376: -23376: -23376: if (marked_strongly_closed()) { -23376: Octagonal_Shape x = *this; -23376: x.reset_strongly_closed(); -23376: x.strong_closure_assign(); -23376: if (x.matrix != matrix) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: if (marked_strongly_closed()) { -23376: if (!is_strong_coherent()) { -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::throw_dimension_incompatible(const char* method, -23376: const Octagonal_Shape& y) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", y->space_dimension() == " << y.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", required dimension == " << required_dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", c->space_dimension == " << c.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", cg->space_dimension == " << cg.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_dimension_incompatible(const char* method, -23376: const Generator& g) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", g->space_dimension == " << g.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_constraint_incompatible(const char* method) { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "the constraint is incompatible."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le) { -23376: using namespace IO_Operators; -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << le << " is too complex."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape -23376: ::throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << le_name << "->space_dimension() == " -23376: << le.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Octagonal_Shape -23376: ::throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << lf_name << "->space_dimension() == " -23376: << lf.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Octagonal_Shape::throw_invalid_argument(const char* method, -23376: const char* reason) { -23376: std::ostringstream s; -23376: s << "PPL::Octagonal_Shape::" << method << ":\n" -23376: << reason << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: } -23376: # 2329 "../../src/Octagonal_Shape_defs.hh" 2 -23376: # 32 "../../src/BD_Shape_inlines.hh" 2 -23376: # 42 "../../src/BD_Shape_inlines.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline dimension_type -23376: BD_Shape::max_space_dimension() { -23376: -23376: -23376: return std::min(DB_Matrix::max_num_rows() - 1, -23376: DB_Matrix::max_num_columns() - 1); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::marked_zero_dim_univ() const { -23376: return status.test_zero_dim_univ(); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::marked_empty() const { -23376: return status.test_empty(); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::marked_shortest_path_closed() const { -23376: return status.test_shortest_path_closed(); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::marked_shortest_path_reduced() const { -23376: return status.test_shortest_path_reduced(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::set_zero_dim_univ() { -23376: status.set_zero_dim_univ(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::set_empty() { -23376: status.set_empty(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::set_shortest_path_closed() { -23376: status.set_shortest_path_closed(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::set_shortest_path_reduced() { -23376: status.set_shortest_path_reduced(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::reset_shortest_path_closed() { -23376: status.reset_shortest_path_closed(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::reset_shortest_path_reduced() { -23376: status.reset_shortest_path_reduced(); -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const dimension_type num_dimensions, -23376: const Degenerate_Element kind) -23376: : dbm(num_dimensions + 1), status(), redundancy_dbm() { -23376: if (kind == EMPTY) { -23376: set_empty(); -23376: } -23376: else { -23376: if (num_dimensions > 0) { -23376: -23376: set_shortest_path_closed(); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const BD_Shape& y, Complexity_Class) -23376: : dbm(y.dbm), status(y.status), redundancy_dbm() { -23376: if (y.marked_shortest_path_reduced()) { -23376: redundancy_dbm = y.redundancy_dbm; -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const BD_Shape& y, Complexity_Class) -23376: -23376: -23376: : dbm((y.shortest_path_closure_assign(), y.dbm)), -23376: status(), -23376: redundancy_dbm() { -23376: -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: } -23376: else if (y.marked_zero_dim_univ()) { -23376: set_zero_dim_univ(); -23376: } -23376: } -23376: -23376: template -23376: inline Congruence_System -23376: BD_Shape::congruences() const { -23376: return minimized_congruences(); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_constraints(const Constraint_System& cs) { -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: cs_end = cs.end(); i != cs_end; ++i) { -23376: add_constraint(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_recycled_constraints(Constraint_System& cs) { -23376: add_constraints(cs); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_congruences(const Congruence_System& cgs) { -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); i != cgs_end; ++i) { -23376: add_congruence(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_recycled_congruences(Congruence_System& cgs) { -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::refine_with_constraint(const Constraint& c) { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: -23376: if (c_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_constraint(c)", c); -23376: } -23376: -23376: if (!marked_empty()) { -23376: refine_no_check(c); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::refine_with_constraints(const Constraint_System& cs) { -23376: -23376: if (cs.space_dimension() > space_dimension()) { -23376: throw_invalid_argument("refine_with_constraints(cs)", -23376: "cs and *this are space-dimension incompatible"); -23376: } -23376: -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::refine_with_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: if (cg_space_dim > space_dimension()) { -23376: throw_dimension_incompatible("refine_with_congruence(cg)", cg); -23376: } -23376: -23376: if (!marked_empty()) { -23376: refine_no_check(cg); -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::refine_with_congruences(const Congruence_System& cgs) { -23376: -23376: if (cgs.space_dimension() > space_dimension()) { -23376: throw_invalid_argument("refine_with_congruences(cgs)", -23376: "cgs and *this are space-dimension incompatible"); -23376: } -23376: -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::refine_no_check(const Congruence& cg) { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: if (cg.is_proper_congruence()) { -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: } -23376: -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: Constraint c(cg); -23376: refine_no_check(c); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::can_recycle_constraint_systems() { -23376: return false; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: BD_Shape::can_recycle_congruence_systems() { -23376: return false; -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const Constraint_System& cs) -23376: : dbm(cs.space_dimension() + 1), status(), redundancy_dbm() { -23376: if (cs.space_dimension() > 0) { -23376: -23376: set_shortest_path_closed(); -23376: } -23376: add_constraints(cs); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const Box& box, -23376: Complexity_Class) -23376: : dbm(box.space_dimension() + 1), status(), redundancy_dbm() { -23376: -23376: if (box.is_empty()) { -23376: set_empty(); -23376: } -23376: else if (box.space_dimension() > 0) { -23376: -23376: set_shortest_path_closed(); -23376: refine_with_constraints(box.constraints()); -23376: } -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const Grid& grid, -23376: Complexity_Class) -23376: : dbm(grid.space_dimension() + 1), status(), redundancy_dbm() { -23376: if (grid.space_dimension() > 0) { -23376: -23376: set_shortest_path_closed(); -23376: } -23376: -23376: refine_with_congruences(grid.minimized_congruences()); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: BD_Shape::BD_Shape(const Octagonal_Shape& os, -23376: Complexity_Class) -23376: : dbm(os.space_dimension() + 1), status(), redundancy_dbm() { -23376: -23376: if (os.is_empty()) { -23376: set_empty(); -23376: } -23376: else if (os.space_dimension() > 0) { -23376: -23376: set_shortest_path_closed(); -23376: refine_with_constraints(os.constraints()); -23376: -23376: -23376: -23376: } -23376: } -23376: -23376: template -23376: inline BD_Shape& -23376: BD_Shape::operator=(const BD_Shape& y) { -23376: dbm = y.dbm; -23376: status = y.status; -23376: if (y.marked_shortest_path_reduced()) { -23376: redundancy_dbm = y.redundancy_dbm; -23376: } -23376: return *this; -23376: } -23376: -23376: template -23376: inline -23376: BD_Shape::~BD_Shape() { -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::m_swap(BD_Shape& y) { -23376: using std::swap; -23376: swap(dbm, y.dbm); -23376: swap(status, y.status); -23376: swap(redundancy_dbm, y.redundancy_dbm); -23376: } -23376: -23376: template -23376: inline dimension_type -23376: BD_Shape::space_dimension() const { -23376: return dbm.num_rows() - 1; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::is_empty() const { -23376: shortest_path_closure_assign(); -23376: return marked_empty(); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::bounds_from_above(const Linear_Expression& expr) const { -23376: return bounds(expr, true); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::bounds_from_below(const Linear_Expression& expr) const { -23376: return bounds(expr, false); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, -23376: bool& maximum) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::maximize(const Linear_Expression& expr, -23376: Coefficient& sup_n, Coefficient& sup_d, bool& maximum, -23376: Generator& g) const { -23376: return max_min(expr, true, sup_n, sup_d, maximum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, -23376: bool& minimum) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::minimize(const Linear_Expression& expr, -23376: Coefficient& inf_n, Coefficient& inf_d, bool& minimum, -23376: Generator& g) const { -23376: return max_min(expr, false, inf_n, inf_d, minimum, g); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::is_topologically_closed() const { -23376: return true; -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::is_discrete() const { -23376: return affine_dimension() == 0; -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::topological_closure_assign() { -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const BD_Shape& x, const BD_Shape& y) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: if (x.marked_empty()) { -23376: return y.marked_empty(); -23376: } -23376: else { -23376: return !y.marked_empty(); -23376: } -23376: } -23376: -23376: -23376: x.shortest_path_closure_assign(); -23376: y.shortest_path_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty()) { -23376: return y.marked_empty(); -23376: } -23376: if (y.marked_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: return x.dbm == y.dbm; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator!=(const BD_Shape& x, const BD_Shape& y) { -23376: return !(x == y); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.shortest_path_closure_assign(); -23376: y.shortest_path_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return rectilinear_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: rectilinear_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: return rectilinear_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.shortest_path_closure_assign(); -23376: y.shortest_path_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return euclidean_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: euclidean_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: return euclidean_distance_assign(r, x, y, dir); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, -23376: Temp& tmp1, -23376: Temp& tmp2) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: if (x_space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: x.shortest_path_closure_assign(); -23376: y.shortest_path_closure_assign(); -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: return l_infinity_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: typedef Checked_Number Checked_Temp; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item(); -23376: return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2); -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: l_infinity_distance_assign(Checked_Number& r, -23376: const BD_Shape& x, -23376: const BD_Shape& y, -23376: const Rounding_Dir dir) { -23376: return l_infinity_distance_assign(r, x, y, dir); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_dbm_constraint(const dimension_type i, -23376: const dimension_type j, -23376: const N& k) { -23376: -23376: ((void) 0); -23376: N& dbm_ij = dbm[i][j]; -23376: if (dbm_ij > k) { -23376: dbm_ij = k; -23376: if (marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::add_dbm_constraint(const dimension_type i, -23376: const dimension_type j, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom) { -23376: -23376: ((void) 0); -23376: ((void) 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_k; N& k = holder_k.item(); -23376: div_round_up(k, numer, denom); -23376: add_dbm_constraint(i, j, k); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::time_elapse_assign(const BD_Shape& y) { -23376: -23376: if (space_dimension() != y.space_dimension()) { -23376: throw_dimension_incompatible("time_elapse_assign(y)", y); -23376: } -23376: -23376: -23376: C_Polyhedron ph_x(constraints()); -23376: C_Polyhedron ph_y(y.constraints()); -23376: ph_x.time_elapse_assign(ph_y); -23376: BD_Shape x(ph_x); -23376: m_swap(x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::strictly_contains(const BD_Shape& y) const { -23376: const BD_Shape& x = *this; -23376: return x.contains(y) && !y.contains(x); -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::upper_bound_assign_if_exact(const BD_Shape& y) { -23376: if (space_dimension() != y.space_dimension()) { -23376: throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y); -23376: } -23376: -23376: -23376: -23376: const bool integer_upper_bound = false; -23376: return BHZ09_upper_bound_assign_if_exact(y); -23376: -23376: } -23376: -23376: template -23376: inline bool -23376: BD_Shape::integer_upper_bound_assign_if_exact(const BD_Shape& y) { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_769 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits::is_integer)>) } -23376: -23376: ; -23376: if (space_dimension() != y.space_dimension()) { -23376: throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y); -23376: } -23376: const bool integer_upper_bound = true; -23376: return BHZ09_upper_bound_assign_if_exact(y); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape -23376: ::remove_higher_space_dimensions(const dimension_type new_dimension) { -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (new_dimension > space_dim) { -23376: throw_dimension_incompatible("remove_higher_space_dimensions(nd)", -23376: new_dimension); -23376: } -23376: -23376: -23376: -23376: -23376: if (new_dimension == space_dim) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: dbm.resize_no_copy(new_dimension + 1); -23376: -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: -23376: -23376: if (new_dimension == 0 && !marked_empty()) { -23376: set_zero_dim_univ(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p, -23376: unsigned complexity_threshold, -23376: bool wrap_individually) { -23376: Implementation::wrap_assign(*this, -23376: vars, w, r, o, cs_p, -23376: complexity_threshold, wrap_individually, -23376: "BD_Shape"); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp) { -23376: static N stop_points[] = { -23376: N(-2, ROUND_UP), -23376: N(-1, ROUND_UP), -23376: N( 0, ROUND_UP), -23376: N( 1, ROUND_UP), -23376: N( 2, ROUND_UP) -23376: }; -23376: CC76_extrapolation_assign(y, -23376: stop_points, -23376: stop_points -23376: + sizeof(stop_points)/sizeof(stop_points[0]), -23376: tp); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::H79_widening_assign(const BD_Shape& y, unsigned* tp) { -23376: -23376: -23376: C_Polyhedron ph_x(constraints()); -23376: C_Polyhedron ph_y(y.constraints()); -23376: ph_x.H79_widening_assign(ph_y, tp); -23376: BD_Shape x(ph_x); -23376: m_swap(x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::widening_assign(const BD_Shape& y, unsigned* tp) { -23376: H79_widening_assign(y, tp); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::limited_H79_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: -23376: -23376: C_Polyhedron ph_x(constraints()); -23376: C_Polyhedron ph_y(y.constraints()); -23376: ph_x.limited_H79_extrapolation_assign(ph_y, cs, tp); -23376: BD_Shape x(ph_x); -23376: m_swap(x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: BD_Shape::total_memory_in_bytes() const { -23376: return sizeof(*this) + external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: inline int32_t -23376: BD_Shape::hash_code() const { -23376: return hash_code_from_dimension(space_dimension()); -23376: } -23376: -23376: template -23376: template -23376: inline void -23376: BD_Shape::generalized_refine_with_linear_form_inequality( -23376: const Linear_Form >& left, -23376: const Linear_Form >& right, -23376: const Relation_Symbol relsym) { -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: refine_with_linear_form_inequality(left, right); -23376: refine_with_linear_form_inequality(right, left); -23376: break; -23376: case LESS_THAN: -23376: case LESS_OR_EQUAL: -23376: refine_with_linear_form_inequality(left, right); -23376: break; -23376: case GREATER_THAN: -23376: case GREATER_OR_EQUAL: -23376: refine_with_linear_form_inequality(right, left); -23376: break; -23376: case NOT_EQUAL: -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: } -23376: } -23376: -23376: template -23376: template -23376: inline void -23376: BD_Shape -23376: ::refine_fp_interval_abstract_store(Box >& -23376: store) const { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_931 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: typedef Interval FP_Interval_Type; -23376: store.intersection_assign(Box(*this)); -23376: } -23376: -23376: template -23376: inline void -23376: BD_Shape::drop_some_non_integer_points_helper(N& elem) { -23376: if (!is_integer(elem)) { -23376: Result r = floor_assign_r(elem, elem, ROUND_DOWN); -23376: (void)(r); -23376: ((void) 0); -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: -23376: -23376: template -23376: inline void -23376: swap(BD_Shape& x, BD_Shape& y) { -23376: x.m_swap(y); -23376: } -23376: -23376: } -23376: # 2372 "../../src/BD_Shape_defs.hh" 2 -23376: # 1 "../../src/BD_Shape_templates.hh" 1 -23376: # 47 "../../src/BD_Shape_templates.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: BD_Shape::BD_Shape(const Congruence_System& cgs) -23376: : dbm(cgs.space_dimension() + 1), -23376: status(), -23376: redundancy_dbm() { -23376: add_congruences(cgs); -23376: } -23376: -23376: template -23376: BD_Shape::BD_Shape(const Generator_System& gs) -23376: : dbm(gs.space_dimension() + 1), status(), redundancy_dbm() { -23376: const Generator_System::const_iterator gs_begin = gs.begin(); -23376: const Generator_System::const_iterator gs_end = gs.end(); -23376: if (gs_begin == gs_end) { -23376: -23376: set_empty(); -23376: return; -23376: } -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: DB_Row& dbm_0 = dbm[0]; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: -23376: bool dbm_initialized = false; -23376: bool point_seen = false; -23376: -23376: for (Generator_System::const_iterator gs_i = gs_begin; -23376: gs_i != gs_end; ++gs_i) { -23376: const Generator& g = *gs_i; -23376: switch (g.type()) { -23376: case Generator::POINT: -23376: point_seen = true; -23376: -23376: case Generator::CLOSURE_POINT: -23376: if (!dbm_initialized) { -23376: -23376: dbm_initialized = true; -23376: const Coefficient& d = g.divisor(); -23376: -23376: -23376: for (dimension_type i = space_dim; i > 0; --i) { -23376: const Coefficient& g_i = g.expression().get(Variable(i - 1)); -23376: DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: if (i != j) { -23376: const Coefficient& g_j = g.expression().get(Variable(j - 1)); -23376: div_round_up(dbm_i[j], g_j - g_i, d); -23376: } -23376: } -23376: div_round_up(dbm_i[0], -g_i, d); -23376: } -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: const Coefficient& g_j = g.expression().get(Variable(j - 1)); -23376: div_round_up(dbm_0[j], g_j, d); -23376: } -23376: -23376: } -23376: else { -23376: -23376: -23376: const Coefficient& d = g.divisor(); -23376: -23376: -23376: for (dimension_type i = space_dim; i > 0; --i) { -23376: const Coefficient& g_i = g.expression().get(Variable(i - 1)); -23376: DB_Row& dbm_i = dbm[i]; -23376: -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: const Coefficient& g_j = g.expression().get(Variable(j - 1)); -23376: div_round_up(tmp, g_j - g_i, d); -23376: max_assign(dbm_i[j], tmp); -23376: } -23376: div_round_up(tmp, -g_i, d); -23376: max_assign(dbm_i[0], tmp); -23376: } -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: const Coefficient& g_j = g.expression().get(Variable(j - 1)); -23376: div_round_up(tmp, g_j, d); -23376: max_assign(dbm_0[j], tmp); -23376: } -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: -23376: if (!point_seen) { -23376: -23376: throw_invalid_argument("BD_Shape(gs)", -23376: "the non-empty generator system gs " -23376: "contains no points."); -23376: } -23376: -23376: -23376: for (Generator_System::const_iterator gs_i = gs_begin; -23376: gs_i != gs_end; ++gs_i) { -23376: const Generator& g = *gs_i; -23376: switch (g.type()) { -23376: case Generator::LINE: -23376: -23376: -23376: for (dimension_type i = space_dim; i > 0; --i) { -23376: const Coefficient& g_i = g.expression().get(Variable(i - 1)); -23376: DB_Row& dbm_i = dbm[i]; -23376: -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: if (g_i != g.expression().get(Variable(j - 1))) { -23376: assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: if (g_i != 0) { -23376: assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: for (Generator::expr_type::const_iterator i = g.expression().begin(), -23376: i_end = g.expression().end(); i != i_end; ++i) { -23376: assign_r(dbm_0[i.variable().space_dimension()], -23376: PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: break; -23376: case Generator::RAY: -23376: -23376: -23376: for (dimension_type i = space_dim; i > 0; --i) { -23376: const Coefficient& g_i = g.expression().get(Variable(i - 1)); -23376: DB_Row& dbm_i = dbm[i]; -23376: -23376: for (dimension_type j = space_dim; j > 0; --j) { -23376: if (g_i < g.expression().get(Variable(j - 1))) { -23376: assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: if (g_i < 0) { -23376: assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: for (Generator::expr_type::const_iterator i = g.expression().begin(), -23376: i_end = g.expression().end(); i != i_end; ++i) { -23376: if (*i > 0) { -23376: assign_r(dbm_0[i.variable().space_dimension()], -23376: PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: set_shortest_path_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: BD_Shape::BD_Shape(const Polyhedron& ph, const Complexity_Class complexity) -23376: : dbm(), status(), redundancy_dbm() { -23376: const dimension_type num_dimensions = ph.space_dimension(); -23376: -23376: if (ph.marked_empty()) { -23376: *this = BD_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: -23376: if (num_dimensions == 0) { -23376: *this = BD_Shape(num_dimensions, UNIVERSE); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (complexity == ANY_COMPLEXITY -23376: || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) { -23376: *this = BD_Shape(ph.generators()); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: ((void) 0); -23376: -23376: if (!ph.has_something_pending() && ph.constraints_are_minimized()) { -23376: -23376: -23376: if (ph.is_universe()) { -23376: *this = BD_Shape(num_dimensions, UNIVERSE); -23376: return; -23376: } -23376: } -23376: -23376: -23376: for (Constraint_System::const_iterator i = ph.con_sys.begin(), -23376: cs_end = ph.con_sys.end(); i != cs_end; ++i) { -23376: if (i->is_inconsistent()) { -23376: *this = BD_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: } -23376: -23376: -23376: -23376: if (complexity == SIMPLEX_COMPLEXITY) { -23376: MIP_Problem lp(num_dimensions); -23376: lp.set_optimization_mode(MAXIMIZATION); -23376: -23376: const Constraint_System& ph_cs = ph.constraints(); -23376: if (!ph_cs.has_strict_inequalities()) { -23376: lp.add_constraints(ph_cs); -23376: } -23376: else { -23376: -23376: for (Constraint_System::const_iterator i = ph_cs.begin(), -23376: ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) { -23376: const Constraint& c = *i; -23376: if (c.is_strict_inequality()) { -23376: Linear_Expression expr(c.expression()); -23376: lp.add_constraint(expr >= 0); -23376: } -23376: else { -23376: lp.add_constraint(c); -23376: } -23376: } -23376: } -23376: -23376: -23376: if (!lp.is_satisfiable()) { -23376: *this = BD_Shape(num_dimensions, EMPTY); -23376: return; -23376: } -23376: -23376: -23376: *this = BD_Shape(num_dimensions, UNIVERSE); -23376: -23376: Generator g(point()); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: for (dimension_type i = 1; i <= num_dimensions; ++i) { -23376: Variable x(i-1); -23376: -23376: lp.set_objective_function(x); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(dbm[0][i], numer, denom); -23376: } -23376: -23376: for (dimension_type j = 1; j <= num_dimensions; ++j) { -23376: if (i == j) { -23376: continue; -23376: } -23376: Variable y(j-1); -23376: lp.set_objective_function(x - y); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(dbm[j][i], numer, denom); -23376: } -23376: } -23376: -23376: lp.set_objective_function(-x); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, numer, denom); -23376: div_round_up(dbm[i][0], numer, denom); -23376: } -23376: } -23376: set_shortest_path_closed(); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: *this = BD_Shape(num_dimensions, UNIVERSE); -23376: refine_with_constraints(ph.constraints()); -23376: } -23376: -23376: template -23376: dimension_type -23376: BD_Shape::affine_dimension() const { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim == 0) { -23376: return 0; -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return 0; -23376: } -23376: -23376: -23376: -23376: std::vector predecessor; -23376: compute_predecessors(predecessor); -23376: -23376: -23376: -23376: dimension_type affine_dim = 0; -23376: -23376: for (dimension_type i = 1; i <= space_dim; ++i) { -23376: if (predecessor[i] == i) { -23376: ++affine_dim; -23376: } -23376: } -23376: return affine_dim; -23376: } -23376: -23376: template -23376: Congruence_System -23376: BD_Shape::minimized_congruences() const { -23376: -23376: -23376: shortest_path_closure_assign(); -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: Congruence_System cgs(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cgs = Congruence_System::zero_dim_empty(); -23376: } -23376: return cgs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cgs.insert(Congruence::zero_dim_false()); -23376: return cgs; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: -23376: -23376: std::vector leaders; -23376: compute_leaders(leaders); -23376: -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: for (dimension_type i = 1; i <= space_dim; ++i) { -23376: const dimension_type leader = leaders[i]; -23376: if (i != leader) { -23376: -23376: if (leader == 0) { -23376: -23376: ((void) 0); -23376: numer_denom(dbm_0[i], numer, denom); -23376: cgs.insert(denom*Variable(i-1) == numer); -23376: } -23376: else { -23376: -23376: ((void) 0); -23376: numer_denom(dbm[i][leader], numer, denom); -23376: cgs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer); -23376: } -23376: } -23376: } -23376: return cgs; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::add_constraint(const Constraint& c) { -23376: -23376: if (c.space_dimension() > space_dimension()) { -23376: throw_dimension_incompatible("add_constraint(c)", c); -23376: } -23376: -23376: if (c.is_strict_inequality()) { -23376: if (c.is_inconsistent()) { -23376: set_empty(); -23376: return; -23376: } -23376: if (c.is_tautological()) { -23376: return; -23376: } -23376: -23376: throw_invalid_argument("add_constraint(c)", -23376: "strict inequalities are not allowed"); -23376: } -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: -23376: if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: throw_invalid_argument("add_constraint(c)", -23376: "c is not a bounded difference constraint"); -23376: } -23376: const Coefficient& inhomo = c.inhomogeneous_term(); -23376: if (num_vars == 0) { -23376: -23376: if (inhomo < 0 -23376: || (inhomo != 0 && c.is_equality())) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: const bool negative = (coeff < 0); -23376: if (negative) { -23376: neg_assign(coeff); -23376: } -23376: bool changed = false; -23376: N& x = negative ? dbm[i][j] : dbm[j][i]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, inhomo, coeff); -23376: if (x > d) { -23376: x = d; -23376: changed = true; -23376: } -23376: -23376: if (c.is_equality()) { -23376: N& y = negative ? dbm[j][i] : dbm[i][j]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item(); -23376: neg_assign(minus_c_term, inhomo); -23376: div_round_up(d, minus_c_term, coeff); -23376: if (y > d) { -23376: y = d; -23376: changed = true; -23376: } -23376: } -23376: -23376: -23376: -23376: if (changed && marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::add_congruence(const Congruence& cg) { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: -23376: -23376: if (space_dimension() < cg_space_dim) { -23376: throw_dimension_incompatible("add_congruence(cg)", cg); -23376: } -23376: -23376: if (cg.is_proper_congruence()) { -23376: if (cg.is_tautological()) { -23376: return; -23376: } -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: throw_invalid_argument("add_congruence(cg)", -23376: "cg is a non-trivial, proper congruence"); -23376: } -23376: -23376: ((void) 0); -23376: Constraint c(cg); -23376: add_constraint(c); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::refine_no_check(const Constraint& c) { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: -23376: if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: return; -23376: } -23376: const Coefficient& inhomo = c.inhomogeneous_term(); -23376: if (num_vars == 0) { -23376: -23376: if (inhomo < 0 -23376: || (c.is_equality() && inhomo != 0) -23376: || (c.is_strict_inequality() && inhomo == 0)) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: const bool negative = (coeff < 0); -23376: N& x = negative ? dbm[i][j] : dbm[j][i]; -23376: N& y = negative ? dbm[j][i] : dbm[i][j]; -23376: if (negative) { -23376: neg_assign(coeff); -23376: } -23376: bool changed = false; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, inhomo, coeff); -23376: if (x > d) { -23376: x = d; -23376: changed = true; -23376: } -23376: -23376: if (c.is_equality()) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item(); -23376: neg_assign(minus_c_term, inhomo); -23376: div_round_up(d, minus_c_term, coeff); -23376: if (y > d) { -23376: y = d; -23376: changed = true; -23376: } -23376: } -23376: -23376: -23376: -23376: if (changed && marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::concatenate_assign(const BD_Shape& y) { -23376: BD_Shape& x = *this; -23376: -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: const dimension_type y_space_dim = y.space_dimension(); -23376: -23376: -23376: -23376: if (y_space_dim == 0 && y.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (x_space_dim == 0 && marked_empty()) { -23376: dbm.grow(y_space_dim + 1); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: add_space_dimensions_and_embed(y_space_dim); -23376: const dimension_type new_space_dim = x_space_dim + y_space_dim; -23376: for (dimension_type i = x_space_dim + 1; i <= new_space_dim; ++i) { -23376: DB_Row& dbm_i = dbm[i]; -23376: dbm_i[0] = y.dbm[i - x_space_dim][0]; -23376: dbm[0][i] = y.dbm[0][i - x_space_dim]; -23376: for (dimension_type j = x_space_dim + 1; j <= new_space_dim; ++j) { -23376: dbm_i[j] = y.dbm[i - x_space_dim][j - x_space_dim]; -23376: } -23376: } -23376: -23376: if (marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::contains(const BD_Shape& y) const { -23376: const BD_Shape& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("contains(y)", y); -23376: } -23376: if (x_space_dim == 0) { -23376: -23376: -23376: -23376: -23376: return marked_empty() ? y.marked_empty() : true; -23376: } -23376: # 663 "../../src/BD_Shape_templates.hh" -23376: y.shortest_path_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return true; -23376: } -23376: -23376: if (x.is_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: for (dimension_type i = x_space_dim + 1; i-- > 0; ) { -23376: const DB_Row& x_dbm_i = x.dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = x_space_dim + 1; j-- > 0; ) { -23376: if (x_dbm_i[j] < y_dbm_i[j]) { -23376: return false; -23376: } -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::is_disjoint_from(const BD_Shape& y) const { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("is_disjoint_from(y)", y); -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: y.shortest_path_closure_assign(); -23376: if (y.marked_empty()) { -23376: return true; -23376: } -23376: # 716 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: for (dimension_type i = space_dim+1; i-- > 0; ) { -23376: const DB_Row& x_i = dbm[i]; -23376: for (dimension_type j = space_dim+1; j-- > 0; ) { -23376: neg_assign_r(tmp, y.dbm[j][i], ROUND_UP); -23376: if (x_i[j] < tmp) { -23376: return true; -23376: } -23376: } -23376: } -23376: -23376: return false; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::is_universe() const { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: if (!is_plus_infinity(dbm_i[j])) { -23376: return false; -23376: } -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::is_bounded() const { -23376: shortest_path_closure_assign(); -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (marked_empty() || space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: if (i != j) { -23376: if (is_plus_infinity(dbm_i[j])) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::contains_integer_point() const { -23376: -23376: if (is_empty()) { -23376: return false; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: if (std::numeric_limits::is_integer) { -23376: return true; -23376: } -23376: -23376: -23376: BD_Shape bds_z(space_dim); -23376: typedef BD_Shape::N Z; -23376: bds_z.reset_shortest_path_closed(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: bool all_integers = true; -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& z_i = bds_z.dbm[i]; -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: const N& dbm_i_j = dbm_i[j]; -23376: if (is_plus_infinity(dbm_i_j)) { -23376: continue; -23376: } -23376: if (is_integer(dbm_i_j)) { -23376: assign_r(z_i[j], dbm_i_j, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: all_integers = false; -23376: Z& z_i_j = z_i[j]; -23376: -23376: neg_assign_r(tmp, dbm_i_j, ROUND_NOT_NEEDED); -23376: assign_r(z_i_j, tmp, ROUND_UP); -23376: neg_assign_r(z_i_j, z_i_j, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: return all_integers || !bds_z.is_empty(); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const { -23376: dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim < expr.space_dimension()) { -23376: throw_dimension_incompatible("frequency(e, ...)", "e", expr); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: if (is_empty()) { -23376: return false; -23376: } -23376: freq_n = 0; -23376: freq_d = 1; -23376: val_n = expr.inhomogeneous_term(); -23376: val_d = 1; -23376: return true; -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: Linear_Expression le = expr; -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item(); -23376: val_denom = 1; -23376: -23376: -23376: -23376: for (dimension_type i = dbm.num_rows(); i-- > 1; ) { -23376: const Variable v(i-1); -23376: coeff = le.coefficient(v); -23376: if (coeff == 0) { -23376: continue; -23376: } -23376: const DB_Row& dbm_i = dbm[i]; -23376: -23376: assign_r(tmp, dbm_i[0], ROUND_NOT_NEEDED); -23376: if (is_additive_inverse(dbm[0][i], tmp)) { -23376: -23376: numer_denom(tmp, numer, denom); -23376: sub_mul_assign(le, coeff, v); -23376: le *= denom; -23376: le -= numer*coeff; -23376: val_denom *= denom; -23376: continue; -23376: } -23376: -23376: -23376: else { -23376: bool constant_v = false; -23376: for (Linear_Expression::const_iterator j = le.begin(), -23376: j_end = le.lower_bound(Variable(i - 1)); j != j_end; ++j) { -23376: const Variable vj = j.variable(); -23376: const dimension_type j_dim = vj.space_dimension(); -23376: assign_r(tmp, dbm_i[j_dim], ROUND_NOT_NEEDED); -23376: if (is_additive_inverse(dbm[j_dim][i], tmp)) { -23376: -23376: -23376: -23376: numer_denom(tmp, numer, denom); -23376: -23376: -23376: sub_mul_assign(le, coeff, v); -23376: add_mul_assign(le, coeff, vj); -23376: le *= denom; -23376: le -= numer*coeff; -23376: val_denom *= denom; -23376: constant_v = true; -23376: break; -23376: } -23376: } -23376: if (!constant_v) { -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: -23376: freq_n = 0; -23376: freq_d = 1; -23376: -23376: -23376: normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::constrains(const Variable var) const { -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dimension() < var_space_dim) { -23376: throw_dimension_incompatible("constrains(v)", "v", var); -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: const DB_Row& dbm_v = dbm[var_space_dim]; -23376: for (dimension_type i = dbm.num_rows(); i-- > 0; ) { -23376: if (!is_plus_infinity(dbm_v[i]) -23376: || !is_plus_infinity(dbm[i][var_space_dim])) { -23376: return true; -23376: } -23376: } -23376: -23376: -23376: -23376: return is_empty(); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape -23376: ::compute_predecessors(std::vector& predecessor) const { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type predecessor_size = dbm.num_rows(); -23376: -23376: predecessor.reserve(predecessor_size); -23376: for (dimension_type i = 0; i < predecessor_size; ++i) { -23376: predecessor.push_back(i); -23376: } -23376: -23376: for (dimension_type i = predecessor_size; i-- > 1; ) { -23376: if (i == predecessor[i]) { -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = i; j-- > 0; ) { -23376: if (j == predecessor[j] -23376: && is_additive_inverse(dbm[j][i], dbm_i[j])) { -23376: -23376: predecessor[i] = j; -23376: break; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::compute_leaders(std::vector& leaders) const { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: compute_predecessors(leaders); -23376: -23376: ((void) 0); -23376: for (dimension_type i = 1, l_size = leaders.size(); i != l_size; ++i) { -23376: const dimension_type leaders_i = leaders[i]; -23376: ((void) 0); -23376: if (leaders_i != i) { -23376: const dimension_type leaders_leaders_i = leaders[leaders_i]; -23376: ((void) 0); -23376: leaders[i] = leaders_leaders_i; -23376: } -23376: } -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::is_shortest_path_reduced() const { -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim == 0) { -23376: return true; -23376: } -23376: -23376: -23376: -23376: if (!marked_shortest_path_reduced()) { -23376: return false; -23376: } -23376: -23376: const BD_Shape x_copy = *this; -23376: x_copy.shortest_path_closure_assign(); -23376: -23376: if (x_copy.marked_empty()) { -23376: return false; -23376: } -23376: -23376: std::vector leader(space_dim + 1); -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: leader[i] = i; -23376: } -23376: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: const DB_Row& x_copy_dbm_i = x_copy.dbm[i]; -23376: for (dimension_type j = i + 1; j <= space_dim; ++j) { -23376: if (is_additive_inverse(x_copy.dbm[j][i], x_copy_dbm_i[j])) { -23376: -23376: -23376: leader[j] = leader[i]; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; N& c = holder_c.item(); -23376: for (dimension_type k = 0; k <= space_dim; ++k) { -23376: if (leader[k] == k) { -23376: const DB_Row& x_k = x_copy.dbm[k]; -23376: for (dimension_type i = 0; i <= space_dim; ++i) { -23376: if (leader[i] == i) { -23376: const DB_Row& x_i = x_copy.dbm[i]; -23376: const Bit_Row& redundancy_i = redundancy_dbm[i]; -23376: const N& x_i_k = x_i[k]; -23376: for (dimension_type j = 0; j <= space_dim; ++j) { -23376: if (leader[j] == j) { -23376: const N& x_i_j = x_i[j]; -23376: if (!is_plus_infinity(x_i_j)) { -23376: add_assign_r(c, x_i_k, x_k[j], ROUND_UP); -23376: if (x_i_j >= c && !redundancy_i[j]) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: std::vector var_conn(space_dim + 1); -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: var_conn[i] = space_dim + 1; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: for (dimension_type i = 0; i <= space_dim; ++i) { -23376: -23376: -23376: dimension_type t = 0; -23376: dimension_type leader_i = leader[i]; -23376: -23376: if (leader_i == i) { -23376: for (dimension_type j = 0; j <= space_dim; ++j) { -23376: dimension_type leader_j = leader[j]; -23376: -23376: -23376: if (j != leader_j) { -23376: if (!redundancy_dbm[i][j]) { -23376: if (t == 1) { -23376: -23376: return false; -23376: } -23376: else { -23376: if (leader_j != i) { -23376: -23376: return false; -23376: } -23376: else { -23376: ++t; -23376: var_conn[i] = j; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: else { -23376: for (dimension_type j = 0; j <= space_dim; ++j) { -23376: if (!redundancy_dbm[i][j]) { -23376: dimension_type leader_j = leader[j]; -23376: if (leader_i != leader_j) { -23376: -23376: return false; -23376: } -23376: else { -23376: if (t == 1) { -23376: -23376: return false; -23376: } -23376: else { -23376: ++t; -23376: var_conn[i] = j; -23376: } -23376: } -23376: -23376: -23376: if (t == 0) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: std::vector just_checked(space_dim + 1); -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: just_checked[i] = false; -23376: } -23376: -23376: -23376: for (dimension_type i = 0; i <= space_dim; ++i) { -23376: -23376: if (!just_checked[i]) { -23376: dimension_type v_con = var_conn[i]; -23376: -23376: -23376: if (v_con != space_dim + 1) { -23376: -23376: -23376: while (v_con != i) { -23376: just_checked[v_con] = true; -23376: v_con = var_conn[v_con]; -23376: -23376: -23376: if (just_checked[v_con]) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: just_checked[i] = true; -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::bounds(const Linear_Expression& expr, -23376: const bool from_above) const { -23376: -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((from_above -23376: ? "bounds_from_above(e)" -23376: : "bounds_from_below(e)"), "e", expr); -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: if (space_dim == 0 || marked_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: const Constraint& c = from_above ? expr <= 0 : expr >= 0; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: -23376: if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: if (num_vars == 0) { -23376: -23376: return true; -23376: } -23376: -23376: const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i]; -23376: return !is_plus_infinity(x); -23376: } -23376: else { -23376: -23376: Optimization_Mode mode_bounds -23376: = from_above ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, mode_bounds); -23376: -23376: return mip.solve() == OPTIMIZED_MIP_PROBLEM; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included) const { -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((maximize -23376: ? "maximize(e, ...)" -23376: : "minimize(e, ...)"), "e", expr); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: else { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: return true; -23376: } -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: const Constraint& c = maximize ? expr <= 0 : expr >= 0; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: -23376: if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: Optimization_Mode mode_max_min -23376: = maximize ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, mode_max_min); -23376: if (mip.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: mip.optimal_value(ext_n, ext_d); -23376: included = true; -23376: return true; -23376: } -23376: else { -23376: -23376: return false; -23376: } -23376: } -23376: else { -23376: -23376: if (num_vars == 0) { -23376: -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: return true; -23376: } -23376: -23376: -23376: const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i]; -23376: if (!is_plus_infinity(x)) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = maximize ? b : minus_b; -23376: assign_r(d, sc_b, ROUND_UP); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item(); -23376: ((void) 0); -23376: const Coefficient& coeff_i = expr.get(Variable(i - 1)); -23376: const int sign_i = sgn(coeff_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_expr, coeff_i, ROUND_UP); -23376: } -23376: else { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item(); -23376: neg_assign(minus_coeff_i, coeff_i); -23376: assign_r(coeff_expr, minus_coeff_i, ROUND_UP); -23376: } -23376: -23376: add_mul_assign_r(d, coeff_expr, x, ROUND_UP); -23376: numer_denom(d, ext_n, ext_d); -23376: if (!maximize) { -23376: neg_assign(ext_n); -23376: } -23376: included = true; -23376: return true; -23376: } -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included, -23376: Generator& g) const { -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((maximize -23376: ? "maximize(e, ...)" -23376: : "minimize(e, ...)"), "e", expr); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: else { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: g = point(); -23376: return true; -23376: } -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: Optimization_Mode mode_max_min -23376: = maximize ? MAXIMIZATION : MINIMIZATION; -23376: MIP_Problem mip(space_dim, constraints(), expr, mode_max_min); -23376: if (mip.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = mip.optimizing_point(); -23376: mip.evaluate_objective_function(g, ext_n, ext_d); -23376: included = true; -23376: return true; -23376: } -23376: -23376: return false; -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: BD_Shape::relation_with(const Congruence& cg) const { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (cg.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("relation_with(cg)", cg); -23376: } -23376: -23376: -23376: if (cg.is_equality()) { -23376: Constraint c(cg); -23376: return relation_with(c); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (space_dim == 0) { -23376: if (cg.is_inconsistent()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: -23376: -23376: Linear_Expression le = Linear_Expression(cg.expression()); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool bounded_below = minimize(le, min_numer, min_denom, min_included); -23376: -23376: -23376: -23376: if (!bounded_below) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: bool bounded_above = maximize(le, max_numer, max_denom, max_included); -23376: -23376: -23376: -23376: if (!bounded_above) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: Parma_Polyhedra_Library::Dirty_Temp holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item(); -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item(); -23376: min_value = min_numer / min_denom; -23376: const Coefficient& modulus = cg.modulus(); -23376: signed_distance = min_value % modulus; -23376: min_value -= signed_distance; -23376: if (min_value * min_denom < min_numer) { -23376: min_value += modulus; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item(); -23376: max_value = max_numer / max_denom; -23376: signed_distance = max_value % modulus; -23376: max_value += signed_distance; -23376: if (max_value * max_denom > max_numer) { -23376: max_value -= modulus; -23376: } -23376: -23376: -23376: -23376: if (max_value < min_value) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: -23376: -23376: template -23376: Poly_Con_Relation -23376: BD_Shape::relation_with(const Constraint& c) const { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (c_space_dim > space_dim) { -23376: throw_dimension_incompatible("relation_with(c)", c); -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (space_dim == 0) { -23376: if ((c.is_equality() && c.inhomogeneous_term() != 0) -23376: || (c.is_inequality() && c.inhomogeneous_term() < 0)) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) { -23376: -23376: -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else if (c.is_equality() || c.inhomogeneous_term() == 0) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: else { -23376: -23376: -23376: -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: Linear_Expression le(c.expression()); -23376: le.set_inhomogeneous_term(Coefficient_zero()); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool bounded_above = maximize(le, max_numer, max_denom, max_included); -23376: bool bounded_below = minimize(le, min_numer, min_denom, min_included); -23376: if (!bounded_above) { -23376: if (!bounded_below) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: min_numer += c.inhomogeneous_term() * min_denom; -23376: switch (sgn(min_numer)) { -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (c.is_strict_inequality() || c.is_equality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case -1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: if (!bounded_below) { -23376: max_numer += c.inhomogeneous_term() * max_denom; -23376: switch (sgn(max_numer)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: else { -23376: max_numer += c.inhomogeneous_term() * max_denom; -23376: min_numer += c.inhomogeneous_term() * min_denom; -23376: switch (sgn(max_numer)) { -23376: case 1: -23376: switch (sgn(min_numer)) { -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: return Poly_Con_Relation::is_included(); -23376: case -1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: case 0: -23376: if (min_numer == 0) { -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: return Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: } -23376: -23376: -23376: if (num_vars == 0) { -23376: -23376: switch (sgn(c.inhomogeneous_term())) { -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: case 0: -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: case 1: -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: const bool negative = (coeff < 0); -23376: const N& x = negative ? dbm[i][j] : dbm[j][i]; -23376: const N& y = negative ? dbm[j][i] : dbm[i][j]; -23376: if (negative) { -23376: neg_assign(coeff); -23376: } -23376: # 1672 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_x; mpq_class& q_x = holder_q_x.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_y; mpq_class& q_y = holder_q_y.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; mpq_class& d = holder_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d1; mpq_class& d1 = holder_d1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_denom; mpq_class& c_denom = holder_c_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_denom; mpq_class& q_denom = holder_q_denom.item(); -23376: assign_r(c_denom, coeff, ROUND_NOT_NEEDED); -23376: assign_r(d, c.inhomogeneous_term(), ROUND_NOT_NEEDED); -23376: neg_assign_r(d1, d, ROUND_NOT_NEEDED); -23376: div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED); -23376: div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED); -23376: -23376: if (is_plus_infinity(x)) { -23376: if (!is_plus_infinity(y)) { -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: numer_denom(y, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_y, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED); -23376: if (q_y < d1) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (q_y == d1 && c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: -23376: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: numer_denom(x, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_x, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED); -23376: -23376: if (!is_plus_infinity(y)) { -23376: numer_denom(y, numer, denom); -23376: assign_r(q_denom, denom, ROUND_NOT_NEEDED); -23376: assign_r(q_y, numer, ROUND_NOT_NEEDED); -23376: div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED); -23376: if (q_x == d && q_y == d1) { -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: -23376: -23376: if (q_y < d1) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (q_y == d1 && c.is_strict_inequality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: if (d > q_x) { -23376: if (c.is_equality()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: if (d == q_x && c.is_nonstrict_inequality()) { -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: template -23376: Poly_Gen_Relation -23376: BD_Shape::relation_with(const Generator& g) const { -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type g_space_dim = g.space_dimension(); -23376: -23376: -23376: if (space_dim < g_space_dim) { -23376: throw_dimension_incompatible("relation_with(g)", g); -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: -23376: -23376: if (space_dim == 0) { -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: const bool is_line = g.is_line(); -23376: const bool is_line_or_ray = g.is_line_or_ray(); -23376: # 1792 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item(); -23376: -23376: -23376: for (dimension_type i = 0; i <= space_dim; ++i) { -23376: const Coefficient& g_coeff_y = (i > g_space_dim || i == 0) -23376: ? Coefficient_zero() : g.coefficient(Variable(i-1)); -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = i + 1; j <= space_dim; ++j) { -23376: const Coefficient& g_coeff_x = (j > g_space_dim) -23376: ? Coefficient_zero() : g.coefficient(Variable(j-1)); -23376: const N& dbm_ij = dbm_i[j]; -23376: const N& dbm_ji = dbm[j][i]; -23376: if (is_additive_inverse(dbm_ji, dbm_ij)) { -23376: -23376: -23376: numer_denom(dbm_ij, numer, denom); -23376: product = g_coeff_y; -23376: product -= g_coeff_x; -23376: product *= denom; -23376: if (!is_line_or_ray) { -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (product != 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(dbm_ij)) { -23376: -23376: -23376: -23376: numer_denom(dbm_ij, numer, denom); -23376: product = g_coeff_y; -23376: product -= g_coeff_x; -23376: product *= denom; -23376: if (!is_line_or_ray) { -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line) { -23376: if (product != 0) { -23376: -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else { -23376: -23376: if (product < 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: -23376: if (!is_plus_infinity(dbm_ji)) { -23376: -23376: -23376: numer_denom(dbm_ji, numer, denom); -23376: product = 0; -23376: add_mul_assign(product, denom, g_coeff_x); -23376: add_mul_assign(product, -denom, g_coeff_y); -23376: if (!is_line_or_ray) { -23376: add_mul_assign(product, numer, g.divisor()); -23376: } -23376: if (is_line) { -23376: if (product != 0) { -23376: -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else { -23376: -23376: if (product < 0) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::shortest_path_closure_assign() const { -23376: -23376: if (marked_empty() || marked_shortest_path_closed()) { -23376: return; -23376: } -23376: const dimension_type num_dimensions = space_dimension(); -23376: -23376: if (num_dimensions == 0) { -23376: return; -23376: } -23376: -23376: -23376: BD_Shape& x = const_cast&>(*this); -23376: -23376: -23376: for (dimension_type h = num_dimensions + 1; h-- > 0; ) { -23376: ((void) 0); -23376: assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: for (dimension_type k = num_dimensions + 1; k-- > 0; ) { -23376: const DB_Row& x_dbm_k = x.dbm[k]; -23376: for (dimension_type i = num_dimensions + 1; i-- > 0; ) { -23376: DB_Row& x_dbm_i = x.dbm[i]; -23376: const N& x_dbm_i_k = x_dbm_i[k]; -23376: if (!is_plus_infinity(x_dbm_i_k)) { -23376: for (dimension_type j = num_dimensions + 1; j-- > 0; ) { -23376: const N& x_dbm_k_j = x_dbm_k[j]; -23376: if (!is_plus_infinity(x_dbm_k_j)) { -23376: -23376: add_assign_r(sum, x_dbm_i_k, x_dbm_k_j, ROUND_UP); -23376: min_assign(x_dbm_i[j], sum); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (dimension_type h = num_dimensions + 1; h-- > 0; ) { -23376: N& x_dbm_hh = x.dbm[h][h]; -23376: if (sgn(x_dbm_hh) < 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: -23376: x.set_shortest_path_closed(); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::incremental_shortest_path_closure_assign(Variable var) const { -23376: -23376: if (marked_empty() || marked_shortest_path_closed()) { -23376: return; -23376: } -23376: const dimension_type num_dimensions = space_dimension(); -23376: ((void) 0); -23376: -23376: -23376: -23376: BD_Shape& x = const_cast(*this); -23376: -23376: -23376: for (dimension_type h = num_dimensions + 1; h-- > 0; ) { -23376: ((void) 0); -23376: assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED); -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: const dimension_type v = var.id() + 1; -23376: DB_Row& x_v = x.dbm[v]; -23376: -23376: for (dimension_type k = num_dimensions + 1; k-- > 0; ) { -23376: DB_Row& x_k = x.dbm[k]; -23376: const N& x_v_k = x_v[k]; -23376: const N& x_k_v = x_k[v]; -23376: const bool x_v_k_finite = !is_plus_infinity(x_v_k); -23376: const bool x_k_v_finite = !is_plus_infinity(x_k_v); -23376: -23376: if (x_v_k_finite) { -23376: if (x_k_v_finite) { -23376: -23376: for (dimension_type i = num_dimensions + 1; i-- > 0; ) { -23376: DB_Row& x_i = x.dbm[i]; -23376: const N& x_i_k = x_i[k]; -23376: if (!is_plus_infinity(x_i_k)) { -23376: add_assign_r(sum, x_i_k, x_k_v, ROUND_UP); -23376: min_assign(x_i[v], sum); -23376: } -23376: const N& x_k_i = x_k[i]; -23376: if (!is_plus_infinity(x_k_i)) { -23376: add_assign_r(sum, x_v_k, x_k_i, ROUND_UP); -23376: min_assign(x_v[i], sum); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: for (dimension_type i = num_dimensions + 1; i-- > 0; ) { -23376: const N& x_k_i = x_k[i]; -23376: if (!is_plus_infinity(x_k_i)) { -23376: add_assign_r(sum, x_v_k, x_k_i, ROUND_UP); -23376: min_assign(x_v[i], sum); -23376: } -23376: } -23376: } -23376: } -23376: else if (x_k_v_finite) { -23376: -23376: for (dimension_type i = num_dimensions + 1; i-- > 0; ) { -23376: DB_Row& x_i = x.dbm[i]; -23376: const N& x_i_k = x_i[k]; -23376: if (!is_plus_infinity(x_i_k)) { -23376: add_assign_r(sum, x_i_k, x_k_v, ROUND_UP); -23376: min_assign(x_i[v], sum); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: continue; -23376: } -23376: } -23376: -23376: -23376: -23376: for (dimension_type i = num_dimensions + 1; i-- > 0; ) { -23376: DB_Row& x_i = x.dbm[i]; -23376: const N& x_i_v = x_i[v]; -23376: if (!is_plus_infinity(x_i_v)) { -23376: for (dimension_type j = num_dimensions + 1; j-- > 0; ) { -23376: const N& x_v_j = x_v[j]; -23376: if (!is_plus_infinity(x_v_j)) { -23376: add_assign_r(sum, x_i_v, x_v_j, ROUND_UP); -23376: min_assign(x_i[j], sum); -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (dimension_type h = num_dimensions + 1; h-- > 0; ) { -23376: N& x_dbm_hh = x.dbm[h][h]; -23376: if (sgn(x_dbm_hh) < 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: -23376: x.set_shortest_path_closed(); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::shortest_path_reduction_assign() const { -23376: -23376: if (marked_shortest_path_reduced()) { -23376: return; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: std::vector predecessor; -23376: compute_predecessors(predecessor); -23376: std::vector leaders; -23376: compute_leader_indices(predecessor, leaders); -23376: const dimension_type num_leaders = leaders.size(); -23376: -23376: Bit_Matrix redundancy(space_dim + 1, space_dim + 1); -23376: -23376: -23376: Bit_Row& red_0 = redundancy[0]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: red_0.set(j); -23376: } -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: redundancy[i] = red_0; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; N& c = holder_c.item(); -23376: for (dimension_type l_i = 0; l_i < num_leaders; ++l_i) { -23376: const dimension_type i = leaders[l_i]; -23376: const DB_Row& dbm_i = dbm[i]; -23376: Bit_Row& redundancy_i = redundancy[i]; -23376: for (dimension_type l_j = 0; l_j < num_leaders; ++l_j) { -23376: const dimension_type j = leaders[l_j]; -23376: if (redundancy_i[j]) { -23376: const N& dbm_i_j = dbm_i[j]; -23376: redundancy_i.clear(j); -23376: for (dimension_type l_k = 0; l_k < num_leaders; ++l_k) { -23376: const dimension_type k = leaders[l_k]; -23376: add_assign_r(c, dbm_i[k], dbm[k][j], ROUND_UP); -23376: if (dbm_i_j >= c) { -23376: redundancy_i.set(j); -23376: break; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: std::deque dealt_with(space_dim + 1, false); -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: -23376: -23376: if (i != predecessor[i] && !dealt_with[i]) { -23376: dimension_type j = i; -23376: while (true) { -23376: const dimension_type predecessor_j = predecessor[j]; -23376: if (j == predecessor_j) { -23376: -23376: ((void) 0); -23376: redundancy[i].clear(j); -23376: -23376: -23376: break; -23376: } -23376: -23376: ((void) 0); -23376: redundancy[predecessor_j].clear(j); -23376: dealt_with[predecessor_j] = true; -23376: j = predecessor_j; -23376: } -23376: } -23376: } -23376: -23376: -23376: BD_Shape& x = const_cast&>(*this); -23376: using std::swap; -23376: swap(x.redundancy_dbm, redundancy); -23376: x.set_shortest_path_reduced(); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::upper_bound_assign(const BD_Shape& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("upper_bound_assign(y)", y); -23376: } -23376: -23376: y.shortest_path_closure_assign(); -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: *this = y; -23376: return; -23376: } -23376: -23376: -23376: -23376: ((void) 0); -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: N& dbm_ij = dbm_i[j]; -23376: const N& y_dbm_ij = y_dbm_i[j]; -23376: if (dbm_ij < y_dbm_ij) { -23376: dbm_ij = y_dbm_ij; -23376: } -23376: } -23376: } -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::BFT00_upper_bound_assign_if_exact(const BD_Shape& y) { -23376: -23376: const BD_Shape& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: if (x_space_dim == 0) { -23376: upper_bound_assign(y); -23376: return true; -23376: } -23376: -23376: if (x.marked_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: else if (y.is_empty()) { -23376: return true; -23376: } -23376: else if (x.is_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: Variable epsilon(x_space_dim); -23376: Linear_Expression zero_expr; -23376: zero_expr.set_space_dimension(x_space_dim + 1); -23376: Linear_Expression db_expr; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: -23376: -23376: -23376: -23376: -23376: Constraint_System env_cs; -23376: Constraint_System x_cs_removed; -23376: Constraint_System y_cs_removed; -23376: x.shortest_path_reduction_assign(); -23376: y.shortest_path_reduction_assign(); -23376: for (dimension_type i = x_space_dim + 1; i-- > 0; ) { -23376: const Bit_Row& x_red_i = x.redundancy_dbm[i]; -23376: const Bit_Row& y_red_i = y.redundancy_dbm[i]; -23376: const DB_Row& x_dbm_i = x.dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = x_space_dim + 1; j-- > 0; ) { -23376: if (x_red_i[j] && y_red_i[j]) { -23376: continue; -23376: } -23376: if (!x_red_i[j]) { -23376: const N& x_dbm_ij = x_dbm_i[j]; -23376: ((void) 0); -23376: numer_denom(x_dbm_ij, numer, denom); -23376: -23376: db_expr = zero_expr; -23376: if (i > 0) { -23376: db_expr += Variable(i-1); -23376: } -23376: if (j > 0) { -23376: db_expr -= Variable(j-1); -23376: } -23376: if (denom != 1) { -23376: db_expr *= denom; -23376: } -23376: db_expr += numer; -23376: if (x_dbm_ij >= y_dbm_i[j]) { -23376: env_cs.insert(db_expr >= 0); -23376: } -23376: else { -23376: db_expr += epsilon; -23376: x_cs_removed.insert(db_expr == 0); -23376: } -23376: } -23376: if (!y_red_i[j]) { -23376: const N& y_dbm_ij = y_dbm_i[j]; -23376: const N& x_dbm_ij = x_dbm_i[j]; -23376: ((void) 0); -23376: numer_denom(y_dbm_ij, numer, denom); -23376: -23376: db_expr = zero_expr; -23376: if (i > 0) { -23376: db_expr += Variable(i-1); -23376: } -23376: if (j > 0) { -23376: db_expr -= Variable(j-1); -23376: } -23376: if (denom != 1) { -23376: db_expr *= denom; -23376: } -23376: db_expr += numer; -23376: if (y_dbm_ij >= x_dbm_ij) { -23376: -23376: if (!x_red_i[j] && x_dbm_ij == y_dbm_ij) { -23376: continue; -23376: } -23376: env_cs.insert(db_expr >= 0); -23376: } -23376: else { -23376: db_expr += epsilon; -23376: y_cs_removed.insert(db_expr == 0); -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (x_cs_removed.empty()) { -23376: -23376: return true; -23376: } -23376: if (y_cs_removed.empty()) { -23376: -23376: *this = y; -23376: return true; -23376: } -23376: -23376: -23376: -23376: -23376: MIP_Problem env_lp(x_space_dim + 1, env_cs, epsilon, MAXIMIZATION); -23376: -23376: env_lp.solve(); -23376: ((void) 0); -23376: -23376: -23376: for (Constraint_System::const_iterator i = x_cs_removed.begin(), -23376: i_end = x_cs_removed.end(); i != i_end; ++i) { -23376: MIP_Problem lp_i(env_lp); -23376: lp_i.add_constraint(*i); -23376: -23376: if (lp_i.solve() == UNFEASIBLE_MIP_PROBLEM) { -23376: continue; -23376: } -23376: for (Constraint_System::const_iterator j = y_cs_removed.begin(), -23376: j_end = y_cs_removed.end(); j != j_end; ++j) { -23376: MIP_Problem lp_ij(lp_i); -23376: lp_ij.add_constraint(*j); -23376: -23376: switch (lp_ij.solve()) { -23376: case UNFEASIBLE_MIP_PROBLEM: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: case UNBOUNDED_MIP_PROBLEM: -23376: return false; -23376: case OPTIMIZED_MIP_PROBLEM: -23376: lp_ij.optimal_value(numer, denom); -23376: if (numer > 0) { -23376: return false; -23376: } -23376: break; -23376: } -23376: } -23376: } -23376: -23376: -23376: upper_bound_assign(y); -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: template -23376: bool -23376: BD_Shape::BHZ09_upper_bound_assign_if_exact(const BD_Shape& y) { -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2368 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!integer_upper_bound || std::numeric_limits::is_integer)>) } -23376: -23376: -23376: -23376: ; -23376: -23376: -23376: -23376: const BD_Shape& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: if (x_space_dim == 0) { -23376: upper_bound_assign(y); -23376: return true; -23376: } -23376: -23376: if (x.marked_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: else if (y.is_empty()) { -23376: return true; -23376: } -23376: else if (x.is_empty()) { -23376: *this = y; -23376: return true; -23376: } -23376: -23376: -23376: x.shortest_path_reduction_assign(); -23376: y.shortest_path_reduction_assign(); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: BD_Shape ub(x); -23376: ub.upper_bound_assign(y); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lhs; N& lhs = holder_lhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_rhs; N& rhs = holder_rhs.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_zero; N& temp_zero = holder_temp_zero.item(); -23376: assign_r(temp_zero, 0, ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_temp_one; N& temp_one = holder_temp_one.item(); -23376: if (integer_upper_bound) { -23376: assign_r(temp_one, 1, ROUND_NOT_NEEDED); -23376: } -23376: for (dimension_type i = x_space_dim + 1; i-- > 0; ) { -23376: const DB_Row& x_i = x.dbm[i]; -23376: const Bit_Row& x_red_i = x.redundancy_dbm[i]; -23376: const DB_Row& y_i = y.dbm[i]; -23376: const DB_Row& ub_i = ub.dbm[i]; -23376: for (dimension_type j = x_space_dim + 1; j-- > 0; ) { -23376: -23376: if (x_red_i[j]) { -23376: continue; -23376: } -23376: -23376: ((void) 0); -23376: const N& x_i_j = x_i[j]; -23376: if (x_i_j < y_i[j]) { -23376: for (dimension_type k = x_space_dim + 1; k-- > 0; ) { -23376: const DB_Row& x_k = x.dbm[k]; -23376: const DB_Row& y_k = y.dbm[k]; -23376: const Bit_Row& y_red_k = y.redundancy_dbm[k]; -23376: const DB_Row& ub_k = ub.dbm[k]; -23376: const N& ub_k_j = (k == j) ? temp_zero : ub_k[j]; -23376: for (dimension_type ell = x_space_dim + 1; ell-- > 0; ) { -23376: -23376: if (y_red_k[ell]) { -23376: continue; -23376: } -23376: -23376: ((void) 0); -23376: const N& y_k_ell = y_k[ell]; -23376: if (y_k_ell < x_k[ell]) { -23376: -23376: -23376: add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP); -23376: const N& ub_i_ell = (i == ell) ? temp_zero : ub_i[ell]; -23376: add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP); -23376: if (integer_upper_bound) { -23376: -23376: -23376: add_assign_r(lhs, lhs, temp_one, ROUND_NOT_NEEDED); -23376: } -23376: -23376: if (lhs < rhs) { -23376: return false; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: m_swap(ub); -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::difference_assign(const BD_Shape& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("difference_assign(y)", y); -23376: } -23376: BD_Shape new_bd_shape(space_dim, EMPTY); -23376: -23376: BD_Shape& x = *this; -23376: -23376: x.shortest_path_closure_assign(); -23376: -23376: -23376: if (x.marked_empty()) { -23376: return; -23376: } -23376: y.shortest_path_closure_assign(); -23376: -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (y.contains(x)) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: const Constraint_System& y_cs = y.constraints(); -23376: for (Constraint_System::const_iterator i = y_cs.begin(), -23376: y_cs_end = y_cs.end(); i != y_cs_end; ++i) { -23376: const Constraint& c = *i; -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) { -23376: continue; -23376: } -23376: BD_Shape z = x; -23376: const Linear_Expression e(c.expression()); -23376: z.add_constraint(e <= 0); -23376: if (!z.is_empty()) { -23376: new_bd_shape.upper_bound_assign(z); -23376: } -23376: if (c.is_equality()) { -23376: z = x; -23376: z.add_constraint(e >= 0); -23376: if (!z.is_empty()) { -23376: new_bd_shape.upper_bound_assign(z); -23376: } -23376: } -23376: } -23376: *this = new_bd_shape; -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::simplify_using_context_assign(const BD_Shape& y) { -23376: BD_Shape& x = *this; -23376: const dimension_type dim = x.space_dimension(); -23376: -23376: if (dim != y.space_dimension()) { -23376: throw_dimension_incompatible("simplify_using_context_assign(y)", y); -23376: } -23376: -23376: if (dim == 0) { -23376: if (y.marked_empty()) { -23376: x.set_zero_dim_univ(); -23376: return false; -23376: } -23376: else { -23376: return !x.marked_empty(); -23376: } -23376: } -23376: -23376: -23376: -23376: y.shortest_path_closure_assign(); -23376: if (x.contains(y)) { -23376: BD_Shape res(dim, UNIVERSE); -23376: x.m_swap(res); -23376: return false; -23376: } -23376: -23376: -23376: x.shortest_path_closure_assign(); -23376: if (x.marked_empty()) { -23376: -23376: dimension_type i; -23376: dimension_type j; -23376: -23376: i = 0; -23376: const DB_Row& y_dbm_0 = y.dbm[0]; -23376: for (j = 1; j <= dim; ++j) { -23376: if (!is_plus_infinity(y_dbm_0[j])) { -23376: -23376: -23376: -23376: goto found; -23376: } -23376: } -23376: j = 0; -23376: for (i = 1; i <= dim; ++i) { -23376: if (!is_plus_infinity(y.dbm[i][0])) { -23376: -23376: -23376: -23376: goto found; -23376: } -23376: } -23376: -23376: for (i = 1; i <= dim; ++i) { -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (j = 1; j <= dim; ++j) { -23376: if (!is_plus_infinity(y_dbm_i[j])) { -23376: -23376: -23376: -23376: goto found; -23376: } -23376: } -23376: } -23376: -23376: -23376: return false; -23376: -23376: found: -23376: -23376: ((void) 0); -23376: BD_Shape res(dim, UNIVERSE); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: assign_r(tmp, 1, ROUND_UP); -23376: add_assign_r(tmp, tmp, y.dbm[i][j], ROUND_UP); -23376: ((void) 0); -23376: -23376: neg_assign_r(res.dbm[j][i], tmp, ROUND_DOWN); -23376: x.m_swap(res); -23376: return false; -23376: } -23376: -23376: -23376: -23376: -23376: BD_Shape target = x; -23376: target.intersection_assign(y); -23376: const bool bool_result = !target.is_empty(); -23376: -23376: -23376: x.shortest_path_reduction_assign(); -23376: -23376: dimension_type x_num_non_redundant = (dim+1)*(dim+1); -23376: for (dimension_type i = dim + 1; i-- > 0; ) { -23376: x_num_non_redundant -= x.redundancy_dbm[i].count_ones(); -23376: } -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: BD_Shape yy = y; -23376: -23376: -23376: BD_Shape res(dim, UNIVERSE); -23376: -23376: dimension_type res_num_non_redundant = 0; -23376: -23376: -23376: std::vector x_leaders; -23376: x.compute_leaders(x_leaders); -23376: -23376: -23376: const DB_Row& x_dbm_0 = x.dbm[0]; -23376: DB_Row& yy_dbm_0 = yy.dbm[0]; -23376: DB_Row& res_dbm_0 = res.dbm[0]; -23376: for (dimension_type j = 1; j <= dim; ++j) { -23376: -23376: -23376: if (x_leaders[j] != 0) { -23376: continue; -23376: } -23376: ((void) 0); -23376: if (x_dbm_0[j] < yy_dbm_0[j]) { -23376: res_dbm_0[j] = x_dbm_0[j]; -23376: ++res_num_non_redundant; -23376: -23376: yy_dbm_0[j] = x_dbm_0[j]; -23376: yy.reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: if (x.dbm[j][0] < yy.dbm[j][0]) { -23376: res.dbm[j][0] = x.dbm[j][0]; -23376: ++res_num_non_redundant; -23376: -23376: yy.dbm[j][0] = x.dbm[j][0]; -23376: yy.reset_shortest_path_closed(); -23376: } -23376: -23376: if (!yy.marked_shortest_path_closed()) { -23376: Variable var_j(j-1); -23376: yy.incremental_shortest_path_closure_assign(var_j); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_shortest_path_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (dimension_type i = 2; i <= dim; ++i) { -23376: const dimension_type j = x_leaders[i]; -23376: if (j == i || j == 0) { -23376: continue; -23376: } -23376: ((void) 0); -23376: if (x.dbm[i][j] < yy.dbm[i][j]) { -23376: res.dbm[i][j] = x.dbm[i][j]; -23376: ++res_num_non_redundant; -23376: -23376: yy.dbm[i][j] = x.dbm[i][j]; -23376: yy.reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: if (x.dbm[j][i] < yy.dbm[j][i]) { -23376: res.dbm[j][i] = x.dbm[j][i]; -23376: ++res_num_non_redundant; -23376: -23376: yy.dbm[j][i] = x.dbm[j][i]; -23376: yy.reset_shortest_path_closed(); -23376: } -23376: -23376: if (!yy.marked_shortest_path_closed()) { -23376: Variable var_j(j-1); -23376: yy.incremental_shortest_path_closure_assign(var_j); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_shortest_path_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: for (dimension_type i = 0; i <= dim; ++i) { -23376: if (i != x_leaders[i]) { -23376: continue; -23376: } -23376: const DB_Row& x_dbm_i = x.dbm[i]; -23376: const Bit_Row& x_redundancy_dbm_i = x.redundancy_dbm[i]; -23376: DB_Row& yy_dbm_i = yy.dbm[i]; -23376: DB_Row& res_dbm_i = res.dbm[i]; -23376: for (dimension_type j = 0; j <= dim; ++j) { -23376: if (j != x_leaders[j] || x_redundancy_dbm_i[j]) { -23376: continue; -23376: } -23376: N& yy_dbm_ij = yy_dbm_i[j]; -23376: const N& x_dbm_ij = x_dbm_i[j]; -23376: if (x_dbm_ij < yy_dbm_ij) { -23376: res_dbm_i[j] = x_dbm_ij; -23376: ++res_num_non_redundant; -23376: -23376: yy_dbm_ij = x_dbm_ij; -23376: yy.reset_shortest_path_closed(); -23376: ((void) 0); -23376: Variable var(((i > 0) ? i : j) - 1); -23376: yy.incremental_shortest_path_closure_assign(var); -23376: if (target.contains(yy)) { -23376: -23376: if (res_num_non_redundant < x_num_non_redundant) { -23376: res.reset_shortest_path_closed(); -23376: x.m_swap(res); -23376: } -23376: return bool_result; -23376: } -23376: } -23376: } -23376: } -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return false; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::add_space_dimensions_and_embed(const dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type new_space_dim = space_dim + m; -23376: const bool was_zero_dim_univ = (!marked_empty() && space_dim == 0); -23376: -23376: -23376: -23376: -23376: dbm.grow(new_space_dim + 1); -23376: -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: -23376: if (was_zero_dim_univ) { -23376: set_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::add_space_dimensions_and_project(const dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: dbm.grow(m + 1); -23376: if (!marked_empty()) { -23376: for (dimension_type i = m + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = m + 1; j-- > 0; ) { -23376: if (i != j) { -23376: assign_r(dbm_i[j], 0, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: set_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const dimension_type new_space_dim = space_dim + m; -23376: dbm.grow(new_space_dim + 1); -23376: -23376: -23376: DB_Row& dbm_0 = dbm[0]; -23376: for (dimension_type i = space_dim + 1; i <= new_space_dim; ++i) { -23376: assign_r(dbm[i][0], 0, ROUND_NOT_NEEDED); -23376: assign_r(dbm_0[i], 0, ROUND_NOT_NEEDED); -23376: } -23376: -23376: if (marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::remove_space_dimensions(const Variables_Set& vars) { -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: const dimension_type old_space_dim = space_dimension(); -23376: -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (old_space_dim < min_space_dim) { -23376: throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: -23376: -23376: -23376: const dimension_type new_space_dim = old_space_dim - vars.size(); -23376: if (new_space_dim == 0) { -23376: dbm.resize_no_copy(1); -23376: if (!marked_empty()) { -23376: -23376: set_zero_dim_univ(); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: dbm.resize_no_copy(new_space_dim + 1); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: -23376: -23376: Variables_Set::const_iterator vsi = vars.begin(); -23376: Variables_Set::const_iterator vsi_end = vars.end(); -23376: dimension_type dst = *vsi + 1; -23376: dimension_type src = dst + 1; -23376: for (++vsi; vsi != vsi_end; ++vsi) { -23376: const dimension_type vsi_next = *vsi + 1; -23376: -23376: -23376: while (src < vsi_next) { -23376: using std::swap; -23376: swap(dbm[dst], dbm[src]); -23376: for (dimension_type i = old_space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: assign_or_swap(dbm_i[dst], dbm_i[src]); -23376: } -23376: ++dst; -23376: ++src; -23376: } -23376: ++src; -23376: } -23376: -23376: -23376: while (src <= old_space_dim) { -23376: using std::swap; -23376: swap(dbm[dst], dbm[src]); -23376: for (dimension_type i = old_space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: assign_or_swap(dbm_i[dst], dbm_i[src]); -23376: } -23376: ++src; -23376: ++dst; -23376: } -23376: -23376: -23376: dbm.resize_no_copy(new_space_dim + 1); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape::map_space_dimensions(const Partial_Function& pfunc) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: if (pfunc.has_empty_codomain()) { -23376: -23376: remove_higher_space_dimensions(0); -23376: return; -23376: } -23376: -23376: const dimension_type new_space_dim = pfunc.max_in_codomain() + 1; -23376: -23376: -23376: if (new_space_dim < space_dim) { -23376: shortest_path_closure_assign(); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: remove_higher_space_dimensions(new_space_dim); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: DB_Matrix x(new_space_dim+1); -23376: -23376: -23376: -23376: DB_Row& dbm_0 = dbm[0]; -23376: DB_Row& x_0 = x[0]; -23376: for (dimension_type j = 1; j <= space_dim; ++j) { -23376: dimension_type new_j; -23376: if (pfunc.maps(j - 1, new_j)) { -23376: assign_or_swap(x_0[new_j + 1], dbm_0[j]); -23376: assign_or_swap(x[new_j + 1][0], dbm[j][0]); -23376: } -23376: } -23376: -23376: for (dimension_type i = 1; i <= space_dim; ++i) { -23376: dimension_type new_i; -23376: if (pfunc.maps(i - 1, new_i)) { -23376: DB_Row& dbm_i = dbm[i]; -23376: ++new_i; -23376: DB_Row& x_new_i = x[new_i]; -23376: for (dimension_type j = i+1; j <= space_dim; ++j) { -23376: dimension_type new_j; -23376: if (pfunc.maps(j - 1, new_j)) { -23376: ++new_j; -23376: assign_or_swap(x_new_i[new_j], dbm_i[j]); -23376: assign_or_swap(x[new_j][new_i], dbm[j][i]); -23376: } -23376: } -23376: } -23376: } -23376: -23376: using std::swap; -23376: swap(dbm, x); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::intersection_assign(const BD_Shape& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("intersection_assign(y)", y); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: bool changed = false; -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: N& dbm_ij = dbm_i[j]; -23376: const N& y_dbm_ij = y_dbm_i[j]; -23376: if (dbm_ij > y_dbm_ij) { -23376: dbm_ij = y_dbm_ij; -23376: changed = true; -23376: } -23376: } -23376: } -23376: -23376: if (changed && marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape::CC76_extrapolation_assign(const BD_Shape& y, -23376: Iterator first, Iterator last, -23376: unsigned* tp) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("CC76_extrapolation_assign(y)", y); -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: y.shortest_path_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: if (tp != 0 && *tp > 0) { -23376: BD_Shape x_tmp(*this); -23376: x_tmp.CC76_extrapolation_assign(y, first, last, 0); -23376: -23376: if (!contains(x_tmp)) { -23376: --(*tp); -23376: } -23376: return; -23376: } -23376: # 3108 "../../src/BD_Shape_templates.hh" -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: N& dbm_ij = dbm_i[j]; -23376: const N& y_dbm_ij = y_dbm_i[j]; -23376: if (y_dbm_ij < dbm_ij) { -23376: Iterator k = std::lower_bound(first, last, dbm_ij); -23376: if (k != last) { -23376: if (dbm_ij < *k) { -23376: assign_r(dbm_ij, *k, ROUND_UP); -23376: } -23376: } -23376: else { -23376: assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: } -23376: reset_shortest_path_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::get_limiting_shape(const Constraint_System& cs, -23376: BD_Shape& limiting_shape) const { -23376: -23376: ((void) 0); -23376: -23376: shortest_path_closure_assign(); -23376: bool changed = false; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d1; N& d1 = holder_d1.item(); -23376: for (Constraint_System::const_iterator cs_i = cs.begin(), -23376: cs_end = cs.end(); cs_i != cs_end; ++cs_i) { -23376: const Constraint& c = *cs_i; -23376: dimension_type num_vars = 0; -23376: dimension_type i = 0; -23376: dimension_type j = 0; -23376: -23376: if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) { -23376: -23376: -23376: const bool negative = (coeff < 0); -23376: const N& x = negative ? dbm[i][j] : dbm[j][i]; -23376: const N& y = negative ? dbm[j][i] : dbm[i][j]; -23376: DB_Matrix& ls_dbm = limiting_shape.dbm; -23376: if (negative) { -23376: neg_assign(coeff); -23376: } -23376: -23376: div_round_up(d, c.inhomogeneous_term(), coeff); -23376: if (x <= d) { -23376: if (c.is_inequality()) { -23376: N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i]; -23376: if (ls_x > d) { -23376: ls_x = d; -23376: changed = true; -23376: } -23376: } -23376: else { -23376: -23376: neg_assign(minus_c_term, c.inhomogeneous_term()); -23376: div_round_up(d1, minus_c_term, coeff); -23376: if (y <= d1) { -23376: N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i]; -23376: N& ls_y = negative ? ls_dbm[j][i] : ls_dbm[i][j]; -23376: if ((ls_x >= d && ls_y > d1) || (ls_x > d && ls_y >= d1)) { -23376: ls_x = d; -23376: ls_y = d1; -23376: changed = true; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: if (changed && limiting_shape.marked_shortest_path_closed()) { -23376: limiting_shape.reset_shortest_path_closed(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::limited_CC76_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)", -23376: y); -23376: } -23376: -23376: -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: if (space_dim < cs_space_dim) { -23376: throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)", -23376: "cs is space_dimension incompatible"); -23376: } -23376: -23376: -23376: if (cs.has_strict_inequalities()) { -23376: throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)", -23376: "cs has strict inequalities"); -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: BD_Shape limiting_shape(space_dim, UNIVERSE); -23376: get_limiting_shape(cs, limiting_shape); -23376: CC76_extrapolation_assign(y, tp); -23376: intersection_assign(limiting_shape); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("BHMZ05_widening_assign(y)", y); -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: const dimension_type y_affine_dim = y.affine_dimension(); -23376: -23376: -23376: -23376: if (y_affine_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: const dimension_type x_affine_dim = affine_dimension(); -23376: ((void) 0); -23376: if (x_affine_dim != y_affine_dim) { -23376: return; -23376: } -23376: -23376: if (tp != 0 && *tp > 0) { -23376: BD_Shape x_tmp(*this); -23376: x_tmp.BHMZ05_widening_assign(y, 0); -23376: -23376: if (!contains(x_tmp)) { -23376: --(*tp); -23376: } -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: y.shortest_path_reduction_assign(); -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: const Bit_Row& y_redundancy_i = y.redundancy_dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: N& dbm_ij = dbm_i[j]; -23376: -23376: -23376: -23376: if (y_redundancy_i[j] || y_dbm_i[j] != dbm_ij) { -23376: assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: reset_shortest_path_closed(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::limited_BHMZ05_extrapolation_assign(const BD_Shape& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)", -23376: y); -23376: } -23376: -23376: -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: if (space_dim < cs_space_dim) { -23376: throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)", -23376: "cs is space-dimension incompatible"); -23376: } -23376: -23376: if (cs.has_strict_inequalities()) { -23376: throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)", -23376: "cs has strict inequalities"); -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: BD_Shape limiting_shape(space_dim, UNIVERSE); -23376: get_limiting_shape(cs, limiting_shape); -23376: BHMZ05_widening_assign(y, tp); -23376: intersection_assign(limiting_shape); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::CC76_narrowing_assign(const BD_Shape& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("CC76_narrowing_assign(y)", y); -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: y.shortest_path_closure_assign(); -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: bool changed = false; -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const DB_Row& y_dbm_i = y.dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: N& dbm_ij = dbm_i[j]; -23376: const N& y_dbm_ij = y_dbm_i[j]; -23376: if (!is_plus_infinity(dbm_ij) -23376: && !is_plus_infinity(y_dbm_ij) -23376: && dbm_ij != y_dbm_ij) { -23376: dbm_ij = y_dbm_ij; -23376: changed = true; -23376: } -23376: } -23376: } -23376: if (changed && marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape -23376: ::deduce_v_minus_u_bounds(const dimension_type v, -23376: const dimension_type last_v, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& ub_v) { -23376: ((void) 0); -23376: ((void) 0); -23376: # 3423 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item(); -23376: assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED); -23376: const DB_Row& dbm_0 = dbm[0]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub_u; mpq_class& ub_u = holder_ub_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_up_approx; N& up_approx = holder_up_approx.item(); -23376: for (Linear_Expression::const_iterator u = sc_expr.begin(), -23376: u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) { -23376: const dimension_type u_dim = u.variable().space_dimension(); -23376: if (u_dim == v) { -23376: continue; -23376: } -23376: const Coefficient& expr_u = *u; -23376: if (expr_u < 0) { -23376: continue; -23376: } -23376: ((void) 0); -23376: if (expr_u >= sc_denom) { -23376: -23376: sub_assign_r(dbm[u_dim][v], ub_v, dbm_0[u_dim], ROUND_UP); -23376: } -23376: else { -23376: DB_Row& dbm_u = dbm[u_dim]; -23376: const N& dbm_u0 = dbm_u[0]; -23376: if (!is_plus_infinity(dbm_u0)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: assign_r(minus_lb_u, dbm_u0, ROUND_NOT_NEEDED); -23376: assign_r(q, expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(ub_u, dbm_0[u_dim], ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED); -23376: -23376: sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, minus_lb_u, ROUND_UP); -23376: -23376: add_assign_r(dbm_u[v], ub_v, up_approx, ROUND_UP); -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape -23376: ::deduce_u_minus_v_bounds(const dimension_type v, -23376: const dimension_type last_v, -23376: const Linear_Expression& sc_expr, -23376: Coefficient_traits::const_reference sc_denom, -23376: const N& minus_lb_v) { -23376: ((void) 0); -23376: ((void) 0); -23376: # 3490 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item(); -23376: assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED); -23376: DB_Row& dbm_0 = dbm[0]; -23376: DB_Row& dbm_v = dbm[v]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub_u; mpq_class& ub_u = holder_ub_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_up_approx; N& up_approx = holder_up_approx.item(); -23376: -23376: for (Linear_Expression::const_iterator u = sc_expr.begin(), -23376: u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) { -23376: const Variable u_var = u.variable(); -23376: const dimension_type u_dim = u_var.space_dimension(); -23376: if (u_var.space_dimension() == v) { -23376: continue; -23376: } -23376: const Coefficient& expr_u = *u; -23376: if (expr_u < 0) { -23376: continue; -23376: } -23376: ((void) 0); -23376: if (expr_u >= sc_denom) { -23376: -23376: -23376: sub_assign_r(dbm_v[u_dim], minus_lb_v, dbm[u_dim][0], ROUND_UP); -23376: } -23376: else { -23376: const N& dbm_0u = dbm_0[u_dim]; -23376: if (!is_plus_infinity(dbm_0u)) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: assign_r(ub_u, dbm_0u, ROUND_NOT_NEEDED); -23376: assign_r(q, expr_u, ROUND_NOT_NEEDED); -23376: div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED); -23376: assign_r(minus_lb_u, dbm[u_dim][0], ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(minus_lb_u, minus_lb_u, ub_u, ROUND_NOT_NEEDED); -23376: -23376: sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED); -23376: assign_r(up_approx, ub_u, ROUND_UP); -23376: -23376: add_assign_r(dbm_v[u_dim], up_approx, minus_lb_v, ROUND_UP); -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::forget_all_dbm_constraints(const dimension_type v) { -23376: ((void) 0); -23376: DB_Row& dbm_v = dbm[v]; -23376: for (dimension_type i = dbm.num_rows(); i-- > 0; ) { -23376: assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::forget_binary_dbm_constraints(const dimension_type v) { -23376: ((void) 0); -23376: DB_Row& dbm_v = dbm[v]; -23376: for (dimension_type i = dbm.num_rows()-1; i > 0; --i) { -23376: assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::unconstrain(const Variable var) { -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dimension() < var_space_dim) { -23376: throw_dimension_incompatible("unconstrain(var)", var_space_dim); -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: forget_all_dbm_constraints(var_space_dim); -23376: -23376: reset_shortest_path_reduced(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::unconstrain(const Variables_Set& vars) { -23376: -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dimension() < min_space_dim) { -23376: throw_dimension_incompatible("unconstrain(vs)", min_space_dim); -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: for (Variables_Set::const_iterator vsi = vars.begin(), -23376: vsi_end = vars.end(); vsi != vsi_end; ++vsi) { -23376: forget_all_dbm_constraints(*vsi + 1); -23376: } -23376: -23376: reset_shortest_path_reduced(); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::refine(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: ((void) 0); -23376: ((void) 0); -23376: const dimension_type v = var.id() + 1; -23376: ((void) 0); -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w = expr.last_nonzero(); -23376: -23376: if (w != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w)) { -23376: ++t; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (t == 1 && expr.get(Variable(w - 1)) != denominator) { -23376: t = 2; -23376: } -23376: -23376: -23376: -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign(minus_denom, denominator); -23376: -23376: if (t == 0) { -23376: -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: add_dbm_constraint(0, v, b, denominator); -23376: add_dbm_constraint(v, 0, b, minus_denom); -23376: break; -23376: case LESS_OR_EQUAL: -23376: -23376: add_dbm_constraint(0, v, b, denominator); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: add_dbm_constraint(v, 0, b, minus_denom); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: ((void) 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: switch (relsym) { -23376: case EQUAL: -23376: -23376: div_round_up(d, b, denominator); -23376: add_dbm_constraint(w, v, d); -23376: -23376: -23376: div_round_up(d, b, minus_denom); -23376: add_dbm_constraint(v, w, d); -23376: break; -23376: case LESS_OR_EQUAL: -23376: -23376: div_round_up(d, b, denominator); -23376: add_dbm_constraint(w, v, d); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: div_round_up(d, b, minus_denom); -23376: add_dbm_constraint(v, w, d); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: -23376: dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pinf_count = 0; -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: -23376: switch (relsym) { -23376: case EQUAL: -23376: { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_sum; N& neg_sum = holder_neg_sum.item(); -23376: -23376: dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type neg_pinf_count = 0; -23376: -23376: -23376: -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: assign_r(neg_sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const Coefficient& sc_i = *i; -23376: const int sign_i = sgn(sc_i); -23376: ((void) 0); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (pinf_count <= 1) { -23376: const N& approx_i = dbm_0[i_dim]; -23376: if (!is_plus_infinity(approx_i)) { -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: else { -23376: ++pinf_count; -23376: pinf_index = i_dim; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& approx_minus_i = dbm[i_dim][0]; -23376: if (!is_plus_infinity(approx_minus_i)) { -23376: add_mul_assign_r(neg_sum, coeff_i, approx_minus_i, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: neg_assign(minus_sc_i, sc_i); -23376: -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (pinf_count <= 1) { -23376: const N& approx_minus_i = dbm[i_dim][0]; -23376: if (!is_plus_infinity(approx_minus_i)) { -23376: add_mul_assign_r(sum, coeff_i, approx_minus_i, ROUND_UP); -23376: } -23376: else { -23376: ++pinf_count; -23376: pinf_index = i_dim; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& approx_i = dbm_0[i_dim]; -23376: if (!is_plus_infinity(approx_i)) { -23376: add_mul_assign_r(neg_sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (pinf_count > 1 && neg_pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: reset_shortest_path_closed(); -23376: -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: -23376: -23376: if (pinf_count <= 1) { -23376: -23376: if (down_sc_denom != 1) { -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: dbm[0][v] = sum; -23376: -23376: deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum); -23376: } -23376: else { -23376: -23376: if (pinf_index != v -23376: && sc_expr.get(Variable(pinf_index - 1)) == sc_denom) { -23376: -23376: dbm[pinf_index][v] = sum; -23376: } -23376: } -23376: } -23376: -23376: -23376: if (neg_pinf_count <= 1) { -23376: -23376: if (down_sc_denom != 1) { -23376: div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (neg_pinf_count == 0) { -23376: -23376: DB_Row& dbm_v = dbm[v]; -23376: dbm_v[0] = neg_sum; -23376: -23376: deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum); -23376: } -23376: -23376: else if (neg_pinf_index != v -23376: && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) { -23376: -23376: -23376: dbm[v][neg_pinf_index] = neg_sum; -23376: } -23376: } -23376: } -23376: break; -23376: -23376: case LESS_OR_EQUAL: -23376: -23376: -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: -23376: -23376: -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const int sign_i = sgn(sc_i); -23376: ((void) 0); -23376: -23376: const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0]; -23376: if (is_plus_infinity(approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = i_dim; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: add_dbm_constraint(0, v, sum); -23376: -23376: deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (expr.get(Variable(pinf_index - 1)) == denominator) { -23376: -23376: add_dbm_constraint(pinf_index, v, sum); -23376: } -23376: } -23376: break; -23376: -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: -23376: -23376: -23376: assign_r(sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const int sign_i = sgn(sc_i); -23376: ((void) 0); -23376: -23376: const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim]; -23376: if (is_plus_infinity(approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = i_dim; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: add_dbm_constraint(v, 0, sum); -23376: -23376: deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (pinf_index != v -23376: && expr.get(Variable(pinf_index - 1)) == denominator) { -23376: -23376: -23376: add_dbm_constraint(v, pinf_index, sum); -23376: } -23376: } -23376: break; -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::affine_image(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_image(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", "e", expr); -23376: } -23376: -23376: const dimension_type v = var.id() + 1; -23376: if (v > space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", var.id()); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w = expr.last_nonzero(); -23376: -23376: if (w != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w)) { -23376: ++t; -23376: } -23376: } -23376: # 4071 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign(minus_denom, denominator); -23376: -23376: if (t == 0) { -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: add_dbm_constraint(0, v, b, denominator); -23376: add_dbm_constraint(v, 0, b, minus_denom); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& a = expr.get(Variable(w - 1)); -23376: if (a == denominator || a == minus_denom) { -23376: -23376: if (w == v) { -23376: -23376: if (a == denominator) { -23376: if (b == 0) { -23376: -23376: return; -23376: } -23376: else { -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; N& c = holder_c.item(); -23376: div_round_up(c, b, minus_denom); -23376: DB_Row& dbm_v = dbm[v]; -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: N& dbm_vi = dbm_v[i]; -23376: add_assign_r(dbm_vi, dbm_vi, c, ROUND_UP); -23376: N& dbm_iv = dbm[i][v]; -23376: add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP); -23376: } -23376: -23376: } -23376: } -23376: else { -23376: -23376: -23376: forget_binary_dbm_constraints(v); -23376: -23376: using std::swap; -23376: swap(dbm[v][0], dbm[0][v]); -23376: -23376: reset_shortest_path_closed(); -23376: if (b != 0) { -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; N& c = holder_c.item(); -23376: div_round_up(c, b, minus_denom); -23376: N& dbm_v0 = dbm[v][0]; -23376: add_assign_r(dbm_v0, dbm_v0, c, ROUND_UP); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: N& dbm_0v = dbm[0][v]; -23376: add_assign_r(dbm_0v, dbm_0v, d, ROUND_UP); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: if (a == denominator) { -23376: -23376: add_dbm_constraint(w, v, b, denominator); -23376: add_dbm_constraint(v, w, b, minus_denom); -23376: } -23376: else { -23376: -23376: -23376: -23376: const N& dbm_w0 = dbm[w][0]; -23376: if (!is_plus_infinity(dbm_w0)) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP); -23376: reset_shortest_path_closed(); -23376: } -23376: const N& dbm_0w = dbm[0][w]; -23376: if (!is_plus_infinity(dbm_0w)) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c; N& c = holder_c.item(); -23376: div_round_up(c, b, minus_denom); -23376: add_assign_r(dbm[v][0], dbm_0w, c, ROUND_UP); -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: # 4194 "../../src/BD_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_pos_sum; N& pos_sum = holder_pos_sum.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_neg_sum; N& neg_sum = holder_neg_sum.item(); -23376: -23376: dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pos_pinf_count = 0; -23376: dimension_type neg_pinf_count = 0; -23376: -23376: -23376: assign_r(pos_sum, sc_b, ROUND_UP); -23376: assign_r(neg_sum, minus_sc_b, ROUND_UP); -23376: -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& up_approx_i = dbm_0[i_dim]; -23376: if (!is_plus_infinity(up_approx_i)) { -23376: add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = i_dim; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& up_approx_minus_i = dbm[i_dim][0]; -23376: if (!is_plus_infinity(up_approx_minus_i)) { -23376: add_mul_assign_r(neg_sum, coeff_i, up_approx_minus_i, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: neg_assign(minus_sc_i, sc_i); -23376: -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& up_approx_minus_i = dbm[i_dim][0]; -23376: if (!is_plus_infinity(up_approx_minus_i)) { -23376: add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = i_dim; -23376: } -23376: } -23376: -23376: if (neg_pinf_count <= 1) { -23376: const N& up_approx_i = dbm_0[i_dim]; -23376: if (!is_plus_infinity(up_approx_i)) { -23376: add_mul_assign_r(neg_sum, coeff_i, up_approx_i, ROUND_UP); -23376: } -23376: else { -23376: ++neg_pinf_count; -23376: neg_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: if (pos_pinf_count > 1 && neg_pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: reset_shortest_path_closed(); -23376: -23376: -23376: if (pos_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pos_pinf_count == 0) { -23376: -23376: dbm[0][v] = pos_sum; -23376: -23376: deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum); -23376: } -23376: else if (pos_pinf_index != v -23376: && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) { -23376: -23376: dbm[pos_pinf_index][v] = pos_sum; -23376: } -23376: } -23376: -23376: -23376: if (neg_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (neg_pinf_count == 0) { -23376: -23376: DB_Row& dbm_v = dbm[v]; -23376: dbm_v[0] = neg_sum; -23376: -23376: deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum); -23376: } -23376: -23376: else if (neg_pinf_index != v -23376: && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) { -23376: -23376: -23376: dbm[v][neg_pinf_index] = neg_sum; -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape::affine_form_image(const Variable var, -23376: const Linear_Form< Interval >& lf) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4375 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type lf_space_dim = lf.space_dimension(); -23376: if (space_dim < lf_space_dim) { -23376: throw_dimension_incompatible("affine_form_image(var_id, l)", "l", lf); -23376: } -23376: -23376: const dimension_type var_id = var.id() + 1; -23376: if (space_dim < var_id) { -23376: throw_dimension_incompatible("affine_form_image(var_id, l)", var.id()); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w_id = 0; -23376: -23376: for (dimension_type i = lf_space_dim; i-- > 0; ) { -23376: if (lf.coefficient(Variable(i)) != 0) { -23376: if (t++ == 1) { -23376: break; -23376: } -23376: else { -23376: w_id = i + 1; -23376: } -23376: } -23376: } -23376: typedef Interval FP_Interval_Type; -23376: -23376: const FP_Interval_Type& b = lf.inhomogeneous_term(); -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: if (t == 0) { -23376: inhomogeneous_affine_form_image(var_id, b); -23376: ((void) 0); -23376: return; -23376: } -23376: else if (t == 1) { -23376: const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id - 1)); -23376: if (w_coeff == 1 || w_coeff == -1) { -23376: one_variable_affine_form_image(var_id, b, w_coeff, w_id, space_dim); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: two_variables_affine_form_image(var_id, lf, space_dim); -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: BD_Shape -23376: ::inhomogeneous_affine_form_image(const dimension_type& var_id, -23376: const Interval& b) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_ub; N& b_ub = holder_b_ub.item(); -23376: assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_mlb; N& b_mlb = holder_b_mlb.item(); -23376: neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED); -23376: -23376: -23376: forget_all_dbm_constraints(var_id); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: add_dbm_constraint(0, var_id, b_ub); -23376: add_dbm_constraint(var_id, 0, b_mlb); -23376: return; -23376: } -23376: -23376: -23376: -23376: template -23376: template -23376: void BD_Shape -23376: ::one_variable_affine_form_image(const dimension_type& var_id, -23376: const Interval& b, -23376: const Interval& w_coeff, -23376: const dimension_type& w_id, -23376: const dimension_type& space_dim) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_ub; N& b_ub = holder_b_ub.item(); -23376: assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_mlb; N& b_mlb = holder_b_mlb.item(); -23376: neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED); -23376: -23376: -23376: bool is_w_coeff_one = (w_coeff == 1); -23376: -23376: if (w_id == var_id) { -23376: -23376: bool is_b_zero = (b_mlb == 0 && b_ub == 0); -23376: -23376: if (is_w_coeff_one) { -23376: if (is_b_zero) { -23376: -23376: return; -23376: } -23376: else { -23376: -23376: -23376: DB_Row& dbm_v = dbm[var_id]; -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: N& dbm_vi = dbm_v[i]; -23376: add_assign_r(dbm_vi, dbm_vi, b_mlb, ROUND_UP); -23376: N& dbm_iv = dbm[i][var_id]; -23376: add_assign_r(dbm_iv, dbm_iv, b_ub, ROUND_UP); -23376: } -23376: -23376: } -23376: } -23376: else { -23376: -23376: -23376: forget_binary_dbm_constraints(var_id); -23376: using std::swap; -23376: swap(dbm[var_id][0], dbm[0][var_id]); -23376: -23376: reset_shortest_path_closed(); -23376: if (!is_b_zero) { -23376: -23376: -23376: N& dbm_v0 = dbm[var_id][0]; -23376: add_assign_r(dbm_v0, dbm_v0, b_mlb, ROUND_UP); -23376: N& dbm_0v = dbm[0][var_id]; -23376: add_assign_r(dbm_0v, dbm_0v, b_ub, ROUND_UP); -23376: } -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_dbm_constraints(var_id); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: if (is_w_coeff_one) { -23376: -23376: -23376: add_dbm_constraint(w_id, var_id, b_ub); -23376: add_dbm_constraint(var_id, w_id, b_mlb); -23376: } -23376: else { -23376: -23376: -23376: const N& mlb_w = dbm[w_id][0]; -23376: if (!is_plus_infinity(mlb_w)) { -23376: -23376: add_assign_r(dbm[0][var_id], b_ub, mlb_w, ROUND_UP); -23376: reset_shortest_path_closed(); -23376: } -23376: const N& ub_w = dbm[0][w_id]; -23376: if (!is_plus_infinity(ub_w)) { -23376: -23376: add_assign_r(dbm[var_id][0], ub_w, b_mlb, ROUND_UP); -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: -23376: template -23376: template -23376: void BD_Shape -23376: ::two_variables_affine_form_image(const dimension_type& var_id, -23376: const Linear_Form< Interval >& lf, -23376: const dimension_type& space_dim) { -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: reset_shortest_path_closed(); -23376: -23376: Linear_Form< Interval > minus_lf(lf); -23376: minus_lf.negate(); -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; N& upper_bound = holder_upper_bound.item(); -23376: -23376: -23376: for (dimension_type curr_var = 1; curr_var < var_id; ++curr_var) { -23376: Variable current(curr_var - 1); -23376: linear_form_upper_bound(lf - current, upper_bound); -23376: assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf + current, upper_bound); -23376: assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED); -23376: } -23376: for (dimension_type curr_var = var_id + 1; curr_var <= space_dim; -23376: ++curr_var) { -23376: Variable current(curr_var - 1); -23376: linear_form_upper_bound(lf - current, upper_bound); -23376: assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED); -23376: linear_form_upper_bound(minus_lf + current, upper_bound); -23376: assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lf_ub; N& lf_ub = holder_lf_ub.item(); -23376: linear_form_upper_bound(lf, lf_ub); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item(); -23376: linear_form_upper_bound(minus_lf, minus_lf_ub); -23376: assign_r(dbm[0][var_id], lf_ub, ROUND_NOT_NEEDED); -23376: assign_r(dbm[var_id][0], minus_lf_ub, ROUND_NOT_NEEDED); -23376: } -23376: -23376: template -23376: template -23376: void BD_Shape::refine_with_linear_form_inequality( -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right) { -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4611 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: const dimension_type left_space_dim = left.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < left_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(left, right)", "left", left); -23376: } -23376: const dimension_type right_space_dim = right.space_dimension(); -23376: if (space_dim < right_space_dim) { -23376: throw_dimension_incompatible( -23376: "refine_with_linear_form_inequality(left, right)", "right", right); -23376: } -23376: -23376: -23376: dimension_type left_t = 0; -23376: -23376: dimension_type left_w_id = 0; -23376: -23376: -23376: dimension_type right_t = 0; -23376: -23376: dimension_type right_w_id = 0; -23376: -23376: typedef Interval FP_Interval_Type; -23376: -23376: -23376: for (dimension_type i = left_space_dim; i-- > 0; ) { -23376: if (left.coefficient(Variable(i)) != 0) { -23376: if (left_t++ == 1) { -23376: break; -23376: } -23376: else { -23376: left_w_id = i; -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = right_space_dim; i-- > 0; ) { -23376: if (right.coefficient(Variable(i)) != 0) { -23376: if (right_t++ == 1) { -23376: break; -23376: } -23376: else { -23376: right_w_id = i; -23376: } -23376: } -23376: } -23376: -23376: const FP_Interval_Type& left_w_coeff = -23376: left.coefficient(Variable(left_w_id)); -23376: const FP_Interval_Type& right_w_coeff = -23376: right.coefficient(Variable(right_w_id)); -23376: -23376: if (left_t == 0) { -23376: if (right_t == 0) { -23376: -23376: -23376: ((void) 0); -23376: return; -23376: } -23376: else if (right_w_coeff == 1 || right_w_coeff == -1) { -23376: left_inhomogeneous_refine(right_t, right_w_id, left, right); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: else if (left_t == 1) { -23376: if (left_w_coeff == 1 || left_w_coeff == -1) { -23376: if (right_t == 0 || (right_w_coeff == 1 || right_w_coeff == -1)) { -23376: left_one_var_refine(left_w_id, right_t, right_w_id, left, right); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: -23376: general_refine(left_w_id, right_w_id, left, right); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape -23376: ::export_interval_constraints(U& dest) const { -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim > dest.space_dimension()) { -23376: throw std::invalid_argument( -23376: "BD_Shape::export_interval_constraints"); -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: -23376: if (marked_empty()) { -23376: dest.set_empty(); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; N& tmp = holder_tmp.item(); -23376: const DB_Row& dbm_0 = dbm[0]; -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: -23376: const N& u = dbm_0[i+1]; -23376: if (!is_plus_infinity(u)) { -23376: if (!dest.restrict_upper(i, u.raw_value())) { -23376: return; -23376: } -23376: } -23376: -23376: const N& negated_l = dbm[i+1][0]; -23376: if (!is_plus_infinity(negated_l)) { -23376: neg_assign_r(tmp, negated_l, ROUND_DOWN); -23376: if (!dest.restrict_lower(i, tmp.raw_value())) { -23376: return; -23376: } -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape::left_inhomogeneous_refine(const dimension_type& right_t, -23376: const dimension_type& right_w_id, -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right) { -23376: -23376: typedef Interval FP_Interval_Type; -23376: -23376: if (right_t == 1) { -23376: -23376: -23376: const FP_Interval_Type& right_w_coeff = -23376: right.coefficient(Variable(right_w_id)); -23376: if (right_w_coeff == 1) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_b = right.inhomogeneous_term(); -23376: sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(right_w_id+1, 0, b_plus_minus_a_minus); -23376: return; -23376: } -23376: -23376: if (right_w_coeff == -1) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_b = right.inhomogeneous_term(); -23376: sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(0, right_w_id+1, b_plus_minus_a_minus); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: -23376: template -23376: template -23376: void -23376: BD_Shape -23376: ::left_one_var_refine(const dimension_type& left_w_id, -23376: const dimension_type& right_t, -23376: const dimension_type& right_w_id, -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right) { -23376: -23376: typedef Interval FP_Interval_Type; -23376: -23376: if (right_t == 0) { -23376: -23376: -23376: const FP_Interval_Type& left_w_coeff = -23376: left.coefficient(Variable(left_w_id)); -23376: -23376: if (left_w_coeff == 1) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(0, left_w_id+1, a_plus_minus_b_minus); -23376: return; -23376: } -23376: -23376: if (left_w_coeff == -1) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(left_w_id+1, 0, a_plus_minus_b_minus); -23376: return; -23376: } -23376: } -23376: else if (right_t == 1) { -23376: -23376: -23376: -23376: -23376: const FP_Interval_Type& left_w_coeff = -23376: left.coefficient(Variable(left_w_id)); -23376: -23376: const FP_Interval_Type& right_w_coeff = -23376: right.coefficient(Variable(right_w_id)); -23376: -23376: bool is_left_coeff_one = (left_w_coeff == 1); -23376: bool is_left_coeff_minus_one = (left_w_coeff == -1); -23376: bool is_right_coeff_one = (right_w_coeff == 1); -23376: bool is_right_coeff_minus_one = (right_w_coeff == -1); -23376: if (left_w_id == right_w_id) { -23376: if ((is_left_coeff_one && is_right_coeff_one) -23376: || -23376: (is_left_coeff_minus_one && is_right_coeff_minus_one)) { -23376: -23376: return; -23376: } -23376: if (is_left_coeff_one && is_right_coeff_minus_one) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1, -23376: ROUND_UP); -23376: add_dbm_constraint(0, left_w_id + 1, a_plus_minus_b_minus); -23376: return; -23376: } -23376: if (is_left_coeff_minus_one && is_right_coeff_one) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1, -23376: ROUND_UP); -23376: add_dbm_constraint(right_w_id + 1, 0, a_plus_minus_b_minus); -23376: return; -23376: } -23376: } -23376: else if (is_left_coeff_minus_one && is_right_coeff_one) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub; N& ub = holder_ub.item(); -23376: ub = dbm[0][right_w_id + 1]; -23376: if (!is_plus_infinity(ub)) { -23376: add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP); -23376: add_dbm_constraint(left_w_id + 1, 0, ub); -23376: } -23376: ub = dbm[0][left_w_id + 1]; -23376: if (!is_plus_infinity(ub)) { -23376: add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP); -23376: add_dbm_constraint(right_w_id + 1, 0, ub); -23376: } -23376: return; -23376: } -23376: if (is_left_coeff_one && is_right_coeff_minus_one) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item(); -23376: const FP_Interval_Type& left_b = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_a = right.inhomogeneous_term(); -23376: sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(), -23376: ROUND_UP); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_ub; N& ub = holder_ub.item(); -23376: ub = dbm[right_w_id + 1][0]; -23376: if (!is_plus_infinity(ub)) { -23376: add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP); -23376: add_dbm_constraint(0, left_w_id + 1, ub); -23376: } -23376: ub = dbm[left_w_id + 1][0]; -23376: if (!is_plus_infinity(ub)) { -23376: add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP); -23376: add_dbm_constraint(0, right_w_id + 1, ub); -23376: } -23376: return; -23376: } -23376: if (is_left_coeff_one && is_right_coeff_one) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(right_w_id+1, left_w_id+1, c_plus_minus_a_minus); -23376: return; -23376: } -23376: if (is_left_coeff_minus_one && is_right_coeff_minus_one) { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item(); -23376: const FP_Interval_Type& left_a = left.inhomogeneous_term(); -23376: const FP_Interval_Type& right_c = right.inhomogeneous_term(); -23376: sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(), -23376: ROUND_UP); -23376: add_dbm_constraint(left_w_id+1, right_w_id+1, c_plus_minus_a_minus); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape -23376: ::general_refine(const dimension_type& left_w_id, -23376: const dimension_type& right_w_id, -23376: const Linear_Form< Interval >& left, -23376: const Linear_Form< Interval >& right) { -23376: -23376: typedef Interval FP_Interval_Type; -23376: Linear_Form right_minus_left(right); -23376: right_minus_left -= left; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_low_coeff; N& low_coeff = holder_low_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_high_coeff; N& high_coeff = holder_high_coeff.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; N& upper_bound = holder_upper_bound.item(); -23376: -23376: dimension_type max_w_id = std::max(left_w_id, right_w_id); -23376: -23376: for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) { -23376: for (dimension_type second_v = first_v+1; -23376: second_v <= max_w_id; ++second_v) { -23376: const FP_Interval_Type& lfv_coefficient = -23376: left.coefficient(Variable(first_v)); -23376: const FP_Interval_Type& lsv_coefficient = -23376: left.coefficient(Variable(second_v)); -23376: const FP_Interval_Type& rfv_coefficient = -23376: right.coefficient(Variable(first_v)); -23376: const FP_Interval_Type& rsv_coefficient = -23376: right.coefficient(Variable(second_v)); -23376: -23376: -23376: bool do_update = false; -23376: assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: } -23376: else { -23376: assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (do_update) { -23376: Variable first(first_v); -23376: Variable second(second_v); -23376: dimension_type n_first_var = first_v +1 ; -23376: dimension_type n_second_var = second_v + 1; -23376: linear_form_upper_bound(right_minus_left - first + second, -23376: upper_bound); -23376: add_dbm_constraint(n_first_var, n_second_var, upper_bound); -23376: linear_form_upper_bound(right_minus_left + first - second, -23376: upper_bound); -23376: add_dbm_constraint(n_second_var, n_first_var, upper_bound); -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type v = 0; v < max_w_id; ++v) { -23376: const FP_Interval_Type& lv_coefficient = -23376: left.coefficient(Variable(v)); -23376: const FP_Interval_Type& rv_coefficient = -23376: right.coefficient(Variable(v)); -23376: -23376: -23376: bool do_update = false; -23376: assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: else { -23376: assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (low_coeff != 0 || high_coeff != 0) { -23376: do_update = true; -23376: } -23376: } -23376: -23376: if (do_update) { -23376: Variable var(v); -23376: dimension_type n_var = v + 1; -23376: linear_form_upper_bound(right_minus_left + var, upper_bound); -23376: add_dbm_constraint(0, n_var, upper_bound); -23376: linear_form_upper_bound(right_minus_left - var, upper_bound); -23376: add_dbm_constraint(n_var, 0, upper_bound); -23376: } -23376: } -23376: -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape:: -23376: linear_form_upper_bound(const Linear_Form< Interval >& lf, -23376: N& result) const { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5061 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits::is_exact)>) } -23376: -23376: ; -23376: -23376: const dimension_type lf_space_dimension = lf.space_dimension(); -23376: ((void) 0); -23376: -23376: typedef Interval FP_Interval_Type; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_lb; N& curr_lb = holder_curr_lb.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_ub; N& curr_ub = holder_curr_ub.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_negator; N& negator = holder_negator.item(); -23376: -23376: assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED); -23376: -23376: for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension; -23376: ++curr_var) { -23376: n_var = curr_var + 1; -23376: const FP_Interval_Type& -23376: curr_coefficient = lf.coefficient(Variable(curr_var)); -23376: assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED); -23376: assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED); -23376: if (curr_lb != 0 || curr_ub != 0) { -23376: assign_r(curr_var_ub, dbm[0][n_var], ROUND_NOT_NEEDED); -23376: neg_assign_r(curr_minus_var_ub, dbm[n_var][0], ROUND_NOT_NEEDED); -23376: -23376: if (curr_lb == 1 && curr_ub == 1) { -23376: add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub), -23376: ROUND_UP); -23376: } -23376: else if (curr_lb == -1 && curr_ub == -1) { -23376: neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub), -23376: ROUND_NOT_NEEDED); -23376: add_assign_r(result, result, negator, ROUND_UP); -23376: } -23376: else { -23376: -23376: assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub, -23376: ROUND_UP); -23376: add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED); -23376: add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb, -23376: ROUND_UP); -23376: assign_r(first_comparison_term, std::max(first_comparison_term, -23376: second_comparison_term), -23376: ROUND_NOT_NEEDED); -23376: -23376: add_assign_r(result, result, first_comparison_term, ROUND_UP); -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::affine_preimage(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_preimage(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr); -23376: } -23376: -23376: -23376: const dimension_type v = var.id() + 1; -23376: if (v > space_dim) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", var.id()); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type j = expr.last_nonzero(); -23376: -23376: if (j != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, j)) { -23376: ++t; -23376: } -23376: } -23376: # 5179 "../../src/BD_Shape_templates.hh" -23376: if (t == 0) { -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& a = expr.get(Variable(j - 1)); -23376: if (a == denominator || a == -denominator) { -23376: -23376: if (j == var.space_dimension()) { -23376: -23376: affine_image(var, denominator*var - b, a); -23376: } -23376: else { -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: ((void) 0); -23376: } -23376: return; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: -23376: const Coefficient& expr_v = expr.coefficient(var); -23376: if (expr_v != 0) { -23376: -23376: Linear_Expression inverse((expr_v + denominator)*var); -23376: inverse -= expr; -23376: affine_image(var, inverse, expr_v); -23376: } -23376: else { -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape -23376: ::bounded_affine_image(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type bds_space_dim = space_dimension(); -23376: const dimension_type v = var.id() + 1; -23376: if (v > bds_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "v", var); -23376: } -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (bds_space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (bds_space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: const Coefficient& b = ub_expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w = ub_expr.last_nonzero(); -23376: -23376: if (w != 0) { -23376: ++t; -23376: if (!ub_expr.all_zeroes(1, w)) { -23376: ++t; -23376: } -23376: } -23376: # 5292 "../../src/BD_Shape_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign(minus_denom, denominator); -23376: -23376: if (t == 0) { -23376: -23376: generalized_affine_image(var, -23376: GREATER_OR_EQUAL, -23376: lb_expr, -23376: denominator); -23376: -23376: add_dbm_constraint(0, v, b, denominator); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& a = ub_expr.get(Variable(w - 1)); -23376: if (a == denominator || a == minus_denom) { -23376: -23376: if (w == v) { -23376: -23376: -23376: const Variable new_var(bds_space_dim); -23376: add_space_dimensions_and_embed(1); -23376: -23376: affine_image(new_var, ub_expr, denominator); -23376: -23376: shortest_path_closure_assign(); -23376: ((void) 0); -23376: -23376: generalized_affine_image(var, -23376: GREATER_OR_EQUAL, -23376: lb_expr, -23376: denominator); -23376: -23376: add_constraint(var <= new_var); -23376: -23376: remove_higher_space_dimensions(bds_space_dim); -23376: return; -23376: } -23376: else { -23376: -23376: -23376: -23376: generalized_affine_image(var, -23376: GREATER_OR_EQUAL, -23376: lb_expr, -23376: denominator); -23376: if (a == denominator) { -23376: -23376: add_dbm_constraint(w, v, b, denominator); -23376: } -23376: else { -23376: -23376: -23376: -23376: const N& dbm_w0 = dbm[w][0]; -23376: if (!is_plus_infinity(dbm_w0)) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: div_round_up(d, b, denominator); -23376: add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP); -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: } -23376: # 5373 "../../src/BD_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -ub_expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? ub_expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_pos_sum; N& pos_sum = holder_pos_sum.item(); -23376: -23376: dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pos_pinf_count = 0; -23376: -23376: -23376: assign_r(pos_sum, sc_b, ROUND_UP); -23376: -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const int sign_i = sgn(sc_i); -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& up_approx_i = dbm_0[i_dim]; -23376: if (!is_plus_infinity(up_approx_i)) { -23376: add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: neg_assign(minus_sc_i, sc_i); -23376: -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: -23376: if (pos_pinf_count <= 1) { -23376: const N& up_approx_minus_i = dbm[i_dim][0]; -23376: if (!is_plus_infinity(up_approx_minus_i)) { -23376: add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP); -23376: } -23376: else { -23376: ++pos_pinf_count; -23376: pos_pinf_index = i_dim; -23376: } -23376: } -23376: } -23376: } -23376: -23376: generalized_affine_image(var, -23376: GREATER_OR_EQUAL, -23376: lb_expr, -23376: denominator); -23376: -23376: if (pos_pinf_count > 1) { -23376: return; -23376: } -23376: -23376: -23376: reset_shortest_path_closed(); -23376: -23376: -23376: if (pos_pinf_count <= 1) { -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pos_pinf_count == 0) { -23376: -23376: dbm[0][v] = pos_sum; -23376: -23376: deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum); -23376: } -23376: -23376: else if (pos_pinf_index != v -23376: && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) { -23376: -23376: dbm[pos_pinf_index][v] = pos_sum; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape -23376: ::bounded_affine_preimage(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type v = var.id() + 1; -23376: if (v > space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "v", var); -23376: } -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: if (ub_expr.coefficient(var) == 0) { -23376: refine(var, LESS_OR_EQUAL, ub_expr, denominator); -23376: generalized_affine_preimage(var, GREATER_OR_EQUAL, -23376: lb_expr, denominator); -23376: return; -23376: } -23376: if (lb_expr.coefficient(var) == 0) { -23376: refine(var, GREATER_OR_EQUAL, lb_expr, denominator); -23376: generalized_affine_preimage(var, LESS_OR_EQUAL, -23376: ub_expr, denominator); -23376: return; -23376: } -23376: -23376: const Coefficient& lb_expr_v = lb_expr.coefficient(var); -23376: -23376: -23376: const Variable new_var(space_dim); -23376: add_space_dimensions_and_embed(1); -23376: const Linear_Expression lb_inverse -23376: = lb_expr - (lb_expr_v + denominator)*var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lb_inverse_denom; Parma_Polyhedra_Library::Coefficient& lb_inverse_denom = holder_lb_inverse_denom.item(); -23376: neg_assign(lb_inverse_denom, lb_expr_v); -23376: affine_image(new_var, lb_inverse, lb_inverse_denom); -23376: shortest_path_closure_assign(); -23376: ((void) 0); -23376: generalized_affine_preimage(var, LESS_OR_EQUAL, -23376: ub_expr, denominator); -23376: if (sgn(denominator) == sgn(lb_inverse_denom)) { -23376: add_constraint(var >= new_var); -23376: } -23376: else { -23376: add_constraint(var <= new_var); -23376: } -23376: -23376: remove_higher_space_dimensions(space_dim); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::generalized_affine_image(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", -23376: "e", expr); -23376: } -23376: -23376: const dimension_type v = var.id() + 1; -23376: if (v > space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", -23376: var.id()); -23376: } -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: if (relsym == EQUAL) { -23376: -23376: -23376: affine_image(var, expr, denominator); -23376: return; -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: const Coefficient& b = expr.inhomogeneous_term(); -23376: -23376: -23376: dimension_type t = 0; -23376: -23376: dimension_type w = expr.last_nonzero(); -23376: -23376: if (w != 0) { -23376: ++t; -23376: if (!expr.all_zeroes(1, w)) { -23376: ++t; -23376: } -23376: } -23376: # 5626 "../../src/BD_Shape_templates.hh" -23376: DB_Row& dbm_0 = dbm[0]; -23376: DB_Row& dbm_v = dbm[v]; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item(); -23376: neg_assign(minus_denom, denominator); -23376: -23376: if (t == 0) { -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: reset_shortest_path_closed(); -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: -23376: add_dbm_constraint(0, v, b, denominator); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: add_dbm_constraint(v, 0, b, minus_denom); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: if (t == 1) { -23376: -23376: const Coefficient& a = expr.get(Variable(w - 1)); -23376: if (a == denominator || a == minus_denom) { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; N& d = holder_d.item(); -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: div_round_up(d, b, denominator); -23376: if (w == v) { -23376: -23376: -23376: reset_shortest_path_closed(); -23376: if (a == denominator) { -23376: -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: N& dbm_iv = dbm[i][v]; -23376: add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP); -23376: assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: N& dbm_v0 = dbm_v[0]; -23376: add_assign_r(dbm_0[v], dbm_v0, d, ROUND_UP); -23376: -23376: assign_r(dbm_v0, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: forget_binary_dbm_constraints(v); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: if (a == denominator) { -23376: -23376: add_dbm_constraint(w, v, d); -23376: } -23376: else { -23376: -23376: -23376: -23376: const N& dbm_w0 = dbm[w][0]; -23376: if (!is_plus_infinity(dbm_w0)) { -23376: -23376: add_assign_r(dbm_0[v], d, dbm_w0, ROUND_UP); -23376: -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: } -23376: break; -23376: -23376: case GREATER_OR_EQUAL: -23376: div_round_up(d, b, minus_denom); -23376: if (w == v) { -23376: -23376: -23376: reset_shortest_path_closed(); -23376: if (a == denominator) { -23376: -23376: -23376: -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: N& dbm_vi = dbm_v[i]; -23376: add_assign_r(dbm_vi, dbm_vi, d, ROUND_UP); -23376: assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: N& dbm_0v = dbm_0[v]; -23376: add_assign_r(dbm_v[0], dbm_0v, d, ROUND_UP); -23376: -23376: assign_r(dbm_0v, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: forget_binary_dbm_constraints(v); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: if (a == denominator) { -23376: -23376: -23376: add_dbm_constraint(v, w, d); -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: const N& dbm_0w = dbm_0[w]; -23376: if (!is_plus_infinity(dbm_0w)) { -23376: -23376: add_assign_r(dbm_v[0], dbm_0w, d, ROUND_UP); -23376: -23376: reset_shortest_path_closed(); -23376: } -23376: } -23376: } -23376: break; -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: # 5792 "../../src/BD_Shape_templates.hh" -23376: const bool is_sc = (denominator > 0); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item(); -23376: neg_assign(minus_b, b); -23376: const Coefficient& sc_b = is_sc ? b : minus_b; -23376: const Coefficient& minus_sc_b = is_sc ? minus_b : b; -23376: const Coefficient& sc_denom = is_sc ? denominator : minus_denom; -23376: const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator; -23376: -23376: -23376: -23376: Linear_Expression minus_expr; -23376: if (!is_sc) { -23376: minus_expr = -expr; -23376: } -23376: const Linear_Expression& sc_expr = is_sc ? expr : minus_expr; -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_sum; N& sum = holder_sum.item(); -23376: -23376: dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type::synonym(); -23376: -23376: dimension_type pinf_count = 0; -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_coeff_i; N& coeff_i = holder_coeff_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item(); -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: -23376: -23376: -23376: assign_r(sum, sc_b, ROUND_UP); -23376: -23376: -23376: -23376: ((void) 0); -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: const int sign_i = sgn(sc_i); -23376: ((void) 0); -23376: -23376: const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0]; -23376: if (is_plus_infinity(approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = i_dim; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: if (pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: add_dbm_constraint(0, v, sum); -23376: -23376: deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (pinf_index != v -23376: && expr.get(Variable(pinf_index - 1)) == denominator) { -23376: -23376: add_dbm_constraint(pinf_index, v, sum); -23376: } -23376: } -23376: break; -23376: -23376: case GREATER_OR_EQUAL: -23376: -23376: -23376: -23376: -23376: -23376: assign_r(sum, minus_sc_b, ROUND_UP); -23376: -23376: for (Linear_Expression::const_iterator i = sc_expr.begin(), -23376: i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) { -23376: const Coefficient& sc_i = *i; -23376: const int sign_i = sgn(sc_i); -23376: ((void) 0); -23376: const dimension_type i_dim = i.variable().space_dimension(); -23376: -23376: const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim]; -23376: if (is_plus_infinity(approx_i)) { -23376: if (++pinf_count > 1) { -23376: break; -23376: } -23376: pinf_index = i_dim; -23376: continue; -23376: } -23376: if (sign_i > 0) { -23376: assign_r(coeff_i, sc_i, ROUND_UP); -23376: } -23376: else { -23376: neg_assign(minus_sc_i, sc_i); -23376: assign_r(coeff_i, minus_sc_i, ROUND_UP); -23376: } -23376: add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP); -23376: } -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: -23376: if (pinf_count > 1) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: if (sc_denom != 1) { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item(); -23376: assign_r(down_sc_denom, minus_sc_denom, ROUND_UP); -23376: neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP); -23376: div_assign_r(sum, sum, down_sc_denom, ROUND_UP); -23376: } -23376: -23376: if (pinf_count == 0) { -23376: -23376: add_dbm_constraint(v, 0, sum); -23376: -23376: deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum); -23376: } -23376: else if (pinf_count == 1) { -23376: if (pinf_index != v -23376: && expr.get(Variable(pinf_index - 1)) == denominator) { -23376: -23376: -23376: add_dbm_constraint(v, pinf_index, sum); -23376: } -23376: } -23376: break; -23376: -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::generalized_affine_image(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type lhs_space_dim = lhs.space_dimension(); -23376: if (space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: dimension_type t_lhs = 0; -23376: -23376: dimension_type j_lhs = lhs.last_nonzero(); -23376: -23376: if (j_lhs != 0) { -23376: ++t_lhs; -23376: if (!lhs.all_zeroes(1, j_lhs)) { -23376: ++t_lhs; -23376: } -23376: --j_lhs; -23376: } -23376: -23376: const Coefficient& b_lhs = lhs.inhomogeneous_term(); -23376: -23376: if (t_lhs == 0) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else if (t_lhs == 1) { -23376: -23376: -23376: -23376: Variable v(j_lhs); -23376: -23376: const Coefficient& denom = lhs.coefficient(v); -23376: Relation_Symbol new_relsym = relsym; -23376: if (denom < 0) { -23376: if (relsym == LESS_OR_EQUAL) { -23376: new_relsym = GREATER_OR_EQUAL; -23376: } -23376: else if (relsym == GREATER_OR_EQUAL) { -23376: new_relsym = LESS_OR_EQUAL; -23376: } -23376: } -23376: Linear_Expression expr = rhs - b_lhs; -23376: generalized_affine_image(v, new_relsym, expr, denom); -23376: } -23376: else { -23376: -23376: -23376: std::vector lhs_vars; -23376: for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end(); -23376: i != i_end; ++i) { -23376: lhs_vars.push_back(i.variable()); -23376: } -23376: const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim); -23376: if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) { -23376: -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: forget_all_dbm_constraints(lhs_vars[i].id() + 1); -23376: } -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: forget_all_dbm_constraints(lhs_vars[i].id() + 1); -23376: } -23376: # 6155 "../../src/BD_Shape_templates.hh" -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::generalized_affine_preimage(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "d == 0"); -23376: } -23376: -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: "e", expr); -23376: } -23376: -23376: const dimension_type v = var.id() + 1; -23376: if (v > space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: var.id()); -23376: } -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: if (relsym == EQUAL) { -23376: -23376: -23376: affine_preimage(var, expr, denominator); -23376: return; -23376: } -23376: -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: const Coefficient& expr_v = expr.coefficient(var); -23376: if (expr_v != 0) { -23376: const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL) -23376: ? GREATER_OR_EQUAL : LESS_OR_EQUAL; -23376: const Linear_Expression inverse -23376: = expr - (expr_v + denominator)*var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item(); -23376: neg_assign(inverse_denom, expr_v); -23376: const Relation_Symbol inverse_relsym -23376: = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym; -23376: generalized_affine_image(var, inverse_relsym, inverse, inverse_denom); -23376: return; -23376: } -23376: -23376: refine(var, relsym, expr, denominator); -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: forget_all_dbm_constraints(v); -23376: -23376: if (marked_shortest_path_reduced()) { -23376: reset_shortest_path_reduced(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::generalized_affine_preimage(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: const dimension_type bds_space_dim = space_dimension(); -23376: const dimension_type lhs_space_dim = lhs.space_dimension(); -23376: if (bds_space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (bds_space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: if (relsym == LESS_THAN || relsym == GREATER_THAN) { -23376: throw_invalid_argument("generalized_affine_preimage(e1, r, e2)", -23376: "r is a strict relation symbol"); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_preimage(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: dimension_type t_lhs = 0; -23376: -23376: dimension_type j_lhs = lhs.last_nonzero(); -23376: -23376: if (j_lhs != 0) { -23376: ++t_lhs; -23376: if (!lhs.all_zeroes(1, j_lhs)) { -23376: ++t_lhs; -23376: } -23376: --j_lhs; -23376: } -23376: -23376: const Coefficient& b_lhs = lhs.inhomogeneous_term(); -23376: -23376: if (t_lhs == 0) { -23376: -23376: -23376: generalized_affine_image(lhs, relsym, rhs); -23376: return; -23376: } -23376: else if (t_lhs == 1) { -23376: -23376: -23376: -23376: Variable v(j_lhs); -23376: -23376: const Coefficient& denom = lhs.coefficient(v); -23376: Relation_Symbol new_relsym = relsym; -23376: if (denom < 0) { -23376: if (relsym == LESS_OR_EQUAL) { -23376: new_relsym = GREATER_OR_EQUAL; -23376: } -23376: else if (relsym == GREATER_OR_EQUAL) { -23376: new_relsym = LESS_OR_EQUAL; -23376: } -23376: } -23376: Linear_Expression expr = rhs - b_lhs; -23376: generalized_affine_preimage(v, new_relsym, expr, denom); -23376: } -23376: else { -23376: -23376: -23376: std::vector lhs_vars; -23376: for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end(); -23376: i != i_end; ++i) { -23376: lhs_vars.push_back(i.variable()); -23376: } -23376: const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim); -23376: if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(lhs <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(lhs == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(lhs >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: forget_all_dbm_constraints(lhs_vars[i].id() + 1); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: const Variable new_var(bds_space_dim); -23376: add_space_dimensions_and_embed(1); -23376: -23376: -23376: -23376: -23376: affine_image(new_var, lhs); -23376: -23376: -23376: shortest_path_closure_assign(); -23376: ((void) 0); -23376: for (dimension_type i = lhs_vars.size(); i-- > 0; ) { -23376: forget_all_dbm_constraints(lhs_vars[i].id() + 1); -23376: } -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: refine_no_check(new_var <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_no_check(new_var == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_no_check(new_var >= rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: remove_higher_space_dimensions(bds_space_dim); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: Constraint_System -23376: BD_Shape::constraints() const { -23376: const dimension_type space_dim = space_dimension(); -23376: Constraint_System cs; -23376: cs.set_space_dimension(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cs = Constraint_System::zero_dim_empty(); -23376: } -23376: return cs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cs.insert(Constraint::zero_dim_false()); -23376: return cs; -23376: } -23376: -23376: if (marked_shortest_path_reduced()) { -23376: -23376: cs = minimized_constraints(); -23376: return cs; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item(); -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: for (dimension_type j = 1; j <= space_dim; ++j) { -23376: const Variable x(j-1); -23376: const N& dbm_0j = dbm_0[j]; -23376: const N& dbm_j0 = dbm[j][0]; -23376: if (is_additive_inverse(dbm_j0, dbm_0j)) { -23376: -23376: numer_denom(dbm_0j, b, a); -23376: cs.insert(a*x == b); -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(dbm_0j)) { -23376: numer_denom(dbm_0j, b, a); -23376: cs.insert(a*x <= b); -23376: } -23376: if (!is_plus_infinity(dbm_j0)) { -23376: numer_denom(dbm_j0, b, a); -23376: cs.insert(-a*x <= b); -23376: } -23376: } -23376: } -23376: -23376: -23376: for (dimension_type i = 1; i <= space_dim; ++i) { -23376: const Variable y(i-1); -23376: const DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = i + 1; j <= space_dim; ++j) { -23376: const Variable x(j-1); -23376: const N& dbm_ij = dbm_i[j]; -23376: const N& dbm_ji = dbm[j][i]; -23376: if (is_additive_inverse(dbm_ji, dbm_ij)) { -23376: -23376: numer_denom(dbm_ij, b, a); -23376: cs.insert(a*x - a*y == b); -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(dbm_ij)) { -23376: numer_denom(dbm_ij, b, a); -23376: cs.insert(a*x - a*y <= b); -23376: } -23376: if (!is_plus_infinity(dbm_ji)) { -23376: numer_denom(dbm_ji, b, a); -23376: cs.insert(a*y - a*x <= b); -23376: } -23376: } -23376: } -23376: } -23376: return cs; -23376: } -23376: -23376: template -23376: Constraint_System -23376: BD_Shape::minimized_constraints() const { -23376: shortest_path_reduction_assign(); -23376: const dimension_type space_dim = space_dimension(); -23376: Constraint_System cs; -23376: cs.set_space_dimension(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cs = Constraint_System::zero_dim_empty(); -23376: } -23376: return cs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cs.insert(Constraint::zero_dim_false()); -23376: return cs; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: -23376: -23376: std::vector leaders; -23376: compute_leaders(leaders); -23376: std::vector leader_indices; -23376: compute_leader_indices(leaders, leader_indices); -23376: const dimension_type num_leaders = leader_indices.size(); -23376: -23376: -23376: const DB_Row& dbm_0 = dbm[0]; -23376: for (dimension_type i = 1; i <= space_dim; ++i) { -23376: const dimension_type leader = leaders[i]; -23376: if (i != leader) { -23376: -23376: if (leader == 0) { -23376: -23376: ((void) 0); -23376: numer_denom(dbm_0[i], numer, denom); -23376: cs.insert(denom*Variable(i-1) == numer); -23376: } -23376: else { -23376: -23376: ((void) 0); -23376: numer_denom(dbm[i][leader], numer, denom); -23376: cs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer); -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: const Bit_Row& red_0 = redundancy_dbm[0]; -23376: for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) { -23376: const dimension_type i = leader_indices[l_i]; -23376: if (!red_0[i]) { -23376: numer_denom(dbm_0[i], numer, denom); -23376: cs.insert(denom*Variable(i-1) <= numer); -23376: } -23376: if (!redundancy_dbm[i][0]) { -23376: numer_denom(dbm[i][0], numer, denom); -23376: cs.insert(-denom*Variable(i-1) <= numer); -23376: } -23376: } -23376: -23376: for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) { -23376: const dimension_type i = leader_indices[l_i]; -23376: const DB_Row& dbm_i = dbm[i]; -23376: const Bit_Row& red_i = redundancy_dbm[i]; -23376: for (dimension_type l_j = l_i + 1; l_j < num_leaders; ++l_j) { -23376: const dimension_type j = leader_indices[l_j]; -23376: if (!red_i[j]) { -23376: numer_denom(dbm_i[j], numer, denom); -23376: cs.insert(denom*Variable(j-1) - denom*Variable(i-1) <= numer); -23376: } -23376: if (!redundancy_dbm[j][i]) { -23376: numer_denom(dbm[j][i], numer, denom); -23376: cs.insert(denom*Variable(i-1) - denom*Variable(j-1) <= numer); -23376: } -23376: } -23376: } -23376: return cs; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::expand_space_dimension(Variable var, dimension_type m) { -23376: dimension_type old_dim = space_dimension(); -23376: -23376: if (var.space_dimension() > old_dim) { -23376: throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var); -23376: } -23376: -23376: -23376: -23376: if (m > max_space_dimension() - space_dimension()) { -23376: throw_invalid_argument("expand_dimension(v, m)", -23376: "adding m new space dimensions exceeds " -23376: "the maximum allowed space dimension"); -23376: } -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: -23376: add_space_dimensions_and_embed(m); -23376: -23376: -23376: -23376: -23376: const dimension_type v_id = var.id() + 1; -23376: const DB_Row& dbm_v = dbm[v_id]; -23376: for (dimension_type i = old_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: const N& dbm_i_v = dbm[i][v_id]; -23376: const N& dbm_v_i = dbm_v[i]; -23376: for (dimension_type j = old_dim+1; j < old_dim+m+1; ++j) { -23376: dbm_i[j] = dbm_i_v; -23376: dbm[j][i] = dbm_v_i; -23376: } -23376: } -23376: -23376: -23376: if (marked_shortest_path_closed()) { -23376: reset_shortest_path_closed(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::fold_space_dimensions(const Variables_Set& vars, -23376: Variable dest) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (dest.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", -23376: "v", dest); -23376: } -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: if (vars.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", -23376: vars.space_dimension()); -23376: } -23376: -23376: if (vars.find(dest.id()) != vars.end()) { -23376: throw_invalid_argument("fold_space_dimensions(vs, v)", -23376: "v should not occur in vs"); -23376: } -23376: shortest_path_closure_assign(); -23376: if (!marked_empty()) { -23376: -23376: -23376: -23376: -23376: const dimension_type v_id = dest.id() + 1; -23376: DB_Row& dbm_v = dbm[v_id]; -23376: for (Variables_Set::const_iterator i = vars.begin(), -23376: vs_end = vars.end(); i != vs_end; ++i) { -23376: const dimension_type to_be_folded_id = *i + 1; -23376: const DB_Row& dbm_to_be_folded_id = dbm[to_be_folded_id]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: max_assign(dbm[j][v_id], dbm[j][to_be_folded_id]); -23376: max_assign(dbm_v[j], dbm_to_be_folded_id[j]); -23376: } -23376: } -23376: } -23376: remove_space_dimensions(vars); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::drop_some_non_integer_points(Complexity_Class) { -23376: if (std::numeric_limits::is_integer) { -23376: return; -23376: } -23376: const dimension_type space_dim = space_dimension(); -23376: shortest_path_closure_assign(); -23376: if (space_dim == 0 || marked_empty()) { -23376: return; -23376: } -23376: for (dimension_type i = space_dim + 1; i-- > 0; ) { -23376: DB_Row& dbm_i = dbm[i]; -23376: for (dimension_type j = space_dim + 1; j-- > 0; ) { -23376: if (i != j) { -23376: drop_some_non_integer_points_helper(dbm_i[j]); -23376: } -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class) { -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dim < min_space_dim) { -23376: throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)", -23376: min_space_dim); -23376: } -23376: if (std::numeric_limits::is_integer || min_space_dim == 0) { -23376: return; -23376: } -23376: shortest_path_closure_assign(); -23376: if (marked_empty()) { -23376: return; -23376: } -23376: const Variables_Set::const_iterator v_begin = vars.begin(); -23376: const Variables_Set::const_iterator v_end = vars.end(); -23376: ((void) 0); -23376: -23376: DB_Row& dbm_0 = dbm[0]; -23376: for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) { -23376: const dimension_type i = *v_i + 1; -23376: drop_some_non_integer_points_helper(dbm_0[i]); -23376: drop_some_non_integer_points_helper(dbm[i][0]); -23376: } -23376: -23376: -23376: for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) { -23376: const dimension_type i = *v_i + 1; -23376: DB_Row& dbm_i = dbm[i]; -23376: for (Variables_Set::const_iterator v_j = v_begin; v_j != v_end; ++v_j) { -23376: const dimension_type j = *v_j + 1; -23376: if (i != j) { -23376: drop_some_non_integer_points_helper(dbm_i[j]); -23376: } -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const BD_Shape& bds) { -23376: typedef typename BD_Shape::coefficient_type N; -23376: if (bds.is_universe()) { -23376: s << "true"; -23376: } -23376: else { -23376: -23376: dimension_type n = bds.space_dimension(); -23376: if (bds.marked_empty()) { -23376: s << "false"; -23376: } -23376: else { -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; N& v = holder_v.item(); -23376: bool first = true; -23376: for (dimension_type i = 0; i <= n; ++i) { -23376: for (dimension_type j = i + 1; j <= n; ++j) { -23376: const N& c_i_j = bds.dbm[i][j]; -23376: const N& c_j_i = bds.dbm[j][i]; -23376: if (is_additive_inverse(c_j_i, c_i_j)) { -23376: -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (i == 0) { -23376: -23376: s << Variable(j - 1); -23376: s << " = " << c_i_j; -23376: } -23376: else { -23376: -23376: if (sgn(c_i_j) >= 0) { -23376: s << Variable(j - 1); -23376: s << " - "; -23376: s << Variable(i - 1); -23376: s << " = " << c_i_j; -23376: } -23376: else { -23376: s << Variable(i - 1); -23376: s << " - "; -23376: s << Variable(j - 1); -23376: s << " = " << c_j_i; -23376: } -23376: } -23376: } -23376: else { -23376: -23376: if (!is_plus_infinity(c_j_i)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (i == 0) { -23376: -23376: s << Variable(j - 1); -23376: neg_assign_r(v, c_j_i, ROUND_DOWN); -23376: s << " >= " << v; -23376: } -23376: else { -23376: -23376: if (sgn(c_j_i) >= 0) { -23376: s << Variable(i - 1); -23376: s << " - "; -23376: s << Variable(j - 1); -23376: s << " <= " << c_j_i; -23376: } -23376: else { -23376: s << Variable(j - 1); -23376: s << " - "; -23376: s << Variable(i - 1); -23376: neg_assign_r(v, c_j_i, ROUND_DOWN); -23376: s << " >= " << v; -23376: } -23376: } -23376: } -23376: if (!is_plus_infinity(c_i_j)) { -23376: if (first) { -23376: first = false; -23376: } -23376: else { -23376: s << ", "; -23376: } -23376: if (i == 0) { -23376: -23376: s << Variable(j - 1); -23376: s << " <= " << c_i_j; -23376: } -23376: else { -23376: -23376: if (sgn(c_i_j) >= 0) { -23376: s << Variable(j - 1); -23376: s << " - "; -23376: s << Variable(i - 1); -23376: s << " <= " << c_i_j; -23376: } -23376: else { -23376: s << Variable(i - 1); -23376: s << " - "; -23376: s << Variable(j - 1); -23376: neg_assign_r(v, c_i_j, ROUND_DOWN); -23376: s << " >= " << v; -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: } -23376: return s; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::ascii_dump(std::ostream& s) const { -23376: status.ascii_dump(s); -23376: s << "\n"; -23376: dbm.ascii_dump(s); -23376: s << "\n"; -23376: redundancy_dbm.ascii_dump(s); -23376: } -23376: -23376: template void BD_Shape::ascii_dump() const { ascii_dump(std::cerr); } template void BD_Shape::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: bool -23376: BD_Shape::ascii_load(std::istream& s) { -23376: if (!status.ascii_load(s)) { -23376: return false; -23376: } -23376: if (!dbm.ascii_load(s)) { -23376: return false; -23376: } -23376: if (!redundancy_dbm.ascii_load(s)) { -23376: return false; -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: memory_size_type -23376: BD_Shape::external_memory_in_bytes() const { -23376: return dbm.external_memory_in_bytes() -23376: + redundancy_dbm.external_memory_in_bytes(); -23376: } -23376: -23376: template -23376: bool -23376: BD_Shape::OK() const { -23376: -23376: if (!dbm.OK()) { -23376: return false; -23376: } -23376: -23376: if (!status.OK()) { -23376: return false; -23376: } -23376: -23376: if (marked_empty()) { -23376: return true; -23376: } -23376: -23376: for (dimension_type i = dbm.num_rows(); i-- > 0; ) { -23376: for (dimension_type j = dbm.num_rows(); j-- > 0; ) { -23376: if (is_minus_infinity(dbm[i][j])) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: for (dimension_type i = dbm.num_rows(); i-- > 0; ) { -23376: if (!is_plus_infinity(dbm[i][i])) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: if (marked_shortest_path_closed()) { -23376: BD_Shape x = *this; -23376: x.reset_shortest_path_closed(); -23376: x.shortest_path_closure_assign(); -23376: if (x.dbm != dbm) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: -23376: -23376: if (std::numeric_limits::is_exact) { -23376: -23376: -23376: if (marked_shortest_path_reduced()) { -23376: -23376: for (dimension_type i = dbm.num_rows(); i-- > 0; ) { -23376: for (dimension_type j = dbm.num_rows(); j-- > 0; ) { -23376: if (!redundancy_dbm[i][j] && is_plus_infinity(dbm[i][j])) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: BD_Shape x = *this; -23376: x.reset_shortest_path_reduced(); -23376: x.shortest_path_reduction_assign(); -23376: if (x.redundancy_dbm != redundancy_dbm) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const BD_Shape& y) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", y->space_dimension() == " << y.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", required dimension == " << required_dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", c->space_dimension == " << c.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", cg->space_dimension == " << cg.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const Generator& g) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", g->space_dimension == " << g.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le) { -23376: using namespace IO_Operators; -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << le << " is too complex."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << le_name << "->space_dimension() == " -23376: << le.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: template -23376: void -23376: BD_Shape::throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form< Interval >& lf) const { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << lf_name << "->space_dimension() == " -23376: << lf.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: BD_Shape::throw_invalid_argument(const char* method, const char* reason) { -23376: std::ostringstream s; -23376: s << "PPL::BD_Shape::" << method << ":" << std::endl -23376: << reason << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: } -23376: # 2373 "../../src/BD_Shape_defs.hh" 2 -23376: # 39 "../../src/Box_templates.hh" 2 -23376: -23376: -23376: # 1 "../../src/Rational_Interval.hh" 1 -23376: # 30 "../../src/Rational_Interval.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: struct Rational_Interval_Info_Policy { -23376: enum const_bool_value_store_special { store_special = (true) }; -23376: enum const_bool_value_store_open { store_open = (true) }; -23376: enum const_bool_value_cache_empty { cache_empty = (true) }; -23376: enum const_bool_value_cache_singleton { cache_singleton = (true) }; -23376: enum const_bool_value_cache_normalized { cache_normalized = (false) }; -23376: enum anonymous_enum_next_bit { next_bit = (0) }; -23376: enum const_bool_value_may_be_empty { may_be_empty = (true) }; -23376: enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) }; -23376: enum const_bool_value_check_inexact { check_inexact = (false) }; -23376: }; -23376: -23376: typedef Interval_Info_Bitset Rational_Interval_Info; -23376: -23376: -23376: -23376: -23376: typedef Interval Rational_Interval; -23376: -23376: } -23376: # 42 "../../src/Box_templates.hh" 2 -23376: -23376: -23376: -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: inline -23376: Box::Box(dimension_type num_dimensions, Degenerate_Element kind) -23376: : seq(check_space_dimension_overflow(num_dimensions, -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(n, k)", -23376: "n exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: -23376: if (kind == UNIVERSE) { -23376: for (dimension_type i = num_dimensions; i-- > 0; ) { -23376: seq[i].assign(UNIVERSE); -23376: } -23376: set_empty_up_to_date(); -23376: } -23376: else { -23376: set_empty(); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Constraint_System& cs) -23376: : seq(check_space_dimension_overflow(cs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(cs)", -23376: "cs exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: for (dimension_type i = cs.space_dimension(); i-- > 0; ) { -23376: seq[i].assign(UNIVERSE); -23376: } -23376: add_constraints_no_check(cs); -23376: } -23376: -23376: template -23376: inline -23376: Box::Box(const Congruence_System& cgs) -23376: : seq(check_space_dimension_overflow(cgs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(cgs)", -23376: "cgs exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: for (dimension_type i = cgs.space_dimension(); i-- > 0; ) { -23376: seq[i].assign(UNIVERSE); -23376: } -23376: add_congruences_no_check(cgs); -23376: } -23376: -23376: template -23376: template -23376: inline -23376: Box::Box(const Box& y, Complexity_Class) -23376: : seq(y.space_dimension()), -23376: -23376: -23376: status() { -23376: -23376: if (y.marked_empty()) { -23376: set_empty(); -23376: } -23376: -23376: if (!y.marked_empty()) { -23376: for (dimension_type k = y.space_dimension(); k-- > 0; ) { -23376: seq[k].assign(y.seq[k]); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: Box::Box(const Generator_System& gs) -23376: : seq(check_space_dimension_overflow(gs.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(gs)", -23376: "gs exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: const Generator_System::const_iterator gs_begin = gs.begin(); -23376: const Generator_System::const_iterator gs_end = gs.end(); -23376: if (gs_begin == gs_end) { -23376: -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: set_empty_up_to_date(); -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: bool point_seen = false; -23376: -23376: for (Generator_System::const_iterator -23376: gs_i = gs_begin; gs_i != gs_end; ++gs_i) { -23376: const Generator& g = *gs_i; -23376: if (g.is_point()) { -23376: const Coefficient& d = g.divisor(); -23376: if (point_seen) { -23376: -23376: -23376: -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), d, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_iq; ITV& iq = holder_iq.item(); -23376: iq.build(i_constraint(EQUAL, q)); -23376: seq[i].join_assign(iq); -23376: } -23376: } -23376: else { -23376: -23376: point_seen = true; -23376: -23376: -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), d, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: seq[i].build(i_constraint(EQUAL, q)); -23376: } -23376: } -23376: } -23376: } -23376: -23376: if (!point_seen) { -23376: -23376: throw std::invalid_argument("PPL::Box::Box(gs):\n" -23376: "the non-empty generator system gs " -23376: "contains no points."); -23376: } -23376: -23376: -23376: for (Generator_System::const_iterator gs_i = gs_begin; -23376: gs_i != gs_end; ++gs_i) { -23376: const Generator& g = *gs_i; -23376: switch (g.type()) { -23376: case Generator::LINE: -23376: for (Generator::expr_type::const_iterator i = g.expression().begin(), -23376: i_end = g.expression().end(); -23376: i != i_end; ++i) { -23376: seq[i.variable().id()].assign(UNIVERSE); -23376: } -23376: break; -23376: case Generator::RAY: -23376: for (Generator::expr_type::const_iterator i = g.expression().begin(), -23376: i_end = g.expression().end(); -23376: i != i_end; ++i) { -23376: switch (sgn(*i)) { -23376: case 1: -23376: seq[i.variable().id()].upper_extend(); -23376: break; -23376: case -1: -23376: seq[i.variable().id()].lower_extend(); -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: break; -23376: case Generator::CLOSURE_POINT: -23376: { -23376: const Coefficient& d = g.divisor(); -23376: -23376: -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), d, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: ITV& seq_i = seq[i]; -23376: seq_i.lower_extend(i_constraint(GREATER_THAN, q)); -23376: seq_i.upper_extend(i_constraint(LESS_THAN, q)); -23376: } -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: Box::Box(const BD_Shape& bds, Complexity_Class) -23376: : seq(check_space_dimension_overflow(bds.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(bds)", -23376: "bds exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: bds.shortest_path_closure_assign(); -23376: if (bds.marked_empty()) { -23376: set_empty(); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: set_empty_up_to_date(); -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim == 0) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: typedef typename BD_Shape::coefficient_type Coeff; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; Coeff& tmp = holder_tmp.item(); -23376: const DB_Row& dbm_0 = bds.dbm[0]; -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: I_Constraint lower; -23376: I_Constraint upper; -23376: ITV& seq_i = seq[i]; -23376: -23376: -23376: const Coeff& u = dbm_0[i+1]; -23376: if (!is_plus_infinity(u)) { -23376: upper.set(LESS_OR_EQUAL, u, true); -23376: } -23376: -23376: -23376: const Coeff& negated_l = bds.dbm[i+1][0]; -23376: if (!is_plus_infinity(negated_l)) { -23376: neg_assign_r(tmp, negated_l, ROUND_DOWN); -23376: lower.set(GREATER_OR_EQUAL, tmp); -23376: } -23376: -23376: seq_i.build(lower, upper); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: Box::Box(const Octagonal_Shape& oct, Complexity_Class) -23376: : seq(check_space_dimension_overflow(oct.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(oct)", -23376: "oct exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: oct.strong_closure_assign(); -23376: if (oct.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: set_empty_up_to_date(); -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item(); -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: typedef typename Octagonal_Shape::coefficient_type Coeff; -23376: I_Constraint lower; -23376: I_Constraint upper; -23376: ITV& seq_i = seq[i]; -23376: const dimension_type ii = 2*i; -23376: const dimension_type cii = ii + 1; -23376: -23376: -23376: const Coeff& twice_ub = oct.matrix[cii][ii]; -23376: if (!is_plus_infinity(twice_ub)) { -23376: assign_r(upper_bound, twice_ub, ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(upper_bound, upper_bound, 1, ROUND_NOT_NEEDED); -23376: upper.set(LESS_OR_EQUAL, upper_bound); -23376: } -23376: -23376: -23376: const Coeff& twice_lb = oct.matrix[ii][cii]; -23376: if (!is_plus_infinity(twice_lb)) { -23376: assign_r(lower_bound, twice_lb, ROUND_NOT_NEEDED); -23376: neg_assign_r(lower_bound, lower_bound, ROUND_NOT_NEEDED); -23376: div_2exp_assign_r(lower_bound, lower_bound, 1, ROUND_NOT_NEEDED); -23376: lower.set(GREATER_OR_EQUAL, lower_bound); -23376: } -23376: seq_i.build(lower, upper); -23376: } -23376: } -23376: -23376: template -23376: Box::Box(const Polyhedron& ph, Complexity_Class complexity) -23376: : seq(check_space_dimension_overflow(ph.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(ph)", -23376: "ph exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: set_empty_up_to_date(); -23376: -23376: -23376: -23376: if (ph.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: const dimension_type space_dim = ph.space_dimension(); -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: if (ph.generators_are_up_to_date() && !ph.has_pending_constraints()) { -23376: Box tmp(ph.generators()); -23376: m_swap(tmp); -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: if (complexity == POLYNOMIAL_COMPLEXITY) { -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: seq[i].assign(UNIVERSE); -23376: } -23376: -23376: const Constraint_System cs = ph.simplified_constraints(); -23376: -23376: -23376: -23376: const dimension_type max_iterations = 20; -23376: propagate_constraints_no_check(cs, max_iterations); -23376: } -23376: else if (complexity == SIMPLEX_COMPLEXITY) { -23376: MIP_Problem lp(space_dim); -23376: const Constraint_System& ph_cs = ph.constraints(); -23376: if (!ph_cs.has_strict_inequalities()) { -23376: lp.add_constraints(ph_cs); -23376: } -23376: else { -23376: -23376: for (Constraint_System::const_iterator i = ph_cs.begin(), -23376: ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) { -23376: const Constraint& c = *i; -23376: if (c.is_strict_inequality()) { -23376: const Linear_Expression expr(c.expression()); -23376: lp.add_constraint(expr >= 0); -23376: } -23376: else { -23376: lp.add_constraint(c); -23376: } -23376: } -23376: } -23376: -23376: if (!lp.is_satisfiable()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: Generator g(point()); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item(); -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: I_Constraint lower; -23376: I_Constraint upper; -23376: ITV& seq_i = seq[i]; -23376: lp.set_objective_function(Variable(i)); -23376: -23376: lp.set_optimization_mode(MAXIMIZATION); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, bound_numer, bound_denom); -23376: assign_r(upper_bound.get_num(), bound_numer, ROUND_NOT_NEEDED); -23376: assign_r(upper_bound.get_den(), bound_denom, ROUND_NOT_NEEDED); -23376: ((void) 0); -23376: upper.set(LESS_OR_EQUAL, upper_bound); -23376: } -23376: -23376: lp.set_optimization_mode(MINIMIZATION); -23376: if (lp.solve() == OPTIMIZED_MIP_PROBLEM) { -23376: g = lp.optimizing_point(); -23376: lp.evaluate_objective_function(g, bound_numer, bound_denom); -23376: assign_r(lower_bound.get_num(), bound_numer, ROUND_NOT_NEEDED); -23376: assign_r(lower_bound.get_den(), bound_denom, ROUND_NOT_NEEDED); -23376: ((void) 0); -23376: lower.set(GREATER_OR_EQUAL, lower_bound); -23376: } -23376: seq_i.build(lower, upper); -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: if (ph.is_empty()) { -23376: set_empty(); -23376: } -23376: else { -23376: Box tmp(ph.generators()); -23376: m_swap(tmp); -23376: } -23376: } -23376: } -23376: -23376: template -23376: Box::Box(const Grid& gr, Complexity_Class) -23376: : seq(check_space_dimension_overflow(gr.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(gr)", -23376: "gr exceeds the maximum " -23376: "allowed space dimension")), -23376: status() { -23376: -23376: if (gr.marked_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: -23376: -23376: set_empty_up_to_date(); -23376: -23376: const dimension_type space_dim = gr.space_dimension(); -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: if (!gr.generators_are_up_to_date() && !gr.update_generators()) { -23376: -23376: set_empty(); -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound; mpq_class& bound = holder_bound.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item(); -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: ITV& seq_i = seq[i]; -23376: Variable var(i); -23376: bool max; -23376: if (gr.maximize(var, bound_numer, bound_denom, max)) { -23376: assign_r(bound.get_num(), bound_numer, ROUND_NOT_NEEDED); -23376: assign_r(bound.get_den(), bound_denom, ROUND_NOT_NEEDED); -23376: bound.canonicalize(); -23376: seq_i.build(i_constraint(EQUAL, bound)); -23376: } -23376: else { -23376: seq_i.assign(UNIVERSE); -23376: } -23376: } -23376: } -23376: -23376: template -23376: template -23376: Box::Box(const Partially_Reduced_Product& dp, -23376: Complexity_Class complexity) -23376: : seq(), status() { -23376: check_space_dimension_overflow(dp.space_dimension(), -23376: max_space_dimension(), -23376: "PPL::Box::", -23376: "Box(dp)", -23376: "dp exceeds the maximum " -23376: "allowed space dimension"); -23376: Box tmp1(dp.domain1(), complexity); -23376: Box tmp2(dp.domain2(), complexity); -23376: tmp1.intersection_assign(tmp2); -23376: m_swap(tmp1); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_space_dimensions_and_embed(const dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: check_space_dimension_overflow(m, max_space_dimension() - space_dimension(), -23376: "PPL::Box::", -23376: "add_space_dimensions_and_embed(m)", -23376: "adding m new space dimensions exceeds " -23376: "the maximum allowed space dimension"); -23376: -23376: -23376: seq.insert(seq.end(), m, ITV(UNIVERSE)); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Box::add_space_dimensions_and_project(const dimension_type m) { -23376: -23376: if (m == 0) { -23376: return; -23376: } -23376: check_space_dimension_overflow(m, max_space_dimension() - space_dimension(), -23376: "PPL::Box::", -23376: "add_space_dimensions_and_project(m)", -23376: "adding m new space dimensions exceeds " -23376: "the maximum allowed space dimension"); -23376: -23376: seq.insert(seq.end(), m, ITV(0)); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: operator==(const Box& x, const Box& y) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: if (x.is_empty()) { -23376: return y.is_empty(); -23376: } -23376: -23376: if (y.is_empty()) { -23376: return x.is_empty(); -23376: } -23376: -23376: for (dimension_type k = x_space_dim; k-- > 0; ) { -23376: if (x.seq[k] != y.seq[k]) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::bounds(const Linear_Expression& expr, const bool from_above) const { -23376: -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((from_above -23376: ? "bounds_from_above(e)" -23376: : "bounds_from_below(e)"), "e", expr); -23376: } -23376: -23376: if (space_dim == 0 || is_empty()) { -23376: return true; -23376: } -23376: const int from_above_sign = from_above ? 1 : -1; -23376: -23376: -23376: for (Linear_Expression::const_iterator i = expr.begin(), -23376: i_end = expr.end(); i != i_end; ++i) { -23376: const Variable v = i.variable(); -23376: switch (sgn(*i) * from_above_sign) { -23376: case 1: -23376: if (seq[v.id()].upper_is_boundary_infinity()) { -23376: return false; -23376: } -23376: break; -23376: case 0: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: case -1: -23376: if (seq[v.id()].lower_is_boundary_infinity()) { -23376: return false; -23376: } -23376: break; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: interval_relation(const ITV& i, -23376: const Constraint::Type constraint_type, -23376: Coefficient_traits::const_reference numer, -23376: Coefficient_traits::const_reference denom) { -23376: -23376: if (i.is_universe()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound; mpq_class& bound = holder_bound.item(); -23376: assign_r(bound.get_num(), numer, ROUND_NOT_NEEDED); -23376: assign_r(bound.get_den(), denom, ROUND_NOT_NEEDED); -23376: bound.canonicalize(); -23376: neg_assign_r(bound, bound, ROUND_NOT_NEEDED); -23376: const bool is_lower_bound = (denom > 0); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_diff; mpq_class& bound_diff = holder_bound_diff.item(); -23376: if (constraint_type == Constraint::EQUALITY) { -23376: if (i.lower_is_boundary_infinity()) { -23376: ((void) 0); -23376: assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: return i.upper_is_open() -23376: ? Poly_Con_Relation::is_disjoint() -23376: : Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: else { -23376: assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: case 0: -23376: if (i.lower_is_open()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: if (i.is_singleton()) { -23376: return Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case -1: -23376: if (i.upper_is_boundary_infinity()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: else { -23376: assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (i.upper_is_open()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: ((void) 0); -23376: if (is_lower_bound) { -23376: if (i.lower_is_boundary_infinity()) { -23376: ((void) 0); -23376: assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (constraint_type == Constraint::STRICT_INEQUALITY -23376: || i.upper_is_open()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: else { -23376: assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (constraint_type == Constraint::NONSTRICT_INEQUALITY -23376: || i.lower_is_open()) { -23376: Poly_Con_Relation result = Poly_Con_Relation::is_included(); -23376: if (i.is_singleton()) { -23376: result = result && Poly_Con_Relation::saturates(); -23376: } -23376: return result; -23376: } -23376: else { -23376: ((void) 0) -23376: ; -23376: if (i.is_singleton()) { -23376: return Poly_Con_Relation::is_disjoint() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: case -1: -23376: if (i.upper_is_boundary_infinity()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: else { -23376: assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case 1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (constraint_type == Constraint::STRICT_INEQUALITY -23376: || i.upper_is_open()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: else { -23376: -23376: if (i.upper_is_boundary_infinity()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: else { -23376: assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case -1: -23376: return Poly_Con_Relation::is_included(); -23376: case 0: -23376: if (constraint_type == Constraint::NONSTRICT_INEQUALITY -23376: || i.upper_is_open()) { -23376: Poly_Con_Relation result = Poly_Con_Relation::is_included(); -23376: if (i.is_singleton()) { -23376: result = result && Poly_Con_Relation::saturates(); -23376: } -23376: return result; -23376: } -23376: else { -23376: ((void) 0) -23376: ; -23376: if (i.is_singleton()) { -23376: return Poly_Con_Relation::is_disjoint() -23376: && Poly_Con_Relation::saturates(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: } -23376: case 1: -23376: if (i.lower_is_boundary_infinity()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: else { -23376: assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED); -23376: sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED); -23376: switch (sgn(bound_diff)) { -23376: case -1: -23376: return Poly_Con_Relation::strictly_intersects(); -23376: case 0: -23376: if (constraint_type == Constraint::STRICT_INEQUALITY -23376: || i.lower_is_open()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: case 1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return Poly_Con_Relation::nothing(); -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: Box::relation_with(const Congruence& cg) const { -23376: const dimension_type cg_space_dim = cg.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (cg_space_dim > space_dim) { -23376: throw_dimension_incompatible("relation_with(cg)", cg); -23376: } -23376: if (is_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if (cg.is_inconsistent()) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: if (cg.is_equality()) { -23376: const Constraint c(cg); -23376: return relation_with(c); -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_r; Rational_Interval& r = holder_r.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_t; Rational_Interval& t = holder_t.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_m; mpq_class& m = holder_m.item(); -23376: r = 0; -23376: for (Congruence::expr_type::const_iterator i = cg.expression().begin(), -23376: i_end = cg.expression().end(); i != i_end; ++i) { -23376: const Coefficient& cg_i = *i; -23376: const Variable v = i.variable(); -23376: assign_r(m, cg_i, ROUND_NOT_NEEDED); -23376: -23376: t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint()); -23376: t *= m; -23376: r += t; -23376: } -23376: -23376: if (r.lower_is_boundary_infinity() || r.upper_is_boundary_infinity()) { -23376: return Poly_Con_Relation::strictly_intersects(); -23376: } -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lower; Parma_Polyhedra_Library::Coefficient& lower = holder_lower.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_mod; Parma_Polyhedra_Library::Coefficient& mod = holder_mod.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_v; Parma_Polyhedra_Library::Coefficient& v = holder_v.item(); -23376: mod = cg.modulus(); -23376: v = cg.inhomogeneous_term() % mod; -23376: assign_r(lower, r.lower(), ROUND_DOWN); -23376: v -= ((lower / mod) * mod); -23376: if (v + lower > 0) { -23376: v -= mod; -23376: } -23376: return interval_relation(r, Constraint::EQUALITY, v); -23376: } -23376: -23376: template -23376: Poly_Con_Relation -23376: Box::relation_with(const Constraint& c) const { -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (c_space_dim > space_dim) { -23376: throw_dimension_incompatible("relation_with(c)", c); -23376: } -23376: -23376: if (is_empty()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: -23376: if (space_dim == 0) { -23376: if ((c.is_equality() && c.inhomogeneous_term() != 0) -23376: || (c.is_inequality() && c.inhomogeneous_term() < 0)) { -23376: return Poly_Con_Relation::is_disjoint(); -23376: } -23376: else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) { -23376: -23376: -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else if (c.is_equality() || c.inhomogeneous_term() == 0) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: else { -23376: -23376: -23376: -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: -23376: dimension_type c_num_vars = 0; -23376: dimension_type c_only_var = 0; -23376: -23376: if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) { -23376: if (c_num_vars == 0) { -23376: -23376: switch (sgn(c.inhomogeneous_term())) { -23376: case -1: -23376: return Poly_Con_Relation::is_disjoint(); -23376: case 0: -23376: if (c.is_strict_inequality()) { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_disjoint(); -23376: } -23376: else { -23376: return Poly_Con_Relation::saturates() -23376: && Poly_Con_Relation::is_included(); -23376: } -23376: case 1: -23376: return Poly_Con_Relation::is_included(); -23376: } -23376: } -23376: else { -23376: -23376: return interval_relation(seq[c_only_var], -23376: c.type(), -23376: c.inhomogeneous_term(), -23376: c.coefficient(Variable(c_only_var))); -23376: } -23376: } -23376: else { -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_r; Rational_Interval& r = holder_r.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_t; Rational_Interval& t = holder_t.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_m; mpq_class& m = holder_m.item(); -23376: r = 0; -23376: const Constraint::expr_type& e = c.expression(); -23376: for (Constraint::expr_type::const_iterator i = e.begin(), i_end = e.end(); -23376: i != i_end; ++i) { -23376: assign_r(m, *i, ROUND_NOT_NEEDED); -23376: const Variable v = i.variable(); -23376: -23376: t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint()); -23376: t *= m; -23376: r += t; -23376: } -23376: return interval_relation(r, -23376: c.type(), -23376: c.inhomogeneous_term()); -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return Poly_Con_Relation::nothing(); -23376: } -23376: -23376: template -23376: Poly_Gen_Relation -23376: Box::relation_with(const Generator& g) const { -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type g_space_dim = g.space_dimension(); -23376: -23376: -23376: if (space_dim < g_space_dim) { -23376: throw_dimension_incompatible("relation_with(g)", g); -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: -23376: if (g.is_line_or_ray()) { -23376: if (g.is_line()) { -23376: const Generator::expr_type& e = g.expression(); -23376: for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end(); -23376: i != i_end; ++i) { -23376: if (!seq[i.variable().id()].is_universe()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: else { -23376: ((void) 0); -23376: const Generator::expr_type& e = g.expression(); -23376: for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end(); -23376: i != i_end; ++i) { -23376: const Variable v = i.variable(); -23376: switch (sgn(*i)) { -23376: case 1: -23376: if (!seq[v.id()].upper_is_boundary_infinity()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: break; -23376: case 0: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: case -1: -23376: if (!seq[v.id()].lower_is_boundary_infinity()) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: break; -23376: } -23376: } -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: } -23376: -23376: -23376: const Coefficient& g_divisor = g.divisor(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_g_coord; mpq_class& g_coord = holder_g_coord.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound; mpq_class& bound = holder_bound.item(); -23376: -23376: -23376: -23376: for (dimension_type i = g_space_dim; i-- > 0; ) { -23376: const ITV& seq_i = seq[i]; -23376: if (seq_i.is_universe()) { -23376: continue; -23376: } -23376: assign_r(g_coord.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED); -23376: assign_r(g_coord.get_den(), g_divisor, ROUND_NOT_NEEDED); -23376: g_coord.canonicalize(); -23376: -23376: if (!seq_i.lower_is_boundary_infinity()) { -23376: assign_r(bound, seq_i.lower(), ROUND_NOT_NEEDED); -23376: if (g_coord <= bound) { -23376: if (seq_i.lower_is_open()) { -23376: if (g.is_point() || g_coord != bound) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else if (g_coord != bound) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: -23376: if (!seq_i.upper_is_boundary_infinity()) { -23376: assign_r(bound, seq_i.upper(), ROUND_NOT_NEEDED); -23376: if (g_coord >= bound) { -23376: if (seq_i.upper_is_open()) { -23376: if (g.is_point() || g_coord != bound) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: else if (g_coord != bound) { -23376: return Poly_Gen_Relation::nothing(); -23376: } -23376: } -23376: } -23376: } -23376: return Poly_Gen_Relation::subsumes(); -23376: } -23376: -23376: -23376: template -23376: bool -23376: Box::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included) const { -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible((maximize -23376: ? "maximize(e, ...)" -23376: : "minimize(e, ...)"), "e", expr); -23376: } -23376: -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: else { -23376: ext_n = expr.inhomogeneous_term(); -23376: ext_d = 1; -23376: included = true; -23376: return true; -23376: } -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return false; -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_result; mpq_class& result = holder_result.item(); -23376: assign_r(result, expr.inhomogeneous_term(), ROUND_NOT_NEEDED); -23376: bool is_included = true; -23376: const int maximize_sign = maximize ? 1 : -1; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_bound_i; mpq_class& bound_i = holder_bound_i.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_expr_i; mpq_class& expr_i = holder_expr_i.item(); -23376: for (Linear_Expression::const_iterator i = expr.begin(), -23376: i_end = expr.end(); i != i_end; ++i) { -23376: const ITV& seq_i = seq[i.variable().id()]; -23376: assign_r(expr_i, *i, ROUND_NOT_NEEDED); -23376: switch (sgn(expr_i) * maximize_sign) { -23376: case 1: -23376: if (seq_i.upper_is_boundary_infinity()) { -23376: return false; -23376: } -23376: assign_r(bound_i, seq_i.upper(), ROUND_NOT_NEEDED); -23376: add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED); -23376: if (seq_i.upper_is_open()) { -23376: is_included = false; -23376: } -23376: break; -23376: case 0: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: case -1: -23376: if (seq_i.lower_is_boundary_infinity()) { -23376: return false; -23376: } -23376: assign_r(bound_i, seq_i.lower(), ROUND_NOT_NEEDED); -23376: add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED); -23376: if (seq_i.lower_is_open()) { -23376: is_included = false; -23376: } -23376: break; -23376: } -23376: } -23376: -23376: ((void) 0); -23376: ext_n = result.get_num(); -23376: ext_d = result.get_den(); -23376: included = is_included; -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::max_min(const Linear_Expression& expr, -23376: const bool maximize, -23376: Coefficient& ext_n, Coefficient& ext_d, -23376: bool& included, -23376: Generator& g) const { -23376: if (!max_min(expr, maximize, ext_n, ext_d, included)) { -23376: return false; -23376: } -23376: -23376: Linear_Expression g_expr; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_g_divisor; Parma_Polyhedra_Library::Coefficient& g_divisor = holder_g_divisor.item(); -23376: g_divisor = 1; -23376: const int maximize_sign = maximize ? 1 : -1; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_g_coord; mpq_class& g_coord = holder_g_coord.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_factor; Parma_Polyhedra_Library::Coefficient& factor = holder_factor.item(); -23376: -23376: -23376: for (dimension_type i = space_dimension(); i-- > 0; ) { -23376: const ITV& seq_i = seq[i]; -23376: switch (sgn(expr.coefficient(Variable(i))) * maximize_sign) { -23376: case 1: -23376: assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED); -23376: break; -23376: case 0: -23376: -23376: -23376: -23376: if (seq_i.contains(0)) { -23376: continue; -23376: } -23376: if (!seq_i.lower_is_boundary_infinity()) { -23376: if (seq_i.lower_is_open()) { -23376: if (!seq_i.upper_is_boundary_infinity()) { -23376: if (seq_i.upper_is_open()) { -23376: -23376: assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_seq_i_upper; mpq_class& q_seq_i_upper = holder_q_seq_i_upper.item(); -23376: assign_r(q_seq_i_upper, seq_i.upper(), ROUND_NOT_NEEDED); -23376: g_coord += q_seq_i_upper; -23376: g_coord /= 2; -23376: } -23376: else { -23376: -23376: assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED); -23376: } -23376: } -23376: else { -23376: -23376: assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED); -23376: ++g_coord; -23376: } -23376: } -23376: else { -23376: -23376: assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED); -23376: } -23376: } -23376: else { -23376: -23376: -23376: ((void) 0); -23376: assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED); -23376: if (seq_i.upper_is_open()) { -23376: --g_coord; -23376: } -23376: } -23376: break; -23376: case -1: -23376: assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED); -23376: break; -23376: } -23376: -23376: assign_r(denom, g_coord.get_den(), ROUND_NOT_NEEDED); -23376: lcm_assign(lcm, g_divisor, denom); -23376: exact_div_assign(factor, lcm, g_divisor); -23376: g_expr *= factor; -23376: exact_div_assign(factor, lcm, denom); -23376: assign_r(numer, g_coord.get_num(), ROUND_NOT_NEEDED); -23376: numer *= factor; -23376: g_expr += numer * Variable(i); -23376: g_divisor = lcm; -23376: } -23376: g = Generator::point(g_expr, g_divisor); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::contains(const Box& y) const { -23376: const Box& x = *this; -23376: -23376: if (x.space_dimension() != y.space_dimension()) { -23376: x.throw_dimension_incompatible("contains(y)", y); -23376: } -23376: -23376: -23376: if (y.is_empty()) { -23376: return true; -23376: } -23376: -23376: -23376: if (x.is_empty()) { -23376: return false; -23376: } -23376: -23376: for (dimension_type k = x.seq.size(); k-- > 0; ) { -23376: -23376: if (!x.seq[k].contains(y.seq[k])) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::is_disjoint_from(const Box& y) const { -23376: const Box& x = *this; -23376: -23376: if (x.space_dimension() != y.space_dimension()) { -23376: x.throw_dimension_incompatible("is_disjoint_from(y)", y); -23376: } -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: return true; -23376: } -23376: -23376: for (dimension_type k = x.seq.size(); k-- > 0; ) { -23376: -23376: if (x.seq[k].is_disjoint_from(y.seq[k])) { -23376: return true; -23376: } -23376: } -23376: return false; -23376: } -23376: -23376: template -23376: inline bool -23376: Box::upper_bound_assign_if_exact(const Box& y) { -23376: Box& x = *this; -23376: -23376: -23376: if (x.space_dimension() != y.space_dimension()) { -23376: x.throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y); -23376: } -23376: -23376: -23376: if (y.is_empty()) { -23376: return true; -23376: } -23376: if (x.is_empty()) { -23376: x = y; -23376: return true; -23376: } -23376: -23376: bool x_j_does_not_contain_y_j = false; -23376: bool y_j_does_not_contain_x_j = false; -23376: -23376: for (dimension_type i = x.seq.size(); i-- > 0; ) { -23376: const ITV& x_seq_i = x.seq[i]; -23376: const ITV& y_seq_i = y.seq[i]; -23376: -23376: if (!x_seq_i.can_be_exactly_joined_to(y_seq_i)) { -23376: return false; -23376: } -23376: -23376: -23376: -23376: -23376: bool y_i_does_not_contain_x_i = !y_seq_i.contains(x_seq_i); -23376: if (y_i_does_not_contain_x_i && x_j_does_not_contain_y_j) { -23376: return false; -23376: } -23376: if (!x_seq_i.contains(y_seq_i)) { -23376: if (y_j_does_not_contain_x_j) { -23376: return false; -23376: } -23376: else { -23376: x_j_does_not_contain_y_j = true; -23376: } -23376: } -23376: if (y_i_does_not_contain_x_i) { -23376: y_j_does_not_contain_x_j = true; -23376: } -23376: } -23376: -23376: -23376: for (dimension_type k = x.seq.size(); k-- > 0; ) { -23376: x.seq[k].join_assign(y.seq[k]); -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::OK() const { -23376: if (status.test_empty_up_to_date() && !status.test_empty()) { -23376: Box tmp = *this; -23376: tmp.reset_empty_up_to_date(); -23376: if (tmp.check_empty()) { -23376: -23376: -23376: -23376: -23376: return false; -23376: } -23376: } -23376: -23376: -23376: if (!marked_empty()) { -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].OK()) { -23376: return false; -23376: } -23376: } -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: dimension_type -23376: Box::affine_dimension() const { -23376: dimension_type d = space_dimension(); -23376: -23376: if (d == 0) { -23376: return 0; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return 0; -23376: } -23376: -23376: for (dimension_type k = d; k-- > 0; ) { -23376: if (seq[k].is_singleton()) { -23376: --d; -23376: } -23376: } -23376: -23376: return d; -23376: } -23376: -23376: template -23376: bool -23376: Box::check_empty() const { -23376: ((void) 0); -23376: Box& x = const_cast&>(*this); -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (seq[k].is_empty()) { -23376: x.set_empty(); -23376: return true; -23376: } -23376: } -23376: x.set_nonempty(); -23376: return false; -23376: } -23376: -23376: template -23376: bool -23376: Box::is_universe() const { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].is_universe()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::is_topologically_closed() const { -23376: if (ITV::is_always_topologically_closed() || is_empty()) { -23376: return true; -23376: } -23376: -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].is_topologically_closed()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::is_discrete() const { -23376: if (is_empty()) { -23376: return true; -23376: } -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].is_singleton()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::is_bounded() const { -23376: if (is_empty()) { -23376: return true; -23376: } -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].is_bounded()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::contains_integer_point() const { -23376: if (marked_empty()) { -23376: return false; -23376: } -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: if (!seq[k].contains_integer_point()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::frequency(const Linear_Expression& expr, -23376: Coefficient& freq_n, Coefficient& freq_d, -23376: Coefficient& val_n, Coefficient& val_d) const { -23376: dimension_type space_dim = space_dimension(); -23376: -23376: if (space_dim < expr.space_dimension()) { -23376: throw_dimension_incompatible("frequency(e, ...)", "e", expr); -23376: } -23376: # 1552 "../../src/Box_templates.hh" -23376: if (space_dim == 0) { -23376: if (is_empty()) { -23376: return false; -23376: } -23376: freq_n = 0; -23376: freq_d = 1; -23376: val_n = expr.inhomogeneous_term(); -23376: val_d = 1; -23376: return true; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: return false; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; mpq_class& tmp = holder_tmp.item(); -23376: Coefficient c = expr.inhomogeneous_term(); -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item(); -23376: val_denom = 1; -23376: -23376: for (Linear_Expression::const_iterator i = expr.begin(), i_end = expr.end(); -23376: i != i_end; ++i) { -23376: const ITV& seq_i = seq[i.variable().id()]; -23376: -23376: if (seq_i.is_singleton()) { -23376: -23376: assign_r(tmp, seq_i.lower(), ROUND_NOT_NEEDED); -23376: numer = tmp.get_num(); -23376: denom = tmp.get_den(); -23376: c *= denom; -23376: c += numer * val_denom * (*i); -23376: val_denom *= denom; -23376: continue; -23376: } -23376: -23376: return false; -23376: } -23376: -23376: -23376: freq_n = 0; -23376: freq_d = 1; -23376: -23376: -23376: normalize2(c, val_denom, val_n, val_d); -23376: return true; -23376: } -23376: -23376: template -23376: bool -23376: Box::constrains(Variable var) const { -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dimension() < var_space_dim) { -23376: throw_dimension_incompatible("constrains(v)", "v", var); -23376: } -23376: -23376: if (marked_empty() || !seq[var_space_dim-1].is_universe()) { -23376: return true; -23376: } -23376: -23376: return is_empty(); -23376: } -23376: -23376: template -23376: void -23376: Box::unconstrain(const Variables_Set& vars) { -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dimension() < min_space_dim) { -23376: throw_dimension_incompatible("unconstrain(vs)", min_space_dim); -23376: } -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: for (Variables_Set::const_iterator vsi = vars.begin(), -23376: vsi_end = vars.end(); vsi != vsi_end; ++vsi) { -23376: ITV& seq_vsi = seq[*vsi]; -23376: if (!seq_vsi.is_empty()) { -23376: seq_vsi.assign(UNIVERSE); -23376: } -23376: else { -23376: set_empty(); -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::topological_closure_assign() { -23376: if (ITV::is_always_topologically_closed() || is_empty()) { -23376: return; -23376: } -23376: -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: seq[k].topological_closure_assign(); -23376: } -23376: } -23376: -23376: template -23376: void -23376: Box::wrap_assign(const Variables_Set& vars, -23376: Bounded_Integer_Type_Width w, -23376: Bounded_Integer_Type_Representation r, -23376: Bounded_Integer_Type_Overflow o, -23376: const Constraint_System* cs_p, -23376: unsigned complexity_threshold, -23376: bool wrap_individually) { -23376: -23376: -23376: -23376: -23376: -23376: -23376: (void)(wrap_individually); -23376: (void)(complexity_threshold); -23376: Box& x = *this; -23376: -23376: -23376: const dimension_type vars_space_dim = vars.space_dimension(); -23376: if (cs_p != 0 && cs_p->space_dimension() > vars_space_dim) { -23376: std::ostringstream s; -23376: s << "PPL::Box::wrap_assign(vars, w, r, o, cs_p, ...):" -23376: << std::endl -23376: << "vars.space_dimension() == " << vars_space_dim -23376: << ", cs_p->space_dimension() == " << cs_p->space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: if (vars.empty()) { -23376: if (cs_p != 0) { -23376: refine_with_constraints(*cs_p); -23376: } -23376: return; -23376: } -23376: -23376: -23376: const dimension_type space_dim = x.space_dimension(); -23376: if (space_dim < vars_space_dim) { -23376: std::ostringstream s; -23376: s << "PPL::Box::wrap_assign(vars, ...):" -23376: << std::endl -23376: << "this->space_dimension() == " << space_dim -23376: << ", required space dimension == " << vars_space_dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: if (x.is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item(); -23376: if (r == UNSIGNED) { -23376: min_value = 0; -23376: mul_2exp_assign(max_value, Coefficient_one(), w); -23376: --max_value; -23376: } -23376: else { -23376: ((void) 0); -23376: mul_2exp_assign(max_value, Coefficient_one(), w-1); -23376: neg_assign(min_value, max_value); -23376: --max_value; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_integer_quadrant_itv; ITV& integer_quadrant_itv = holder_integer_quadrant_itv.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_rational_quadrant_itv; ITV& rational_quadrant_itv = holder_rational_quadrant_itv.item(); -23376: { -23376: I_Constraint lower = i_constraint(GREATER_OR_EQUAL, min_value); -23376: I_Constraint upper = i_constraint(LESS_OR_EQUAL, max_value); -23376: integer_quadrant_itv.build(lower, upper); -23376: -23376: if (o == OVERFLOW_UNDEFINED) { -23376: ++max_value; -23376: upper = i_constraint(LESS_THAN, max_value); -23376: rational_quadrant_itv.build(lower, upper); -23376: } -23376: } -23376: -23376: const Variables_Set::const_iterator vs_end = vars.end(); -23376: -23376: if (cs_p == 0) { -23376: -23376: switch (o) { -23376: case OVERFLOW_WRAPS: -23376: for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) { -23376: x.seq[*i].wrap_assign(w, r, integer_quadrant_itv); -23376: } -23376: reset_empty_up_to_date(); -23376: break; -23376: case OVERFLOW_UNDEFINED: -23376: for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) { -23376: ITV& x_seq_v = x.seq[*i]; -23376: if (!rational_quadrant_itv.contains(x_seq_v)) { -23376: x_seq_v.assign(integer_quadrant_itv); -23376: } -23376: } -23376: break; -23376: case OVERFLOW_IMPOSSIBLE: -23376: for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) { -23376: x.seq[*i].intersect_assign(integer_quadrant_itv); -23376: } -23376: reset_empty_up_to_date(); -23376: break; -23376: } -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: const Constraint_System& cs = *cs_p; -23376: -23376: typedef std::map > map_type; -23376: map_type var_cs_map; -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: i_end = cs.end(); i != i_end; ++i) { -23376: const Constraint& c = *i; -23376: dimension_type c_num_vars = 0; -23376: dimension_type c_only_var = 0; -23376: if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) { -23376: if (c_num_vars == 1) { -23376: -23376: ((void) 0); -23376: -23376: if (vars.find(c_only_var) != vs_end) { -23376: var_cs_map[c_only_var].push_back(&c); -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: x.set_empty(); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_refinement_itv; ITV& refinement_itv = holder_refinement_itv.item(); -23376: const map_type::const_iterator var_cs_map_end = var_cs_map.end(); -23376: -23376: for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) { -23376: const dimension_type v = *i; -23376: refinement_itv = integer_quadrant_itv; -23376: -23376: map_type::const_iterator var_cs_map_iter = var_cs_map.find(v); -23376: if (var_cs_map_iter != var_cs_map_end) { -23376: -23376: const map_type::mapped_type& var_cs = var_cs_map_iter->second; -23376: for (dimension_type j = var_cs.size(); j-- > 0; ) { -23376: const Constraint& c = *var_cs[j]; -23376: refine_interval_no_check(refinement_itv, -23376: c.type(), -23376: c.inhomogeneous_term(), -23376: c.coefficient(Variable(v))); -23376: } -23376: } -23376: -23376: ITV& x_seq_v = x.seq[v]; -23376: switch (o) { -23376: case OVERFLOW_WRAPS: -23376: x_seq_v.wrap_assign(w, r, refinement_itv); -23376: break; -23376: case OVERFLOW_UNDEFINED: -23376: if (!rational_quadrant_itv.contains(x_seq_v)) { -23376: x_seq_v.assign(UNIVERSE); -23376: } -23376: break; -23376: case OVERFLOW_IMPOSSIBLE: -23376: x_seq_v.intersect_assign(refinement_itv); -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: -23376: } -23376: -23376: template -23376: void -23376: Box::drop_some_non_integer_points(Complexity_Class) { -23376: if (std::numeric_limits::is_integer -23376: && !ITV::info_type::store_open) { -23376: return; -23376: } -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: seq[k].drop_some_non_integer_points(); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::drop_some_non_integer_points(const Variables_Set& vars, -23376: Complexity_Class) { -23376: -23376: const dimension_type min_space_dim = vars.space_dimension(); -23376: if (space_dimension() < min_space_dim) { -23376: throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)", -23376: min_space_dim); -23376: } -23376: if (std::numeric_limits::is_integer -23376: && !ITV::info_type::store_open) { -23376: return; -23376: } -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: for (Variables_Set::const_iterator v_i = vars.begin(), -23376: v_end = vars.end(); v_i != v_end; ++v_i) { -23376: seq[*v_i].drop_some_non_integer_points(); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::intersection_assign(const Box& y) { -23376: Box& x = *this; -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: x.throw_dimension_incompatible("intersection_assign(y)", y); -23376: } -23376: -23376: -23376: if (x.marked_empty()) { -23376: return; -23376: } -23376: if (y.marked_empty()) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: -23376: -23376: reset_empty_up_to_date(); -23376: -23376: for (dimension_type k = space_dim; k-- > 0; ) { -23376: x.seq[k].intersect_assign(y.seq[k]); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::upper_bound_assign(const Box& y) { -23376: Box& x = *this; -23376: -23376: -23376: if (x.space_dimension() != y.space_dimension()) { -23376: x.throw_dimension_incompatible("upper_bound_assign(y)", y); -23376: } -23376: -23376: -23376: if (y.is_empty()) { -23376: return; -23376: } -23376: if (x.is_empty()) { -23376: x = y; -23376: return; -23376: } -23376: -23376: for (dimension_type k = x.seq.size(); k-- > 0; ) { -23376: x.seq[k].join_assign(y.seq[k]); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::concatenate_assign(const Box& y) { -23376: Box& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: const dimension_type y_space_dim = y.space_dimension(); -23376: -23376: -23376: if (y.marked_empty()) { -23376: x.set_empty(); -23376: } -23376: -23376: -23376: if (y_space_dim == 0) { -23376: return; -23376: } -23376: -23376: check_space_dimension_overflow(y.space_dimension(), -23376: max_space_dimension() - space_dimension(), -23376: "PPL::Box::", -23376: "concatenate_assign(y)", -23376: "concatenation exceeds the maximum " -23376: "allowed space dimension"); -23376: -23376: -23376: x.seq.reserve(x_space_dim + y_space_dim); -23376: -23376: -23376: -23376: if (x.marked_empty()) { -23376: x.seq.insert(x.seq.end(), y_space_dim, ITV(EMPTY)); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: std::copy(y.seq.begin(), y.seq.end(), -23376: std::back_insert_iterator(x.seq)); -23376: -23376: if (!y.status.test_empty_up_to_date()) { -23376: reset_empty_up_to_date(); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::difference_assign(const Box& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("difference_assign(y)", y); -23376: } -23376: -23376: Box& x = *this; -23376: if (x.is_empty() || y.is_empty()) { -23376: return; -23376: } -23376: switch (space_dim) { -23376: case 0: -23376: -23376: -23376: x.set_empty(); -23376: break; -23376: -23376: case 1: -23376: x.seq[0].difference_assign(y.seq[0]); -23376: if (x.seq[0].is_empty()) { -23376: x.set_empty(); -23376: } -23376: break; -23376: -23376: default: -23376: { -23376: dimension_type index_non_contained = space_dim; -23376: dimension_type number_non_contained = 0; -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: if (!y.seq[i].contains(x.seq[i])) { -23376: if (++number_non_contained == 1) { -23376: index_non_contained = i; -23376: } -23376: else { -23376: break; -23376: } -23376: } -23376: } -23376: -23376: switch (number_non_contained) { -23376: case 0: -23376: -23376: x.set_empty(); -23376: break; -23376: case 1: -23376: x.seq[index_non_contained] -23376: .difference_assign(y.seq[index_non_contained]); -23376: if (x.seq[index_non_contained].is_empty()) { -23376: x.set_empty(); -23376: } -23376: break; -23376: default: -23376: -23376: break; -23376: } -23376: } -23376: break; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: bool -23376: Box::simplify_using_context_assign(const Box& y) { -23376: Box& x = *this; -23376: const dimension_type num_dims = x.space_dimension(); -23376: -23376: if (num_dims != y.space_dimension()) { -23376: x.throw_dimension_incompatible("simplify_using_context_assign(y)", y); -23376: } -23376: -23376: -23376: if (num_dims == 0) { -23376: if (y.marked_empty()) { -23376: x.set_nonempty(); -23376: return false; -23376: } -23376: else { -23376: return !x.marked_empty(); -23376: } -23376: } -23376: -23376: -23376: if (y.is_empty()) { -23376: for (dimension_type i = num_dims; i-- > 0; ) { -23376: x.seq[i].assign(UNIVERSE); -23376: } -23376: x.set_nonempty(); -23376: return false; -23376: } -23376: -23376: if (x.is_empty()) { -23376: -23376: for (dimension_type i = 0; i < num_dims; ++i) { -23376: if (y.seq[i].is_universe()) { -23376: x.seq[i].assign(UNIVERSE); -23376: } -23376: else { -23376: -23376: ITV& seq_i = x.seq[i]; -23376: seq_i.empty_intersection_assign(y.seq[i]); -23376: if (seq_i.is_empty()) { -23376: -23376: -23376: seq_i.assign(UNIVERSE); -23376: continue; -23376: } -23376: -23376: -23376: for (++i; i < num_dims; ++i) { -23376: x.seq[i].assign(UNIVERSE); -23376: } -23376: x.set_nonempty(); -23376: ((void) 0); -23376: return false; -23376: } -23376: } -23376: -23376: -23376: ((void) 0); -23376: return false; -23376: } -23376: -23376: -23376: for (dimension_type i = 0; i < num_dims; ++i) { -23376: if (!x.seq[i].simplify_using_context_assign(y.seq[i])) { -23376: ((void) 0); -23376: -23376: -23376: for (dimension_type j = num_dims; j-- > i; ) { -23376: x.seq[j].assign(UNIVERSE); -23376: } -23376: for (dimension_type j = i; j-- > 0; ) { -23376: x.seq[j].assign(UNIVERSE); -23376: } -23376: ((void) 0); -23376: return false; -23376: } -23376: } -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Box::time_elapse_assign(const Box& y) { -23376: Box& x = *this; -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: x.throw_dimension_incompatible("time_elapse_assign(y)", y); -23376: } -23376: -23376: -23376: if (x_space_dim == 0) { -23376: if (y.marked_empty()) { -23376: x.set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty() -23376: || x.is_empty() || y.is_empty()) { -23376: x.set_empty(); -23376: return; -23376: } -23376: -23376: for (dimension_type i = x_space_dim; i-- > 0; ) { -23376: ITV& x_seq_i = x.seq[i]; -23376: const ITV& y_seq_i = y.seq[i]; -23376: if (!x_seq_i.lower_is_boundary_infinity()) { -23376: if (y_seq_i.lower_is_boundary_infinity() || y_seq_i.lower() < 0) { -23376: x_seq_i.lower_extend(); -23376: } -23376: } -23376: if (!x_seq_i.upper_is_boundary_infinity()) { -23376: if (y_seq_i.upper_is_boundary_infinity() || y_seq_i.upper() > 0) { -23376: x_seq_i.upper_extend(); -23376: } -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: inline void -23376: Box::remove_space_dimensions(const Variables_Set& vars) { -23376: -23376: -23376: -23376: if (vars.empty()) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: const dimension_type old_space_dim = space_dimension(); -23376: -23376: -23376: const dimension_type vsi_space_dim = vars.space_dimension(); -23376: if (old_space_dim < vsi_space_dim) { -23376: throw_dimension_incompatible("remove_space_dimensions(vs)", -23376: vsi_space_dim); -23376: } -23376: -23376: const dimension_type new_space_dim = old_space_dim - vars.size(); -23376: -23376: -23376: -23376: -23376: if (is_empty() || new_space_dim == 0) { -23376: seq.resize(new_space_dim); -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: -23376: -23376: Variables_Set::const_iterator vsi = vars.begin(); -23376: Variables_Set::const_iterator vsi_end = vars.end(); -23376: dimension_type dst = *vsi; -23376: dimension_type src = dst + 1; -23376: for (++vsi; vsi != vsi_end; ++vsi) { -23376: const dimension_type vsi_next = *vsi; -23376: -23376: while (src < vsi_next) { -23376: swap(seq[dst++], seq[src++]); -23376: } -23376: ++src; -23376: } -23376: -23376: -23376: while (src < old_space_dim) { -23376: swap(seq[dst++], seq[src++]); -23376: } -23376: -23376: ((void) 0); -23376: seq.resize(new_space_dim); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::remove_higher_space_dimensions(const dimension_type new_dimension) { -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (new_dimension > space_dim) { -23376: throw_dimension_incompatible("remove_higher_space_dimensions(nd)", -23376: new_dimension); -23376: } -23376: -23376: -23376: -23376: -23376: if (new_dimension == space_dim) { -23376: ((void) 0); -23376: return; -23376: } -23376: -23376: seq.resize(new_dimension); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Box::map_space_dimensions(const Partial_Function& pfunc) { -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: if (pfunc.has_empty_codomain()) { -23376: -23376: remove_higher_space_dimensions(0); -23376: return; -23376: } -23376: -23376: const dimension_type new_space_dim = pfunc.max_in_codomain() + 1; -23376: -23376: if (is_empty()) { -23376: remove_higher_space_dimensions(new_space_dim); -23376: return; -23376: } -23376: -23376: -23376: Box tmp(new_space_dim); -23376: -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: dimension_type new_i; -23376: if (pfunc.maps(i, new_i)) { -23376: swap(seq[i], tmp.seq[new_i]); -23376: } -23376: } -23376: m_swap(tmp); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::fold_space_dimensions(const Variables_Set& vars, -23376: const Variable dest) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: if (dest.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest); -23376: } -23376: -23376: -23376: if (vars.empty()) { -23376: return; -23376: } -23376: -23376: -23376: if (vars.space_dimension() > space_dim) { -23376: throw_dimension_incompatible("fold_space_dimensions(vs, v)", -23376: vars.space_dimension()); -23376: } -23376: -23376: if (vars.find(dest.id()) != vars.end()) { -23376: throw_invalid_argument("fold_space_dimensions(vs, v)", -23376: "v should not occur in vs"); -23376: } -23376: -23376: -23376: if (!is_empty()) { -23376: -23376: -23376: ITV& seq_v = seq[dest.id()]; -23376: for (Variables_Set::const_iterator i = vars.begin(), -23376: vs_end = vars.end(); i != vs_end; ++i) { -23376: seq_v.join_assign(seq[*i]); -23376: } -23376: } -23376: remove_space_dimensions(vars); -23376: } -23376: -23376: template -23376: void -23376: Box::add_constraint_no_check(const Constraint& c) { -23376: ((void) 0); -23376: -23376: dimension_type c_num_vars = 0; -23376: dimension_type c_only_var = 0; -23376: -23376: if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) { -23376: throw_invalid_argument("add_constraint(c)", -23376: "c is not an interval constraint"); -23376: } -23376: -23376: -23376: -23376: if (c.is_strict_inequality() && c_num_vars != 0 -23376: && ITV::is_always_topologically_closed()) { -23376: throw_invalid_argument("add_constraint(c)", -23376: "c is a nontrivial strict constraint"); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: const Coefficient& n = c.inhomogeneous_term(); -23376: if (c_num_vars == 0) { -23376: -23376: if (n < 0 -23376: || (c.is_equality() && n != 0) -23376: || (c.is_strict_inequality() && n == 0)) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: const Coefficient& d = c.coefficient(Variable(c_only_var)); -23376: add_interval_constraint_no_check(c_only_var, c.type(), n, d); -23376: } -23376: -23376: template -23376: void -23376: Box::add_constraints_no_check(const Constraint_System& cs) { -23376: ((void) 0); -23376: -23376: -23376: -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: cs_end = cs.end(); i != cs_end; ++i) { -23376: add_constraint_no_check(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::add_congruence_no_check(const Congruence& cg) { -23376: ((void) 0); -23376: -23376: -23376: if (cg.is_proper_congruence()) { -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: return; -23376: } -23376: else if (cg.is_tautological()) { -23376: return; -23376: } -23376: else { -23376: throw_invalid_argument("add_congruence(cg)", -23376: "cg is a nontrivial proper congruence"); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: dimension_type cg_num_vars = 0; -23376: dimension_type cg_only_var = 0; -23376: -23376: if (!Box_Helpers::extract_interval_congruence(cg, cg_num_vars, cg_only_var)) { -23376: throw_invalid_argument("add_congruence(cg)", -23376: "cg is not an interval congruence"); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: const Coefficient& n = cg.inhomogeneous_term(); -23376: if (cg_num_vars == 0) { -23376: -23376: if (n != 0) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: const Coefficient& d = cg.coefficient(Variable(cg_only_var)); -23376: add_interval_constraint_no_check(cg_only_var, Constraint::EQUALITY, n, d); -23376: } -23376: -23376: template -23376: void -23376: Box::add_congruences_no_check(const Congruence_System& cgs) { -23376: ((void) 0); -23376: -23376: -23376: -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); i != cgs_end; ++i) { -23376: add_congruence_no_check(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::refine_no_check(const Constraint& c) { -23376: ((void) 0); -23376: ((void) 0); -23376: -23376: dimension_type c_num_vars = 0; -23376: dimension_type c_only_var = 0; -23376: -23376: if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) { -23376: propagate_constraint_no_check(c); -23376: return; -23376: } -23376: -23376: const Coefficient& n = c.inhomogeneous_term(); -23376: if (c_num_vars == 0) { -23376: -23376: if (n < 0 -23376: || (c.is_equality() && n != 0) -23376: || (c.is_strict_inequality() && n == 0)) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: const Coefficient& d = c.coefficient(Variable(c_only_var)); -23376: add_interval_constraint_no_check(c_only_var, c.type(), n, d); -23376: } -23376: -23376: template -23376: void -23376: Box::refine_no_check(const Constraint_System& cs) { -23376: ((void) 0); -23376: for (Constraint_System::const_iterator i = cs.begin(), -23376: cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::refine_no_check(const Congruence& cg) { -23376: ((void) 0); -23376: -23376: ((void) 0); -23376: -23376: if (cg.is_proper_congruence()) { -23376: -23376: -23376: if (cg.is_inconsistent()) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: Constraint c(cg); -23376: refine_no_check(c); -23376: } -23376: -23376: template -23376: void -23376: Box::refine_no_check(const Congruence_System& cgs) { -23376: ((void) 0); -23376: for (Congruence_System::const_iterator i = cgs.begin(), -23376: cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) { -23376: refine_no_check(*i); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: -23376: namespace Implementation { -23376: -23376: namespace Boxes { -23376: -23376: inline bool -23376: propagate_constraint_check_result(Result r, Ternary& open) { -23376: r = result_relation_class(r); -23376: switch (r) { -23376: case V_GT_MINUS_INFINITY: -23376: case V_LT_PLUS_INFINITY: -23376: return true; -23376: case V_LT: -23376: case V_GT: -23376: open = T_YES; -23376: return false; -23376: case V_LE: -23376: case V_GE: -23376: if (open == T_NO) { -23376: open = T_MAYBE; -23376: } -23376: return false; -23376: case V_EQ: -23376: return false; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: return true; -23376: } -23376: } -23376: -23376: } -23376: -23376: } -23376: -23376: -23376: template -23376: void -23376: Box::propagate_constraint_no_check(const Constraint& c) { -23376: using namespace Implementation::Boxes; -23376: -23376: ((void) 0); -23376: -23376: typedef -23376: typename Select_Temp_Boundary_Type::type -23376: Temp_Boundary_Type; -23376: -23376: const dimension_type c_space_dim = c.space_dimension(); -23376: const Constraint::Type c_type = c.type(); -23376: const Coefficient& c_inhomogeneous_term = c.inhomogeneous_term(); -23376: -23376: -23376: const dimension_type last_k -23376: = c.expression().last_nonzero(1, c_space_dim + 1); -23376: if (last_k == c_space_dim + 1) { -23376: -23376: if (c_inhomogeneous_term < 0 -23376: || (c_inhomogeneous_term == 0 -23376: && c_type != Constraint::NONSTRICT_INEQUALITY)) { -23376: set_empty(); -23376: } -23376: return; -23376: } -23376: -23376: -23376: ((void) 0); -23376: Temp_Boundary_Type t_bound; -23376: Temp_Boundary_Type t_a; -23376: Temp_Boundary_Type t_x; -23376: Ternary open; -23376: const Constraint::expr_type c_e = c.expression(); -23376: for (Constraint::expr_type::const_iterator k = c_e.begin(), -23376: k_end = c_e.lower_bound(Variable(last_k)); k != k_end; ++k) { -23376: const Coefficient& a_k = *k; -23376: const Variable k_var = k.variable(); -23376: const int sgn_a_k = sgn(a_k); -23376: if (sgn_a_k == 0) { -23376: continue; -23376: } -23376: Result r; -23376: if (sgn_a_k > 0) { -23376: open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO; -23376: if (open == T_NO) { -23376: maybe_reset_fpu_inexact(); -23376: } -23376: r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = neg_assign_r(t_bound, t_bound, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: for (Constraint::expr_type::const_iterator i = c_e.begin(), -23376: i_end = c_e.lower_bound(Variable(last_k)); i != i_end; ++i) { -23376: const Variable i_var = i.variable(); -23376: if (i_var.id() == k_var.id()) { -23376: continue; -23376: } -23376: const Coefficient& a_i = *i; -23376: const int sgn_a_i = sgn(a_i); -23376: ITV& x_i = seq[i_var.id()]; -23376: if (sgn_a_i < 0) { -23376: if (x_i.lower_is_boundary_infinity()) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = assign_r(t_x, x_i.lower(), ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: if (x_i.lower_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: if (x_i.upper_is_boundary_infinity()) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = assign_r(t_x, x_i.upper(), ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: if (x_i.upper_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: } -23376: } -23376: r = assign_r(t_a, a_k, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_1; -23376: } -23376: -23376: -23376: if (open == T_MAYBE -23376: && maybe_check_fpu_inexact() == 1) { -23376: open = T_YES; -23376: } -23376: { -23376: const Relation_Symbol rel -23376: = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL; -23376: seq[k_var.id()].add_constraint(i_constraint(rel, t_bound)); -23376: } -23376: reset_empty_up_to_date(); -23376: maybe_refine_upper_1: -23376: if (c_type != Constraint::EQUALITY) { -23376: continue; -23376: } -23376: open = T_NO; -23376: maybe_reset_fpu_inexact(); -23376: r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = neg_assign_r(t_bound, t_bound, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: for (Constraint::expr_type::const_iterator i = c_e.begin(), -23376: i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) { -23376: const Variable i_var = i.variable(); -23376: if (i_var.id() == k_var.id()) { -23376: continue; -23376: } -23376: const Coefficient& a_i = *i; -23376: const int sgn_a_i = sgn(a_i); -23376: ITV& x_i = seq[i_var.id()]; -23376: if (sgn_a_i < 0) { -23376: if (x_i.upper_is_boundary_infinity()) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_x, x_i.upper(), ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: if (x_i.upper_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: if (x_i.lower_is_boundary_infinity()) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_x, x_i.lower(), ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: if (x_i.lower_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: } -23376: } -23376: r = assign_r(t_a, a_k, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: -23376: -23376: if (open == T_MAYBE -23376: && maybe_check_fpu_inexact() == 1) { -23376: open = T_YES; -23376: } -23376: const Relation_Symbol rel -23376: = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL; -23376: seq[k_var.id()].add_constraint(i_constraint(rel, t_bound)); -23376: reset_empty_up_to_date(); -23376: } -23376: else { -23376: ((void) 0); -23376: open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO; -23376: if (open == T_NO) { -23376: maybe_reset_fpu_inexact(); -23376: } -23376: r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = neg_assign_r(t_bound, t_bound, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: for (Constraint::expr_type::const_iterator i = c_e.begin(), -23376: i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) { -23376: const Variable i_var = i.variable(); -23376: if (i_var.id() == k_var.id()) { -23376: continue; -23376: } -23376: const Coefficient& a_i = *i; -23376: const int sgn_a_i = sgn(a_i); -23376: ITV& x_i = seq[i_var.id()]; -23376: if (sgn_a_i < 0) { -23376: if (x_i.lower_is_boundary_infinity()) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = assign_r(t_x, x_i.lower(), ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: if (x_i.lower_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: if (x_i.upper_is_boundary_infinity()) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = assign_r(t_x, x_i.upper(), ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: if (x_i.upper_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: } -23376: } -23376: r = assign_r(t_a, a_k, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto maybe_refine_upper_2; -23376: } -23376: -23376: if (open == T_MAYBE -23376: && maybe_check_fpu_inexact() == 1) { -23376: open = T_YES; -23376: } -23376: { -23376: const Relation_Symbol rel -23376: = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL; -23376: seq[k_var.id()].add_constraint(i_constraint(rel, t_bound)); -23376: } -23376: reset_empty_up_to_date(); -23376: maybe_refine_upper_2: -23376: if (c_type != Constraint::EQUALITY) { -23376: continue; -23376: } -23376: open = T_NO; -23376: maybe_reset_fpu_inexact(); -23376: r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = neg_assign_r(t_bound, t_bound, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: for (Constraint::expr_type::const_iterator i = c_e.begin(), -23376: i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) { -23376: const Variable i_var = i.variable(); -23376: if (i_var.id() == k_var.id()) { -23376: continue; -23376: } -23376: const Coefficient& a_i = *i; -23376: const int sgn_a_i = sgn(a_i); -23376: ITV& x_i = seq[i_var.id()]; -23376: if (sgn_a_i < 0) { -23376: if (x_i.upper_is_boundary_infinity()) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_x, x_i.upper(), ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: if (x_i.upper_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: } -23376: else { -23376: ((void) 0); -23376: if (x_i.lower_is_boundary_infinity()) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_a, a_i, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = assign_r(t_x, x_i.lower(), ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: if (x_i.lower_is_open()) { -23376: open = T_YES; -23376: } -23376: r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: } -23376: } -23376: r = assign_r(t_a, a_k, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN); -23376: if (propagate_constraint_check_result(r, open)) { -23376: goto next_k; -23376: } -23376: -23376: -23376: if (open == T_MAYBE -23376: && maybe_check_fpu_inexact() == 1) { -23376: open = T_YES; -23376: } -23376: const Relation_Symbol rel -23376: = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL; -23376: seq[k_var.id()].add_constraint(i_constraint(rel, t_bound)); -23376: reset_empty_up_to_date(); -23376: } -23376: next_k: -23376: ; -23376: } -23376: } -23376: # 3027 "../../src/Box_templates.hh" -23376: template -23376: void -23376: Box -23376: ::propagate_constraints_no_check(const Constraint_System& cs, -23376: const dimension_type max_iterations) { -23376: const dimension_type space_dim = space_dimension(); -23376: ((void) 0); -23376: -23376: const Constraint_System::const_iterator cs_begin = cs.begin(); -23376: const Constraint_System::const_iterator cs_end = cs.end(); -23376: const dimension_type propagation_weight -23376: = Implementation::num_constraints(cs) * space_dim; -23376: -23376: Sequence copy; -23376: bool changed; -23376: dimension_type num_iterations = 0; -23376: do { -23376: do { } while (false); -23376: ++num_iterations; -23376: copy = seq; -23376: for (Constraint_System::const_iterator i = cs_begin; i != cs_end; ++i) { -23376: propagate_constraint_no_check(*i); -23376: } -23376: -23376: do { Weightwatch_Traits::weight += (40)*(propagation_weight); } while (false); -23376: -23376: -23376: -23376: maybe_abandon(); -23376: -23376: -23376: -23376: if (num_iterations == max_iterations) { -23376: break; -23376: } -23376: -23376: changed = (copy != seq); -23376: } while (changed); -23376: } -23376: -23376: template -23376: void -23376: Box::affine_image(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_image(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", "e", expr); -23376: } -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", "v", var); -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: Tmp_Interval_Type expr_value; -23376: Tmp_Interval_Type temp0; -23376: Tmp_Interval_Type temp1; -23376: expr_value.assign(expr.inhomogeneous_term()); -23376: for (Linear_Expression::const_iterator i = expr.begin(), -23376: i_end = expr.end(); i != i_end; ++i) { -23376: temp0.assign(*i); -23376: temp1.assign(seq[i.variable().id()]); -23376: temp0.mul_assign(temp0, temp1); -23376: expr_value.add_assign(expr_value, temp0); -23376: } -23376: if (denominator != 1) { -23376: temp0.assign(denominator); -23376: expr_value.div_assign(expr_value, temp0); -23376: } -23376: seq[var.id()].assign(expr_value); -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::affine_form_image(const Variable var, -23376: const Linear_Form& lf) { -23376: -23376: -23376: enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_3121 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits ::is_exact)>) } -23376: -23376: ; -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: const dimension_type lf_space_dim = lf.space_dimension(); -23376: if (space_dim < lf_space_dim) { -23376: throw_dimension_incompatible("affine_form_image(var, lf)", "lf", lf); -23376: } -23376: -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("affine_form_image(var, lf)", "var", var); -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: ITV result = lf.inhomogeneous_term(); -23376: for (dimension_type i = 0; i < lf_space_dim; ++i) { -23376: ITV current_addend = lf.coefficient(Variable(i)); -23376: const ITV& curr_int = seq[i]; -23376: current_addend *= curr_int; -23376: result += current_addend; -23376: } -23376: -23376: seq[var.id()].assign(result); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::affine_preimage(const Variable var, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference -23376: denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("affine_preimage(v, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type x_space_dim = space_dimension(); -23376: const dimension_type expr_space_dim = expr.space_dimension(); -23376: if (x_space_dim < expr_space_dim) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr); -23376: } -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (x_space_dim < var_space_dim) { -23376: throw_dimension_incompatible("affine_preimage(v, e, d)", "v", var); -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: const Coefficient& expr_v = expr.coefficient(var); -23376: const bool invertible = (expr_v != 0); -23376: if (!invertible) { -23376: Tmp_Interval_Type expr_value; -23376: Tmp_Interval_Type temp0; -23376: Tmp_Interval_Type temp1; -23376: expr_value.assign(expr.inhomogeneous_term()); -23376: for (Linear_Expression::const_iterator i = expr.begin(), -23376: i_end = expr.end(); i != i_end; ++i) { -23376: temp0.assign(*i); -23376: temp1.assign(seq[i.variable().id()]); -23376: temp0.mul_assign(temp0, temp1); -23376: expr_value.add_assign(expr_value, temp0); -23376: } -23376: if (denominator != 1) { -23376: temp0.assign(denominator); -23376: expr_value.div_assign(expr_value, temp0); -23376: } -23376: ITV& x_seq_v = seq[var.id()]; -23376: expr_value.intersect_assign(x_seq_v); -23376: if (expr_value.is_empty()) { -23376: set_empty(); -23376: } -23376: else { -23376: x_seq_v.assign(UNIVERSE); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: Linear_Expression inverse; -23376: inverse -= expr; -23376: inverse += (expr_v + denominator) * var; -23376: affine_image(var, inverse, expr_v); -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::bounded_affine_image(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("affine_image(v, e, d)", "v", var); -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: if (denominator > 0) { -23376: refine_with_constraint(lb_expr <= ub_expr); -23376: } -23376: else { -23376: refine_with_constraint(lb_expr >= ub_expr); -23376: } -23376: -23376: -23376: if (lb_expr.coefficient(var) == 0) { -23376: -23376: generalized_affine_image(var, -23376: LESS_OR_EQUAL, -23376: ub_expr, -23376: denominator); -23376: if (denominator > 0) { -23376: refine_with_constraint(lb_expr <= denominator*var); -23376: } -23376: else { -23376: refine_with_constraint(denominator*var <= lb_expr); -23376: } -23376: } -23376: else if (ub_expr.coefficient(var) == 0) { -23376: -23376: generalized_affine_image(var, -23376: GREATER_OR_EQUAL, -23376: lb_expr, -23376: denominator); -23376: if (denominator > 0) { -23376: refine_with_constraint(denominator*var <= ub_expr); -23376: } -23376: else { -23376: refine_with_constraint(ub_expr <= denominator*var); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: ITV& seq_v = seq[var.id()]; -23376: if (maximize(ub_expr, max_numer, max_denom, max_included)) { -23376: if (minimize(lb_expr, min_numer, min_denom, min_included)) { -23376: -23376: -23376: -23376: min_denom *= denominator; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q1; mpq_class& q1 = holder_q1.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q2; mpq_class& q2 = holder_q2.item(); -23376: assign_r(q1.get_num(), min_numer, ROUND_NOT_NEEDED); -23376: assign_r(q1.get_den(), min_denom, ROUND_NOT_NEEDED); -23376: q1.canonicalize(); -23376: -23376: -23376: max_denom *= denominator; -23376: assign_r(q2.get_num(), max_numer, ROUND_NOT_NEEDED); -23376: assign_r(q2.get_den(), max_denom, ROUND_NOT_NEEDED); -23376: q2.canonicalize(); -23376: -23376: if (denominator > 0) { -23376: Relation_Symbol gr = min_included ? GREATER_OR_EQUAL : GREATER_THAN; -23376: Relation_Symbol lr = max_included ? LESS_OR_EQUAL : LESS_THAN; -23376: seq_v.build(i_constraint(gr, q1), i_constraint(lr, q2)); -23376: } -23376: else { -23376: Relation_Symbol gr = max_included ? GREATER_OR_EQUAL : GREATER_THAN; -23376: Relation_Symbol lr = min_included ? LESS_OR_EQUAL : LESS_THAN; -23376: seq_v.build(i_constraint(gr, q2), i_constraint(lr, q1)); -23376: } -23376: } -23376: else { -23376: -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: max_denom *= denominator; -23376: assign_r(q.get_num(), max_numer, ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), max_denom, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: Relation_Symbol rel = (denominator > 0) -23376: ? (max_included ? LESS_OR_EQUAL : LESS_THAN) -23376: : (max_included ? GREATER_OR_EQUAL : GREATER_THAN); -23376: seq_v.build(i_constraint(rel, q)); -23376: } -23376: } -23376: else if (minimize(lb_expr, min_numer, min_denom, min_included)) { -23376: -23376: -23376: -23376: min_denom *= denominator; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: assign_r(q.get_num(), min_numer, ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), min_denom, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: -23376: Relation_Symbol rel = (denominator > 0) -23376: ? (min_included ? GREATER_OR_EQUAL : GREATER_THAN) -23376: : (min_included ? LESS_OR_EQUAL : LESS_THAN); -23376: seq_v.build(i_constraint(rel, q)); -23376: } -23376: else { -23376: -23376: -23376: -23376: seq_v.assign(UNIVERSE); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::bounded_affine_preimage(const Variable var, -23376: const Linear_Expression& lb_expr, -23376: const Linear_Expression& ub_expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: if (denominator == 0) { -23376: throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0"); -23376: } -23376: -23376: -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "v", var); -23376: } -23376: -23376: -23376: const dimension_type lb_space_dim = lb_expr.space_dimension(); -23376: if (space_dim < lb_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "lb", lb_expr); -23376: } -23376: const dimension_type ub_space_dim = ub_expr.space_dimension(); -23376: if (space_dim < ub_space_dim) { -23376: throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)", -23376: "ub", ub_expr); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: const bool negative_denom = (denominator < 0); -23376: const Coefficient& lb_var_coeff = lb_expr.coefficient(var); -23376: const Coefficient& ub_var_coeff = ub_expr.coefficient(var); -23376: -23376: -23376: -23376: if (lb_var_coeff == ub_var_coeff) { -23376: if (negative_denom) { -23376: refine_with_constraint(lb_expr >= ub_expr); -23376: } -23376: else { -23376: refine_with_constraint(lb_expr <= ub_expr); -23376: } -23376: } -23376: -23376: ITV& seq_var = seq[var.id()]; -23376: if (!seq_var.is_universe()) { -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_pos_denominator; Parma_Polyhedra_Library::Coefficient& pos_denominator = holder_pos_denominator.item(); -23376: pos_denominator = denominator; -23376: if (negative_denom) { -23376: neg_assign(pos_denominator, pos_denominator); -23376: } -23376: -23376: -23376: bool open_lower = seq_var.lower_is_open(); -23376: bool unbounded_lower = seq_var.lower_is_boundary_infinity(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_seq_var_lower; mpq_class& q_seq_var_lower = holder_q_seq_var_lower.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer_lower; Parma_Polyhedra_Library::Coefficient& numer_lower = holder_numer_lower.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom_lower; Parma_Polyhedra_Library::Coefficient& denom_lower = holder_denom_lower.item(); -23376: if (!unbounded_lower) { -23376: assign_r(q_seq_var_lower, seq_var.lower(), ROUND_NOT_NEEDED); -23376: assign_r(numer_lower, q_seq_var_lower.get_num(), ROUND_NOT_NEEDED); -23376: assign_r(denom_lower, q_seq_var_lower.get_den(), ROUND_NOT_NEEDED); -23376: if (negative_denom) { -23376: neg_assign(denom_lower, denom_lower); -23376: } -23376: numer_lower *= pos_denominator; -23376: seq_var.lower_extend(); -23376: } -23376: bool open_upper = seq_var.upper_is_open(); -23376: bool unbounded_upper = seq_var.upper_is_boundary_infinity(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_seq_var_upper; mpq_class& q_seq_var_upper = holder_q_seq_var_upper.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_numer_upper; Parma_Polyhedra_Library::Coefficient& numer_upper = holder_numer_upper.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom_upper; Parma_Polyhedra_Library::Coefficient& denom_upper = holder_denom_upper.item(); -23376: if (!unbounded_upper) { -23376: assign_r(q_seq_var_upper, seq_var.upper(), ROUND_NOT_NEEDED); -23376: assign_r(numer_upper, q_seq_var_upper.get_num(), ROUND_NOT_NEEDED); -23376: assign_r(denom_upper, q_seq_var_upper.get_den(), ROUND_NOT_NEEDED); -23376: if (negative_denom) { -23376: neg_assign(denom_upper, denom_upper); -23376: } -23376: numer_upper *= pos_denominator; -23376: seq_var.upper_extend(); -23376: } -23376: -23376: if (!unbounded_lower) { -23376: -23376: -23376: -23376: Linear_Expression revised_lb_expr(ub_expr); -23376: revised_lb_expr -= ub_var_coeff * var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: neg_assign(d, denom_lower); -23376: revised_lb_expr *= d; -23376: revised_lb_expr += numer_lower; -23376: -23376: -23376: -23376: bool included; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: if (minimize(revised_lb_expr, numer_lower, denom, included)) { -23376: denom_lower *= (denom * ub_var_coeff); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: assign_r(q.get_num(), numer_lower, ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), denom_lower, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: if (!included) { -23376: open_lower = true; -23376: } -23376: Relation_Symbol rel; -23376: if ((ub_var_coeff >= 0) ? !negative_denom : negative_denom) { -23376: rel = open_lower ? GREATER_THAN : GREATER_OR_EQUAL; -23376: } -23376: else { -23376: rel = open_lower ? LESS_THAN : LESS_OR_EQUAL; -23376: } -23376: seq_var.add_constraint(i_constraint(rel, q)); -23376: if (seq_var.is_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: } -23376: } -23376: -23376: if (!unbounded_upper) { -23376: -23376: -23376: -23376: Linear_Expression revised_ub_expr(lb_expr); -23376: revised_ub_expr -= lb_var_coeff * var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: neg_assign(d, denom_upper); -23376: revised_ub_expr *= d; -23376: revised_ub_expr += numer_upper; -23376: -23376: -23376: -23376: bool included; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item(); -23376: if (maximize(revised_ub_expr, numer_upper, denom, included)) { -23376: denom_upper *= (denom * lb_var_coeff); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q; mpq_class& q = holder_q.item(); -23376: assign_r(q.get_num(), numer_upper, ROUND_NOT_NEEDED); -23376: assign_r(q.get_den(), denom_upper, ROUND_NOT_NEEDED); -23376: q.canonicalize(); -23376: if (!included) { -23376: open_upper = true; -23376: } -23376: Relation_Symbol rel; -23376: if ((lb_var_coeff >= 0) ? !negative_denom : negative_denom) { -23376: rel = open_upper ? LESS_THAN : LESS_OR_EQUAL; -23376: } -23376: else { -23376: rel = open_upper ? GREATER_THAN : GREATER_OR_EQUAL; -23376: } -23376: seq_var.add_constraint(i_constraint(rel, q)); -23376: if (seq_var.is_empty()) { -23376: set_empty(); -23376: return; -23376: } -23376: } -23376: } -23376: } -23376: -23376: -23376: -23376: if (lb_var_coeff != ub_var_coeff) { -23376: if (denominator > 0) { -23376: refine_with_constraint(lb_expr <= ub_expr); -23376: } -23376: else { -23376: refine_with_constraint(lb_expr >= ub_expr); -23376: } -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::generalized_affine_image(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0"); -23376: } -23376: -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim < expr.space_dimension()) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", -23376: "e", expr); -23376: } -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", -23376: "v", var); -23376: } -23376: -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: -23376: affine_image(var, expr, denominator); -23376: -23376: if (relsym == EQUAL) { -23376: -23376: return; -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: ITV& seq_var = seq[var.id()]; -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: seq_var.lower_extend(); -23376: break; -23376: case LESS_THAN: -23376: seq_var.lower_extend(); -23376: if (!seq_var.upper_is_boundary_infinity()) { -23376: seq_var.remove_sup(); -23376: } -23376: break; -23376: case GREATER_OR_EQUAL: -23376: seq_var.upper_extend(); -23376: break; -23376: case GREATER_THAN: -23376: seq_var.upper_extend(); -23376: if (!seq_var.lower_is_boundary_infinity()) { -23376: seq_var.remove_inf(); -23376: } -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::generalized_affine_preimage(const Variable var, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& expr, -23376: Coefficient_traits::const_reference denominator) -23376: { -23376: -23376: if (denominator == 0) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "d == 0"); -23376: } -23376: -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim < expr.space_dimension()) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: "e", expr); -23376: } -23376: -23376: const dimension_type var_space_dim = var.space_dimension(); -23376: if (space_dim < var_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)", -23376: "v", var); -23376: } -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: -23376: if (relsym == EQUAL) { -23376: affine_preimage(var, expr, denominator); -23376: return; -23376: } -23376: -23376: -23376: Relation_Symbol reversed_relsym; -23376: switch (relsym) { -23376: case LESS_THAN: -23376: reversed_relsym = GREATER_THAN; -23376: break; -23376: case LESS_OR_EQUAL: -23376: reversed_relsym = GREATER_OR_EQUAL; -23376: break; -23376: case GREATER_OR_EQUAL: -23376: reversed_relsym = LESS_OR_EQUAL; -23376: break; -23376: case GREATER_THAN: -23376: reversed_relsym = LESS_THAN; -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: -23376: -23376: const Coefficient& var_coefficient = expr.coefficient(var); -23376: if (var_coefficient != 0) { -23376: Linear_Expression inverse_expr -23376: = expr - (denominator + var_coefficient) * var; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_inverse_denominator; Parma_Polyhedra_Library::Coefficient& inverse_denominator = holder_inverse_denominator.item(); -23376: neg_assign(inverse_denominator, var_coefficient); -23376: Relation_Symbol inverse_relsym -23376: = (sgn(denominator) == sgn(inverse_denominator)) -23376: ? relsym -23376: : reversed_relsym; -23376: generalized_affine_image(var, inverse_relsym, inverse_expr, -23376: inverse_denominator); -23376: return; -23376: } -23376: # 3716 "../../src/Box_templates.hh" -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: bool bound_above = maximize(denominator*var, max_numer, max_denom, max_included); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool bound_below = minimize(denominator*var, min_numer, min_denom, min_included); -23376: -23376: const Relation_Symbol corrected_relsym -23376: = (denominator > 0) ? relsym : reversed_relsym; -23376: -23376: -23376: Linear_Expression revised_expr; -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: if (corrected_relsym == LESS_THAN || corrected_relsym == LESS_OR_EQUAL) { -23376: if (bound_below) { -23376: revised_expr = expr; -23376: revised_expr.set_inhomogeneous_term(Coefficient_zero()); -23376: revised_expr *= d; -23376: } -23376: } -23376: else { -23376: if (bound_above) { -23376: revised_expr = expr; -23376: revised_expr.set_inhomogeneous_term(Coefficient_zero()); -23376: revised_expr *= max_denom; -23376: } -23376: } -23376: -23376: switch (corrected_relsym) { -23376: case LESS_THAN: -23376: if (bound_below) { -23376: refine_with_constraint(min_numer < revised_expr); -23376: } -23376: break; -23376: case LESS_OR_EQUAL: -23376: if (bound_below) { -23376: (min_included) -23376: ? refine_with_constraint(min_numer <= revised_expr) -23376: : refine_with_constraint(min_numer < revised_expr); -23376: } -23376: break; -23376: case GREATER_OR_EQUAL: -23376: if (bound_above) { -23376: (max_included) -23376: ? refine_with_constraint(max_numer >= revised_expr) -23376: : refine_with_constraint(max_numer > revised_expr); -23376: } -23376: break; -23376: case GREATER_THAN: -23376: if (bound_above) { -23376: refine_with_constraint(max_numer > revised_expr); -23376: } -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: ITV& seq_v = seq[var.id()]; -23376: seq_v.assign(UNIVERSE); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::generalized_affine_image(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: dimension_type lhs_space_dim = lhs.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item(); -23376: bool max_included; -23376: bool max_rhs = maximize(rhs, max_numer, max_denom, max_included); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item(); -23376: bool min_included; -23376: bool min_rhs = minimize(rhs, min_numer, min_denom, min_included); -23376: -23376: -23376: -23376: -23376: -23376: bool has_var = false; -23376: dimension_type has_var_id = lhs.last_nonzero(); -23376: -23376: if (has_var_id != 0) { -23376: has_var = true; -23376: --has_var_id; -23376: dimension_type other_var = lhs.first_nonzero(1, has_var_id + 1); -23376: --other_var; -23376: if (other_var != has_var_id) { -23376: -23376: -23376: ITV& seq_var = seq[has_var_id]; -23376: seq_var.assign(UNIVERSE); -23376: -23376: -23376: -23376: ITV& seq_i = seq[other_var]; -23376: seq_i.assign(UNIVERSE); -23376: ((void) 0); -23376: return; -23376: } -23376: } -23376: -23376: if (has_var) { -23376: -23376: ITV& seq_var = seq[has_var_id]; -23376: -23376: -23376: -23376: const Coefficient& inhomo = lhs.inhomogeneous_term(); -23376: const Coefficient& coeff = lhs.coefficient(Variable(has_var_id)); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_max; mpq_class& q_max = holder_q_max.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_q_min; mpq_class& q_min = holder_q_min.item(); -23376: if (max_rhs) { -23376: max_numer -= inhomo * max_denom; -23376: max_denom *= coeff; -23376: assign_r(q_max.get_num(), max_numer, ROUND_NOT_NEEDED); -23376: assign_r(q_max.get_den(), max_denom, ROUND_NOT_NEEDED); -23376: q_max.canonicalize(); -23376: } -23376: if (min_rhs) { -23376: min_numer -= inhomo * min_denom; -23376: min_denom *= coeff; -23376: assign_r(q_min.get_num(), min_numer, ROUND_NOT_NEEDED); -23376: assign_r(q_min.get_den(), min_denom, ROUND_NOT_NEEDED); -23376: q_min.canonicalize(); -23376: } -23376: -23376: -23376: -23376: if (coeff > 0) { -23376: -23376: switch (relsym) { -23376: case LESS_OR_EQUAL: -23376: if (max_rhs) { -23376: Relation_Symbol rel = max_included ? LESS_OR_EQUAL : LESS_THAN; -23376: seq_var.build(i_constraint(rel, q_max)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case LESS_THAN: -23376: if (max_rhs) { -23376: seq_var.build(i_constraint(LESS_THAN, q_max)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case EQUAL: -23376: { -23376: I_Constraint l; -23376: I_Constraint u; -23376: if (max_rhs) { -23376: u.set(max_included ? LESS_OR_EQUAL : LESS_THAN, q_max); -23376: } -23376: if (min_rhs) { -23376: l.set(min_included ? GREATER_OR_EQUAL : GREATER_THAN, q_min); -23376: } -23376: seq_var.build(l, u); -23376: break; -23376: } -23376: case GREATER_OR_EQUAL: -23376: if (min_rhs) { -23376: Relation_Symbol rel = min_included ? GREATER_OR_EQUAL : GREATER_THAN; -23376: seq_var.build(i_constraint(rel, q_min)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case GREATER_THAN: -23376: if (min_rhs) { -23376: seq_var.build(i_constraint(GREATER_THAN, q_min)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: else { -23376: -23376: switch (relsym) { -23376: case GREATER_OR_EQUAL: -23376: if (min_rhs) { -23376: Relation_Symbol rel = min_included ? LESS_OR_EQUAL : LESS_THAN; -23376: seq_var.build(i_constraint(rel, q_min)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case GREATER_THAN: -23376: if (min_rhs) { -23376: seq_var.build(i_constraint(LESS_THAN, q_min)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case EQUAL: -23376: { -23376: I_Constraint l; -23376: I_Constraint u; -23376: if (max_rhs) { -23376: l.set(max_included ? GREATER_OR_EQUAL : GREATER_THAN, q_max); -23376: } -23376: if (min_rhs) { -23376: u.set(min_included ? LESS_OR_EQUAL : LESS_THAN, q_min); -23376: } -23376: seq_var.build(l, u); -23376: break; -23376: } -23376: case LESS_OR_EQUAL: -23376: if (max_rhs) { -23376: Relation_Symbol rel = max_included ? GREATER_OR_EQUAL : GREATER_THAN; -23376: seq_var.build(i_constraint(rel, q_max)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: case LESS_THAN: -23376: if (max_rhs) { -23376: seq_var.build(i_constraint(GREATER_THAN, q_max)); -23376: } -23376: else { -23376: seq_var.assign(UNIVERSE); -23376: } -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: } -23376: -23376: else { -23376: -23376: -23376: const Coefficient& inhomo = lhs.inhomogeneous_term(); -23376: switch (relsym) { -23376: case LESS_THAN: -23376: refine_with_constraint(inhomo < rhs); -23376: break; -23376: case LESS_OR_EQUAL: -23376: refine_with_constraint(inhomo <= rhs); -23376: break; -23376: case EQUAL: -23376: refine_with_constraint(inhomo == rhs); -23376: break; -23376: case GREATER_OR_EQUAL: -23376: refine_with_constraint(inhomo >= rhs); -23376: break; -23376: case GREATER_THAN: -23376: refine_with_constraint(inhomo > rhs); -23376: break; -23376: default: -23376: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: void -23376: Box::generalized_affine_preimage(const Linear_Expression& lhs, -23376: const Relation_Symbol relsym, -23376: const Linear_Expression& rhs) { -23376: -23376: -23376: -23376: dimension_type lhs_space_dim = lhs.space_dimension(); -23376: const dimension_type space_dim = space_dimension(); -23376: if (space_dim < lhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e1", lhs); -23376: } -23376: -23376: -23376: const dimension_type rhs_space_dim = rhs.space_dimension(); -23376: if (space_dim < rhs_space_dim) { -23376: throw_dimension_incompatible("generalized_affine_image(e1, r, e2)", -23376: "e2", rhs); -23376: } -23376: -23376: -23376: if (relsym == NOT_EQUAL) { -23376: throw_invalid_argument("generalized_affine_image(e1, r, e2)", -23376: "r is the disequality relation symbol"); -23376: } -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: -23376: Linear_Expression revised_lhs = lhs; -23376: Linear_Expression revised_rhs = rhs; -23376: for (Linear_Expression::const_iterator i = lhs.begin(), -23376: i_end = lhs.end(); i != i_end; ++i) { -23376: const Variable var = i.variable(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item(); -23376: tmp = *i; -23376: tmp += rhs.coefficient(var); -23376: sub_mul_assign(revised_rhs, tmp, var); -23376: sub_mul_assign(revised_lhs, tmp, var); -23376: } -23376: generalized_affine_image(revised_lhs, relsym, revised_rhs); -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If >::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: Box::CC76_widening_assign(const T& y, Iterator first, Iterator last) { -23376: if (y.is_empty()) { -23376: return; -23376: } -23376: for (dimension_type i = seq.size(); i-- > 0; ) { -23376: seq[i].CC76_widening_assign(y.seq[i], first, last); -23376: } -23376: -23376: ((void) 0); -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If >::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: Box::CC76_widening_assign(const T& y, unsigned* tp) { -23376: static typename ITV::boundary_type stop_points[] = { -23376: typename ITV::boundary_type(-2), -23376: typename ITV::boundary_type(-1), -23376: typename ITV::boundary_type(0), -23376: typename ITV::boundary_type(1), -23376: typename ITV::boundary_type(2) -23376: }; -23376: -23376: Box& x = *this; -23376: -23376: if (tp != 0 && *tp > 0) { -23376: Box x_tmp(x); -23376: x_tmp.CC76_widening_assign(y, 0); -23376: -23376: if (!x.contains(x_tmp)) { -23376: --(*tp); -23376: } -23376: return; -23376: } -23376: x.CC76_widening_assign(y, -23376: stop_points, -23376: stop_points -23376: + sizeof(stop_points)/sizeof(stop_points[0])); -23376: } -23376: -23376: template -23376: void -23376: Box::get_limiting_box(const Constraint_System& cs, -23376: Box& limiting_box) const { -23376: -23376: ((void) 0); -23376: -23376: for (Constraint_System::const_iterator cs_i = cs.begin(), -23376: cs_end = cs.end(); cs_i != cs_end; ++cs_i) { -23376: const Constraint& c = *cs_i; -23376: dimension_type c_num_vars = 0; -23376: dimension_type c_only_var = 0; -23376: -23376: if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) { -23376: continue; -23376: } -23376: -23376: if (c_num_vars != 0) { -23376: -23376: -23376: const Coefficient& n = c.inhomogeneous_term(); -23376: const Coefficient& d = c.coefficient(Variable(c_only_var)); -23376: if (interval_relation(seq[c_only_var], c.type(), n, d) -23376: == Poly_Con_Relation::is_included()) { -23376: limiting_box.add_interval_constraint_no_check(c_only_var, c.type(), -23376: n, d); -23376: } -23376: } -23376: } -23376: } -23376: -23376: template -23376: void -23376: Box::limited_CC76_extrapolation_assign(const Box& y, -23376: const Constraint_System& cs, -23376: unsigned* tp) { -23376: Box& x = *this; -23376: const dimension_type space_dim = x.space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)", -23376: y); -23376: } -23376: -23376: const dimension_type cs_space_dim = cs.space_dimension(); -23376: if (space_dim < cs_space_dim) { -23376: throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)"); -23376: } -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: ((void) 0); -23376: -23376: -23376: if (marked_empty()) { -23376: return; -23376: } -23376: -23376: if (y.marked_empty()) { -23376: return; -23376: } -23376: -23376: -23376: Box limiting_box(space_dim, UNIVERSE); -23376: get_limiting_box(cs, limiting_box); -23376: -23376: x.CC76_widening_assign(y, tp); -23376: -23376: -23376: intersection_assign(limiting_box); -23376: } -23376: -23376: template -23376: template -23376: typename Enable_If >::value -23376: && Is_Same_Or_Derived::value, -23376: void>::type -23376: Box::CC76_narrowing_assign(const T& y) { -23376: const dimension_type space_dim = space_dimension(); -23376: -23376: -23376: if (space_dim != y.space_dimension()) { -23376: throw_dimension_incompatible("CC76_narrowing_assign(y)", y); -23376: } -23376: -23376: -23376: ((void) 0); -23376: -23376: -23376: -23376: if (space_dim == 0) { -23376: return; -23376: } -23376: -23376: if (y.is_empty()) { -23376: return; -23376: } -23376: -23376: if (is_empty()) { -23376: return; -23376: } -23376: -23376: -23376: for (dimension_type i = space_dim; i-- > 0; ) { -23376: ITV& x_i = seq[i]; -23376: const ITV& y_i = y.seq[i]; -23376: if (!x_i.lower_is_boundary_infinity() -23376: && !y_i.lower_is_boundary_infinity() -23376: && x_i.lower() != y_i.lower()) { -23376: x_i.lower() = y_i.lower(); -23376: } -23376: if (!x_i.upper_is_boundary_infinity() -23376: && !y_i.upper_is_boundary_infinity() -23376: && x_i.upper() != y_i.upper()) { -23376: x_i.upper() = y_i.upper(); -23376: } -23376: } -23376: ((void) 0); -23376: } -23376: -23376: template -23376: Constraint_System -23376: Box::constraints() const { -23376: const dimension_type space_dim = space_dimension(); -23376: Constraint_System cs; -23376: cs.set_space_dimension(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cs = Constraint_System::zero_dim_empty(); -23376: } -23376: return cs; -23376: } -23376: -23376: if (marked_empty()) { -23376: cs.insert(Constraint::zero_dim_false()); -23376: return cs; -23376: } -23376: -23376: for (dimension_type k = 0; k < space_dim; ++k) { -23376: const Variable v_k = Variable(k); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: bool closed = false; -23376: if (has_lower_bound(v_k, n, d, closed)) { -23376: if (closed) { -23376: cs.insert(d * v_k >= n); -23376: } -23376: else { -23376: cs.insert(d * v_k > n); -23376: } -23376: } -23376: if (has_upper_bound(v_k, n, d, closed)) { -23376: if (closed) { -23376: cs.insert(d * v_k <= n); -23376: } -23376: else { -23376: cs.insert(d * v_k < n); -23376: } -23376: } -23376: } -23376: return cs; -23376: } -23376: -23376: template -23376: Constraint_System -23376: Box::minimized_constraints() const { -23376: const dimension_type space_dim = space_dimension(); -23376: Constraint_System cs; -23376: cs.set_space_dimension(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cs = Constraint_System::zero_dim_empty(); -23376: } -23376: return cs; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: cs.insert(Constraint::zero_dim_false()); -23376: return cs; -23376: } -23376: -23376: for (dimension_type k = 0; k < space_dim; ++k) { -23376: const Variable v_k = Variable(k); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: bool closed = false; -23376: if (has_lower_bound(v_k, n, d, closed)) { -23376: if (closed) { -23376: -23376: if (seq[k].is_singleton()) { -23376: cs.insert(d * v_k == n); -23376: continue; -23376: } -23376: else { -23376: cs.insert(d * v_k >= n); -23376: } -23376: } -23376: else { -23376: cs.insert(d * v_k > n); -23376: } -23376: } -23376: if (has_upper_bound(v_k, n, d, closed)) { -23376: if (closed) { -23376: cs.insert(d * v_k <= n); -23376: } -23376: else { -23376: cs.insert(d * v_k < n); -23376: } -23376: } -23376: } -23376: return cs; -23376: } -23376: -23376: template -23376: Congruence_System -23376: Box::congruences() const { -23376: const dimension_type space_dim = space_dimension(); -23376: Congruence_System cgs(space_dim); -23376: -23376: if (space_dim == 0) { -23376: if (marked_empty()) { -23376: cgs = Congruence_System::zero_dim_empty(); -23376: } -23376: return cgs; -23376: } -23376: -23376: -23376: if (is_empty()) { -23376: cgs.insert(Congruence::zero_dim_false()); -23376: return cgs; -23376: } -23376: -23376: for (dimension_type k = 0; k < space_dim; ++k) { -23376: const Variable v_k = Variable(k); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item(); -23376: Parma_Polyhedra_Library::Dirty_Temp holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item(); -23376: bool closed = false; -23376: if (has_lower_bound(v_k, n, d, closed) && closed) { -23376: -23376: if (seq[k].is_singleton()) { -23376: cgs.insert((d * v_k %= n) / 0); -23376: } -23376: } -23376: } -23376: return cgs; -23376: } -23376: -23376: template -23376: memory_size_type -23376: Box::external_memory_in_bytes() const { -23376: memory_size_type n = seq.capacity() * sizeof(ITV); -23376: for (dimension_type k = seq.size(); k-- > 0; ) { -23376: n += seq[k].external_memory_in_bytes(); -23376: } -23376: return n; -23376: } -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const Box& box) { -23376: if (box.is_empty()) { -23376: s << "false"; -23376: } -23376: else if (box.is_universe()) { -23376: s << "true"; -23376: } -23376: else { -23376: for (dimension_type k = 0, -23376: space_dim = box.space_dimension(); k < space_dim; ) { -23376: s << Variable(k) << " in " << box[k]; -23376: ++k; -23376: if (k < space_dim) { -23376: s << ", "; -23376: } -23376: else { -23376: break; -23376: } -23376: } -23376: } -23376: return s; -23376: } -23376: -23376: template -23376: void -23376: Box::ascii_dump(std::ostream& s) const { -23376: const char separator = ' '; -23376: status.ascii_dump(s); -23376: const dimension_type space_dim = space_dimension(); -23376: s << "space_dim" << separator << space_dim; -23376: s << "\n"; -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: seq[i].ascii_dump(s); -23376: } -23376: } -23376: -23376: template void Box::ascii_dump() const { ascii_dump(std::cerr); } template void Box::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: bool -23376: Box::ascii_load(std::istream& s) { -23376: if (!status.ascii_load(s)) { -23376: return false; -23376: } -23376: std::string str; -23376: dimension_type space_dim; -23376: if (!(s >> str) || str != "space_dim") { -23376: return false; -23376: } -23376: if (!(s >> space_dim)) { -23376: return false; -23376: } -23376: seq.clear(); -23376: ITV seq_i; -23376: for (dimension_type i = 0; i < space_dim; ++i) { -23376: if (seq_i.ascii_load(s)) { -23376: seq.push_back(seq_i); -23376: } -23376: else { -23376: return false; -23376: } -23376: } -23376: -23376: -23376: ((void) 0); -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Box& y) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << this->space_dimension() -23376: << ", y->space_dimension() == " << y.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box -23376: ::throw_dimension_incompatible(const char* method, -23376: dimension_type required_dim) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", required dimension == " << required_dim << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Constraint& c) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", c->space_dimension == " << c.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Congruence& cg) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", cg->space_dimension == " << cg.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Constraint_System& cs) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", cs->space_dimension == " << cs.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Congruence_System& cgs) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", cgs->space_dimension == " << cgs.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const Generator& g) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", g->space_dimension == " << g.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_constraint_incompatible(const char* method) { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "the constraint is incompatible."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_expression_too_complex(const char* method, -23376: const Linear_Expression& le) { -23376: using namespace IO_Operators; -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << le << " is too complex."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const char* le_name, -23376: const Linear_Expression& le) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << le_name << "->space_dimension() == " -23376: << le.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: template -23376: void -23376: Box::throw_dimension_incompatible(const char* method, -23376: const char* lf_name, -23376: const Linear_Form& lf) const { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":\n" -23376: << "this->space_dimension() == " << space_dimension() -23376: << ", " << lf_name << "->space_dimension() == " -23376: << lf.space_dimension() << "."; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: template -23376: void -23376: Box::throw_invalid_argument(const char* method, const char* reason) { -23376: std::ostringstream s; -23376: s << "PPL::Box::" << method << ":" << std::endl -23376: << reason; -23376: throw std::invalid_argument(s.str()); -23376: } -23376: -23376: -23376: -23376: -23376: template -23376: bool -23376: l_m_distance_assign(Checked_Number& r, -23376: const Box& x, const Box& y, -23376: const Rounding_Dir dir, -23376: Temp& tmp0, Temp& tmp1, Temp& tmp2) { -23376: const dimension_type x_space_dim = x.space_dimension(); -23376: -23376: if (x_space_dim != y.space_dimension()) { -23376: return false; -23376: } -23376: -23376: if (x_space_dim == 0) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: } -23376: else { -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: } -23376: return true; -23376: } -23376: -23376: -23376: (void) x.is_empty(); -23376: (void) y.is_empty(); -23376: -23376: -23376: if (x.marked_empty() || y.marked_empty()) { -23376: if (x.marked_empty() == y.marked_empty()) { -23376: assign_r(r, 0, ROUND_NOT_NEEDED); -23376: return true; -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: } -23376: -23376: assign_r(tmp0, 0, ROUND_NOT_NEEDED); -23376: for (dimension_type i = x_space_dim; i-- > 0; ) { -23376: const ITV& x_i = x.seq[i]; -23376: const ITV& y_i = y.seq[i]; -23376: -23376: if (x_i.lower_is_boundary_infinity()) { -23376: if (!y_i.lower_is_boundary_infinity()) { -23376: goto pinf; -23376: } -23376: } -23376: else if (y_i.lower_is_boundary_infinity()) { -23376: goto pinf; -23376: } -23376: else { -23376: const Temp* tmp1p; -23376: const Temp* tmp2p; -23376: if (x_i.lower() > y_i.lower()) { -23376: maybe_assign(tmp1p, tmp1, x_i.lower(), dir); -23376: maybe_assign(tmp2p, tmp2, y_i.lower(), inverse(dir)); -23376: } -23376: else { -23376: maybe_assign(tmp1p, tmp1, y_i.lower(), dir); -23376: maybe_assign(tmp2p, tmp2, x_i.lower(), inverse(dir)); -23376: } -23376: sub_assign_r(tmp1, *tmp1p, *tmp2p, dir); -23376: ((void) 0); -23376: Specialization::combine(tmp0, tmp1, dir); -23376: } -23376: -23376: if (x_i.upper_is_boundary_infinity()) { -23376: if (y_i.upper_is_boundary_infinity()) { -23376: continue; -23376: } -23376: else { -23376: goto pinf; -23376: } -23376: } -23376: else if (y_i.upper_is_boundary_infinity()) { -23376: goto pinf; -23376: } -23376: else { -23376: const Temp* tmp1p; -23376: const Temp* tmp2p; -23376: if (x_i.upper() > y_i.upper()) { -23376: maybe_assign(tmp1p, tmp1, x_i.upper(), dir); -23376: maybe_assign(tmp2p, tmp2, y_i.upper(), inverse(dir)); -23376: } -23376: else { -23376: maybe_assign(tmp1p, tmp1, y_i.upper(), dir); -23376: maybe_assign(tmp2p, tmp2, x_i.upper(), inverse(dir)); -23376: } -23376: sub_assign_r(tmp1, *tmp1p, *tmp2p, dir); -23376: ((void) 0); -23376: Specialization::combine(tmp0, tmp1, dir); -23376: } -23376: } -23376: Specialization::finalize(tmp0, dir); -23376: assign_r(r, tmp0, dir); -23376: return true; -23376: -23376: pinf: -23376: assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED); -23376: return true; -23376: } -23376: -23376: } -23376: # 2287 "../../src/Box_defs.hh" 2 -23376: # 30 "../../src/Linear_Form_templates.hh" 2 -23376: -23376: -23376: # 1 "/usr/include/c++/8/cmath" 1 3 -23376: # 39 "/usr/include/c++/8/cmath" 3 -23376: -23376: # 40 "/usr/include/c++/8/cmath" 3 -23376: # 33 "../../src/Linear_Form_templates.hh" 2 -23376: -23376: namespace Parma_Polyhedra_Library { -23376: -23376: template -23376: Linear_Form::Linear_Form(const Variable v) -23376: : vec() { -23376: const dimension_type space_dim = v.space_dimension(); -23376: if (space_dim > max_space_dimension()) { -23376: throw std::length_error("Linear_Form::" -23376: "Linear_Form(v):\n" -23376: "v exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: vec.reserve(compute_capacity(space_dim+1, vec_type().max_size())); -23376: vec.resize(space_dim+1, zero); -23376: vec[v.space_dimension()] = C(typename C::boundary_type(1)); -23376: } -23376: -23376: template -23376: Linear_Form::Linear_Form(const Variable v, const Variable w) -23376: : vec() { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: const dimension_type w_space_dim = w.space_dimension(); -23376: const dimension_type space_dim = std::max(v_space_dim, w_space_dim); -23376: if (space_dim > max_space_dimension()) { -23376: throw std::length_error("Linear_Form::" -23376: "Linear_Form(v, w):\n" -23376: "v or w exceed the maximum allowed " -23376: "space dimension."); -23376: } -23376: vec.reserve(compute_capacity(space_dim+1, vec_type().max_size())); -23376: vec.resize(space_dim+1, zero); -23376: if (v_space_dim != w_space_dim) { -23376: vec[v_space_dim] = C(typename C::boundary_type(1)); -23376: vec[w_space_dim] = C(typename C::boundary_type(-1)); -23376: } -23376: } -23376: -23376: template -23376: Linear_Form::Linear_Form(const Linear_Expression& e) -23376: : vec() { -23376: const dimension_type space_dim = e.space_dimension(); -23376: if (space_dim > max_space_dimension()) { -23376: throw std::length_error("Linear_Form::" -23376: "Linear_Form(e):\n" -23376: "e exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: vec.reserve(compute_capacity(space_dim+1, vec_type().max_size())); -23376: vec.resize(space_dim+1); -23376: for (dimension_type i = space_dim; i-- > 0; ) -23376: vec[i+1] = e.coefficient(Variable(i)); -23376: vec[0] = e.inhomogeneous_term(); -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Linear_Form& f1, const Linear_Form& f2) { -23376: dimension_type f1_size = f1.size(); -23376: dimension_type f2_size = f2.size(); -23376: dimension_type min_size; -23376: dimension_type max_size; -23376: const Linear_Form* p_e_max; -23376: if (f1_size > f2_size) { -23376: min_size = f2_size; -23376: max_size = f1_size; -23376: p_e_max = &f1; -23376: } -23376: else { -23376: min_size = f1_size; -23376: max_size = f2_size; -23376: p_e_max = &f2; -23376: } -23376: -23376: Linear_Form r(max_size, false); -23376: dimension_type i = max_size; -23376: while (i > min_size) { -23376: --i; -23376: r[i] = p_e_max->vec[i]; -23376: } -23376: while (i > 0) { -23376: --i; -23376: r[i] = f1[i]; -23376: r[i] += f2[i]; -23376: } -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const Variable v, const Linear_Form& f) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Form::max_space_dimension()) { -23376: throw std::length_error("Linear_Form " -23376: "operator+(v, f):\n" -23376: "v exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: Linear_Form r(f); -23376: if (v_space_dim > f.space_dimension()) { -23376: r.extend(v_space_dim+1); -23376: } -23376: r[v_space_dim] += C(typename C::boundary_type(1)); -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator+(const C& n, const Linear_Form& f) { -23376: Linear_Form r(f); -23376: r[0] += n; -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f) { -23376: Linear_Form r(f); -23376: for (dimension_type i = f.size(); i-- > 0; ) { -23376: r[i].neg_assign(r[i]); -23376: } -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f1, const Linear_Form& f2) { -23376: dimension_type f1_size = f1.size(); -23376: dimension_type f2_size = f2.size(); -23376: if (f1_size > f2_size) { -23376: Linear_Form r(f1_size, false); -23376: dimension_type i = f1_size; -23376: while (i > f2_size) { -23376: --i; -23376: r[i] = f1[i]; -23376: } -23376: while (i > 0) { -23376: --i; -23376: r[i] = f1[i]; -23376: r[i] -= f2[i]; -23376: } -23376: return r; -23376: } -23376: else { -23376: Linear_Form r(f2_size, false); -23376: dimension_type i = f2_size; -23376: while (i > f1_size) { -23376: --i; -23376: r[i].neg_assign(f2[i]); -23376: } -23376: while (i > 0) { -23376: --i; -23376: r[i] = f1[i]; -23376: r[i] -= f2[i]; -23376: } -23376: return r; -23376: } -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Variable v, const Linear_Form& f) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Form::max_space_dimension()) { -23376: throw std::length_error("Linear_Form " -23376: "operator-(v, e):\n" -23376: "v exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: Linear_Form r(f); -23376: if (v_space_dim > f.space_dimension()) { -23376: r.extend(v_space_dim+1); -23376: } -23376: for (dimension_type i = f.size(); i-- > 0; ) { -23376: r[i].neg_assign(r[i]); -23376: } -23376: r[v_space_dim] += C(typename C::boundary_type(1)); -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const Linear_Form& f, const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Form::max_space_dimension()) { -23376: throw std::length_error("Linear_Form " -23376: "operator-(e, v):\n" -23376: "v exceeds the maximum allowed " -23376: "space dimension."); -23376: } -23376: Linear_Form r(f); -23376: if (v_space_dim > f.space_dimension()) { -23376: r.extend(v_space_dim+1); -23376: } -23376: r[v_space_dim] -= C(typename C::boundary_type(1)); -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator-(const C& n, const Linear_Form& f) { -23376: Linear_Form r(f); -23376: for (dimension_type i = f.size(); i-- > 0; ) { -23376: r[i].neg_assign(r[i]); -23376: } -23376: r[0] += n; -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form -23376: operator*(const C& n, const Linear_Form& f) { -23376: Linear_Form r(f); -23376: for (dimension_type i = f.size(); i-- > 0; ) { -23376: r[i] *= n; -23376: } -23376: return r; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator+=(Linear_Form& f1, const Linear_Form& f2) { -23376: dimension_type f1_size = f1.size(); -23376: dimension_type f2_size = f2.size(); -23376: if (f1_size < f2_size) { -23376: f1.extend(f2_size); -23376: } -23376: for (dimension_type i = f2_size; i-- > 0; ) { -23376: f1[i] += f2[i]; -23376: } -23376: return f1; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator+=(Linear_Form& f, const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Form::max_space_dimension()) { -23376: throw std::length_error("Linear_Form& " -23376: "operator+=(e, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (v_space_dim > f.space_dimension()) { -23376: f.extend(v_space_dim+1); -23376: } -23376: f[v_space_dim] += C(typename C::boundary_type(1)); -23376: return f; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator-=(Linear_Form& f1, const Linear_Form& f2) { -23376: dimension_type f1_size = f1.size(); -23376: dimension_type f2_size = f2.size(); -23376: if (f1_size < f2_size) { -23376: f1.extend(f2_size); -23376: } -23376: for (dimension_type i = f2_size; i-- > 0; ) { -23376: f1[i] -= f2[i]; -23376: } -23376: return f1; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator-=(Linear_Form& f, const Variable v) { -23376: const dimension_type v_space_dim = v.space_dimension(); -23376: if (v_space_dim > Linear_Form::max_space_dimension()) { -23376: throw std::length_error("Linear_Form& " -23376: "operator-=(e, v):\n" -23376: "v exceeds the maximum allowed space dimension."); -23376: } -23376: if (v_space_dim > f.space_dimension()) { -23376: f.extend(v_space_dim+1); -23376: } -23376: f[v_space_dim] -= C(typename C::boundary_type(1)); -23376: return f; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator*=(Linear_Form& f, const C& n) { -23376: dimension_type f_size = f.size(); -23376: for (dimension_type i = f_size; i-- > 0; ) { -23376: f[i] *= n; -23376: } -23376: return f; -23376: } -23376: -23376: -23376: template -23376: Linear_Form& -23376: operator/=(Linear_Form& f, const C& n) { -23376: dimension_type f_size = f.size(); -23376: for (dimension_type i = f_size; i-- > 0; ) { -23376: f[i] /= n; -23376: } -23376: return f; -23376: } -23376: -23376: -23376: template -23376: inline bool -23376: operator==(const Linear_Form& x, const Linear_Form& y) { -23376: const dimension_type x_size = x.size(); -23376: const dimension_type y_size = y.size(); -23376: if (x_size >= y_size) { -23376: for (dimension_type i = y_size; i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: for (dimension_type i = x_size; --i >= y_size; ) { -23376: if (x[i] != x.zero) { -23376: return false; -23376: } -23376: } -23376: } -23376: else { -23376: for (dimension_type i = x_size; i-- > 0; ) { -23376: if (x[i] != y[i]) { -23376: return false; -23376: } -23376: } -23376: for (dimension_type i = y_size; --i >= x_size; ) { -23376: if (y[i] != x.zero) { -23376: return false; -23376: } -23376: } -23376: -23376: } -23376: -23376: return true; -23376: } -23376: -23376: template -23376: void -23376: Linear_Form::negate() { -23376: for (dimension_type i = vec.size(); i-- > 0; ) { -23376: vec[i].neg_assign(vec[i]); -23376: } -23376: return; -23376: } -23376: -23376: template -23376: inline memory_size_type -23376: Linear_Form::external_memory_in_bytes() const { -23376: memory_size_type n = 0; -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: n += vec[i].external_memory_in_bytes(); -23376: } -23376: n += vec.capacity()*sizeof(C); -23376: return n; -23376: } -23376: -23376: template -23376: bool -23376: Linear_Form::OK() const { -23376: for (dimension_type i = size(); i-- > 0; ) { -23376: if (!vec[i].OK()) { -23376: return false; -23376: } -23376: } -23376: return true; -23376: } -23376: -23376: -23376: template -23376: void -23376: Linear_Form::relative_error( -23376: const Floating_Point_Format analyzed_format, -23376: Linear_Form& result) const { -23376: typedef typename C::boundary_type analyzer_format; -23376: -23376: -23376: unsigned int f_base; -23376: unsigned int f_mantissa_bits; -23376: switch (analyzed_format) { -23376: case IEEE754_HALF: -23376: f_base = float_ieee754_half::BASE; -23376: f_mantissa_bits = float_ieee754_half::MANTISSA_BITS; -23376: break; -23376: case IEEE754_SINGLE: -23376: f_base = float_ieee754_single::BASE; -23376: f_mantissa_bits = float_ieee754_single::MANTISSA_BITS; -23376: break; -23376: case IEEE754_DOUBLE: -23376: f_base = float_ieee754_double::BASE; -23376: f_mantissa_bits = float_ieee754_double::MANTISSA_BITS; -23376: break; -23376: case IBM_SINGLE: -23376: f_base = float_ibm_single::BASE; -23376: f_mantissa_bits = float_ibm_single::MANTISSA_BITS; -23376: break; -23376: case IEEE754_QUAD: -23376: f_base = float_ieee754_quad::BASE; -23376: f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS; -23376: break; -23376: case INTEL_DOUBLE_EXTENDED: -23376: f_base = float_intel_double_extended::BASE; -23376: f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS; -23376: break; -23376: default: -23376: Parma_Polyhedra_Library::ppl_unreachable(); -23376: break; -23376: } -23376: -23376: C error_propagator; -23376: -23376: unsigned int u_power = msb_position(f_base) * f_mantissa_bits; -23376: int neg_power = -static_cast(u_power); -23376: analyzer_format lb = static_cast(ldexp(1.0, neg_power)); -23376: -23376: error_propagator.build(i_constraint(GREATER_OR_EQUAL, -lb), -23376: i_constraint(LESS_OR_EQUAL, lb)); -23376: -23376: -23376: const C* current_term = &inhomogeneous_term(); -23376: -23376: # 465 "../../src/Linear_Form_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 465 "../../src/Linear_Form_templates.hh" -23376: ; -23376: -23376: C current_multiplier(std::max(std::abs(current_term->lower()), -23376: std::abs(current_term->upper()))); -23376: Linear_Form current_result_term(current_multiplier); -23376: current_result_term *= error_propagator; -23376: result = Linear_Form(current_result_term); -23376: -23376: -23376: dimension_type dimension = space_dimension(); -23376: for (dimension_type i = 0; i < dimension; ++i) { -23376: current_term = &coefficient(Variable(i)); -23376: -23376: # 477 "../../src/Linear_Form_templates.hh" 3 4 -23376: (static_cast (0)) -23376: # 477 "../../src/Linear_Form_templates.hh" -23376: ; -23376: current_multiplier = C(std::max(std::abs(current_term->lower()), -23376: std::abs(current_term->upper()))); -23376: current_result_term = Linear_Form(Variable(i)); -23376: current_result_term *= current_multiplier; -23376: current_result_term *= error_propagator; -23376: result += current_result_term; -23376: } -23376: -23376: return; -23376: } -23376: -23376: template -23376: template -23376: bool -23376: Linear_Form::intervalize(const FP_Oracle& oracle, -23376: C& result) const { -23376: result = C(inhomogeneous_term()); -23376: dimension_type dimension = space_dimension(); -23376: for (dimension_type i = 0; i < dimension; ++i) { -23376: C current_addend = coefficient(Variable(i)); -23376: C curr_int; -23376: if (!oracle.get_interval(i, curr_int)) { -23376: return false; -23376: } -23376: current_addend *= curr_int; -23376: result += current_addend; -23376: } -23376: -23376: return true; -23376: } -23376: -23376: -23376: template -23376: std::ostream& -23376: IO_Operators::operator<<(std::ostream& s, const Linear_Form& f) { -23376: const dimension_type num_variables = f.space_dimension(); -23376: bool first = true; -23376: for (dimension_type v = 0; v < num_variables; ++v) { -23376: const C& fv = f[v+1]; -23376: if (fv != typename C::boundary_type(0)) { -23376: if (first) { -23376: if (fv == typename C::boundary_type(-1)) { -23376: s << "-"; -23376: } -23376: else if (fv != typename C::boundary_type(1)) { -23376: s << fv << "*"; -23376: } -23376: first = false; -23376: } -23376: else { -23376: if (fv == typename C::boundary_type(-1)) { -23376: s << " - "; -23376: } -23376: else { -23376: s << " + "; -23376: if (fv != typename C::boundary_type(1)) { -23376: s << fv << "*"; -23376: } -23376: } -23376: } -23376: s << Variable(v); -23376: } -23376: } -23376: -23376: const C& it = f[0]; -23376: if (it != 0) { -23376: if (!first) { -23376: s << " + "; -23376: } -23376: else { -23376: first = false; -23376: } -23376: s << it; -23376: } -23376: -23376: if (first) { -23376: -23376: s << Linear_Form::zero; -23376: } -23376: return s; -23376: } -23376: -23376: template void Linear_Form::ascii_dump() const { ascii_dump(std::cerr); } template void Linear_Form::print() const { using IO_Operators::operator<<; std::cerr << *this; } -23376: -23376: template -23376: C Linear_Form::zero(typename C::boundary_type(0)); -23376: -23376: } -23376: # 10 "../../src/ppl_include_files.hh" 2 -23376: # 1 "../../src/linearize.hh" 1 -23376: # 27 "../../src/linearize.hh" -23376: # 1 "../../src/Concrete_Expression_defs.hh" 1 -23376: # 31 "../../src/Concrete_Expression_defs.hh" -23376: namespace Parma_Polyhedra_Library { -23376: -23376: -23376: class Concrete_Expression_Type { -23376: public: -23376: -23376: -23376: -23376: -23376: static Concrete_Expression_Type -23376: bounded_integer(Bounded_Integer_Type_Width width, -23376: Bounded_Integer_Type_Representation representation, -23376: Bounded_Integer_Type_Overflow overflow); -23376: -23376: -23376: -23376: -23376: static Concrete_Expression_Type -23376: floating_point(Floating_Point_Format format); -23376: -23376: -23376: -23376: -23376: -23376: bool is_bounded_integer() const; -23376: -23376: -23376: -23376: -23376: -23376: bool is_floating_point() const; -23376: # 70 "../../src/Concrete_Expression_defs.hh" -23376: Bounded_Integer_Type_Width bounded_integer_type_width() const; -23376: # 79 "../../src/Concrete_Expression_defs.hh" -23376: Bounded_Integer_Type_Representation -23376: bounded_integer_type_representation() const; -23376: # 89 "../../src/Concrete_Expression_defs.hh" -23376: Bounded_Integer_Type_Overflow -23376: bounded_integer_type_overflow() const; -23376: -23376: -23376: -23376: -23376: -23376: -23376: -23376: Floating_Point_Format floating_point_format() const; -23376: -23376: -23376: bool OK() const; -23376: -23376: private: -23376: -23376: struct Implementation { -23376: bool bounded_integer:1; -23376: unsigned int bounded_integer_type_width:23; -23376: unsigned int bounded_integer_type_representation:2; -23376: unsigned int bounded_integer_type_overflow:2; -23376: unsigned int floating_point_format:4; -23376: }; -23376: -23376: -23376: Concrete_Expression_Type(Implementation implementation); -23376: -23376: -23376: Implementation impl; -23376: }; -23376: -23376: -23376: template -23376: class Concrete_Expression_Common { -23376: public: -23376: -23376: Concrete_Expression_Type type() const; -23376: -23376: -23376: Concrete_Expression_Kind kind() const; -23376: -23376: -23376: template