--- /srv/rebuilderd/tmp/rebuilderdWwyjvK/inputs/libdune-common-doc_2.10.0-5_all.deb +++ /srv/rebuilderd/tmp/rebuilderdWwyjvK/out/libdune-common-doc_2.10.0-5_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-09-15 05:59:28.000000 debian-binary │ --rw-r--r-- 0 0 0 28184 2025-09-15 05:59:28.000000 control.tar.xz │ --rw-r--r-- 0 0 0 3146460 2025-09-15 05:59:28.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 28120 2025-09-15 05:59:28.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 3150476 2025-09-15 05:59:28.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./control │ │ │ @@ -1,13 +1,13 @@ │ │ │ Package: libdune-common-doc │ │ │ Source: dune-common │ │ │ Version: 2.10.0-5 │ │ │ Architecture: all │ │ │ Maintainer: Debian Science Maintainers │ │ │ -Installed-Size: 23530 │ │ │ +Installed-Size: 23531 │ │ │ Depends: libjs-sphinxdoc (>= 8.2) │ │ │ Built-Using: doxygen (= 1.9.8+ds-2.1) │ │ │ Section: doc │ │ │ Priority: optional │ │ │ Multi-Arch: foreign │ │ │ Homepage: https://www.dune-project.org/ │ │ │ Description: toolbox for solving PDEs -- basic classes (documentation) │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -21,15 +21,14 @@ │ │ │ │ usr/share/doc/libdune-common-doc/copyright │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00002.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00008.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00008_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00011.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00011_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00014.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00014_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00017.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00017_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00020.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00020_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00023.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00023_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00026.html │ │ │ │ @@ -37,27 +36,25 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00029.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00029_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00032.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00032_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00035.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00035_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00038.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00038_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00041.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00041_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00044.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00044_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00047.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00047_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00050.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00050_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00053.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00053_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00056.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00056_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00059.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00059_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00062.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00062_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00065.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00065_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00068.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00068_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00071.html │ │ │ │ @@ -84,18 +81,18 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00101_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00104.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00104_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00107.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00107_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00110.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00110_source.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00113.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00113_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00116.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00116_source.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00119.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00119_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00122.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00122_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00125.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00125_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00128.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00128_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00131.html │ │ │ │ @@ -122,19 +119,20 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00161_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00164.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00164_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00167.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00170.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00170_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00173.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00173_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00176.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00176_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00179.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00179_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00182.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00182_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00185.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00185_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00188.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00188_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00191.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00191_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00194.html │ │ │ │ @@ -160,45 +158,45 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00224.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00224_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00227.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00227_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00230.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00230_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00233.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00233_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00236.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00236_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00239.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00239_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00242.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00242_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00245.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00245_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00248.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00248_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00251.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00251_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00254.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00254_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00257.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00257_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00260.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00260_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00263.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00263_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00266.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00266_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00269.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00269_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00272.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00272_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00275.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00275_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00278.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00278_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00281.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00281_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00284.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00284_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00287.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00287_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00290.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00290_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00293.html │ │ │ │ @@ -216,25 +214,27 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00311.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00311_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00314.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00314_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00317.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00317_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00320.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00320_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00323.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00323_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00326.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00326_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00329.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00329_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00332.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00332_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00335.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00335_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00338.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00338_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00341.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00341_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00344.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00344_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00347.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00347_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00350.html │ │ │ │ @@ -254,22 +254,22 @@ │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00371.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00371_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00374.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00374_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00377.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00377_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00380.html │ │ │ │ +usr/share/doc/libdune-common-doc/doxygen/a00380_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00383.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00383_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00386.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00386_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00389.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00389_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00392.html │ │ │ │ -usr/share/doc/libdune-common-doc/doxygen/a00392_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00395.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00395_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00398.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00398_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00401.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00401_source.html │ │ │ │ usr/share/doc/libdune-common-doc/doxygen/a00404.html ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -26,280 +26,280 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 2825 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/buildsystem/html/search.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11208 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/buildsystem/html/searchindex.js │ │ │ -rw-r--r-- 0 root (0) root (0) 2498 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/changelog.Debian.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 10768 2024-10-04 18:52:15.000000 ./usr/share/doc/libdune-common-doc/changelog.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 9815 2023-01-12 15:06:30.000000 ./usr/share/doc/libdune-common-doc/copyright │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/ │ │ │ -rw-r--r-- 0 root (0) root (0) 3044 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00002.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6780 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8262 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39912 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14840 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3817 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6524 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4365 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5135 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6806 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12869 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21234 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023.html │ │ │ --rw-r--r-- 0 root (0) root (0) 71204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13604 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026.html │ │ │ --rw-r--r-- 0 root (0) root (0) 28674 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7773 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22676 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17881 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032.html │ │ │ --rw-r--r-- 0 root (0) root (0) 79928 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8322 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035.html │ │ │ --rw-r--r-- 0 root (0) root (0) 40739 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5048 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23174 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7344 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18649 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7264 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14137 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7355 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9907 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4978 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14827 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23435 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8438 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13174 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059.html │ │ │ --rw-r--r-- 0 root (0) root (0) 35626 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12424 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062.html │ │ │ --rw-r--r-- 0 root (0) root (0) 91584 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5881 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13121 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13246 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068.html │ │ │ --rw-r--r-- 0 root (0) root (0) 83988 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6400 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071.html │ │ │ --rw-r--r-- 0 root (0) root (0) 151816 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5662 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074.html │ │ │ --rw-r--r-- 0 root (0) root (0) 50072 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5664 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39917 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5660 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080.html │ │ │ --rw-r--r-- 0 root (0) root (0) 39763 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6381 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10393 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4899 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13459 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5441 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9255 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6997 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092.html │ │ │ --rw-r--r-- 0 root (0) root (0) 54427 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5397 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14949 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7918 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098.html │ │ │ --rw-r--r-- 0 root (0) root (0) 127860 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5274 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11329 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33482 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104.html │ │ │ --rw-r--r-- 0 root (0) root (0) 357624 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13870 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20197 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14004 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110.html │ │ │ --rw-r--r-- 0 root (0) root (0) 86151 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 81299 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113.html │ │ │ --rw-r--r-- 0 root (0) root (0) 145525 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9860 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20795 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24038 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122.html │ │ │ --rw-r--r-- 0 root (0) root (0) 42062 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6712 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11002 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7782 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12395 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5124 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29705 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5346 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33491 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6818 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137.html │ │ │ --rw-r--r-- 0 root (0) root (0) 100135 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8689 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15574 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21360 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143.html │ │ │ --rw-r--r-- 0 root (0) root (0) 122172 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3371 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146.html │ │ │ --rw-r--r-- 0 root (0) root (0) 88030 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5766 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11653 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152.html │ │ │ --rw-r--r-- 0 root (0) root (0) 55283 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5602 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9345 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5324 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10218 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13584 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161.html │ │ │ --rw-r--r-- 0 root (0) root (0) 94213 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8835 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10531 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9164 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6555 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170.html │ │ │ --rw-r--r-- 0 root (0) root (0) 18101 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3948 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8169 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176.html │ │ │ --rw-r--r-- 0 root (0) root (0) 63827 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3898 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4992 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31443 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7591 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185.html │ │ │ --rw-r--r-- 0 root (0) root (0) 138694 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6676 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188.html │ │ │ --rw-r--r-- 0 root (0) root (0) 58446 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11466 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191.html │ │ │ --rw-r--r-- 0 root (0) root (0) 291478 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9111 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194.html │ │ │ --rw-r--r-- 0 root (0) root (0) 53122 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3471 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10170 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5637 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33707 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6031 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51849 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8504 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45745 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6490 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34021 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6914 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212.html │ │ │ --rw-r--r-- 0 root (0) root (0) 47730 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7456 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33695 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 11615 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218.html │ │ │ --rw-r--r-- 0 root (0) root (0) 103142 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3657 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4978 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6611 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19944 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 13224 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227.html │ │ │ --rw-r--r-- 0 root (0) root (0) 179116 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19994 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230.html │ │ │ --rw-r--r-- 0 root (0) root (0) 180715 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6822 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233.html │ │ │ --rw-r--r-- 0 root (0) root (0) 40313 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9140 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236.html │ │ │ --rw-r--r-- 0 root (0) root (0) 173678 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8765 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239.html │ │ │ --rw-r--r-- 0 root (0) root (0) 72000 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3648 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4981 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23464 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5979 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21113 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3365 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10369 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4958 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6603 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4309 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17896 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 26302 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260.html │ │ │ --rw-r--r-- 0 root (0) root (0) 62033 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7493 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263.html │ │ │ --rw-r--r-- 0 root (0) root (0) 31465 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5355 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41537 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5621 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7109 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4767 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14347 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 30299 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275.html │ │ │ --rw-r--r-- 0 root (0) root (0) 192703 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5246 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9924 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4124 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5081 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7897 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22052 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287.html │ │ │ --rw-r--r-- 0 root (0) root (0) 46229 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8195 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 144459 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7918 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 127860 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4124 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4992 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31443 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14994 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 142940 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5124 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29705 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3371 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7706 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6286 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21544 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8689 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15574 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 240953 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9164 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11653 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 55283 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8438 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4309 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17896 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7493 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 31465 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4910 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11466 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 291478 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23464 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3657 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4978 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8765 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 72000 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6611 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19944 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19994 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 180715 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6676 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 58446 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5637 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33707 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6031 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51849 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9140 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 173678 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6822 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 40313 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9111 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 53122 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8504 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45745 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6490 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34021 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6914 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 47730 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11615 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 103142 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3648 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4981 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3471 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10170 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7456 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33695 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13224 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 179116 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7591 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 138694 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8169 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 63827 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3383 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51919 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12793 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 124302 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 30299 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 192703 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5213 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15231 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5059 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23627 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3473 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14821 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3471 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9186 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3817 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6524 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7264 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14137 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4365 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5135 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13604 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 28674 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5346 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33491 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39912 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14840 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7344 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18649 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3948 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13584 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 94213 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10744 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 109175 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6661 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 52850 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16770 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48541 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4978 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17515 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 45457 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5604 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9237 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3365 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10369 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5355 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41537 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 29990 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21360 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 122172 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7773 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22676 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4393 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7511 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4654 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7264 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6818 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 100135 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3371 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 88030 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6585 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 44036 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5042 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6949 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8833 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 15784 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6855 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 112076 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6157 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 19958 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 3898 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24038 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 42062 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 81299 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 145525 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13870 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20197 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33482 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 357624 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14004 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 86151 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9860 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20795 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6712 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11002 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 24717 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 122775 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5114 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9510 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5602 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9345 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6924 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5653 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7232 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9498 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 250587 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22052 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 46229 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6780 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8262 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8835 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10531 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6555 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 18101 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7123 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 24240 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290.html │ │ │ -rw-r--r-- 0 root (0) root (0) 39035 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5059 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23627 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6157 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296.html │ │ │ --rw-r--r-- 0 root (0) root (0) 19958 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 20534 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299.html │ │ │ --rw-r--r-- 0 root (0) root (0) 80039 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17515 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302.html │ │ │ --rw-r--r-- 0 root (0) root (0) 45457 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7123 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305.html │ │ │ --rw-r--r-- 0 root (0) root (0) 23204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8193 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308.html │ │ │ --rw-r--r-- 0 root (0) root (0) 41652 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 12793 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311.html │ │ │ --rw-r--r-- 0 root (0) root (0) 124302 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6186 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17740 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10744 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317.html │ │ │ --rw-r--r-- 0 root (0) root (0) 109175 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4910 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320.html │ │ │ --rw-r--r-- 0 root (0) root (0) 17901 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323.html │ │ │ --rw-r--r-- 0 root (0) root (0) 167128 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16770 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48541 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 24717 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329.html │ │ │ --rw-r--r-- 0 root (0) root (0) 122775 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5604 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9237 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10990 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335.html │ │ │ --rw-r--r-- 0 root (0) root (0) 22882 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4127 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10468 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341.html │ │ │ --rw-r--r-- 0 root (0) root (0) 33173 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6661 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344.html │ │ │ --rw-r--r-- 0 root (0) root (0) 52850 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6286 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347.html │ │ │ --rw-r--r-- 0 root (0) root (0) 21544 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6585 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350.html │ │ │ --rw-r--r-- 0 root (0) root (0) 44036 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8833 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15784 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5653 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7232 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9498 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359.html │ │ │ --rw-r--r-- 0 root (0) root (0) 250587 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5114 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9510 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7194 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365.html │ │ │ --rw-r--r-- 0 root (0) root (0) 151467 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368.html │ │ │ --rw-r--r-- 0 root (0) root (0) 240953 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8730 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371.html │ │ │ --rw-r--r-- 0 root (0) root (0) 61448 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3383 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51919 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 60433 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377.html │ │ │ --rw-r--r-- 0 root (0) root (0) 122588 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6924 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383.html │ │ │ --rw-r--r-- 0 root (0) root (0) 29990 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5042 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6949 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3471 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389.html │ │ │ --rw-r--r-- 0 root (0) root (0) 9186 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3473 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14821 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 3371 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7706 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14429 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398.html │ │ │ --rw-r--r-- 0 root (0) root (0) 51306 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6383 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401.html │ │ │ --rw-r--r-- 0 root (0) root (0) 16095 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4654 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7264 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 8195 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407.html │ │ │ --rw-r--r-- 0 root (0) root (0) 144459 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 5213 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410.html │ │ │ --rw-r--r-- 0 root (0) root (0) 15231 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 14994 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413.html │ │ │ --rw-r--r-- 0 root (0) root (0) 142940 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416.html │ │ │ --rw-r--r-- 0 root (0) root (0) 10467 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 4393 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419.html │ │ │ --rw-r--r-- 0 root (0) root (0) 7511 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419_source.html │ │ │ --rw-r--r-- 0 root (0) root (0) 6855 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422.html │ │ │ --rw-r--r-- 0 root (0) root (0) 112076 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5274 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 11329 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7355 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9907 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5081 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7897 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7194 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 151467 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10468 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 33173 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 26302 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 62033 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5766 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4958 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6603 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5246 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9924 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7720 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10467 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 60433 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 122588 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14429 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 51306 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4767 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14347 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6806 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12869 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 20534 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 80039 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14827 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23435 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10990 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 22882 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6186 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17740 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17881 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 79928 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8193 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 41652 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5397 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 14949 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5441 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 9255 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5662 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 50072 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5664 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39917 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6400 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 151816 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13174 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 35626 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5881 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13121 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13246 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 83988 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6997 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 54427 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4899 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 13459 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6381 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10393 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12424 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 91584 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5660 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 39763 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 4127 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 17901 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 167128 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5324 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 10218 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5979 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21113 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8322 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 40739 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 6383 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 16095 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 21234 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 71204 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5048 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 23174 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 8730 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 61448 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 5621 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7109 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419_source.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 7782 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 12395 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5325 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22981 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5173 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00428.html │ │ │ -rw-r--r-- 0 root (0) root (0) 49335 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00428_source.html │ │ │ -rw-r--r-- 0 root (0) root (0) 7896 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00431.html │ │ │ -rw-r--r-- 0 root (0) root (0) 5292 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00432.html │ │ │ -rw-r--r-- 0 root (0) root (0) 262467 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00433.html │ │ │ @@ -1185,15 +1185,15 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 2402 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_be46aaae597ce098e36afa8d6ef4f49b_dep.png │ │ │ -rw-r--r-- 0 root (0) root (0) 4890 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_cf308425303dd5c426fac7b7f2967d96.html │ │ │ -rw-r--r-- 0 root (0) root (0) 1621 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_cf308425303dd5c426fac7b7f2967d96_dep.png │ │ │ -rw-r--r-- 0 root (0) root (0) 49658 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e151556194dc695299293609645e9437.html │ │ │ -rw-r--r-- 0 root (0) root (0) 11161 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e151556194dc695299293609645e9437_dep.png │ │ │ -rw-r--r-- 0 root (0) root (0) 3668 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html │ │ │ -rw-r--r-- 0 root (0) root (0) 45631 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/doxygen.css │ │ │ --rw-r--r-- 0 root (0) root (0) 165823 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dune-common.tag.gz │ │ │ +-rw-r--r-- 0 root (0) root (0) 165919 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dune-common.tag.gz │ │ │ -rw-r--r-- 0 root (0) root (0) 7704 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/dynsections.js │ │ │ -rw-r--r-- 0 root (0) root (0) 56072 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/files.html │ │ │ -rw-r--r-- 0 root (0) root (0) 1145 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_0.png │ │ │ -rw-r--r-- 0 root (0) root (0) 1167 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_0_dark.png │ │ │ -rw-r--r-- 0 root (0) root (0) 1153 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_1.png │ │ │ -rw-r--r-- 0 root (0) root (0) 403 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_10.png │ │ │ -rw-r--r-- 0 root (0) root (0) 422 2025-09-15 05:59:28.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_10_dark.png │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00008.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: visibility.hh File Reference │ │ │ +dune-common: bitsetvector.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,70 +70,60 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -Macros
│ │ │ -
visibility.hh File Reference
│ │ │ +Classes | │ │ │ +Namespaces
│ │ │ +
bitsetvector.hh File Reference
│ │ │ │ │ │
│ │ │ │ │ │ -

Definition of macros controlling symbol visibility at the ABI level. │ │ │ +

Efficient implementation of a dynamic array of static arrays of booleans. │ │ │ More...

│ │ │ - │ │ │ +
#include <vector>
│ │ │ +#include <bitset>
│ │ │ +#include <iostream>
│ │ │ +#include <algorithm>
│ │ │ +#include <dune/common/boundschecking.hh>
│ │ │ +#include <dune/common/genericiterator.hh>
│ │ │ +#include <dune/common/exceptions.hh>
│ │ │ +
│ │ │

Go to the source code of this file.

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

│ │ │ -Macros

#define DUNE_EXPORT   implementation_defined
 Export a symbol as part of the public ABI.
 
#define DUNE_PRIVATE   implementation_defined
 Mark a symbol as being for internal use within the current DSO only.
 

│ │ │ +Classes

class  Dune::BitSetVectorConstReference< block_size, Alloc >
 A proxy class that acts as a const reference to a single bitset in a BitSetVector. More...
 
class  Dune::BitSetVectorReference< block_size, Alloc >
 A proxy class that acts as a mutable reference to a single bitset in a BitSetVector. More...
 
struct  Dune::const_reference< BitSetVectorReference< block_size, Alloc > >
 
struct  Dune::const_reference< BitSetVectorConstReference< block_size, Alloc > >
 
struct  Dune::mutable_reference< BitSetVectorReference< block_size, Alloc > >
 
struct  Dune::mutable_reference< BitSetVectorConstReference< block_size, Alloc > >
 
class  Dune::BitSetVector< block_size, Allocator >
 A dynamic array of blocks of booleans. More...
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │

Detailed Description

│ │ │ -

Definition of macros controlling symbol visibility at the ABI level.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ DUNE_EXPORT

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_EXPORT   implementation_defined
│ │ │ -
│ │ │ - │ │ │ -

Export a symbol as part of the public ABI.

│ │ │ -

Mark a class, function or static variable as visible outside the current DSO. For now, this is mostly important for templated global variables and functions that contain static variables.

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

◆ DUNE_PRIVATE

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_PRIVATE   implementation_defined
│ │ │ -
│ │ │ - │ │ │ -

Mark a symbol as being for internal use within the current DSO only.

│ │ │ -

Mark a class, function or static variable as inaccessible from outside the current DSO. Doing so will decrease the size of the symbol table, but you have to be sure that the symbol will never have to be accessed from another library or the main executable!

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

Efficient implementation of a dynamic array of static arrays of booleans.

│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,35 +1,48 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_M_a_c_r_o_s │ │ │ │ -visibility.hh File Reference │ │ │ │ -Definition of macros controlling symbol visibility at the ABI level. _M_o_r_e_._._. │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ +bitsetvector.hh File Reference │ │ │ │ +Efficient implementation of a dynamic array of static arrays of booleans. │ │ │ │ +_M_o_r_e_._._. │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_b_o_u_n_d_s_c_h_e_c_k_i_n_g_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_g_e_n_e_r_i_c_i_t_e_r_a_t_o_r_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  _D_U_N_E___E_X_P_O_R_T   implementation_defined │ │ │ │ -  Export a symbol as part of the public ABI. │ │ │ │ +CCllaasssseess │ │ │ │ + class   _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _> │ │ │ │ +  A proxy class that acts as a const reference to a single bitset in a │ │ │ │ + _B_i_t_S_e_t_V_e_c_t_o_r. _M_o_r_e_._._. │ │ │ │   │ │ │ │ -#define  _D_U_N_E___P_R_I_V_A_T_E   implementation_defined │ │ │ │ -  Mark a symbol as being for internal use within the current DSO only. │ │ │ │ + class   _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _> │ │ │ │ +  A proxy class that acts as a mutable reference to a single bitset in a │ │ │ │ + _B_i_t_S_e_t_V_e_c_t_o_r. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +struct   _D_u_n_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _> │ │ │ │ +  │ │ │ │ +struct   _D_u_n_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _> │ │ │ │ + _> │ │ │ │ +  │ │ │ │ +struct   _D_u_n_e_:_:_m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _> │ │ │ │ +  │ │ │ │ +struct   _D_u_n_e_:_:_m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c │ │ │ │ + _>_ _> │ │ │ │ +  │ │ │ │ + class   _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_a_t_o_r_ _> │ │ │ │ +  A dynamic array of blocks of booleans. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _D_u_n_e │ │ │ │ +  _D_u_n_e namespace. │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Definition of macros controlling symbol visibility at the ABI level. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? DDUUNNEE__EEXXPPOORRTT ********** │ │ │ │ -#define DUNE_EXPORT   implementation_defined │ │ │ │ -Export a symbol as part of the public ABI. │ │ │ │ -Mark a class, function or static variable as visible outside the current DSO. │ │ │ │ -For now, this is mostly important for templated global variables and functions │ │ │ │ -that contain static variables. │ │ │ │ -********** _?◆_? DDUUNNEE__PPRRIIVVAATTEE ********** │ │ │ │ -#define DUNE_PRIVATE   implementation_defined │ │ │ │ -Mark a symbol as being for internal use within the current DSO only. │ │ │ │ -Mark a class, function or static variable as inaccessible from outside the │ │ │ │ -current DSO. Doing so will decrease the size of the symbol table, but you have │ │ │ │ -to be sure that the symbol will never have to be accessed from another library │ │ │ │ -or the main executable! │ │ │ │ +Efficient implementation of a dynamic array of static arrays of booleans. │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: visibility.hh Source File │ │ │ +dune-common: bitsetvector.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,48 +74,759 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ -
visibility.hh
│ │ │ +
bitsetvector.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_COMMON_VISIBILITY_HH
│ │ │ -
6#define DUNE_COMMON_VISIBILITY_HH
│ │ │ +
5#ifndef DUNE_BLOCK_BITFIELD_HH
│ │ │ +
6#define DUNE_BLOCK_BITFIELD_HH
│ │ │
7
│ │ │ -
12#ifdef DOXYGEN
│ │ │ -
13
│ │ │ -
15
│ │ │ -
20#define DUNE_EXPORT implementation_defined
│ │ │ -
21
│ │ │ -
23
│ │ │ -
28#define DUNE_PRIVATE implementation_defined
│ │ │ -
29
│ │ │ -
30#else // DOXYGEN
│ │ │ -
31
│ │ │ -
32#if __GNUC__ >= 4
│ │ │ -
33// GCC and Clang both define __GNUC__ to 4 and they both support the visibility
│ │ │ -
34// attribute
│ │ │ -
35#define DUNE_EXPORT __attribute__((visibility("default")))
│ │ │ -
36#define DUNE_PRIVATE __attribute__((visibility("hidden")))
│ │ │ -
37#else
│ │ │ -
38// We don't know about the active compiler, so just turn the visibility macros to no-ops.
│ │ │ -
39#define DUNE_EXPORT
│ │ │ -
40#define DUNE_PRIVATE
│ │ │ -
41#endif
│ │ │ -
42
│ │ │ -
43#endif // DOXYGEN
│ │ │ -
44
│ │ │ -
45#endif // DUNE_COMMON_VISIBILITY
│ │ │ +
12#include <vector>
│ │ │ +
13#include <bitset>
│ │ │ +
14#include <iostream>
│ │ │ +
15#include <algorithm>
│ │ │ +
16
│ │ │ + │ │ │ + │ │ │ + │ │ │ +
20
│ │ │ +
21namespace Dune {
│ │ │ +
22
│ │ │ +
23 template <int block_size, class Alloc> class BitSetVector;
│ │ │ +
24 template <int block_size, class Alloc> class BitSetVectorReference;
│ │ │ +
25
│ │ │ +
36 template <int block_size, class Alloc>
│ │ │ +
│ │ │ + │ │ │ +
38 {
│ │ │ +
39 protected:
│ │ │ +
40
│ │ │ + │ │ │ +
42 friend class Dune::BitSetVector<block_size, Alloc>;
│ │ │ +
43
│ │ │ +
│ │ │ +
44 BitSetVectorConstReference(const BitSetVector& blockBitField_, int block_number_) :
│ │ │ +
45 blockBitField(blockBitField_),
│ │ │ +
46 block_number(block_number_)
│ │ │ +
47 {
│ │ │ +
48 DUNE_ASSERT_BOUNDS(blockBitField_.size() > static_cast<size_t>(block_number_));
│ │ │ +
49 }
│ │ │ +
│ │ │ +
50
│ │ │ + │ │ │ +
53
│ │ │ +
54 public:
│ │ │ +
55
│ │ │ +
56 typedef std::bitset<block_size> bitset;
│ │ │ +
57
│ │ │ +
58 // bitset interface typedefs
│ │ │ +
59 typedef typename std::vector<bool, Alloc>::const_reference reference;
│ │ │ +
60 typedef typename std::vector<bool, Alloc>::const_reference const_reference;
│ │ │ +
61 typedef size_t size_type;
│ │ │ +
62
│ │ │ +
│ │ │ + │ │ │ +
65 {
│ │ │ +
66 bitset b = *this;
│ │ │ +
67 b <<= n;
│ │ │ +
68 return b;
│ │ │ +
69 }
│ │ │ +
│ │ │ +
70
│ │ │ +
│ │ │ + │ │ │ +
73 {
│ │ │ +
74 bitset b = *this;
│ │ │ +
75 b >>= n;
│ │ │ +
76 return b;
│ │ │ +
77 }
│ │ │ +
│ │ │ +
78
│ │ │ +
│ │ │ + │ │ │ +
81 {
│ │ │ +
82 bitset b = *this;
│ │ │ +
83 b.flip();
│ │ │ +
84 return b;
│ │ │ +
85 }
│ │ │ +
│ │ │ +
86
│ │ │ +
│ │ │ + │ │ │ +
89 {
│ │ │ +
90 return block_size;
│ │ │ +
91 }
│ │ │ +
│ │ │ +
92
│ │ │ +
│ │ │ + │ │ │ +
95 {
│ │ │ +
96 size_type n = 0;
│ │ │ +
97 for(size_type i=0; i<block_size; ++i)
│ │ │ +
98 n += getBit(i);
│ │ │ +
99 return n;
│ │ │ +
100 }
│ │ │ +
│ │ │ +
101
│ │ │ +
│ │ │ +
103 bool any() const
│ │ │ +
104 {
│ │ │ +
105 return count();
│ │ │ +
106 }
│ │ │ +
│ │ │ +
107
│ │ │ +
│ │ │ +
109 bool none() const
│ │ │ +
110 {
│ │ │ +
111 return ! any();
│ │ │ +
112 }
│ │ │ +
│ │ │ +
113
│ │ │ +
│ │ │ +
115 bool all() const
│ │ │ +
116 {
│ │ │ +
117 for(size_type i=0; i<block_size; ++i)
│ │ │ +
118 if(not test(i))
│ │ │ +
119 return false;
│ │ │ +
120 return true;
│ │ │ +
121 }
│ │ │ +
│ │ │ +
122
│ │ │ +
│ │ │ +
124 bool test(size_type n) const
│ │ │ +
125 {
│ │ │ +
126 return getBit(n);
│ │ │ +
127 }
│ │ │ +
│ │ │ +
128
│ │ │ +
│ │ │ + │ │ │ +
131 {
│ │ │ +
132 return getBit(i);
│ │ │ +
133 }
│ │ │ +
│ │ │ +
134
│ │ │ +
│ │ │ +
136 operator bitset() const
│ │ │ +
137 {
│ │ │ +
138 return blockBitField.getRepr(block_number);
│ │ │ +
139 }
│ │ │ +
│ │ │ +
140
│ │ │ +
│ │ │ +
142 bool operator== (const bitset& bs) const
│ │ │ +
143 {
│ │ │ +
144 return equals(bs);
│ │ │ +
145 }
│ │ │ +
│ │ │ +
146
│ │ │ +
│ │ │ + │ │ │ +
149 {
│ │ │ +
150 return equals(bs);
│ │ │ +
151 }
│ │ │ +
│ │ │ +
152
│ │ │ +
│ │ │ +
154 bool operator!= (const bitset& bs) const
│ │ │ +
155 {
│ │ │ +
156 return ! equals(bs);
│ │ │ +
157 }
│ │ │ +
│ │ │ +
158
│ │ │ +
│ │ │ + │ │ │ +
161 {
│ │ │ +
162 return ! equals(bs);
│ │ │ +
163 }
│ │ │ +
│ │ │ +
164
│ │ │ +
│ │ │ +
171 friend std::ostream& operator<< (std::ostream& s, const BitSetVectorConstReference& v)
│ │ │ +
172 {
│ │ │ +
173 s << "(";
│ │ │ +
174 for(int i=0; i<block_size; ++i)
│ │ │ +
175 s << v[i];
│ │ │ +
176 s << ")";
│ │ │ +
177 return s;
│ │ │ +
178 }
│ │ │ +
│ │ │ +
179
│ │ │ +
180 protected:
│ │ │ + │ │ │ + │ │ │ +
183
│ │ │ +
│ │ │ + │ │ │ +
185 {
│ │ │ +
186 return blockBitField.getBit(block_number,i);
│ │ │ +
187 }
│ │ │ +
│ │ │ +
188
│ │ │ +
189 template<class BS>
│ │ │ +
│ │ │ +
190 bool equals(const BS & bs) const
│ │ │ +
191 {
│ │ │ +
192 bool eq = true;
│ │ │ +
193 for(int i=0; i<block_size; ++i)
│ │ │ +
194 eq &= (getBit(i) == bs[i]);
│ │ │ +
195 return eq;
│ │ │ +
196 }
│ │ │ +
│ │ │ +
197
│ │ │ +
198 private:
│ │ │ +
203 void operator & () = delete;
│ │ │ +
204
│ │ │ +
205 friend class BitSetVectorReference<block_size, Alloc>;
│ │ │ +
206 };
│ │ │ +
│ │ │ +
207
│ │ │ +
220 template <int block_size, class Alloc>
│ │ │ +
│ │ │ +
221 class BitSetVectorReference : public BitSetVectorConstReference<block_size,Alloc>
│ │ │ +
222 {
│ │ │ +
223 protected:
│ │ │ +
224
│ │ │ + │ │ │ +
226 friend class Dune::BitSetVector<block_size, Alloc>;
│ │ │ +
227
│ │ │ + │ │ │ +
229
│ │ │ +
│ │ │ +
230 BitSetVectorReference(BitSetVector& blockBitField_, int block_number_) :
│ │ │ +
231 BitSetVectorConstReference(blockBitField_, block_number_),
│ │ │ +
232 blockBitField(blockBitField_)
│ │ │ +
233 {}
│ │ │ +
│ │ │ +
234
│ │ │ +
235 public:
│ │ │ +
236 typedef std::bitset<block_size> bitset;
│ │ │ +
237
│ │ │ +
241 typedef typename std::vector<bool, Alloc>::reference reference;
│ │ │ +
243 typedef typename std::vector<bool, Alloc>::const_reference const_reference;
│ │ │ +
245
│ │ │ +
247 typedef size_t size_type;
│ │ │ +
248
│ │ │ +
│ │ │ + │ │ │ +
251 {
│ │ │ +
252 for(int i=0; i<block_size; ++i)
│ │ │ +
253 getBit(i) = b;
│ │ │ +
254 return (*this);
│ │ │ +
255 }
│ │ │ +
│ │ │ +
256
│ │ │ +
│ │ │ + │ │ │ +
259 {
│ │ │ +
260 for(int i=0; i<block_size; ++i)
│ │ │ +
261 getBit(i) = b.test(i);
│ │ │ +
262 return (*this);
│ │ │ +
263 }
│ │ │ +
│ │ │ +
264
│ │ │ +
│ │ │ + │ │ │ +
267 {
│ │ │ +
268 for(int i=0; i<block_size; ++i)
│ │ │ +
269 getBit(i) = b.test(i);
│ │ │ +
270 return (*this);
│ │ │ +
271 }
│ │ │ +
│ │ │ +
272
│ │ │ +
│ │ │ + │ │ │ +
275 {
│ │ │ +
276 for(int i=0; i<block_size; ++i)
│ │ │ +
277 getBit(i) = b.test(i);
│ │ │ +
278 return (*this);
│ │ │ +
279 }
│ │ │ +
│ │ │ +
280
│ │ │ +
│ │ │ + │ │ │ +
283 {
│ │ │ +
284 for (size_type i=0; i<block_size; i++)
│ │ │ +
285 getBit(i) = (test(i) & x.test(i));
│ │ │ +
286 return *this;
│ │ │ +
287 }
│ │ │ +
│ │ │ +
288
│ │ │ +
│ │ │ + │ │ │ +
291 {
│ │ │ +
292 for (size_type i=0; i<block_size; i++)
│ │ │ +
293 getBit(i) = (test(i) & x.test(i));
│ │ │ +
294 return *this;
│ │ │ +
295 }
│ │ │ +
│ │ │ +
296
│ │ │ +
│ │ │ + │ │ │ +
299 {
│ │ │ +
300 for (size_type i=0; i<block_size; i++)
│ │ │ +
301 getBit(i) = (test(i) | x.test(i));
│ │ │ +
302 return *this;
│ │ │ +
303 }
│ │ │ +
│ │ │ +
304
│ │ │ +
│ │ │ + │ │ │ +
307 {
│ │ │ +
308 for (size_type i=0; i<block_size; i++)
│ │ │ +
309 getBit(i) = (test(i) | x.test(i));
│ │ │ +
310 return *this;
│ │ │ +
311 }
│ │ │ +
│ │ │ +
312
│ │ │ +
│ │ │ + │ │ │ +
315 {
│ │ │ +
316 for (size_type i=0; i<block_size; i++)
│ │ │ +
317 getBit(i) = (test(i) ^ x.test(i));
│ │ │ +
318 return *this;
│ │ │ +
319 }
│ │ │ +
│ │ │ +
320
│ │ │ +
│ │ │ + │ │ │ +
323 {
│ │ │ +
324 for (size_type i=0; i<block_size; i++)
│ │ │ +
325 getBit(i) = (test(i) ^ x.test(i));
│ │ │ +
326 return *this;
│ │ │ +
327 }
│ │ │ +
│ │ │ +
328
│ │ │ +
│ │ │ + │ │ │ +
331 {
│ │ │ +
332 for (size_type i=0; i<block_size-n; i++)
│ │ │ +
333 getBit(i) = test(i+n);
│ │ │ +
334 return *this;
│ │ │ +
335 }
│ │ │ +
│ │ │ +
336
│ │ │ +
│ │ │ + │ │ │ +
339 {
│ │ │ +
340 for (size_type i=0; i<block_size-n; i++)
│ │ │ +
341 getBit(i+n) = test(i);
│ │ │ +
342 return *this;
│ │ │ +
343 }
│ │ │ +
│ │ │ +
344
│ │ │ +
│ │ │ + │ │ │ +
347 {
│ │ │ +
348 for (size_type i=0; i<block_size; i++)
│ │ │ +
349 set(i);
│ │ │ +
350 return *this;
│ │ │ +
351 }
│ │ │ +
│ │ │ +
352
│ │ │ +
│ │ │ + │ │ │ +
355 {
│ │ │ +
356 for (size_type i=0; i<block_size; i++)
│ │ │ +
357 flip(i);
│ │ │ +
358 return *this;
│ │ │ +
359 }
│ │ │ +
│ │ │ +
360
│ │ │ +
│ │ │ + │ │ │ +
363 {
│ │ │ +
364 *this = false;
│ │ │ +
365 return *this;
│ │ │ +
366 }
│ │ │ +
│ │ │ +
367
│ │ │ +
│ │ │ + │ │ │ +
370 {
│ │ │ +
371 getBit(n) = val;
│ │ │ +
372 return *this;
│ │ │ +
373 }
│ │ │ +
│ │ │ +
374
│ │ │ +
│ │ │ + │ │ │ +
377 {
│ │ │ +
378 set(n, false);
│ │ │ +
379 return *this;
│ │ │ +
380 }
│ │ │ +
│ │ │ +
381
│ │ │ +
│ │ │ + │ │ │ +
384 {
│ │ │ +
385 getBit(n).flip();
│ │ │ +
386 return *this;
│ │ │ +
387 }
│ │ │ +
│ │ │ +
388
│ │ │ + │ │ │ +
390 using BitSetVectorConstReference::operator[];
│ │ │ +
391
│ │ │ +
│ │ │ + │ │ │ +
394 {
│ │ │ +
395 return getBit(i);
│ │ │ +
396 }
│ │ │ +
│ │ │ +
397
│ │ │ +
398 protected:
│ │ │ + │ │ │ +
400
│ │ │ + │ │ │ +
402
│ │ │ +
│ │ │ + │ │ │ +
404 {
│ │ │ +
405 return blockBitField.getBit(this->block_number,i);
│ │ │ +
406 }
│ │ │ +
│ │ │ +
407 };
│ │ │ +
│ │ │ +
408
│ │ │ +
412 template<int block_size, class Alloc>
│ │ │ +
│ │ │ +
413 struct const_reference< BitSetVectorReference<block_size,Alloc> >
│ │ │ +
414 {
│ │ │ + │ │ │ +
416 };
│ │ │ +
│ │ │ +
417
│ │ │ +
418 template<int block_size, class Alloc>
│ │ │ +
│ │ │ +
419 struct const_reference< BitSetVectorConstReference<block_size,Alloc> >
│ │ │ +
420 {
│ │ │ + │ │ │ +
422 };
│ │ │ +
│ │ │ +
423
│ │ │ +
424 template<int block_size, class Alloc>
│ │ │ +
│ │ │ +
425 struct mutable_reference< BitSetVectorReference<block_size,Alloc> >
│ │ │ +
426 {
│ │ │ + │ │ │ +
428 };
│ │ │ +
│ │ │ +
429
│ │ │ +
430 template<int block_size, class Alloc>
│ │ │ +
│ │ │ + │ │ │ +
432 {
│ │ │ + │ │ │ +
434 };
│ │ │ +
│ │ │ +
435
│ │ │ +
439 template <int block_size, class Allocator=std::allocator<bool> >
│ │ │ +
│ │ │ +
440 class BitSetVector : private std::vector<bool, Allocator>
│ │ │ +
441 {
│ │ │ +
443 typedef std::vector<bool, Allocator> BlocklessBaseClass;
│ │ │ +
444
│ │ │ +
445 public:
│ │ │ +
448
│ │ │ +
450 typedef std::bitset<block_size> value_type;
│ │ │ +
451
│ │ │ + │ │ │ +
454
│ │ │ + │ │ │ +
457
│ │ │ + │ │ │ +
460
│ │ │ + │ │ │ +
463
│ │ │ +
465 typedef typename std::vector<bool, Allocator>::size_type size_type;
│ │ │ +
466
│ │ │ +
468 typedef Allocator allocator_type;
│ │ │ +
470
│ │ │ + │ │ │ + │ │ │ +
476
│ │ │ +
│ │ │ + │ │ │ +
479 return iterator(*this, 0);
│ │ │ +
480 }
│ │ │ +
│ │ │ +
481
│ │ │ +
│ │ │ + │ │ │ +
484 return const_iterator(*this, 0);
│ │ │ +
485 }
│ │ │ +
│ │ │ +
486
│ │ │ +
│ │ │ + │ │ │ +
489 return iterator(*this, size());
│ │ │ +
490 }
│ │ │ +
│ │ │ +
491
│ │ │ +
│ │ │ + │ │ │ +
494 return const_iterator(*this, size());
│ │ │ +
495 }
│ │ │ +
│ │ │ +
496
│ │ │ +
│ │ │ + │ │ │ +
499 BlocklessBaseClass()
│ │ │ +
500 {}
│ │ │ +
│ │ │ +
501
│ │ │ +
│ │ │ +
503 BitSetVector(const BlocklessBaseClass& blocklessBitField) :
│ │ │ +
504 BlocklessBaseClass(blocklessBitField)
│ │ │ +
505 {
│ │ │ +
506 if (blocklessBitField.size()%block_size != 0)
│ │ │ +
507 DUNE_THROW(RangeError, "Vector size is not a multiple of the block size!");
│ │ │ +
508 }
│ │ │ +
│ │ │ +
509
│ │ │ +
│ │ │ +
513 explicit BitSetVector(int n) :
│ │ │ +
514 BlocklessBaseClass(n*block_size)
│ │ │ +
515 {}
│ │ │ +
│ │ │ +
516
│ │ │ +
│ │ │ +
518 BitSetVector(int n, bool v) :
│ │ │ +
519 BlocklessBaseClass(n*block_size,v)
│ │ │ +
520 {}
│ │ │ +
│ │ │ +
521
│ │ │ +
│ │ │ +
523 void clear()
│ │ │ +
524 {
│ │ │ +
525 BlocklessBaseClass::clear();
│ │ │ +
526 }
│ │ │ +
│ │ │ +
527
│ │ │ +
│ │ │ +
529 void resize(int n, bool v = bool())
│ │ │ +
530 {
│ │ │ +
531 BlocklessBaseClass::resize(n*block_size, v);
│ │ │ +
532 }
│ │ │ +
│ │ │ +
533
│ │ │ +
│ │ │ + │ │ │ +
536 {
│ │ │ +
537 return BlocklessBaseClass::size()/block_size;
│ │ │ +
538 }
│ │ │ +
│ │ │ +
539
│ │ │ +
│ │ │ +
541 void setAll() {
│ │ │ +
542 this->assign(BlocklessBaseClass::size(), true);
│ │ │ +
543 }
│ │ │ +
│ │ │ +
544
│ │ │ +
│ │ │ +
546 void unsetAll() {
│ │ │ +
547 this->assign(BlocklessBaseClass::size(), false);
│ │ │ +
548 }
│ │ │ +
│ │ │ +
549
│ │ │ +
│ │ │ + │ │ │ +
552 {
│ │ │ +
553 return reference(*this, i);
│ │ │ +
554 }
│ │ │ +
│ │ │ +
555
│ │ │ +
│ │ │ + │ │ │ +
558 {
│ │ │ +
559 return const_reference(*this, i);
│ │ │ +
560 }
│ │ │ +
│ │ │ +
561
│ │ │ +
│ │ │ + │ │ │ +
564 {
│ │ │ +
565 return reference(*this, size()-1);
│ │ │ +
566 }
│ │ │ +
│ │ │ +
567
│ │ │ +
│ │ │ + │ │ │ +
570 {
│ │ │ +
571 return const_reference(*this, size()-1);
│ │ │ +
572 }
│ │ │ +
│ │ │ +
573
│ │ │ +
│ │ │ + │ │ │ +
576 {
│ │ │ +
577 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(), true);
│ │ │ +
578 }
│ │ │ +
│ │ │ +
579
│ │ │ +
│ │ │ + │ │ │ +
582 {
│ │ │ +
583 size_type n = 0;
│ │ │ +
584 size_type blocks = size();
│ │ │ +
585 for(size_type i=0; i<blocks; ++i)
│ │ │ +
586 n += getBit(i,j);
│ │ │ +
587 return n;
│ │ │ +
588 }
│ │ │ +
│ │ │ +
589
│ │ │ +
│ │ │ +
591 friend std::ostream& operator<< (std::ostream& s, const BitSetVector& v)
│ │ │ +
592 {
│ │ │ +
593 for (size_t i=0; i<v.size(); i++)
│ │ │ +
594 s << v[i] << " ";
│ │ │ +
595 return s;
│ │ │ +
596 }
│ │ │ +
│ │ │ +
597
│ │ │ +
598 private:
│ │ │ +
599
│ │ │ +
601 value_type getRepr(int i) const
│ │ │ +
602 {
│ │ │ +
603 value_type bits;
│ │ │ +
604 for(int j=0; j<block_size; ++j)
│ │ │ +
605 bits.set(j, getBit(i,j));
│ │ │ +
606 return bits;
│ │ │ +
607 }
│ │ │ +
608
│ │ │ +
609 typename std::vector<bool>::reference getBit(size_type i, size_type j) {
│ │ │ +
610 DUNE_ASSERT_BOUNDS(j < block_size);
│ │ │ + │ │ │ +
612 return BlocklessBaseClass::operator[](i*block_size+j);
│ │ │ +
613 }
│ │ │ +
614
│ │ │ +
615 typename std::vector<bool>::const_reference getBit(size_type i, size_type j) const {
│ │ │ +
616 DUNE_ASSERT_BOUNDS(j < block_size);
│ │ │ + │ │ │ +
618 return BlocklessBaseClass::operator[](i*block_size+j);
│ │ │ +
619 }
│ │ │ +
620
│ │ │ +
621 friend class BitSetVectorReference<block_size,Allocator>;
│ │ │ +
622 friend class BitSetVectorConstReference<block_size,Allocator>;
│ │ │ +
623 };
│ │ │ +
│ │ │ +
624
│ │ │ +
625} // namespace Dune
│ │ │ +
626
│ │ │ +
627#endif
│ │ │ +
Macro for wrapping boundary checks.
│ │ │ +
A few common exception classes.
│ │ │ +
Implements a generic iterator class for writing stl conformant iterators.
│ │ │ +
#define DUNE_ASSERT_BOUNDS(cond)
If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
Definition boundschecking.hh:30
│ │ │ +
#define DUNE_THROW(E, m)
Definition exceptions.hh:218
│ │ │ +
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ +
void assign(T &dst, const T &src, bool mask)
masked Simd assignment (scalar version)
Definition simd.hh:447
│ │ │ +
A dynamic array of blocks of booleans.
Definition bitsetvector.hh:441
│ │ │ +
const_reference operator[](int i) const
Return const reference to i-th block.
Definition bitsetvector.hh:557
│ │ │ +
iterator begin()
Returns a iterator pointing to the beginning of the vector.
Definition bitsetvector.hh:478
│ │ │ +
BitSetVectorConstReference< block_size, Allocator > * const_pointer
Const pointer to a small block of bits.
Definition bitsetvector.hh:462
│ │ │ +
const_iterator end() const
Returns a const_iterator pointing to the end of the vector.
Definition bitsetvector.hh:493
│ │ │ +
BitSetVectorReference< block_size, Allocator > reference
Reference to a small block of bits.
Definition bitsetvector.hh:453
│ │ │ +
size_type countmasked(int j) const
Returns the number of set bits, while each block is masked with 1<<i.
Definition bitsetvector.hh:581
│ │ │ +
BitSetVectorConstReference< block_size, Allocator > const_reference
Const reference to a small block of bits.
Definition bitsetvector.hh:456
│ │ │ +
iterator end()
Returns an iterator pointing to the end of the vector.
Definition bitsetvector.hh:488
│ │ │ +
size_type count() const
Returns the number of bits that are set.
Definition bitsetvector.hh:575
│ │ │ +
BitSetVector()
Default constructor.
Definition bitsetvector.hh:498
│ │ │ +
void setAll()
Sets all entries to true
Definition bitsetvector.hh:541
│ │ │ +
Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade > const_iterator
Definition bitsetvector.hh:474
│ │ │ +
std::bitset< block_size > value_type
Type of the values stored by the container.
Definition bitsetvector.hh:450
│ │ │ +
reference back()
Return reference to last block.
Definition bitsetvector.hh:563
│ │ │ +
BitSetVector(const BlocklessBaseClass &blocklessBitField)
Construction from an unblocked bitfield.
Definition bitsetvector.hh:503
│ │ │ +
friend std::ostream & operator<<(std::ostream &s, const BitSetVector &v)
Send bitfield to an output stream.
Definition bitsetvector.hh:591
│ │ │ +
const_reference back() const
Return const reference to last block.
Definition bitsetvector.hh:569
│ │ │ +
void clear()
Erases all of the elements.
Definition bitsetvector.hh:523
│ │ │ +
BitSetVectorReference< block_size, Allocator > * pointer
Pointer to a small block of bits.
Definition bitsetvector.hh:459
│ │ │ +
reference operator[](int i)
Return reference to i-th block.
Definition bitsetvector.hh:551
│ │ │ +
size_type size() const
Return the number of blocks.
Definition bitsetvector.hh:535
│ │ │ +
std::vector< bool, Allocator >::size_type size_type
size type
Definition bitsetvector.hh:465
│ │ │ +
BitSetVector(int n, bool v)
Constructor which initializes the field with true or false.
Definition bitsetvector.hh:518
│ │ │ +
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the vector.
Definition bitsetvector.hh:483
│ │ │ +
Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type, reference, std::ptrdiff_t, ForwardIteratorFacade > iterator
Definition bitsetvector.hh:473
│ │ │ +
void resize(int n, bool v=bool())
Resize field.
Definition bitsetvector.hh:529
│ │ │ +
Allocator allocator_type
The type of the allocator.
Definition bitsetvector.hh:468
│ │ │ +
BitSetVector(int n)
Definition bitsetvector.hh:513
│ │ │ +
void unsetAll()
Sets all entries to false
Definition bitsetvector.hh:546
│ │ │ +
A proxy class that acts as a mutable reference to a single bitset in a BitSetVector.
Definition bitsetvector.hh:222
│ │ │ +
bool test(size_type n) const
Returns true if bit n is set.
Definition bitsetvector.hh:124
│ │ │ +
BitSetVectorReference & operator=(const BitSetVectorConstReference &b)
Assignment from BitSetVectorConstReference.
Definition bitsetvector.hh:266
│ │ │ +
reference operator[](size_type i)
Return reference to the i-th bit.
Definition bitsetvector.hh:393
│ │ │ +
BitSetVectorReference & reset(size_type n)
Clears bit n.
Definition bitsetvector.hh:376
│ │ │ +
BitSetVectorReference & operator<<=(size_type n)
Left shift.
Definition bitsetvector.hh:330
│ │ │ +
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition bitsetvector.hh:225
│ │ │ +
std::vector< bool, Alloc >::const_reference const_reference
A proxy class that acts as a const reference to a single bit.
Definition bitsetvector.hh:243
│ │ │ +
BitSetVectorReference & operator=(const BitSetVectorReference &b)
Assignment from BitSetVectorReference.
Definition bitsetvector.hh:274
│ │ │ +
reference getBit(size_type i)
Definition bitsetvector.hh:403
│ │ │ +
BitSetVectorReference & operator&=(const BitSetVectorConstReference &x)
Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)
Definition bitsetvector.hh:290
│ │ │ +
BitSetVectorReference(BitSetVector &blockBitField_, int block_number_)
Definition bitsetvector.hh:230
│ │ │ +
size_t size_type
size_type typedef (an unsigned integral type)
Definition bitsetvector.hh:247
│ │ │ +
BitSetVectorReference & operator=(const bitset &b)
Assignment from bitset.
Definition bitsetvector.hh:258
│ │ │ +
Dune::BitSetVectorConstReference< block_size, Alloc > BitSetVectorConstReference
Definition bitsetvector.hh:228
│ │ │ +
BitSetVectorReference & reset()
Clears every bit.
Definition bitsetvector.hh:362
│ │ │ +
BitSetVector & blockBitField
Definition bitsetvector.hh:399
│ │ │ +
BitSetVectorReference & operator|=(const BitSetVectorConstReference &x)
Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition bitsetvector.hh:306
│ │ │ +
BitSetVectorReference & set(size_type n, int val=1)
Sets bit n if val is nonzero, and clears bit n if val is zero.
Definition bitsetvector.hh:369
│ │ │ +
std::bitset< block_size > bitset
Definition bitsetvector.hh:236
│ │ │ +
BitSetVectorReference & operator^=(const bitset &x)
Bitwise exclusive or (for bitset).
Definition bitsetvector.hh:314
│ │ │ +
std::vector< bool, Alloc >::reference reference
Definition bitsetvector.hh:241
│ │ │ +
BitSetVectorReference & operator|=(const bitset &x)
Bitwise inclusive or (for bitset)
Definition bitsetvector.hh:298
│ │ │ +
BitSetVectorReference & operator>>=(size_type n)
Right shift.
Definition bitsetvector.hh:338
│ │ │ +
BitSetVectorReference & operator^=(const BitSetVectorConstReference &x)
Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)
Definition bitsetvector.hh:322
│ │ │ +
BitSetVectorReference & flip(size_type n)
Flips bit n.
Definition bitsetvector.hh:383
│ │ │ +
BitSetVectorReference & flip()
Flips the value of every bit.
Definition bitsetvector.hh:354
│ │ │ +
BitSetVectorReference & set()
Sets every bit.
Definition bitsetvector.hh:346
│ │ │ +
BitSetVectorReference & operator&=(const bitset &x)
Bitwise and (for bitset).
Definition bitsetvector.hh:282
│ │ │ +
BitSetVectorReference & operator=(bool b)
Assignment from bool, sets each bit in the bitset to b.
Definition bitsetvector.hh:250
│ │ │ +
A proxy class that acts as a const reference to a single bitset in a BitSetVector.
Definition bitsetvector.hh:38
│ │ │ +
bool operator==(const bitset &bs) const
Equality of reference and std::bitset.
Definition bitsetvector.hh:142
│ │ │ +
bool test(size_type n) const
Returns true if bit n is set.
Definition bitsetvector.hh:124
│ │ │ +
const_reference operator[](size_type i) const
Return reference to the i-th bit.
Definition bitsetvector.hh:130
│ │ │ +
bitset operator<<(size_type n) const
Returns a copy of *this shifted left by n bits.
Definition bitsetvector.hh:64
│ │ │ +
BitSetVectorConstReference(const BitSetVector &blockBitField_, int block_number_)
Definition bitsetvector.hh:44
│ │ │ +
const BitSetVector & blockBitField
Definition bitsetvector.hh:181
│ │ │ +
bitset operator>>(size_type n) const
Returns a copy of *this shifted right by n bits.
Definition bitsetvector.hh:72
│ │ │ +
const_reference getBit(size_type i) const
Definition bitsetvector.hh:184
│ │ │ +
bool operator!=(const bitset &bs) const
Inequality of reference and std::bitset.
Definition bitsetvector.hh:154
│ │ │ +
bool equals(const BS &bs) const
Definition bitsetvector.hh:190
│ │ │ +
Dune::BitSetVector< block_size, Alloc > BitSetVector
Definition bitsetvector.hh:41
│ │ │ +
std::bitset< block_size > bitset
Definition bitsetvector.hh:56
│ │ │ +
bool all() const
Returns true if all bits are set.
Definition bitsetvector.hh:115
│ │ │ +
size_t size_type
Definition bitsetvector.hh:61
│ │ │ +
bitset operator~() const
Returns a copy of *this with all of its bits flipped.
Definition bitsetvector.hh:80
│ │ │ +
std::vector< bool, Alloc >::const_reference reference
Definition bitsetvector.hh:59
│ │ │ +
size_type size() const
Returns block_size.
Definition bitsetvector.hh:88
│ │ │ +
size_type count() const
Returns the number of bits that are set.
Definition bitsetvector.hh:94
│ │ │ +
bool none() const
Returns true if no bits are set.
Definition bitsetvector.hh:109
│ │ │ +
bool any() const
Returns true if any bits are set.
Definition bitsetvector.hh:103
│ │ │ +
int block_number
Definition bitsetvector.hh:182
│ │ │ +
std::vector< bool, Alloc >::const_reference const_reference
Definition bitsetvector.hh:60
│ │ │ +
BitSetVectorConstReference & operator=(const BitSetVectorConstReference &b)=delete
disable assignment operator
│ │ │ +
friend std::ostream & operator<<(std::ostream &s, const BitSetVectorConstReference &v)
Definition bitsetvector.hh:171
│ │ │ +
BitSetVectorConstReference< block_size, Alloc > type
Definition bitsetvector.hh:415
│ │ │ +
BitSetVectorConstReference< block_size, Alloc > type
Definition bitsetvector.hh:421
│ │ │ +
BitSetVectorReference< block_size, Alloc > type
Definition bitsetvector.hh:427
│ │ │ +
BitSetVectorReference< block_size, Alloc > type
Definition bitsetvector.hh:433
│ │ │ +
Default exception class for range errors.
Definition exceptions.hh:254
│ │ │ +
Get the 'const' version of a reference to a mutable object.
Definition genericiterator.hh:87
│ │ │ +
get the 'mutable' version of a reference to a const object
Definition genericiterator.hh:116
│ │ │ +
Generic class for stl-conforming iterators for container classes with operator[].
Definition genericiterator.hh:153
│ │ │ +
Base class for stl conformant forward iterators.
Definition iteratorfacades.hh:142
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,44 +1,903 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -visibility.hh │ │ │ │ +bitsetvector.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_COMMON_VISIBILITY_HH │ │ │ │ -6#define DUNE_COMMON_VISIBILITY_HH │ │ │ │ +5#ifndef DUNE_BLOCK_BITFIELD_HH │ │ │ │ +6#define DUNE_BLOCK_BITFIELD_HH │ │ │ │ 7 │ │ │ │ -12#ifdef DOXYGEN │ │ │ │ -13 │ │ │ │ -15 │ │ │ │ -_2_0#define DUNE_EXPORT implementation_defined │ │ │ │ -21 │ │ │ │ -23 │ │ │ │ -_2_8#define DUNE_PRIVATE implementation_defined │ │ │ │ -29 │ │ │ │ -30#else // DOXYGEN │ │ │ │ -31 │ │ │ │ -32#if __GNUC__ >= 4 │ │ │ │ -33// GCC and Clang both define __GNUC__ to 4 and they both support the │ │ │ │ -visibility │ │ │ │ -34// attribute │ │ │ │ -35#define DUNE_EXPORT __attribute__((visibility("default"))) │ │ │ │ -36#define DUNE_PRIVATE __attribute__((visibility("hidden"))) │ │ │ │ -37#else │ │ │ │ -38// We don't know about the active compiler, so just turn the visibility │ │ │ │ -macros to no-ops. │ │ │ │ -39#define DUNE_EXPORT │ │ │ │ -40#define DUNE_PRIVATE │ │ │ │ -41#endif │ │ │ │ -42 │ │ │ │ -43#endif // DOXYGEN │ │ │ │ -44 │ │ │ │ -45#endif // DUNE_COMMON_VISIBILITY │ │ │ │ +12#include │ │ │ │ +13#include │ │ │ │ +14#include │ │ │ │ +15#include │ │ │ │ +16 │ │ │ │ +17#include <_d_u_n_e_/_c_o_m_m_o_n_/_b_o_u_n_d_s_c_h_e_c_k_i_n_g_._h_h> │ │ │ │ +18#include <_d_u_n_e_/_c_o_m_m_o_n_/_g_e_n_e_r_i_c_i_t_e_r_a_t_o_r_._h_h> │ │ │ │ +19#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ +20 │ │ │ │ +21namespace _D_u_n_e { │ │ │ │ +22 │ │ │ │ +23 template class BitSetVector; │ │ │ │ +24 template class BitSetVectorReference; │ │ │ │ +25 │ │ │ │ +36 template │ │ │ │ +_3_7 class _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e │ │ │ │ +38 { │ │ │ │ +39 protected: │ │ │ │ +40 │ │ │ │ +_4_1 typedef _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_<_b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_> _B_i_t_S_e_t_V_e_c_t_o_r; │ │ │ │ +42 friend class _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r; │ │ │ │ +43 │ │ │ │ +_4_4 _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e(const _B_i_t_S_e_t_V_e_c_t_o_r& blockBitField_, int │ │ │ │ +block_number_) : │ │ │ │ +45 _b_l_o_c_k_B_i_t_F_i_e_l_d(blockBitField_), │ │ │ │ +46 _b_l_o_c_k___n_u_m_b_e_r(block_number_) │ │ │ │ +47 { │ │ │ │ +48 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(blockBitField_._s_i_z_e() > static_cast │ │ │ │ +(block_number_)); │ │ │ │ +49 } │ │ │ │ +50 │ │ │ │ +_5_2 _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e& _o_p_e_r_a_t_o_r_=(const _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e & b) │ │ │ │ += delete; │ │ │ │ +53 │ │ │ │ +54 public: │ │ │ │ +55 │ │ │ │ +_5_6 typedef std::bitset _b_i_t_s_e_t; │ │ │ │ +57 │ │ │ │ +58 // bitset interface typedefs │ │ │ │ +_5_9 typedef typename std::vector::const_reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_6_0 typedef typename std::vector::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +_6_1 typedef size_t _s_i_z_e___t_y_p_e; │ │ │ │ +62 │ │ │ │ +_6_4 _b_i_t_s_e_t _o_p_e_r_a_t_o_r_<_<(_s_i_z_e___t_y_p_e n) const │ │ │ │ +65 { │ │ │ │ +66 _b_i_t_s_e_t b = *this; │ │ │ │ +67 b <<= n; │ │ │ │ +68 return b; │ │ │ │ +69 } │ │ │ │ +70 │ │ │ │ +_7_2 _b_i_t_s_e_t _o_p_e_r_a_t_o_r_>_>(_s_i_z_e___t_y_p_e n) const │ │ │ │ +73 { │ │ │ │ +74 _b_i_t_s_e_t b = *this; │ │ │ │ +75 b >>= n; │ │ │ │ +76 return b; │ │ │ │ +77 } │ │ │ │ +78 │ │ │ │ +_8_0 _b_i_t_s_e_t _o_p_e_r_a_t_o_r_~() const │ │ │ │ +81 { │ │ │ │ +82 _b_i_t_s_e_t b = *this; │ │ │ │ +83 b.flip(); │ │ │ │ +84 return b; │ │ │ │ +85 } │ │ │ │ +86 │ │ │ │ +_8_8 _s_i_z_e___t_y_p_e _s_i_z_e() const │ │ │ │ +89 { │ │ │ │ +90 return block_size; │ │ │ │ +91 } │ │ │ │ +92 │ │ │ │ +_9_4 _s_i_z_e___t_y_p_e _c_o_u_n_t() const │ │ │ │ +95 { │ │ │ │ +96 _s_i_z_e___t_y_p_e n = 0; │ │ │ │ +97 for(_s_i_z_e___t_y_p_e i=0; i │ │ │ │ +_1_9_0 bool _e_q_u_a_l_s(const BS & bs) const │ │ │ │ +191 { │ │ │ │ +192 bool eq = true; │ │ │ │ +193 for(int i=0; i; │ │ │ │ +206 }; │ │ │ │ +207 │ │ │ │ +220 template │ │ │ │ +_2_2_1 class _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e : public │ │ │ │ +_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e │ │ │ │ +222 { │ │ │ │ +223 protected: │ │ │ │ +224 │ │ │ │ +_2_2_5 typedef _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_<_b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_> _B_i_t_S_e_t_V_e_c_t_o_r; │ │ │ │ +226 friend class _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r; │ │ │ │ +227 │ │ │ │ +_2_2_8 typedef _D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_> │ │ │ │ +_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e; │ │ │ │ +229 │ │ │ │ +_2_3_0 _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e(_B_i_t_S_e_t_V_e_c_t_o_r& blockBitField_, int block_number_) : │ │ │ │ +231 _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e(blockBitField_, block_number_), │ │ │ │ +232 _b_l_o_c_k_B_i_t_F_i_e_l_d(blockBitField_) │ │ │ │ +233 {} │ │ │ │ +234 │ │ │ │ +235 public: │ │ │ │ +_2_3_6 typedef std::bitset _b_i_t_s_e_t; │ │ │ │ +237 │ │ │ │ +_2_4_1 typedef typename std::vector::reference _r_e_f_e_r_e_n_c_e; │ │ │ │ +_2_4_3 typedef typename std::vector::const_reference _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +245 │ │ │ │ +_2_4_7 typedef size_t _s_i_z_e___t_y_p_e; │ │ │ │ +248 │ │ │ │ +_2_5_0 _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e& _o_p_e_r_a_t_o_r_=(bool b) │ │ │ │ +251 { │ │ │ │ +252 for(int i=0; i_>_=(_s_i_z_e___t_y_p_e n) │ │ │ │ +339 { │ │ │ │ +340 for (_s_i_z_e___t_y_p_e i=0; i_b_l_o_c_k___n_u_m_b_e_r,i); │ │ │ │ +406 } │ │ │ │ +407 }; │ │ │ │ +408 │ │ │ │ +412 template │ │ │ │ +_4_1_3 struct _c_o_n_s_t___r_e_f_e_r_e_n_c_e< _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e > │ │ │ │ +414 { │ │ │ │ +_4_1_5 typedef _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_> _t_y_p_e; │ │ │ │ +416 }; │ │ │ │ +417 │ │ │ │ +418 template │ │ │ │ +_4_1_9 struct _c_o_n_s_t___r_e_f_e_r_e_n_c_e< _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e > │ │ │ │ +420 { │ │ │ │ +_4_2_1 typedef _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_> _t_y_p_e; │ │ │ │ +422 }; │ │ │ │ +423 │ │ │ │ +424 template │ │ │ │ +_4_2_5 struct _m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e< _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e > │ │ │ │ +426 { │ │ │ │ +_4_2_7 typedef _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_> _t_y_p_e; │ │ │ │ +428 }; │ │ │ │ +429 │ │ │ │ +430 template │ │ │ │ +_4_3_1 struct _m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e< _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e > │ │ │ │ +432 { │ │ │ │ +_4_3_3 typedef _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_> _t_y_p_e; │ │ │ │ +434 }; │ │ │ │ +435 │ │ │ │ +439 template > │ │ │ │ +_4_4_0 class _B_i_t_S_e_t_V_e_c_t_o_r : private std::vector │ │ │ │ +441 { │ │ │ │ +443 typedef std::vector BlocklessBaseClass; │ │ │ │ +444 │ │ │ │ +445 public: │ │ │ │ +448 │ │ │ │ +_4_5_0 typedef std::bitset _v_a_l_u_e___t_y_p_e; │ │ │ │ +451 │ │ │ │ +_4_5_3 typedef _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_> _r_e_f_e_r_e_n_c_e; │ │ │ │ +454 │ │ │ │ +_4_5_6 typedef _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_> _c_o_n_s_t___r_e_f_e_r_e_n_c_e; │ │ │ │ +457 │ │ │ │ +_4_5_9 typedef _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_>* _p_o_i_n_t_e_r; │ │ │ │ +460 │ │ │ │ +_4_6_2 typedef _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_>* _c_o_n_s_t___p_o_i_n_t_e_r; │ │ │ │ +463 │ │ │ │ +_4_6_5 typedef typename std::vector::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +466 │ │ │ │ +_4_6_8 typedef Allocator _a_l_l_o_c_a_t_o_r___t_y_p_e; │ │ │ │ +470 │ │ │ │ +_4_7_3 typedef _D_u_n_e_:_:_G_e_n_e_r_i_c_I_t_e_r_a_t_o_r_<_B_i_t_S_e_t_V_e_c_t_o_r_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_>, │ │ │ │ +_v_a_l_u_e___t_y_p_e, _r_e_f_e_r_e_n_c_e, std::ptrdiff_t, _F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e> _i_t_e_r_a_t_o_r; │ │ │ │ +_4_7_4 typedef _D_u_n_e_:_:_G_e_n_e_r_i_c_I_t_e_r_a_t_o_r_<_c_o_n_s_t_ _B_i_t_S_e_t_V_e_c_t_o_r_<_b_l_o_c_k___s_i_z_e_,_A_l_l_o_c_a_t_o_r_>, │ │ │ │ +const _v_a_l_u_e___t_y_p_e, _c_o_n_s_t___r_e_f_e_r_e_n_c_e, std::ptrdiff_t, _F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e> │ │ │ │ +_c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +476 │ │ │ │ +_4_7_8 _i_t_e_r_a_t_o_r _b_e_g_i_n(){ │ │ │ │ +479 return _i_t_e_r_a_t_o_r(*this, 0); │ │ │ │ +480 } │ │ │ │ +481 │ │ │ │ +_4_8_3 _c_o_n_s_t___i_t_e_r_a_t_o_r _b_e_g_i_n() const { │ │ │ │ +484 return _c_o_n_s_t___i_t_e_r_a_t_o_r(*this, 0); │ │ │ │ +485 } │ │ │ │ +486 │ │ │ │ +_4_8_8 _i_t_e_r_a_t_o_r _e_n_d(){ │ │ │ │ +489 return _i_t_e_r_a_t_o_r(*this, _s_i_z_e()); │ │ │ │ +490 } │ │ │ │ +491 │ │ │ │ +_4_9_3 _c_o_n_s_t___i_t_e_r_a_t_o_r _e_n_d() const { │ │ │ │ +494 return _c_o_n_s_t___i_t_e_r_a_t_o_r(*this, _s_i_z_e()); │ │ │ │ +495 } │ │ │ │ +496 │ │ │ │ +_4_9_8 _B_i_t_S_e_t_V_e_c_t_o_r() : │ │ │ │ +499 BlocklessBaseClass() │ │ │ │ +500 {} │ │ │ │ +501 │ │ │ │ +_5_0_3 _B_i_t_S_e_t_V_e_c_t_o_r(const BlocklessBaseClass& blocklessBitField) : │ │ │ │ +504 BlocklessBaseClass(blocklessBitField) │ │ │ │ +505 { │ │ │ │ +506 if (blocklessBitField.size()%block_size != 0) │ │ │ │ +507 _D_U_N_E___T_H_R_O_W(_R_a_n_g_e_E_r_r_o_r, "Vector size is not a multiple of the block size!"); │ │ │ │ +508 } │ │ │ │ +509 │ │ │ │ +_5_1_3 explicit _B_i_t_S_e_t_V_e_c_t_o_r(int n) : │ │ │ │ +514 BlocklessBaseClass(n*block_size) │ │ │ │ +515 {} │ │ │ │ +516 │ │ │ │ +_5_1_8 _B_i_t_S_e_t_V_e_c_t_o_r(int n, bool v) : │ │ │ │ +519 BlocklessBaseClass(n*block_size,v) │ │ │ │ +520 {} │ │ │ │ +521 │ │ │ │ +_5_2_3 void _c_l_e_a_r() │ │ │ │ +524 { │ │ │ │ +525 BlocklessBaseClass::clear(); │ │ │ │ +526 } │ │ │ │ +527 │ │ │ │ +_5_2_9 void _r_e_s_i_z_e(int n, bool v = bool()) │ │ │ │ +530 { │ │ │ │ +531 BlocklessBaseClass::resize(n*block_size, v); │ │ │ │ +532 } │ │ │ │ +533 │ │ │ │ +_5_3_5 _s_i_z_e___t_y_p_e _s_i_z_e() const │ │ │ │ +536 { │ │ │ │ +537 return BlocklessBaseClass::size()/block_size; │ │ │ │ +538 } │ │ │ │ +539 │ │ │ │ +_5_4_1 void _s_e_t_A_l_l() { │ │ │ │ +542 this->_a_s_s_i_g_n(BlocklessBaseClass::size(), true); │ │ │ │ +543 } │ │ │ │ +544 │ │ │ │ +_5_4_6 void _u_n_s_e_t_A_l_l() { │ │ │ │ +547 this->_a_s_s_i_g_n(BlocklessBaseClass::size(), false); │ │ │ │ +548 } │ │ │ │ +549 │ │ │ │ +_5_5_1 _r_e_f_e_r_e_n_c_e _o_p_e_r_a_t_o_r_[_](int i) │ │ │ │ +552 { │ │ │ │ +553 return _r_e_f_e_r_e_n_c_e(*this, i); │ │ │ │ +554 } │ │ │ │ +555 │ │ │ │ +_5_5_7 _c_o_n_s_t___r_e_f_e_r_e_n_c_e _o_p_e_r_a_t_o_r_[_](int i) const │ │ │ │ +558 { │ │ │ │ +559 return _c_o_n_s_t___r_e_f_e_r_e_n_c_e(*this, i); │ │ │ │ +560 } │ │ │ │ +561 │ │ │ │ +_5_6_3 _r_e_f_e_r_e_n_c_e _b_a_c_k() │ │ │ │ +564 { │ │ │ │ +565 return _r_e_f_e_r_e_n_c_e(*this, _s_i_z_e()-1); │ │ │ │ +566 } │ │ │ │ +567 │ │ │ │ +_5_6_9 _c_o_n_s_t___r_e_f_e_r_e_n_c_e _b_a_c_k() const │ │ │ │ +570 { │ │ │ │ +571 return _c_o_n_s_t___r_e_f_e_r_e_n_c_e(*this, _s_i_z_e()-1); │ │ │ │ +572 } │ │ │ │ +573 │ │ │ │ +_5_7_5 _s_i_z_e___t_y_p_e _c_o_u_n_t() const │ │ │ │ +576 { │ │ │ │ +577 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(), │ │ │ │ +true); │ │ │ │ +578 } │ │ │ │ +579 │ │ │ │ +_5_8_1 _s_i_z_e___t_y_p_e _c_o_u_n_t_m_a_s_k_e_d(int j) const │ │ │ │ +582 { │ │ │ │ +583 _s_i_z_e___t_y_p_e n = 0; │ │ │ │ +584 _s_i_z_e___t_y_p_e blocks = _s_i_z_e(); │ │ │ │ +585 for(_s_i_z_e___t_y_p_e i=0; i::reference getBit(_s_i_z_e___t_y_p_e i, _s_i_z_e___t_y_p_e j) { │ │ │ │ +610 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(j < block_size); │ │ │ │ +611 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(i < _s_i_z_e()); │ │ │ │ +612 return BlocklessBaseClass::operator[](i*block_size+j); │ │ │ │ +613 } │ │ │ │ +614 │ │ │ │ +_6_1_5 typename std::vector::const_reference getBit(_s_i_z_e___t_y_p_e i, _s_i_z_e___t_y_p_e │ │ │ │ +j) const { │ │ │ │ +616 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(j < block_size); │ │ │ │ +617 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(i < _s_i_z_e()); │ │ │ │ +618 return BlocklessBaseClass::operator[](i*block_size+j); │ │ │ │ +619 } │ │ │ │ +620 │ │ │ │ +621 friend class _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e; │ │ │ │ +622 friend class _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e; │ │ │ │ +623 }; │ │ │ │ +624 │ │ │ │ +625} // namespace Dune │ │ │ │ +626 │ │ │ │ +627#endif │ │ │ │ +_b_o_u_n_d_s_c_h_e_c_k_i_n_g_._h_h │ │ │ │ +Macro for wrapping boundary checks. │ │ │ │ +_e_x_c_e_p_t_i_o_n_s_._h_h │ │ │ │ +A few common exception classes. │ │ │ │ +_g_e_n_e_r_i_c_i_t_e_r_a_t_o_r_._h_h │ │ │ │ +Implements a generic iterator class for writing stl conformant iterators. │ │ │ │ +_D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S │ │ │ │ +#define DUNE_ASSERT_BOUNDS(cond) │ │ │ │ +If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do │ │ │ │ +nothing. │ │ │ │ +DDeeffiinniittiioonn boundschecking.hh:30 │ │ │ │ +_D_U_N_E___T_H_R_O_W │ │ │ │ +#define DUNE_THROW(E, m) │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:218 │ │ │ │ +_D_u_n_e │ │ │ │ +Dune namespace. │ │ │ │ +DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ +_D_u_n_e_:_:_a_s_s_i_g_n │ │ │ │ +void assign(T &dst, const T &src, bool mask) │ │ │ │ +masked Simd assignment (scalar version) │ │ │ │ +DDeeffiinniittiioonn simd.hh:447 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +A dynamic array of blocks of booleans. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:441 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +const_reference operator[](int i) const │ │ │ │ +Return const reference to i-th block. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:557 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_b_e_g_i_n │ │ │ │ +iterator begin() │ │ │ │ +Returns a iterator pointing to the beginning of the vector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:478 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_c_o_n_s_t___p_o_i_n_t_e_r │ │ │ │ +BitSetVectorConstReference< block_size, Allocator > * const_pointer │ │ │ │ +Const pointer to a small block of bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:462 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_e_n_d │ │ │ │ +const_iterator end() const │ │ │ │ +Returns a const_iterator pointing to the end of the vector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:493 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +BitSetVectorReference< block_size, Allocator > reference │ │ │ │ +Reference to a small block of bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:453 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_c_o_u_n_t_m_a_s_k_e_d │ │ │ │ +size_type countmasked(int j) const │ │ │ │ +Returns the number of set bits, while each block is masked with 1< const_reference │ │ │ │ +Const reference to a small block of bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:456 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_e_n_d │ │ │ │ +iterator end() │ │ │ │ +Returns an iterator pointing to the end of the vector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:488 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_c_o_u_n_t │ │ │ │ +size_type count() const │ │ │ │ +Returns the number of bits that are set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:575 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +BitSetVector() │ │ │ │ +Default constructor. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:498 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_s_e_t_A_l_l │ │ │ │ +void setAll() │ │ │ │ +Sets all entries to true │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:541 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const │ │ │ │ +value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade > │ │ │ │ +const_iterator │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:474 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_v_a_l_u_e___t_y_p_e │ │ │ │ +std::bitset< block_size > value_type │ │ │ │ +Type of the values stored by the container. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:450 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_b_a_c_k │ │ │ │ +reference back() │ │ │ │ +Return reference to last block. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:563 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +BitSetVector(const BlocklessBaseClass &blocklessBitField) │ │ │ │ +Construction from an unblocked bitfield. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:503 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +friend std::ostream & operator<<(std::ostream &s, const BitSetVector &v) │ │ │ │ +Send bitfield to an output stream. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:591 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_b_a_c_k │ │ │ │ +const_reference back() const │ │ │ │ +Return const reference to last block. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:569 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_c_l_e_a_r │ │ │ │ +void clear() │ │ │ │ +Erases all of the elements. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:523 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_p_o_i_n_t_e_r │ │ │ │ +BitSetVectorReference< block_size, Allocator > * pointer │ │ │ │ +Pointer to a small block of bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:459 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +reference operator[](int i) │ │ │ │ +Return reference to i-th block. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:551 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +Return the number of blocks. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:535 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_s_i_z_e___t_y_p_e │ │ │ │ +std::vector< bool, Allocator >::size_type size_type │ │ │ │ +size type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:465 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +BitSetVector(int n, bool v) │ │ │ │ +Constructor which initializes the field with true or false. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:518 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const │ │ │ │ +Returns a const_iterator pointing to the beginning of the vector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:483 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_i_t_e_r_a_t_o_r │ │ │ │ +Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type, │ │ │ │ +reference, std::ptrdiff_t, ForwardIteratorFacade > iterator │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:473 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ +void resize(int n, bool v=bool()) │ │ │ │ +Resize field. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:529 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_a_l_l_o_c_a_t_o_r___t_y_p_e │ │ │ │ +Allocator allocator_type │ │ │ │ +The type of the allocator. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:468 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +BitSetVector(int n) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:513 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_:_:_u_n_s_e_t_A_l_l │ │ │ │ +void unsetAll() │ │ │ │ +Sets all entries to false │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:546 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e │ │ │ │ +A proxy class that acts as a mutable reference to a single bitset in a │ │ │ │ +BitSetVector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:222 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_t_e_s_t │ │ │ │ +bool test(size_type n) const │ │ │ │ +Returns true if bit n is set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:124 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +BitSetVectorReference & operator=(const BitSetVectorConstReference &b) │ │ │ │ +Assignment from BitSetVectorConstReference. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:266 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +reference operator[](size_type i) │ │ │ │ +Return reference to the i-th bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:393 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_r_e_s_e_t │ │ │ │ +BitSetVectorReference & reset(size_type n) │ │ │ │ +Clears bit n. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:376 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_<_<_= │ │ │ │ +BitSetVectorReference & operator<<=(size_type n) │ │ │ │ +Left shift. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:330 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +Dune::BitSetVector< block_size, Alloc > BitSetVector │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:225 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +std::vector< bool, Alloc >::const_reference const_reference │ │ │ │ +A proxy class that acts as a const reference to a single bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:243 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +BitSetVectorReference & operator=(const BitSetVectorReference &b) │ │ │ │ +Assignment from BitSetVectorReference. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:274 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_g_e_t_B_i_t │ │ │ │ +reference getBit(size_type i) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:403 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +BitSetVectorReference & operator&=(const BitSetVectorConstReference &x) │ │ │ │ +Bitwise and (for BitSetVectorConstReference and BitSetVectorReference) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:290 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e │ │ │ │ +BitSetVectorReference(BitSetVector &blockBitField_, int block_number_) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:230 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_s_i_z_e___t_y_p_e │ │ │ │ +size_t size_type │ │ │ │ +size_type typedef (an unsigned integral type) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:247 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +BitSetVectorReference & operator=(const bitset &b) │ │ │ │ +Assignment from bitset. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:258 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e │ │ │ │ +Dune::BitSetVectorConstReference< block_size, Alloc > │ │ │ │ +BitSetVectorConstReference │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:228 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_r_e_s_e_t │ │ │ │ +BitSetVectorReference & reset() │ │ │ │ +Clears every bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:362 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_b_l_o_c_k_B_i_t_F_i_e_l_d │ │ │ │ +BitSetVector & blockBitField │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:399 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +BitSetVectorReference & operator|=(const BitSetVectorConstReference &x) │ │ │ │ +Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:306 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_s_e_t │ │ │ │ +BitSetVectorReference & set(size_type n, int val=1) │ │ │ │ +Sets bit n if val is nonzero, and clears bit n if val is zero. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:369 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_b_i_t_s_e_t │ │ │ │ +std::bitset< block_size > bitset │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:236 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +BitSetVectorReference & operator^=(const bitset &x) │ │ │ │ +Bitwise exclusive or (for bitset). │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:314 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +std::vector< bool, Alloc >::reference reference │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:241 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +BitSetVectorReference & operator|=(const bitset &x) │ │ │ │ +Bitwise inclusive or (for bitset) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:298 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_>_>_= │ │ │ │ +BitSetVectorReference & operator>>=(size_type n) │ │ │ │ +Right shift. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:338 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +BitSetVectorReference & operator^=(const BitSetVectorConstReference &x) │ │ │ │ +Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:322 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_f_l_i_p │ │ │ │ +BitSetVectorReference & flip(size_type n) │ │ │ │ +Flips bit n. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:383 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_f_l_i_p │ │ │ │ +BitSetVectorReference & flip() │ │ │ │ +Flips the value of every bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:354 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_s_e_t │ │ │ │ +BitSetVectorReference & set() │ │ │ │ +Sets every bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:346 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +BitSetVectorReference & operator&=(const bitset &x) │ │ │ │ +Bitwise and (for bitset). │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:282 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +BitSetVectorReference & operator=(bool b) │ │ │ │ +Assignment from bool, sets each bit in the bitset to b. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:250 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e │ │ │ │ +A proxy class that acts as a const reference to a single bitset in a │ │ │ │ +BitSetVector. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:38 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const bitset &bs) const │ │ │ │ +Equality of reference and std::bitset. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:142 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_t_e_s_t │ │ │ │ +bool test(size_type n) const │ │ │ │ +Returns true if bit n is set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:124 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ +const_reference operator[](size_type i) const │ │ │ │ +Return reference to the i-th bit. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:130 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +bitset operator<<(size_type n) const │ │ │ │ +Returns a copy of *this shifted left by n bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:64 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e │ │ │ │ +BitSetVectorConstReference(const BitSetVector &blockBitField_, int │ │ │ │ +block_number_) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:44 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_b_l_o_c_k_B_i_t_F_i_e_l_d │ │ │ │ +const BitSetVector & blockBitField │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:181 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_>_> │ │ │ │ +bitset operator>>(size_type n) const │ │ │ │ +Returns a copy of *this shifted right by n bits. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:72 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_g_e_t_B_i_t │ │ │ │ +const_reference getBit(size_type i) const │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:184 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_!_= │ │ │ │ +bool operator!=(const bitset &bs) const │ │ │ │ +Inequality of reference and std::bitset. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:154 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const BS &bs) const │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:190 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r │ │ │ │ +Dune::BitSetVector< block_size, Alloc > BitSetVector │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:41 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_b_i_t_s_e_t │ │ │ │ +std::bitset< block_size > bitset │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:56 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_a_l_l │ │ │ │ +bool all() const │ │ │ │ +Returns true if all bits are set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:115 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_s_i_z_e___t_y_p_e │ │ │ │ +size_t size_type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:61 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_~ │ │ │ │ +bitset operator~() const │ │ │ │ +Returns a copy of *this with all of its bits flipped. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:80 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_r_e_f_e_r_e_n_c_e │ │ │ │ +std::vector< bool, Alloc >::const_reference reference │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:59 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +Returns block_size. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:88 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_c_o_u_n_t │ │ │ │ +size_type count() const │ │ │ │ +Returns the number of bits that are set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:94 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_n_o_n_e │ │ │ │ +bool none() const │ │ │ │ +Returns true if no bits are set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:109 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_a_n_y │ │ │ │ +bool any() const │ │ │ │ +Returns true if any bits are set. │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:103 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_b_l_o_c_k___n_u_m_b_e_r │ │ │ │ +int block_number │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:182 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +std::vector< bool, Alloc >::const_reference const_reference │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:60 │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +BitSetVectorConstReference & operator=(const BitSetVectorConstReference │ │ │ │ +&b)=delete │ │ │ │ +disable assignment operator │ │ │ │ +_D_u_n_e_:_:_B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +friend std::ostream & operator<<(std::ostream &s, const │ │ │ │ +BitSetVectorConstReference &v) │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:171 │ │ │ │ +_D_u_n_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _>_:_:_t_y_p_e │ │ │ │ +BitSetVectorConstReference< block_size, Alloc > type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:415 │ │ │ │ +_D_u_n_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _>_:_:_t_y_p_e │ │ │ │ +BitSetVectorConstReference< block_size, Alloc > type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:421 │ │ │ │ +_D_u_n_e_:_:_m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _>_:_:_t_y_p_e │ │ │ │ +BitSetVectorReference< block_size, Alloc > type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:427 │ │ │ │ +_D_u_n_e_:_:_m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e_<_ _B_i_t_S_e_t_V_e_c_t_o_r_C_o_n_s_t_R_e_f_e_r_e_n_c_e_<_ _b_l_o_c_k___s_i_z_e_,_ _A_l_l_o_c_ _>_ _>_:_: │ │ │ │ +_t_y_p_e │ │ │ │ +BitSetVectorReference< block_size, Alloc > type │ │ │ │ +DDeeffiinniittiioonn bitsetvector.hh:433 │ │ │ │ +_D_u_n_e_:_:_R_a_n_g_e_E_r_r_o_r │ │ │ │ +Default exception class for range errors. │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:254 │ │ │ │ +_D_u_n_e_:_:_c_o_n_s_t___r_e_f_e_r_e_n_c_e │ │ │ │ +Get the 'const' version of a reference to a mutable object. │ │ │ │ +DDeeffiinniittiioonn genericiterator.hh:87 │ │ │ │ +_D_u_n_e_:_:_m_u_t_a_b_l_e___r_e_f_e_r_e_n_c_e │ │ │ │ +get the 'mutable' version of a reference to a const object │ │ │ │ +DDeeffiinniittiioonn genericiterator.hh:116 │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_I_t_e_r_a_t_o_r │ │ │ │ +Generic class for stl-conforming iterators for container classes with operator │ │ │ │ +[]. │ │ │ │ +DDeeffiinniittiioonn genericiterator.hh:153 │ │ │ │ +_D_u_n_e_:_:_F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e │ │ │ │ +Base class for stl conformant forward iterators. │ │ │ │ +DDeeffiinniittiioonn iteratorfacades.hh:142 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00011.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: version.hh File Reference │ │ │ +dune-common: sllist.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,675 +70,60 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -Macros
│ │ │ -
version.hh File Reference
│ │ │ +Classes | │ │ │ +Namespaces | │ │ │ +Functions
│ │ │ +
sllist.hh File Reference
│ │ │ │ │ │
│ │ │ │ │ │ -

Various macros to work with Dune module version numbers. │ │ │ +

Implements a singly linked list together with the necessary iterators. │ │ │ More...

│ │ │ -
#include <dune-common-config.hh>
│ │ │ +
#include <memory>
│ │ │ +#include <cassert>
│ │ │ +#include "iteratorfacades.hh"
│ │ │ +#include <ostream>
│ │ │
│ │ │

Go to the source code of this file.

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

│ │ │ -Macros

#define DUNE_VERSION_JOIN(module, type)   module ## _VERSION_ ## type
 Constructs the preprocessor name used in config.h to hold version numbers.
 
#define DUNE_VERSION_EQUAL(module, major, minor)
 True if 'module' has the version major.minor.
 
#define DUNE_VERSION_EQUAL_REV(module, major, minor, revision)
 True if 'module' has the version major.minor.revision.
 
#define DUNE_VERSION_GTE(module, major, minor)
 True if 'module' has the version major.minor or greater.
 
#define DUNE_VERSION_LT(module, major, minor)    ! DUNE_VERSION_GTE(module,major,minor)
 True if 'module' has a version less than major.minor.
 
#define DUNE_VERSION_GT(module, major, minor)
 True if 'module' has a version greater than major.minor.
 
#define DUNE_VERSION_LTE(module, major, minor)    ! DUNE_VERSION_GT(module,major,minor)
 True if 'module' has a version less than or equal to major.minor.
 
#define DUNE_VERSION_GTE_REV(module, major, minor, revision)
 True if 'module' has the version major.minor.revision or greater.
 
#define DUNE_VERSION_LT_REV(module, major, minor, revision)    ! DUNE_VERSION_GTE_REV(module,major,minor,revision)
 True if 'module' has a version lower than major.minor.revision.
 
#define DUNE_VERSION_GT_REV(module, major, minor, revision)
 True if 'module' has a greater version than major.minor.revision.
 
#define DUNE_VERSION_LTE_REV(module, major, minor, revision)    ! DUNE_VERSION_GT_REV(module,major,minor,revision)
 True if 'module' has a version lower or equal to major.minor.revision.
 
#define DUNE_VERSION_ID(major, minor, revision)    ((unsigned int)((major << 24) + (minor << 16) + revision))
 Compute a unique uint id from the major, minor, and revision numbers.
 
#define DUNE_MODULE_VERSION_ID(module)    DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )
 Compute a unique uint id for the given module.
 

│ │ │ +Classes

class  Dune::SLList< T, A >
 A single linked list. More...
 
class  Dune::SLListIterator< T, A >
 A mutable iterator for the SLList. More...
 
class  Dune::SLListConstIterator< T, A >
 A constant iterator for the SLList. More...
 
class  Dune::SLListModifyIterator< T, A >
 A mutable iterator for the SLList. More...
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Functions

template<typename T , typename A >
std::ostream & Dune::operator<< (std::ostream &os, const SLList< T, A > &sllist)
 
│ │ │

Detailed Description

│ │ │ -

Various macros to work with Dune module version numbers.

│ │ │ -

Macro Definition Documentation

│ │ │ - │ │ │ -

◆ DUNE_MODULE_VERSION_ID

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_MODULE_VERSION_ID( module)    DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )
│ │ │ -
│ │ │ - │ │ │ -

Compute a unique uint id for the given module.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_EQUAL

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_EQUAL( module,
 major,
 minor 
)
│ │ │ -
│ │ │ -Value:
((DUNE_VERSION_JOIN(module,MAJOR) == major) && \
│ │ │ -
(DUNE_VERSION_JOIN(module,MINOR) == minor))
│ │ │ -
#define DUNE_VERSION_JOIN(module, type)
Constructs the preprocessor name used in config.h to hold version numbers.
Definition version.hh:30
│ │ │ -
│ │ │ -

True if 'module' has the version major.minor.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_EQUAL_REV

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_EQUAL_REV( module,
 major,
 minor,
 revision 
)
│ │ │ -
│ │ │ -Value:
( DUNE_VERSION_EQUAL(module,major,minor) && \
│ │ │ -
(DUNE_VERSION_JOIN(module,REVISION) == revision))
│ │ │ -
#define DUNE_VERSION_EQUAL(module, major, minor)
True if 'module' has the version major.minor.
Definition version.hh:46
│ │ │ -
│ │ │ -

True if 'module' has the version major.minor.revision.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_GT

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_GT( module,
 major,
 minor 
)
│ │ │ -
│ │ │ -Value:
((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)))
│ │ │ -
│ │ │ -

True if 'module' has a version greater than major.minor.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_GT_REV

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_GT_REV( module,
 major,
 minor,
 revision 
)
│ │ │ -
│ │ │ -Value:
((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \
│ │ │ -
&& (DUNE_VERSION_JOIN(module,REVISION) > revision)))
│ │ │ -
│ │ │ -

True if 'module' has a greater version than major.minor.revision.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_GTE

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_GTE( module,
 major,
 minor 
)
│ │ │ -
│ │ │ -Value:
((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) >= minor)))
│ │ │ -
│ │ │ -

True if 'module' has the version major.minor or greater.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_GTE_REV

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_GTE_REV( module,
 major,
 minor,
 revision 
)
│ │ │ -
│ │ │ -Value:
((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \
│ │ │ -
|| ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \
│ │ │ -
&& (DUNE_VERSION_JOIN(module,REVISION) >= revision)))
│ │ │ -
│ │ │ -

True if 'module' has the version major.minor.revision or greater.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_ID

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_ID( major,
 minor,
 revision 
)    ((unsigned int)((major << 24) + (minor << 16) + revision))
│ │ │ -
│ │ │ - │ │ │ -

Compute a unique uint id from the major, minor, and revision numbers.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_JOIN

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_JOIN( module,
 type 
)   module ## _VERSION_ ## type
│ │ │ -
│ │ │ - │ │ │ -

Constructs the preprocessor name used in config.h to hold version numbers.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

│ │ │ -
Parameters
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
moduleThe name of the Dune module
typeThe version number type, one of MAJOR, MINOR, or REVISION
│ │ │ -
│ │ │ -
│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ -

◆ DUNE_VERSION_LT

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_LT( module,
 major,
 minor 
)    ! DUNE_VERSION_GTE(module,major,minor)
│ │ │ -
│ │ │ - │ │ │ -

True if 'module' has a version less than major.minor.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_LT_REV

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_LT_REV( module,
 major,
 minor,
 revision 
)    ! DUNE_VERSION_GTE_REV(module,major,minor,revision)
│ │ │ -
│ │ │ - │ │ │ -

True if 'module' has a version lower than major.minor.revision.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_LTE

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_LTE( module,
 major,
 minor 
)    ! DUNE_VERSION_GT(module,major,minor)
│ │ │ -
│ │ │ - │ │ │ -

True if 'module' has a version less than or equal to major.minor.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

◆ DUNE_VERSION_LTE_REV

│ │ │ - │ │ │ -
│ │ │ -
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
#define DUNE_VERSION_LTE_REV( module,
 major,
 minor,
 revision 
)    ! DUNE_VERSION_GT_REV(module,major,minor,revision)
│ │ │ -
│ │ │ - │ │ │ -

True if 'module' has a version lower or equal to major.minor.revision.

│ │ │ -

For the DUNE core modules you need to use the following module names:

    │ │ │ -
  • DUNE_COMMON for dune-common
  • │ │ │ -
  • DUNE_GRID for dune-grid
  • │ │ │ -
  • DUNE_GEOMETRY for dune-geometry
  • │ │ │ -
  • DUNE_ISTL for dune-istl
  • │ │ │ -
  • DUNE_LOCALFUNCTIONS for dune-localfunctions
  • │ │ │ -
│ │ │ -

For external DUNE modules, you should capitalize the name and replace '-' by underscores. For example for the module foo-bar you need to use FOO_BAR as module name in the context of this macro.

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

Implements a singly linked list together with the necessary iterators.

│ │ │ +
Author
Markus Blatt
│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,306 +1,43 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_M_a_c_r_o_s │ │ │ │ -version.hh File Reference │ │ │ │ -Various macros to work with Dune module version numbers. _M_o_r_e_._._. │ │ │ │ -#include │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ +sllist.hh File Reference │ │ │ │ +_C_o_m_m_o_n │ │ │ │ +Implements a singly linked list together with the necessary iterators. _M_o_r_e_._._. │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include "_i_t_e_r_a_t_o_r_f_a_c_a_d_e_s_._h_h" │ │ │ │ +#include │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module, type)   module ## _VERSION_ ## type │ │ │ │ -  Constructs the preprocessor name used in config.h to hold version │ │ │ │ - numbers. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___E_Q_U_A_L(module, major, minor) │ │ │ │ -  True if 'module' has the version major.minor. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___E_Q_U_A_L___R_E_V(module, major, minor, revision) │ │ │ │ -  True if 'module' has the version major.minor.revision. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___G_T_E(module, major, minor) │ │ │ │ -  True if 'module' has the version major.minor or greater. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___L_T(module, major, minor)    ! _D_U_N_E___V_E_R_S_I_O_N___G_T_E │ │ │ │ - (module,major,minor) │ │ │ │ -  True if 'module' has a version less than major.minor. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___G_T(module, major, minor) │ │ │ │ -  True if 'module' has a version greater than major.minor. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___L_T_E(module, major, minor)    ! _D_U_N_E___V_E_R_S_I_O_N___G_T │ │ │ │ - (module,major,minor) │ │ │ │ -  True if 'module' has a version less than or equal to major.minor. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___G_T_E___R_E_V(module, major, minor, revision) │ │ │ │ -  True if 'module' has the version major.minor.revision or greater. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___L_T___R_E_V(module, major, minor, revision)    ! │ │ │ │ - _D_U_N_E___V_E_R_S_I_O_N___G_T_E___R_E_V(module,major,minor,revision) │ │ │ │ -  True if 'module' has a version lower than major.minor.revision. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___G_T___R_E_V(module, major, minor, revision) │ │ │ │ -  True if 'module' has a greater version than major.minor.revision. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___L_T_E___R_E_V(module, major, minor, revision)    ! │ │ │ │ - _D_U_N_E___V_E_R_S_I_O_N___G_T___R_E_V(module,major,minor,revision) │ │ │ │ -  True if 'module' has a version lower or equal to major.minor.revision. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___V_E_R_S_I_O_N___I_D(major, minor, revision)    ((unsigned int)((major << │ │ │ │ - 24) + (minor << 16) + revision)) │ │ │ │ -  Compute a unique uint id from the major, minor, and revision numbers. │ │ │ │ -  │ │ │ │ -#define  _D_U_N_E___M_O_D_U_L_E___V_E_R_S_I_O_N___I_D(module)    _D_U_N_E___V_E_R_S_I_O_N___I_D( _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ - (module,MAJOR), _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MINOR), _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ - (module,REVISION) ) │ │ │ │ -  Compute a unique uint id for the given module. │ │ │ │ +CCllaasssseess │ │ │ │ +class   _D_u_n_e_:_:_S_L_L_i_s_t_<_ _T_,_ _A_ _> │ │ │ │ +  A single linked list. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +class   _D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_ _T_,_ _A_ _> │ │ │ │ +  A mutable iterator for the _S_L_L_i_s_t. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +class   _D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_ _T_,_ _A_ _> │ │ │ │ +  A constant iterator for the _S_L_L_i_s_t. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +class   _D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_ _T_,_ _A_ _> │ │ │ │ +  A mutable iterator for the _S_L_L_i_s_t. _M_o_r_e_._._. │ │ │ │ +  │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _D_u_n_e │ │ │ │ +  _D_u_n_e namespace. │ │ │ │ +  │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &os, const _S_L_L_i_s_t< T, A > │ │ │ │ + &sllist) │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Various macros to work with Dune module version numbers. │ │ │ │ -********** MMaaccrroo DDeeffiinniittiioonn DDooccuummeennttaattiioonn ********** │ │ │ │ -********** _?◆_? DDUUNNEE__MMOODDUULLEE__VVEERRSSIIOONN__IIDD ********** │ │ │ │ -     _D_U_N_E___V_E_R_S_I_O_N___I_D │ │ │ │ - ( _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR), │ │ │ │ -#define DUNE_MODULE_VERSION_ID (   module ) _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MINOR), │ │ │ │ - _D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,REVISION) │ │ │ │ - ) │ │ │ │ -Compute a unique uint id for the given module. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__EEQQUUAALL ********** │ │ │ │ -#define DUNE_VERSION_EQUAL (   module, │ │ │ │ -   major, │ │ │ │ -   minor  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && \ │ │ │ │ -(_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MINOR) == minor)) │ │ │ │ -_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -#define DUNE_VERSION_JOIN(module, type) │ │ │ │ -Constructs the preprocessor name used in config.h to hold version numbers. │ │ │ │ -DDeeffiinniittiioonn version.hh:30 │ │ │ │ -True if 'module' has the version major.minor. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__EEQQUUAALL__RREEVV ********** │ │ │ │ -#define DUNE_VERSION_EQUAL_REV (   module, │ │ │ │ -   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -( _D_U_N_E___V_E_R_S_I_O_N___E_Q_U_A_L(module,major,minor) && \ │ │ │ │ -(_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,REVISION) == revision)) │ │ │ │ -_D_U_N_E___V_E_R_S_I_O_N___E_Q_U_A_L │ │ │ │ -#define DUNE_VERSION_EQUAL(module, major, minor) │ │ │ │ -True if 'module' has the version major.minor. │ │ │ │ -DDeeffiinniittiioonn version.hh:46 │ │ │ │ -True if 'module' has the version major.minor.revision. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__GGTT ********** │ │ │ │ -#define DUNE_VERSION_GT (   module, │ │ │ │ -   major, │ │ │ │ -   minor  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) > major) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) > minor))) │ │ │ │ -True if 'module' has a version greater than major.minor. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__GGTT__RREEVV ********** │ │ │ │ -#define DUNE_VERSION_GT_REV (   module, │ │ │ │ -   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) > major) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) > minor)) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) == minor) \ │ │ │ │ -&& (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,REVISION) > revision))) │ │ │ │ -True if 'module' has a greater version than major.minor.revision. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__GGTTEE ********** │ │ │ │ -#define DUNE_VERSION_GTE (   module, │ │ │ │ -   major, │ │ │ │ -   minor  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) > major) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) >= minor))) │ │ │ │ -True if 'module' has the version major.minor or greater. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__GGTTEE__RREEVV ********** │ │ │ │ -#define DUNE_VERSION_GTE_REV (   module, │ │ │ │ -   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - ) │ │ │ │ -VVaalluuee:: │ │ │ │ -((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) > major) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) > minor)) \ │ │ │ │ -|| ((_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,MAJOR) == major) && (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N │ │ │ │ -(module,MINOR) == minor) \ │ │ │ │ -&& (_D_U_N_E___V_E_R_S_I_O_N___J_O_I_N(module,REVISION) >= revision))) │ │ │ │ -True if 'module' has the version major.minor.revision or greater. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__IIDD ********** │ │ │ │ -#define DUNE_VERSION_ID (   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - )     ((unsigned int)((major << 24) + (minor << 16) + │ │ │ │ - revision)) │ │ │ │ -Compute a unique uint id from the major, minor, and revision numbers. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__JJOOIINN ********** │ │ │ │ -#define DUNE_VERSION_JOIN (   module, │ │ │ │ -   type  │ │ │ │ - )    module ## _VERSION_ ## type │ │ │ │ -Constructs the preprocessor name used in config.h to hold version numbers. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ - Parameters │ │ │ │ - module The name of the _D_u_n_e module │ │ │ │ - type The version number type, one of MAJOR, MINOR, or REVISION │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__LLTT ********** │ │ │ │ -#define DUNE_VERSION_LT (   module, │ │ │ │ -   major, │ │ │ │ -   minor  │ │ │ │ - )     ! _D_U_N_E___V_E_R_S_I_O_N___G_T_E(module,major,minor) │ │ │ │ -True if 'module' has a version less than major.minor. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__LLTT__RREEVV ********** │ │ │ │ -#define DUNE_VERSION_LT_REV (   module, │ │ │ │ -   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - )     ! _D_U_N_E___V_E_R_S_I_O_N___G_T_E___R_E_V │ │ │ │ - (module,major,minor,revision) │ │ │ │ -True if 'module' has a version lower than major.minor.revision. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__LLTTEE ********** │ │ │ │ -#define DUNE_VERSION_LTE (   module, │ │ │ │ -   major, │ │ │ │ -   minor  │ │ │ │ - )     ! _D_U_N_E___V_E_R_S_I_O_N___G_T(module,major,minor) │ │ │ │ -True if 'module' has a version less than or equal to major.minor. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ -********** _?◆_? DDUUNNEE__VVEERRSSIIOONN__LLTTEE__RREEVV ********** │ │ │ │ -#define DUNE_VERSION_LTE_REV (   module, │ │ │ │ -   major, │ │ │ │ -   minor, │ │ │ │ -   revision  │ │ │ │ - )     ! _D_U_N_E___V_E_R_S_I_O_N___G_T___R_E_V │ │ │ │ - (module,major,minor,revision) │ │ │ │ -True if 'module' has a version lower or equal to major.minor.revision. │ │ │ │ -For the DUNE core modules you need to use the following module names: │ │ │ │ - * DUNE_COMMON for dune-common │ │ │ │ - * DUNE_GRID for dune-grid │ │ │ │ - * DUNE_GEOMETRY for dune-geometry │ │ │ │ - * DUNE_ISTL for dune-istl │ │ │ │ - * DUNE_LOCALFUNCTIONS for dune-localfunctions │ │ │ │ -For external DUNE modules, you should capitalize the name and replace '-' by │ │ │ │ -underscores. For example for the module foo-bar you need to use FOO_BAR as │ │ │ │ -module name in the context of this macro. │ │ │ │ +Implements a singly linked list together with the necessary iterators. │ │ │ │ + Author │ │ │ │ + Markus Blatt │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: version.hh Source File │ │ │ +dune-common: sllist.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,99 +74,780 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ -
version.hh
│ │ │ +
sllist.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_VERSION_HH
│ │ │ -
6#define DUNE_VERSION_HH
│ │ │ +
5#ifndef DUNE_SLLIST_HH
│ │ │ +
6#define DUNE_SLLIST_HH
│ │ │
7
│ │ │ -
8#include <dune-common-config.hh> // DUNE_[MODULE]_VERSION_[TYPE]
│ │ │ -
9
│ │ │ -
30#define DUNE_VERSION_JOIN(module,type) module ## _VERSION_ ## type
│ │ │ +
8#include <memory>
│ │ │ +
9#include <cassert>
│ │ │ +
10#include "iteratorfacades.hh"
│ │ │ +
11#include <ostream>
│ │ │ +
12
│ │ │ +
13namespace Dune
│ │ │ +
14{
│ │ │ +
26 template<typename T, class A>
│ │ │ +
27 class SLListIterator;
│ │ │ +
28
│ │ │ +
29 template<typename T, class A>
│ │ │ +
30 class SLListConstIterator;
│ │ │
31
│ │ │ -
│ │ │ -
46#define DUNE_VERSION_EQUAL(module,major,minor) \
│ │ │ -
47 ((DUNE_VERSION_JOIN(module,MAJOR) == major) && \
│ │ │ -
48 (DUNE_VERSION_JOIN(module,MINOR) == minor))
│ │ │ -
│ │ │ -
49
│ │ │ -
│ │ │ -
64#define DUNE_VERSION_EQUAL_REV(module,major,minor,revision) \
│ │ │ -
65 ( DUNE_VERSION_EQUAL(module,major,minor) && \
│ │ │ -
66 (DUNE_VERSION_JOIN(module,REVISION) == revision))
│ │ │ -
│ │ │ -
67
│ │ │ -
│ │ │ -
82#define DUNE_VERSION_GTE(module,major,minor) \
│ │ │ -
83 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
84 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) >= minor)))
│ │ │ -
│ │ │ -
85
│ │ │ -
│ │ │ -
100#define DUNE_VERSION_LT(module,major,minor) \
│ │ │ -
101 ! DUNE_VERSION_GTE(module,major,minor)
│ │ │ -
│ │ │ -
102
│ │ │ -
│ │ │ -
117#define DUNE_VERSION_GT(module,major,minor) \
│ │ │ -
118 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
119 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)))
│ │ │ -
│ │ │ -
120
│ │ │ -
│ │ │ -
135#define DUNE_VERSION_LTE(module,major,minor) \
│ │ │ -
136 ! DUNE_VERSION_GT(module,major,minor)
│ │ │ -
│ │ │ -
137
│ │ │ -
│ │ │ -
152#define DUNE_VERSION_GTE_REV(module,major,minor,revision) \
│ │ │ -
153 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
154 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \
│ │ │ -
155 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \
│ │ │ -
156 && (DUNE_VERSION_JOIN(module,REVISION) >= revision)))
│ │ │ -
│ │ │ +
32 template<typename T, class A>
│ │ │ +
33 class SLListModifyIterator;
│ │ │ +
34
│ │ │ +
42 template<typename T, class A=std::allocator<T> >
│ │ │ +
│ │ │ +
43 class SLList
│ │ │ +
44 {
│ │ │ +
45 struct Element;
│ │ │ +
46 friend class SLListIterator<T,A>;
│ │ │ +
47 friend class SLListConstIterator<T,A>;
│ │ │ +
48
│ │ │ +
49 public:
│ │ │ +
50
│ │ │ +
54 typedef typename A::size_type size_type;
│ │ │ +
55
│ │ │ +
59 typedef T MemberType;
│ │ │ +
60
│ │ │ +
64 using Allocator = typename std::allocator_traits<A>::template rebind_alloc<Element>;
│ │ │ +
65
│ │ │ + │ │ │ +
70
│ │ │ + │ │ │ +
75
│ │ │ +
│ │ │ + │ │ │ +
80
│ │ │ +
84 template<typename T1, typename A1>
│ │ │ +
│ │ │ +
85 SLList(const SLList<T1,A1>& other);
│ │ │ +
86
│ │ │ +
│ │ │ +
90 SLList(const SLList<T,A>& other);
│ │ │ +
91
│ │ │ +
│ │ │ + │ │ │ +
98
│ │ │ + │ │ │ +
104
│ │ │ +
│ │ │ + │ │ │ +
109
│ │ │ +
110
│ │ │ +
│ │ │ +
115 inline void push_back(const MemberType& item);
│ │ │ +
116
│ │ │ +
│ │ │ +
121 inline void push_front(const MemberType& item);
│ │ │ +
122
│ │ │ +
│ │ │ +
126 inline void pop_front();
│ │ │ +
127
│ │ │ +
│ │ │ +
129 inline void clear();
│ │ │ +
130
│ │ │ +
│ │ │ +
138 inline iterator begin();
│ │ │ +
139
│ │ │ +
│ │ │ +
147 inline const_iterator begin() const;
│ │ │ +
148
│ │ │ +
│ │ │ + │ │ │
157
│ │ │ -
│ │ │ -
172#define DUNE_VERSION_LT_REV(module,major,minor,revision) \
│ │ │ -
173 ! DUNE_VERSION_GTE_REV(module,major,minor,revision)
│ │ │ -
│ │ │ +
│ │ │ + │ │ │ +
166
│ │ │ +
│ │ │ +
173 inline iterator end();
│ │ │
174
│ │ │ -
│ │ │ -
189#define DUNE_VERSION_GT_REV(module,major,minor,revision) \
│ │ │ -
190 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
│ │ │ -
191 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \
│ │ │ -
192 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \
│ │ │ -
193 && (DUNE_VERSION_JOIN(module,REVISION) > revision)))
│ │ │ -
│ │ │ -
194
│ │ │ -
│ │ │ -
209#define DUNE_VERSION_LTE_REV(module,major,minor,revision) \
│ │ │ -
210 ! DUNE_VERSION_GT_REV(module,major,minor,revision)
│ │ │ -
│ │ │ -
211
│ │ │ -
│ │ │ -
226#define DUNE_VERSION_ID(major,minor,revision) \
│ │ │ -
227 ((unsigned int)((major << 24) + (minor << 16) + revision))
│ │ │ -
│ │ │ -
228
│ │ │ -
│ │ │ -
243#define DUNE_MODULE_VERSION_ID(module) \
│ │ │ -
244 DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )
│ │ │ +
│ │ │ +
181 inline const_iterator end() const;
│ │ │ +
182
│ │ │ +
│ │ │ +
188 inline bool empty() const;
│ │ │ +
189
│ │ │ +
│ │ │ +
194 inline int size() const;
│ │ │ +
195
│ │ │ +
│ │ │ +
196 bool operator==(const SLList& sl) const;
│ │ │ +
197
│ │ │ +
198
│ │ │ +
│ │ │ +
199 bool operator!=(const SLList& sl) const;
│ │ │ +
200
│ │ │ +
201 private:
│ │ │ +
203 struct Element
│ │ │ +
204 {
│ │ │ + │ │ │ + │ │ │ +
213
│ │ │ +
│ │ │ +
214 Element(const MemberType& item, Element* next_=0);
│ │ │ +
215
│ │ │ +
│ │ │ + │ │ │ +
217
│ │ │ + │ │ │ +
219 };
│ │ │ +
220
│ │ │ +
225 void deleteNext(Element* current);
│ │ │ +
226
│ │ │ +
231 void copyElements(const SLList<T,A>& other);
│ │ │ +
232
│ │ │ +
240 template<bool watchForTail>
│ │ │ +
241 void deleteNext(Element* current);
│ │ │ +
247 void insertAfter(Element* current, const T& item);
│ │ │ +
248
│ │ │ +
250 Element beforeHead_;
│ │ │ +
251
│ │ │ +
257 Element* tail_;
│ │ │ +
258
│ │ │ +
260 Allocator allocator_;
│ │ │ +
261
│ │ │ +
263 int size_;
│ │ │ +
264 };
│ │ │ +
265
│ │ │ +
269 template<typename T, class A>
│ │ │ +
│ │ │ +
270 class SLListIterator : public Dune::ForwardIteratorFacade<SLListIterator<T,A>, T, T&, std::size_t>
│ │ │ +
271 {
│ │ │ +
272 friend class SLListConstIterator<T,A>;
│ │ │ +
273 friend class SLListModifyIterator<T,A>;
│ │ │ +
274 friend class SLList<T,A>;
│ │ │ +
275
│ │ │ +
276 public:
│ │ │ +
│ │ │ + │ │ │ +
278 SLList<T,A>* sllist)
│ │ │ +
279 : current_(item), list_(sllist)
│ │ │ +
280 {}
│ │ │ +
│ │ │ +
281
│ │ │ +
│ │ │ + │ │ │ +
283 : current_(0), list_(0)
│ │ │ +
284 {}
│ │ │ +
│ │ │ +
285
│ │ │ +
│ │ │ + │ │ │ +
287 : current_(other.iterator_.current_), list_(other.iterator_.list_)
│ │ │ +
288 {}
│ │ │ +
│ │ │ +
289
│ │ │ +
│ │ │ +
294 inline T& dereference() const
│ │ │ +
295 {
│ │ │ +
296 return current_->item_;
│ │ │ +
297 }
│ │ │ +
│ │ │ +
298
│ │ │ +
│ │ │ +
304 inline bool equals(const SLListConstIterator<T,A>& other) const
│ │ │ +
305 {
│ │ │ +
306 return current_==other.current_;
│ │ │ +
307 }
│ │ │ +
│ │ │ +
308
│ │ │ +
│ │ │ +
314 inline bool equals(const SLListIterator<T,A>& other) const
│ │ │ +
315 {
│ │ │ +
316 return current_==other.current_;
│ │ │ +
317 }
│ │ │ +
│ │ │ +
318
│ │ │ +
│ │ │ +
324 inline bool equals(const SLListModifyIterator<T,A>& other) const
│ │ │ +
325 {
│ │ │ +
326 return current_==other.iterator_.current_;
│ │ │ +
327 }
│ │ │ +
│ │ │ +
328
│ │ │ +
│ │ │ +
332 inline void increment()
│ │ │ +
333 {
│ │ │ +
334 current_ = current_->next_;
│ │ │ +
335 }
│ │ │ +
│ │ │ +
336
│ │ │ +
│ │ │ +
342 inline void insertAfter(const T& v) const
│ │ │ +
343 {
│ │ │ +
344 assert(list_ );
│ │ │ +
345 list_->insertAfter(current_, v);
│ │ │ +
346 }
│ │ │ +
│ │ │ +
347
│ │ │ +
│ │ │ +
353 inline void deleteNext() const
│ │ │ +
354 {
│ │ │ +
355 assert(list_);
│ │ │ +
356 list_->deleteNext(current_);
│ │ │ +
357 }
│ │ │ +
│ │ │ +
358
│ │ │ +
359 private:
│ │ │ +
361 typename SLList<T,A>::Element* current_;
│ │ │ + │ │ │ +
364 };
│ │ │ +
│ │ │ +
365
│ │ │ +
369 template<class T, class A>
│ │ │ +
│ │ │ +
370 class SLListConstIterator : public Dune::ForwardIteratorFacade<SLListConstIterator<T,A>, const T, const T&, std::size_t>
│ │ │ +
371 {
│ │ │ +
372 friend class SLListIterator<T,A>;
│ │ │ +
373 friend class SLList<T,A>;
│ │ │ +
374
│ │ │ +
375 public:
│ │ │ +
│ │ │ + │ │ │ +
377 : current_(0)
│ │ │ +
378 {}
│ │ │ +
│ │ │ +
379
│ │ │ +
│ │ │ + │ │ │ +
381 : current_(item)
│ │ │ +
382 {}
│ │ │ +
│ │ │ +
383
│ │ │ +
│ │ │ + │ │ │ +
385 : current_(other.current_)
│ │ │ +
386 {}
│ │ │ +
│ │ │ +
387
│ │ │ +
│ │ │ + │ │ │ +
389 : current_(other.iterator_.current_)
│ │ │ +
390 {}
│ │ │ +
│ │ │ +
391
│ │ │ +
│ │ │ +
396 inline const T& dereference() const
│ │ │ +
397 {
│ │ │ +
398 return current_->item_;
│ │ │ +
399 }
│ │ │ +
│ │ │ +
400
│ │ │ +
│ │ │ +
406 inline bool equals(const SLListConstIterator<T,A>& other) const
│ │ │ +
407 {
│ │ │ +
408 return current_==other.current_;
│ │ │ +
409 }
│ │ │ +
│ │ │ +
410
│ │ │ +
│ │ │ +
414 inline void increment()
│ │ │ +
415 {
│ │ │ +
416 current_ = current_->next_;
│ │ │ +
417 }
│ │ │ +
│ │ │ +
418
│ │ │ +
419 private:
│ │ │ +
421 typename SLList<T,A>::Element* current_;
│ │ │ +
422 };
│ │ │ +
│ │ │ +
423
│ │ │ +
427 template<typename T, class A>
│ │ │ +
│ │ │ +
428 class SLListModifyIterator : public Dune::ForwardIteratorFacade<SLListModifyIterator<T,A>, T, T&, std::size_t>
│ │ │ +
429 {
│ │ │ +
430 friend class SLListConstIterator<T,A>;
│ │ │ +
431 friend class SLListIterator<T,A>;
│ │ │ +
432 public:
│ │ │ +
│ │ │ + │ │ │ +
434 SLListIterator<T,A> _iterator)
│ │ │ +
435 : beforeIterator_(beforeIterator), iterator_(_iterator)
│ │ │ +
436 {}
│ │ │ +
│ │ │ +
437
│ │ │ +
│ │ │ + │ │ │ +
439 : beforeIterator_(), iterator_()
│ │ │ +
440 {}
│ │ │ +
│ │ │ +
441
│ │ │ +
│ │ │ +
446 inline T& dereference() const
│ │ │ +
447 {
│ │ │ +
448 return *iterator_;
│ │ │ +
449 }
│ │ │ +
│ │ │ +
450
│ │ │ +
│ │ │ +
456 inline bool equals(const SLListConstIterator<T,A>& other) const
│ │ │ +
457 {
│ │ │ +
458 return iterator_== other;
│ │ │ +
459 }
│ │ │ +
│ │ │ +
460
│ │ │ +
461
│ │ │ +
│ │ │ +
467 inline bool equals(const SLListIterator<T,A>& other) const
│ │ │ +
468 {
│ │ │ +
469 return iterator_== other;
│ │ │ +
470 }
│ │ │ +
│ │ │ +
471
│ │ │ +
472
│ │ │ +
│ │ │ +
478 inline bool equals(const SLListModifyIterator<T,A>& other) const
│ │ │ +
479 {
│ │ │ +
480 return iterator_== other.iterator_;
│ │ │ +
481 }
│ │ │ +
│ │ │ +
482
│ │ │ +
│ │ │ +
486 inline void increment()
│ │ │ +
487 {
│ │ │ +
488 ++iterator_;
│ │ │ +
489 ++beforeIterator_;
│ │ │ +
490 }
│ │ │ +
│ │ │ +
491
│ │ │ +
│ │ │ +
505 inline void insert(const T& v)
│ │ │ +
506 {
│ │ │ +
507 beforeIterator_.insertAfter(v);
│ │ │ +
508 ++beforeIterator_;
│ │ │ +
509 }
│ │ │ +
│ │ │ +
510
│ │ │ +
│ │ │ +
518 inline void remove()
│ │ │ +
519 {
│ │ │ +
520 ++iterator_;
│ │ │ +
521 beforeIterator_.deleteNext();
│ │ │ +
522 }
│ │ │ +
│ │ │ +
523
│ │ │ +
524 private:
│ │ │ +
526 SLListIterator<T,A> beforeIterator_;
│ │ │ +
528 SLListIterator<T,A> iterator_;
│ │ │ +
529 };
│ │ │ +
│ │ │ +
530
│ │ │ +
531 template<typename T, typename A>
│ │ │ +
│ │ │ +
532 std::ostream& operator<<(std::ostream& os, const SLList<T,A>& sllist)
│ │ │ +
533 {
│ │ │ +
534 typedef typename SLList<T,A>::const_iterator Iterator;
│ │ │ +
535 Iterator end = sllist.end();
│ │ │ +
536 Iterator current= sllist.begin();
│ │ │ +
537
│ │ │ +
538 os << "{ ";
│ │ │ +
539
│ │ │ +
540 if(current!=end) {
│ │ │ +
541 os<<*current<<" ("<<static_cast<const void*>(&(*current))<<")";
│ │ │ +
542 ++current;
│ │ │ +
543
│ │ │ +
544 for(; current != end; ++current)
│ │ │ +
545 os<<", "<<*current<<" ("<<static_cast<const void*>(&(*current))<<")";
│ │ │ +
546 }
│ │ │ +
547 os<<"} ";
│ │ │ +
548 return os;
│ │ │ +
549 }
│ │ │ +
│ │ │ +
550
│ │ │ +
551 template<typename T, class A>
│ │ │ +
│ │ │ +
552 SLList<T,A>::Element::Element(const MemberType& item, Element* next)
│ │ │ +
553 : next_(next), item_(item)
│ │ │ +
554 {}
│ │ │ +
│ │ │ +
555
│ │ │ +
556 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
558 : next_(0), item_()
│ │ │ +
559 {}
│ │ │ +
│ │ │ +
│ │ │ +
560
│ │ │ +
561 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
563 {
│ │ │ +
564 next_=0;
│ │ │ +
565 }
│ │ │ +
│ │ │ +
566
│ │ │ +
567 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
569 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
│ │ │ +
570 {
│ │ │ +
571 beforeHead_.next_=0;
│ │ │ +
572 assert(&beforeHead_==tail_);
│ │ │ +
573 assert(tail_->next_==0);
│ │ │ +
574 }
│ │ │ +
│ │ │ +
575
│ │ │ +
576 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
578 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
│ │ │ +
579 {
│ │ │ +
580 copyElements(other);
│ │ │ +
581 }
│ │ │ +
│ │ │ +
582
│ │ │ +
583 template<typename T, class A>
│ │ │ +
584 template<typename T1, class A1>
│ │ │ +
│ │ │ + │ │ │ +
586 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
│ │ │ +
587 {
│ │ │ +
588 copyElements(other);
│ │ │ +
589 }
│ │ │ +
│ │ │ +
590
│ │ │ +
591 template<typename T, typename A>
│ │ │ +
592 void SLList<T,A>::copyElements(const SLList<T,A>& other)
│ │ │ +
593 {
│ │ │ +
594 assert(tail_==&beforeHead_);
│ │ │ +
595 assert(size_==0);
│ │ │ +
596 typedef typename SLList<T,A>::const_iterator Iterator;
│ │ │ +
597 Iterator iend = other.end();
│ │ │ +
598 for(Iterator element=other.begin(); element != iend; ++element)
│ │ │ +
599 push_back(*element);
│ │ │ +
600
│ │ │ +
601 assert(other.size()==size());
│ │ │ +
602 }
│ │ │ +
603
│ │ │ +
604 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
606 {
│ │ │ +
607 clear();
│ │ │ +
608 }
│ │ │ +
│ │ │ +
609
│ │ │ +
610 template<typename T, class A>
│ │ │ +
│ │ │ +
611 bool SLList<T,A>::operator==(const SLList& other) const
│ │ │ +
612 {
│ │ │ +
613 if(size()!=other.size())
│ │ │ +
614 return false;
│ │ │ +
615 for(const_iterator iter=begin(), oiter=other.begin();
│ │ │ +
616 iter != end(); ++iter, ++oiter)
│ │ │ +
617 if(*iter!=*oiter)
│ │ │ +
618 return false;
│ │ │ +
619 return true;
│ │ │ +
620 }
│ │ │ +
│ │ │ +
621
│ │ │ +
622 template<typename T, class A>
│ │ │ +
│ │ │ +
623 bool SLList<T,A>::operator!=(const SLList& other) const
│ │ │ +
624 {
│ │ │ +
625 if(size()==other.size()) {
│ │ │ +
626 for(const_iterator iter=begin(), oiter=other.begin();
│ │ │ +
627 iter != end(); ++iter, ++oiter)
│ │ │ +
628 if(*iter!=*oiter)
│ │ │ +
629 return true;
│ │ │ +
630 return false;
│ │ │ +
631 }else
│ │ │ +
632 return true;
│ │ │ +
633 }
│ │ │ +
│ │ │ +
634 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
636 {
│ │ │ +
637 clear();
│ │ │ +
638 copyElements(other);
│ │ │ +
639 return *this;
│ │ │ +
640 }
│ │ │ +
│ │ │ +
641
│ │ │ +
642 template<typename T, class A>
│ │ │ +
│ │ │ +
643 inline void SLList<T,A>::push_back(const MemberType& item)
│ │ │ +
644 {
│ │ │ +
645 assert(size_>0 || tail_==&beforeHead_);
│ │ │ +
646 tail_->next_ = allocator_.allocate(1);
│ │ │ +
647 assert(size_>0 || tail_==&beforeHead_);
│ │ │ +
648 tail_ = tail_->next_;
│ │ │ +
649 ::new (static_cast<void*>(&(tail_->item_)))T(item);
│ │ │ +
650 tail_->next_=0;
│ │ │ +
651 assert(tail_->next_==0);
│ │ │ +
652 ++size_;
│ │ │ +
653 }
│ │ │ +
│ │ │ +
654
│ │ │ +
655 template<typename T, class A>
│ │ │ +
656 inline void SLList<T,A>::insertAfter(Element* current, const T& item)
│ │ │ +
657 {
│ │ │ +
658 assert(current);
│ │ │ +
659
│ │ │ +
660#ifndef NDEBUG
│ │ │ +
661 bool changeTail = (current == tail_);
│ │ │ +
662#endif
│ │ │ +
663
│ │ │ +
664 // Save old next element
│ │ │ +
665 Element* tmp = current->next_;
│ │ │ +
666
│ │ │ +
667 assert(!changeTail || !tmp);
│ │ │ +
668
│ │ │ +
669 // Allocate space
│ │ │ +
670 current->next_ = allocator_.allocate(1);
│ │ │ +
671
│ │ │ +
672 // Use copy constructor to initialize memory
│ │ │ +
673 std::allocator_traits<Allocator>::construct(allocator_, current->next_, Element(item,tmp));
│ │ │ +
674
│ │ │ +
675 //::new(static_cast<void*>(&(current->next_->item_))) T(item);
│ │ │ +
676
│ │ │ +
677 if(!current->next_->next_) {
│ │ │ +
678 // Update tail
│ │ │ +
679 assert(changeTail);
│ │ │ +
680 tail_ = current->next_;
│ │ │ +
681 }
│ │ │ +
682 ++size_;
│ │ │ +
683 assert(!tail_->next_);
│ │ │ +
684 }
│ │ │ +
685
│ │ │ +
686 template<typename T, class A>
│ │ │ +
│ │ │ +
687 inline void SLList<T,A>::push_front(const MemberType& item)
│ │ │ +
688 {
│ │ │ +
689 if(tail_ == &beforeHead_) {
│ │ │ +
690 // list was empty
│ │ │ +
691 beforeHead_.next_ = tail_ = allocator_.allocate(1, 0);
│ │ │ +
692 ::new(static_cast<void*>(&beforeHead_.next_->item_))T(item);
│ │ │ +
693 beforeHead_.next_->next_=0;
│ │ │ +
694 }else{
│ │ │ +
695 Element* added = allocator_.allocate(1, 0);
│ │ │ +
696 ::new(static_cast<void*>(&added->item_))T(item);
│ │ │ +
697 added->next_=beforeHead_.next_;
│ │ │ +
698 beforeHead_.next_=added;
│ │ │ +
699 }
│ │ │ +
700 assert(tail_->next_==0);
│ │ │ +
701 ++size_;
│ │ │ +
702 }
│ │ │ +
│ │ │ +
703
│ │ │ +
704
│ │ │ +
705 template<typename T, class A>
│ │ │ +
706 inline void SLList<T,A>::deleteNext(Element* current)
│ │ │ +
707 {
│ │ │ +
708 this->template deleteNext<true>(current);
│ │ │ +
709 }
│ │ │ +
710
│ │ │ +
711 template<typename T, class A>
│ │ │ +
712 template<bool watchForTail>
│ │ │ +
713 inline void SLList<T,A>::deleteNext(Element* current)
│ │ │ +
714 {
│ │ │ +
715 assert(current->next_);
│ │ │ +
716 Element* next = current->next_;
│ │ │ +
717
│ │ │ +
718 if(watchForTail)
│ │ │ +
719 if(next == tail_) {
│ │ │ +
720 // deleting last element changes tail!
│ │ │ +
721 tail_ = current;
│ │ │ +
722 }
│ │ │ +
723
│ │ │ +
724 current->next_ = next->next_;
│ │ │ +
725 std::allocator_traits<Allocator>::destroy(allocator_, next);
│ │ │ +
726 allocator_.deallocate(next, 1);
│ │ │ +
727 --size_;
│ │ │ +
728 assert(!watchForTail || &beforeHead_ != tail_ || size_==0);
│ │ │ +
729 }
│ │ │ +
730
│ │ │ +
731 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
733 {
│ │ │ +
734 deleteNext(&beforeHead_);
│ │ │ +
735 }
│ │ │ +
│ │ │ +
736
│ │ │ +
737 template<typename T, class A>
│ │ │ +
│ │ │ +
738 inline void SLList<T,A>::clear()
│ │ │ +
739 {
│ │ │ +
740 while(beforeHead_.next_ ) {
│ │ │ +
741 this->template deleteNext<false>(&beforeHead_);
│ │ │ +
742 }
│ │ │ +
743
│ │ │ +
744 assert(size_==0);
│ │ │ +
745 // update the tail!
│ │ │ +
746 tail_ = &beforeHead_;
│ │ │ +
747 }
│ │ │ +
│ │ │ +
748
│ │ │ +
749 template<typename T, class A>
│ │ │ +
│ │ │ +
750 inline bool SLList<T,A>::empty() const
│ │ │ +
751 {
│ │ │ +
752 return (&beforeHead_ == tail_);
│ │ │ +
753 }
│ │ │ +
│ │ │ +
754
│ │ │ +
755 template<typename T, class A>
│ │ │ +
│ │ │ +
756 inline int SLList<T,A>::size() const
│ │ │ +
757 {
│ │ │ +
758 return size_;
│ │ │ +
759 }
│ │ │ +
│ │ │ +
760
│ │ │ +
761 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
763 {
│ │ │ +
764 return iterator(beforeHead_.next_, this);
│ │ │ +
765 }
│ │ │ +
│ │ │ +
766
│ │ │ +
767 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
769 {
│ │ │ +
770 return const_iterator(beforeHead_.next_);
│ │ │ +
771 }
│ │ │ +
│ │ │ +
772
│ │ │ +
773 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
775 {
│ │ │ +
776 return iterator();
│ │ │ +
777 }
│ │ │ +
│ │ │ +
778
│ │ │ +
779 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
781 {
│ │ │ +
782 return SLListModifyIterator<T,A>(iterator(tail_, this),iterator());
│ │ │ +
783 }
│ │ │ +
│ │ │ +
784
│ │ │ +
785
│ │ │ +
786 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
788 {
│ │ │ +
789 return SLListModifyIterator<T,A>(iterator(&beforeHead_, this),
│ │ │ +
790 iterator(beforeHead_.next_, this));
│ │ │ +
791 }
│ │ │ +
│ │ │ +
792
│ │ │ +
793 template<typename T, class A>
│ │ │ +
│ │ │ + │ │ │ +
795 {
│ │ │ +
796 return const_iterator();
│ │ │ +
797 }
│ │ │ +
│ │ │ +
798
│ │ │ +
800}
│ │ │ +
801#endif
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │ +
│ │ │
│ │ │ -
245
│ │ │ -
246#endif
│ │ │ +
This file implements iterator facade classes for writing stl conformant iterators.
│ │ │ +
void push_front(const MemberType &item)
Add a new entry to the beginning of the list.
Definition sllist.hh:687
│ │ │ +
bool equals(const SLListConstIterator< T, A > &other) const
Equality test for the iterator facade.
Definition sllist.hh:406
│ │ │ +
void push_back(const MemberType &item)
Add a new entry to the end of the list.
Definition sllist.hh:643
│ │ │ +
ModifyIterator endModify()
Get an iterator capable of deleting and inserting elements.
Definition sllist.hh:780
│ │ │ +
SLListModifyIterator()
Definition sllist.hh:438
│ │ │ +
Element()
Definition sllist.hh:557
│ │ │ +
T & dereference() const
Dereferencing function for the iterator facade.
Definition sllist.hh:294
│ │ │ +
bool operator!=(const SLList &sl) const
Definition sllist.hh:623
│ │ │ +
MemberType item_
The element we hold.
Definition sllist.hh:212
│ │ │ +
SLListConstIterator(typename SLList< T, A >::Element *item)
Definition sllist.hh:380
│ │ │ +
typename std::allocator_traits< A >::template rebind_alloc< Element > Allocator
The allocator to use.
Definition sllist.hh:64
│ │ │ +
void insertAfter(const T &v) const
Insert an element in the underlying list after the current position.
Definition sllist.hh:342
│ │ │ +
SLListIterator< T, A > iterator
The mutable iterator of the list.
Definition sllist.hh:69
│ │ │ +
SLListConstIterator(const SLListModifyIterator< T, A > &other)
Definition sllist.hh:388
│ │ │ +
SLListIterator()
Definition sllist.hh:282
│ │ │ +
~Element()
Definition sllist.hh:562
│ │ │ +
bool operator==(const SLList &sl) const
Definition sllist.hh:611
│ │ │ +
void deleteNext() const
Delete the entry after the current position.
Definition sllist.hh:353
│ │ │ +
SLList(const SLList< T, A > &other)
Copy constructor.
Definition sllist.hh:577
│ │ │ +
bool equals(const SLListModifyIterator< T, A > &other) const
Equality test for the iterator facade.
Definition sllist.hh:324
│ │ │ +
T & dereference() const
Dereferencing function for the iterator facade.
Definition sllist.hh:446
│ │ │ +
int size() const
Get the number of elements the list contains.
Definition sllist.hh:756
│ │ │ +
const_iterator begin() const
Get an iterator pointing to the first element in the list.
Definition sllist.hh:768
│ │ │ +
iterator end()
Get an iterator pointing to the end of the list.
Definition sllist.hh:774
│ │ │ +
void clear()
Remove all elements from the list.
Definition sllist.hh:738
│ │ │ +
SLList(const SLList< T1, A1 > &other)
Copy constructor with type conversion.
Definition sllist.hh:585
│ │ │ +
T MemberType
The type we store.
Definition sllist.hh:59
│ │ │ +
bool equals(const SLListModifyIterator< T, A > &other) const
Test whether another iterator is equal.
Definition sllist.hh:478
│ │ │ +
ModifyIterator beginModify()
Get an iterator capable of deleting and inserting elements.
Definition sllist.hh:787
│ │ │ +
SLList< T, A > & operator=(const SLList< T, A > &other)
Assignment operator.
Definition sllist.hh:635
│ │ │ +
SLListConstIterator(const SLListIterator< T, A > &other)
Definition sllist.hh:384
│ │ │ +
SLListConstIterator< T, A > const_iterator
The constant iterator of the list.
Definition sllist.hh:74
│ │ │ +
bool empty() const
Check whether the list is empty.
Definition sllist.hh:750
│ │ │ +
SLListConstIterator()
Definition sllist.hh:376
│ │ │ +
bool equals(const SLListConstIterator< T, A > &other) const
Equality test for the iterator facade.
Definition sllist.hh:304
│ │ │ +
bool equals(const SLListConstIterator< T, A > &other) const
Test whether another iterator is equal.
Definition sllist.hh:456
│ │ │ +
SLListModifyIterator< T, A > ModifyIterator
The type of the iterator capable of deletion and insertion.
Definition sllist.hh:103
│ │ │ +
const_iterator end() const
Get an iterator pointing to the end of the list.
Definition sllist.hh:794
│ │ │ +
SLList()
Constructor.
Definition sllist.hh:568
│ │ │ +
void insert(const T &v)
Insert an element at the current position.
Definition sllist.hh:505
│ │ │ +
SLListIterator(typename SLList< T, A >::Element *item, SLList< T, A > *sllist)
Definition sllist.hh:277
│ │ │ +
SLListModifyIterator(SLListIterator< T, A > beforeIterator, SLListIterator< T, A > _iterator)
Definition sllist.hh:433
│ │ │ +
void pop_front()
Remove the first item in the list.
Definition sllist.hh:732
│ │ │ +
void increment()
Increment function for the iterator facade.
Definition sllist.hh:332
│ │ │ +
SLListIterator(const SLListModifyIterator< T, A > &other)
Definition sllist.hh:286
│ │ │ +
A::size_type size_type
The size type.
Definition sllist.hh:54
│ │ │ +
void remove()
Delete the entry at the current position.
Definition sllist.hh:518
│ │ │ +
const T & dereference() const
Dereferencing function for the facade.
Definition sllist.hh:396
│ │ │ +
Element * next_
The next element in the list.
Definition sllist.hh:208
│ │ │ +
void increment()
Increment function for the iterator facade.
Definition sllist.hh:486
│ │ │ +
void increment()
Increment function for the iterator facade.
Definition sllist.hh:414
│ │ │ +
~SLList()
Destructor.
Definition sllist.hh:605
│ │ │ +
bool equals(const SLListIterator< T, A > &other) const
Test whether another iterator is equal.
Definition sllist.hh:467
│ │ │ +
iterator begin()
Get an iterator pointing to the first element in the list.
Definition sllist.hh:762
│ │ │ +
bool equals(const SLListIterator< T, A > &other) const
Equality test for the iterator facade.
Definition sllist.hh:314
│ │ │ +
std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
Definition bigunsignedint.hh:278
│ │ │ +
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ +
constexpr std::integer_sequence< T, II..., T(IN)> push_back(std::integer_sequence< T, II... >, std::integral_constant< T, IN >={})
Append an index IN to the back of the sequence.
Definition integersequence.hh:69
│ │ │ +
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition integersequence.hh:75
│ │ │ +
Base class for stl conformant forward iterators.
Definition iteratorfacades.hh:142
│ │ │ +
A mutable iterator for the SLList.
Definition sllist.hh:271
│ │ │ +
A constant iterator for the SLList.
Definition sllist.hh:371
│ │ │ +
A mutable iterator for the SLList.
Definition sllist.hh:429
│ │ │ +
A single linked list.
Definition sllist.hh:44
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,76 +1,808 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -version.hh │ │ │ │ +sllist.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_VERSION_HH │ │ │ │ -6#define DUNE_VERSION_HH │ │ │ │ +5#ifndef DUNE_SLLIST_HH │ │ │ │ +6#define DUNE_SLLIST_HH │ │ │ │ 7 │ │ │ │ -8#include // DUNE_[MODULE]_VERSION_[TYPE] │ │ │ │ -9 │ │ │ │ -_3_0#define DUNE_VERSION_JOIN(module,type) module ## _VERSION_ ## type │ │ │ │ +8#include │ │ │ │ +9#include │ │ │ │ +10#include "_i_t_e_r_a_t_o_r_f_a_c_a_d_e_s_._h_h" │ │ │ │ +11#include │ │ │ │ +12 │ │ │ │ +13namespace _D_u_n_e │ │ │ │ +14{ │ │ │ │ +26 template │ │ │ │ +27 class SLListIterator; │ │ │ │ +28 │ │ │ │ +29 template │ │ │ │ +30 class SLListConstIterator; │ │ │ │ 31 │ │ │ │ -_4_6#define DUNE_VERSION_EQUAL(module,major,minor) \ │ │ │ │ -47 ((DUNE_VERSION_JOIN(module,MAJOR) == major) && \ │ │ │ │ -48 (DUNE_VERSION_JOIN(module,MINOR) == minor)) │ │ │ │ -49 │ │ │ │ -_6_4#define DUNE_VERSION_EQUAL_REV(module,major,minor,revision) \ │ │ │ │ -65 ( DUNE_VERSION_EQUAL(module,major,minor) && \ │ │ │ │ -66 (DUNE_VERSION_JOIN(module,REVISION) == revision)) │ │ │ │ -67 │ │ │ │ -_8_2#define DUNE_VERSION_GTE(module,major,minor) \ │ │ │ │ -83 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \ │ │ │ │ -84 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) >= minor))) │ │ │ │ -85 │ │ │ │ -_1_0_0#define DUNE_VERSION_LT(module,major,minor) \ │ │ │ │ -101 ! DUNE_VERSION_GTE(module,major,minor) │ │ │ │ -102 │ │ │ │ -_1_1_7#define DUNE_VERSION_GT(module,major,minor) \ │ │ │ │ -118 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \ │ │ │ │ -119 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) > minor))) │ │ │ │ -120 │ │ │ │ -_1_3_5#define DUNE_VERSION_LTE(module,major,minor) \ │ │ │ │ -136 ! DUNE_VERSION_GT(module,major,minor) │ │ │ │ -137 │ │ │ │ -_1_5_2#define DUNE_VERSION_GTE_REV(module,major,minor,revision) \ │ │ │ │ -153 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \ │ │ │ │ -154 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) > minor)) \ │ │ │ │ -155 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) == minor) \ │ │ │ │ -156 && (DUNE_VERSION_JOIN(module,REVISION) >= revision))) │ │ │ │ +32 template │ │ │ │ +33 class SLListModifyIterator; │ │ │ │ +34 │ │ │ │ +42 template > │ │ │ │ +_4_3 class _S_L_L_i_s_t │ │ │ │ +44 { │ │ │ │ +45 struct Element; │ │ │ │ +46 friend class _S_L_L_i_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +47 friend class _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +48 │ │ │ │ +49 public: │ │ │ │ +50 │ │ │ │ +_5_4 typedef typename A::size_type _s_i_z_e___t_y_p_e; │ │ │ │ +55 │ │ │ │ +_5_9 typedef T _M_e_m_b_e_r_T_y_p_e; │ │ │ │ +60 │ │ │ │ +_6_4 using _A_l_l_o_c_a_t_o_r = typename std::allocator_traits::template │ │ │ │ +rebind_alloc; │ │ │ │ +65 │ │ │ │ +_6_9 typedef _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _i_t_e_r_a_t_o_r; │ │ │ │ +70 │ │ │ │ +_7_4 typedef _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _c_o_n_s_t___i_t_e_r_a_t_o_r; │ │ │ │ +75 │ │ │ │ +_7_9 _S_L_L_i_s_t(); │ │ │ │ +80 │ │ │ │ +84 template │ │ │ │ +_8_5 _S_L_L_i_s_t(const _S_L_L_i_s_t_<_T_1_,_A_1_>& other); │ │ │ │ +86 │ │ │ │ +_9_0 _S_L_L_i_s_t(const _S_L_L_i_s_t_<_T_,_A_>& other); │ │ │ │ +91 │ │ │ │ +_9_7 _~_S_L_L_i_s_t(); │ │ │ │ +98 │ │ │ │ +_1_0_3 typedef _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_> _M_o_d_i_f_y_I_t_e_r_a_t_o_r; │ │ │ │ +104 │ │ │ │ +_1_0_8 _S_L_L_i_s_t_<_T_,_A_>& _o_p_e_r_a_t_o_r_=(const _S_L_L_i_s_t_<_T_,_A_>& other); │ │ │ │ +109 │ │ │ │ +110 │ │ │ │ +_1_1_5 inline void _p_u_s_h___b_a_c_k(const _M_e_m_b_e_r_T_y_p_e& item); │ │ │ │ +116 │ │ │ │ +_1_2_1 inline void _p_u_s_h___f_r_o_n_t(const _M_e_m_b_e_r_T_y_p_e& item); │ │ │ │ +122 │ │ │ │ +_1_2_6 inline void _p_o_p___f_r_o_n_t(); │ │ │ │ +127 │ │ │ │ +_1_2_9 inline void _c_l_e_a_r(); │ │ │ │ +130 │ │ │ │ +_1_3_8 inline _i_t_e_r_a_t_o_r _b_e_g_i_n(); │ │ │ │ +139 │ │ │ │ +_1_4_7 inline _c_o_n_s_t___i_t_e_r_a_t_o_r _b_e_g_i_n() const; │ │ │ │ +148 │ │ │ │ +_1_5_6 inline _M_o_d_i_f_y_I_t_e_r_a_t_o_r _b_e_g_i_n_M_o_d_i_f_y(); │ │ │ │ 157 │ │ │ │ -_1_7_2#define DUNE_VERSION_LT_REV(module,major,minor,revision) \ │ │ │ │ -173 ! DUNE_VERSION_GTE_REV(module,major,minor,revision) │ │ │ │ +_1_6_5 inline _M_o_d_i_f_y_I_t_e_r_a_t_o_r _e_n_d_M_o_d_i_f_y(); │ │ │ │ +166 │ │ │ │ +_1_7_3 inline _i_t_e_r_a_t_o_r _e_n_d(); │ │ │ │ 174 │ │ │ │ -_1_8_9#define DUNE_VERSION_GT_REV(module,major,minor,revision) \ │ │ │ │ -190 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \ │ │ │ │ -191 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) > minor)) \ │ │ │ │ -192 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR) == minor) \ │ │ │ │ -193 && (DUNE_VERSION_JOIN(module,REVISION) > revision))) │ │ │ │ -194 │ │ │ │ -_2_0_9#define DUNE_VERSION_LTE_REV(module,major,minor,revision) \ │ │ │ │ -210 ! DUNE_VERSION_GT_REV(module,major,minor,revision) │ │ │ │ -211 │ │ │ │ -_2_2_6#define DUNE_VERSION_ID(major,minor,revision) \ │ │ │ │ -227 ((unsigned int)((major << 24) + (minor << 16) + revision)) │ │ │ │ -228 │ │ │ │ -_2_4_3#define DUNE_MODULE_VERSION_ID(module) \ │ │ │ │ -244 DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN │ │ │ │ -(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) ) │ │ │ │ -245 │ │ │ │ -246#endif │ │ │ │ +_1_8_1 inline _c_o_n_s_t___i_t_e_r_a_t_o_r _e_n_d() const; │ │ │ │ +182 │ │ │ │ +_1_8_8 inline bool _e_m_p_t_y() const; │ │ │ │ +189 │ │ │ │ +_1_9_4 inline int _s_i_z_e() const; │ │ │ │ +195 │ │ │ │ +_1_9_6 bool _o_p_e_r_a_t_o_r_=_=(const _S_L_L_i_s_t& sl) const; │ │ │ │ +197 │ │ │ │ +198 │ │ │ │ +_1_9_9 bool _o_p_e_r_a_t_o_r_!_=(const _S_L_L_i_s_t& sl) const; │ │ │ │ +200 │ │ │ │ +201 private: │ │ │ │ +203 struct Element │ │ │ │ +204 { │ │ │ │ +_2_0_8 _E_l_e_m_e_n_t* _n_e_x_t__; │ │ │ │ +_2_1_2 _M_e_m_b_e_r_T_y_p_e _i_t_e_m__; │ │ │ │ +213 │ │ │ │ +_2_1_4 _E_l_e_m_e_n_t(const _M_e_m_b_e_r_T_y_p_e& item, _E_l_e_m_e_n_t* _n_e_x_t__=0); │ │ │ │ +215 │ │ │ │ +_2_1_6 _E_l_e_m_e_n_t(); │ │ │ │ +217 │ │ │ │ +_2_1_8 _~_E_l_e_m_e_n_t(); │ │ │ │ +219 }; │ │ │ │ +220 │ │ │ │ +225 void deleteNext(Element* current); │ │ │ │ +226 │ │ │ │ +231 void copyElements(const _S_L_L_i_s_t_<_T_,_A_>& other); │ │ │ │ +232 │ │ │ │ +240 template │ │ │ │ +241 void deleteNext(Element* current); │ │ │ │ +247 void insertAfter(Element* current, const T& item); │ │ │ │ +248 │ │ │ │ +250 Element beforeHead_; │ │ │ │ +251 │ │ │ │ +257 Element* tail_; │ │ │ │ +258 │ │ │ │ +260 _A_l_l_o_c_a_t_o_r allocator_; │ │ │ │ +261 │ │ │ │ +263 int size_; │ │ │ │ +264 }; │ │ │ │ +265 │ │ │ │ +269 template │ │ │ │ +_2_7_0 class _S_L_L_i_s_t_I_t_e_r_a_t_o_r : public _D_u_n_e_:_: │ │ │ │ +_F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e, T, T&, std::size_t> │ │ │ │ +271 { │ │ │ │ +272 friend class _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +273 friend class _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r; │ │ │ │ +274 friend class _S_L_L_i_s_t; │ │ │ │ +275 │ │ │ │ +276 public: │ │ │ │ +_2_7_7 inline _S_L_L_i_s_t_I_t_e_r_a_t_o_r(typename _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t* item, │ │ │ │ +278 _S_L_L_i_s_t_<_T_,_A_>* sllist) │ │ │ │ +279 : current_(item), list_(sllist) │ │ │ │ +280 {} │ │ │ │ +281 │ │ │ │ +_2_8_2 inline _S_L_L_i_s_t_I_t_e_r_a_t_o_r() │ │ │ │ +283 : current_(0), list_(0) │ │ │ │ +284 {} │ │ │ │ +285 │ │ │ │ +_2_8_6 inline _S_L_L_i_s_t_I_t_e_r_a_t_o_r(const _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>& other) │ │ │ │ +287 : current_(other.iterator_.current_), list_(other.iterator_.list_) │ │ │ │ +288 {} │ │ │ │ +289 │ │ │ │ +_2_9_4 inline T& _d_e_r_e_f_e_r_e_n_c_e() const │ │ │ │ +295 { │ │ │ │ +296 return current_->item_; │ │ │ │ +297 } │ │ │ │ +298 │ │ │ │ +_3_0_4 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +305 { │ │ │ │ +306 return current_==other.current_; │ │ │ │ +307 } │ │ │ │ +308 │ │ │ │ +_3_1_4 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +315 { │ │ │ │ +316 return current_==other.current_; │ │ │ │ +317 } │ │ │ │ +318 │ │ │ │ +_3_2_4 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +325 { │ │ │ │ +326 return current_==other.iterator_.current_; │ │ │ │ +327 } │ │ │ │ +328 │ │ │ │ +_3_3_2 inline void _i_n_c_r_e_m_e_n_t() │ │ │ │ +333 { │ │ │ │ +334 current_ = current_->next_; │ │ │ │ +335 } │ │ │ │ +336 │ │ │ │ +_3_4_2 inline void _i_n_s_e_r_t_A_f_t_e_r(const T& v) const │ │ │ │ +343 { │ │ │ │ +344 assert(list_ ); │ │ │ │ +345 list_->insertAfter(current_, v); │ │ │ │ +346 } │ │ │ │ +347 │ │ │ │ +_3_5_3 inline void _d_e_l_e_t_e_N_e_x_t() const │ │ │ │ +354 { │ │ │ │ +355 assert(list_); │ │ │ │ +356 list_->deleteNext(current_); │ │ │ │ +357 } │ │ │ │ +358 │ │ │ │ +359 private: │ │ │ │ +361 typename _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t* current_; │ │ │ │ +_3_6_3 _S_L_L_i_s_t_<_T_,_A_>* list_; │ │ │ │ +364 }; │ │ │ │ +365 │ │ │ │ +369 template │ │ │ │ +_3_7_0 class _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r : public _D_u_n_e_:_: │ │ │ │ +_F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e, const T, const T&, std::size_t> │ │ │ │ +371 { │ │ │ │ +372 friend class _S_L_L_i_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +373 friend class _S_L_L_i_s_t; │ │ │ │ +374 │ │ │ │ +375 public: │ │ │ │ +_3_7_6 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r() │ │ │ │ +377 : current_(0) │ │ │ │ +378 {} │ │ │ │ +379 │ │ │ │ +_3_8_0 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r(typename _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t* item) │ │ │ │ +381 : current_(item) │ │ │ │ +382 {} │ │ │ │ +383 │ │ │ │ +_3_8_4 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r(const _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) │ │ │ │ +385 : current_(other.current_) │ │ │ │ +386 {} │ │ │ │ +387 │ │ │ │ +_3_8_8 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r(const _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>& other) │ │ │ │ +389 : current_(other.iterator_.current_) │ │ │ │ +390 {} │ │ │ │ +391 │ │ │ │ +_3_9_6 inline const T& _d_e_r_e_f_e_r_e_n_c_e() const │ │ │ │ +397 { │ │ │ │ +398 return current_->item_; │ │ │ │ +399 } │ │ │ │ +400 │ │ │ │ +_4_0_6 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +407 { │ │ │ │ +408 return current_==other.current_; │ │ │ │ +409 } │ │ │ │ +410 │ │ │ │ +_4_1_4 inline void _i_n_c_r_e_m_e_n_t() │ │ │ │ +415 { │ │ │ │ +416 current_ = current_->next_; │ │ │ │ +417 } │ │ │ │ +418 │ │ │ │ +419 private: │ │ │ │ +_4_2_1 typename _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t* current_; │ │ │ │ +422 }; │ │ │ │ +423 │ │ │ │ +427 template │ │ │ │ +_4_2_8 class _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r : public _D_u_n_e_:_: │ │ │ │ +_F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e, T, T&, std::size_t> │ │ │ │ +429 { │ │ │ │ +430 friend class _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +431 friend class _S_L_L_i_s_t_I_t_e_r_a_t_o_r; │ │ │ │ +432 public: │ │ │ │ +_4_3_3 inline _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r(_S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> beforeIterator, │ │ │ │ +434 _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _iterator) │ │ │ │ +435 : beforeIterator_(beforeIterator), iterator_(_iterator) │ │ │ │ +436 {} │ │ │ │ +437 │ │ │ │ +_4_3_8 inline _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r() │ │ │ │ +439 : beforeIterator_(), iterator_() │ │ │ │ +440 {} │ │ │ │ +441 │ │ │ │ +_4_4_6 inline T& _d_e_r_e_f_e_r_e_n_c_e() const │ │ │ │ +447 { │ │ │ │ +448 return *iterator_; │ │ │ │ +449 } │ │ │ │ +450 │ │ │ │ +_4_5_6 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +457 { │ │ │ │ +458 return iterator_== other; │ │ │ │ +459 } │ │ │ │ +460 │ │ │ │ +461 │ │ │ │ +_4_6_7 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +468 { │ │ │ │ +469 return iterator_== other; │ │ │ │ +470 } │ │ │ │ +471 │ │ │ │ +472 │ │ │ │ +_4_7_8 inline bool _e_q_u_a_l_s(const _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>& other) const │ │ │ │ +479 { │ │ │ │ +480 return iterator_== other.iterator_; │ │ │ │ +481 } │ │ │ │ +482 │ │ │ │ +_4_8_6 inline void _i_n_c_r_e_m_e_n_t() │ │ │ │ +487 { │ │ │ │ +488 ++iterator_; │ │ │ │ +489 ++beforeIterator_; │ │ │ │ +490 } │ │ │ │ +491 │ │ │ │ +_5_0_5 inline void _i_n_s_e_r_t(const T& v) │ │ │ │ +506 { │ │ │ │ +507 beforeIterator_.insertAfter(v); │ │ │ │ +508 ++beforeIterator_; │ │ │ │ +509 } │ │ │ │ +510 │ │ │ │ +_5_1_8 inline void _r_e_m_o_v_e() │ │ │ │ +519 { │ │ │ │ +520 ++iterator_; │ │ │ │ +521 beforeIterator_.deleteNext(); │ │ │ │ +522 } │ │ │ │ +523 │ │ │ │ +524 private: │ │ │ │ +526 _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> beforeIterator_; │ │ │ │ +528 _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> iterator_; │ │ │ │ +529 }; │ │ │ │ +530 │ │ │ │ +531 template │ │ │ │ +_5_3_2 std::ostream& _o_p_e_r_a_t_o_r_<_<(std::ostream& os, const _S_L_L_i_s_t_<_T_,_A_>& sllist) │ │ │ │ +533 { │ │ │ │ +534 typedef typename _S_L_L_i_s_t_<_T_,_A_>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r Iterator; │ │ │ │ +535 Iterator end = sllist._e_n_d(); │ │ │ │ +536 Iterator current= sllist._b_e_g_i_n(); │ │ │ │ +537 │ │ │ │ +538 os << "{ "; │ │ │ │ +539 │ │ │ │ +540 if(current!=end) { │ │ │ │ +541 os<<*current<<" ("<(&(*current))<<")"; │ │ │ │ +542 ++current; │ │ │ │ +543 │ │ │ │ +544 for(; current != end; ++current) │ │ │ │ +545 os<<", "<<*current<<" ("<(&(*current))<<")"; │ │ │ │ +546 } │ │ │ │ +547 os<<"} "; │ │ │ │ +548 return os; │ │ │ │ +549 } │ │ │ │ +550 │ │ │ │ +551 template │ │ │ │ +_5_5_2 _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t_:_:_E_l_e_m_e_n_t(const _M_e_m_b_e_r_T_y_p_e& item, Element* next) │ │ │ │ +553 : next_(next), item_(item) │ │ │ │ +554 {} │ │ │ │ +555 │ │ │ │ +556 template │ │ │ │ +_5_5_7 _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t_:_:_E_l_e_m_e_n_t() │ │ │ │ +558 : next_(0), item_() │ │ │ │ +559 {} │ │ │ │ +560 │ │ │ │ +561 template │ │ │ │ +_5_6_2 _S_L_L_i_s_t_<_T_,_A_>_:_:_E_l_e_m_e_n_t_:_:_~_E_l_e_m_e_n_t() │ │ │ │ +563 { │ │ │ │ +564 next_=0; │ │ │ │ +565 } │ │ │ │ +566 │ │ │ │ +567 template │ │ │ │ +_5_6_8 _S_L_L_i_s_t_<_T_,_A_>_:_:_S_L_L_i_s_t() │ │ │ │ +569 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0) │ │ │ │ +570 { │ │ │ │ +571 beforeHead_.next_=0; │ │ │ │ +572 assert(&beforeHead_==tail_); │ │ │ │ +573 assert(tail_->next_==0); │ │ │ │ +574 } │ │ │ │ +575 │ │ │ │ +576 template │ │ │ │ +_5_7_7 _S_L_L_i_s_t_<_T_,_A_>_:_:_S_L_L_i_s_t(const _S_L_L_i_s_t_<_T_,_A_>& other) │ │ │ │ +578 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0) │ │ │ │ +579 { │ │ │ │ +580 copyElements(other); │ │ │ │ +581 } │ │ │ │ +582 │ │ │ │ +583 template │ │ │ │ +584 template │ │ │ │ +_5_8_5 _S_L_L_i_s_t_<_T_,_A_>_:_:_S_L_L_i_s_t(const _S_L_L_i_s_t_<_T_1_,_A_1_>& other) │ │ │ │ +586 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0) │ │ │ │ +587 { │ │ │ │ +588 copyElements(other); │ │ │ │ +589 } │ │ │ │ +590 │ │ │ │ +591 template │ │ │ │ +592 void _S_L_L_i_s_t_<_T_,_A_>_:_:_c_o_p_y_E_l_e_m_e_n_t_s(const _S_L_L_i_s_t_<_T_,_A_>& other) │ │ │ │ +593 { │ │ │ │ +594 assert(tail_==&beforeHead_); │ │ │ │ +595 assert(size_==0); │ │ │ │ +596 typedef typename _S_L_L_i_s_t_<_T_,_A_>_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r Iterator; │ │ │ │ +597 Iterator iend = other._e_n_d(); │ │ │ │ +598 for(Iterator element=other._b_e_g_i_n(); element != iend; ++element) │ │ │ │ +599 _p_u_s_h___b_a_c_k(*element); │ │ │ │ +600 │ │ │ │ +601 assert(other._s_i_z_e()==_s_i_z_e()); │ │ │ │ +602 } │ │ │ │ +603 │ │ │ │ +604 template │ │ │ │ +_6_0_5 _S_L_L_i_s_t_<_T_,_A_>_:_:_~_S_L_L_i_s_t() │ │ │ │ +606 { │ │ │ │ +607 clear(); │ │ │ │ +608 } │ │ │ │ +609 │ │ │ │ +610 template │ │ │ │ +_6_1_1 bool _S_L_L_i_s_t_<_T_,_A_>_:_:_o_p_e_r_a_t_o_r_=_=(const _S_L_L_i_s_t& other) const │ │ │ │ +612 { │ │ │ │ +613 if(_s_i_z_e()!=other._s_i_z_e()) │ │ │ │ +614 return false; │ │ │ │ +615 for(_c_o_n_s_t___i_t_e_r_a_t_o_r iter=begin(), oiter=other._b_e_g_i_n(); │ │ │ │ +616 iter != end(); ++iter, ++oiter) │ │ │ │ +617 if(*iter!=*oiter) │ │ │ │ +618 return false; │ │ │ │ +619 return true; │ │ │ │ +620 } │ │ │ │ +621 │ │ │ │ +622 template │ │ │ │ +_6_2_3 bool _S_L_L_i_s_t_<_T_,_A_>_:_:_o_p_e_r_a_t_o_r_!_=(const _S_L_L_i_s_t& other) const │ │ │ │ +624 { │ │ │ │ +625 if(_s_i_z_e()==other._s_i_z_e()) { │ │ │ │ +626 for(_c_o_n_s_t___i_t_e_r_a_t_o_r iter=begin(), oiter=other._b_e_g_i_n(); │ │ │ │ +627 iter != end(); ++iter, ++oiter) │ │ │ │ +628 if(*iter!=*oiter) │ │ │ │ +629 return true; │ │ │ │ +630 return false; │ │ │ │ +631 }else │ │ │ │ +632 return true; │ │ │ │ +633 } │ │ │ │ +634 template │ │ │ │ +_6_3_5 _S_L_L_i_s_t_<_T_,_A_>& _S_L_L_i_s_t_<_T_,_A_>_:_:_o_p_e_r_a_t_o_r_=(const _S_L_L_i_s_t_<_T_,_A_>& other) │ │ │ │ +636 { │ │ │ │ +637 clear(); │ │ │ │ +638 copyElements(other); │ │ │ │ +639 return *this; │ │ │ │ +640 } │ │ │ │ +641 │ │ │ │ +642 template │ │ │ │ +_6_4_3 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_p_u_s_h___b_a_c_k(const _M_e_m_b_e_r_T_y_p_e& item) │ │ │ │ +644 { │ │ │ │ +645 assert(size_>0 || tail_==&beforeHead_); │ │ │ │ +646 tail_->next_ = allocator_.allocate(1); │ │ │ │ +647 assert(size_>0 || tail_==&beforeHead_); │ │ │ │ +648 tail_ = tail_->next_; │ │ │ │ +649 ::new (static_cast(&(tail_->item_)))T(item); │ │ │ │ +650 tail_->next_=0; │ │ │ │ +651 assert(tail_->next_==0); │ │ │ │ +652 ++size_; │ │ │ │ +653 } │ │ │ │ +654 │ │ │ │ +655 template │ │ │ │ +656 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_i_n_s_e_r_t_A_f_t_e_r(Element* current, const T& item) │ │ │ │ +657 { │ │ │ │ +658 assert(current); │ │ │ │ +659 │ │ │ │ +660#ifndef NDEBUG │ │ │ │ +661 bool changeTail = (current == tail_); │ │ │ │ +662#endif │ │ │ │ +663 │ │ │ │ +664 // Save old next element │ │ │ │ +665 Element* tmp = current->next_; │ │ │ │ +666 │ │ │ │ +667 assert(!changeTail || !tmp); │ │ │ │ +668 │ │ │ │ +669 // Allocate space │ │ │ │ +670 current->next_ = allocator_.allocate(1); │ │ │ │ +671 │ │ │ │ +672 // Use copy constructor to initialize memory │ │ │ │ +673 std::allocator_traits::construct(allocator_, current->next_, │ │ │ │ +Element(item,tmp)); │ │ │ │ +674 │ │ │ │ +675 //::new(static_cast(&(current->next_->item_))) T(item); │ │ │ │ +676 │ │ │ │ +677 if(!current->next_->next_) { │ │ │ │ +678 // Update tail │ │ │ │ +679 assert(changeTail); │ │ │ │ +680 tail_ = current->next_; │ │ │ │ +681 } │ │ │ │ +682 ++size_; │ │ │ │ +683 assert(!tail_->next_); │ │ │ │ +684 } │ │ │ │ +685 │ │ │ │ +686 template │ │ │ │ +_6_8_7 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_p_u_s_h___f_r_o_n_t(const _M_e_m_b_e_r_T_y_p_e& item) │ │ │ │ +688 { │ │ │ │ +689 if(tail_ == &beforeHead_) { │ │ │ │ +690 // list was empty │ │ │ │ +691 beforeHead_.next_ = tail_ = allocator_.allocate(1, 0); │ │ │ │ +692 ::new(static_cast(&beforeHead_.next_->item_))T(item); │ │ │ │ +693 beforeHead_.next_->next_=0; │ │ │ │ +694 }else{ │ │ │ │ +695 Element* added = allocator_.allocate(1, 0); │ │ │ │ +696 ::new(static_cast(&added->item_))T(item); │ │ │ │ +697 added->next_=beforeHead_.next_; │ │ │ │ +698 beforeHead_.next_=added; │ │ │ │ +699 } │ │ │ │ +700 assert(tail_->next_==0); │ │ │ │ +701 ++size_; │ │ │ │ +702 } │ │ │ │ +703 │ │ │ │ +704 │ │ │ │ +705 template │ │ │ │ +706 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_d_e_l_e_t_e_N_e_x_t(Element* current) │ │ │ │ +707 { │ │ │ │ +708 this->template deleteNext(current); │ │ │ │ +709 } │ │ │ │ +710 │ │ │ │ +711 template │ │ │ │ +712 template │ │ │ │ +713 inline void SLList::deleteNext(Element* current) │ │ │ │ +714 { │ │ │ │ +715 assert(current->next_); │ │ │ │ +716 Element* next = current->next_; │ │ │ │ +717 │ │ │ │ +718 if(watchForTail) │ │ │ │ +719 if(next == tail_) { │ │ │ │ +720 // deleting last element changes tail! │ │ │ │ +721 tail_ = current; │ │ │ │ +722 } │ │ │ │ +723 │ │ │ │ +724 current->next_ = next->next_; │ │ │ │ +725 std::allocator_traits::destroy(allocator_, next); │ │ │ │ +726 allocator_.deallocate(next, 1); │ │ │ │ +727 --size_; │ │ │ │ +728 assert(!watchForTail || &beforeHead_ != tail_ || size_==0); │ │ │ │ +729 } │ │ │ │ +730 │ │ │ │ +731 template │ │ │ │ +_7_3_2 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_p_o_p___f_r_o_n_t() │ │ │ │ +733 { │ │ │ │ +734 deleteNext(&beforeHead_); │ │ │ │ +735 } │ │ │ │ +736 │ │ │ │ +737 template │ │ │ │ +_7_3_8 inline void _S_L_L_i_s_t_<_T_,_A_>_:_:_c_l_e_a_r() │ │ │ │ +739 { │ │ │ │ +740 while(beforeHead_.next_ ) { │ │ │ │ +741 this->template deleteNext(&beforeHead_); │ │ │ │ +742 } │ │ │ │ +743 │ │ │ │ +744 assert(size_==0); │ │ │ │ +745 // update the tail! │ │ │ │ +746 tail_ = &beforeHead_; │ │ │ │ +747 } │ │ │ │ +748 │ │ │ │ +749 template │ │ │ │ +_7_5_0 inline bool _S_L_L_i_s_t_<_T_,_A_>_:_:_e_m_p_t_y() const │ │ │ │ +751 { │ │ │ │ +752 return (&beforeHead_ == tail_); │ │ │ │ +753 } │ │ │ │ +754 │ │ │ │ +755 template │ │ │ │ +_7_5_6 inline int _S_L_L_i_s_t_<_T_,_A_>_:_:_s_i_z_e() const │ │ │ │ +757 { │ │ │ │ +758 return size_; │ │ │ │ +759 } │ │ │ │ +760 │ │ │ │ +761 template │ │ │ │ +_7_6_2 inline _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_b_e_g_i_n() │ │ │ │ +763 { │ │ │ │ +764 return _i_t_e_r_a_t_o_r(beforeHead_.next_, this); │ │ │ │ +765 } │ │ │ │ +766 │ │ │ │ +767 template │ │ │ │ +_7_6_8 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_b_e_g_i_n() const │ │ │ │ +769 { │ │ │ │ +770 return _c_o_n_s_t___i_t_e_r_a_t_o_r(beforeHead_.next_); │ │ │ │ +771 } │ │ │ │ +772 │ │ │ │ +773 template │ │ │ │ +_7_7_4 inline _S_L_L_i_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_e_n_d() │ │ │ │ +775 { │ │ │ │ +776 return _i_t_e_r_a_t_o_r(); │ │ │ │ +777 } │ │ │ │ +778 │ │ │ │ +779 template │ │ │ │ +_7_8_0 inline _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_e_n_d_M_o_d_i_f_y() │ │ │ │ +781 { │ │ │ │ +782 return _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>(_i_t_e_r_a_t_o_r(tail_, this),_i_t_e_r_a_t_o_r()); │ │ │ │ +783 } │ │ │ │ +784 │ │ │ │ +785 │ │ │ │ +786 template │ │ │ │ +_7_8_7 inline _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_b_e_g_i_n_M_o_d_i_f_y() │ │ │ │ +788 { │ │ │ │ +789 return _S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_<_T_,_A_>(_i_t_e_r_a_t_o_r(&beforeHead_, this), │ │ │ │ +790 _i_t_e_r_a_t_o_r(beforeHead_.next_, this)); │ │ │ │ +791 } │ │ │ │ +792 │ │ │ │ +793 template │ │ │ │ +_7_9_4 inline _S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_<_T_,_A_> _S_L_L_i_s_t_<_T_,_A_>_:_:_e_n_d() const │ │ │ │ +795 { │ │ │ │ +796 return _c_o_n_s_t___i_t_e_r_a_t_o_r(); │ │ │ │ +797 } │ │ │ │ +798 │ │ │ │ +800} │ │ │ │ +801#endif │ │ │ │ +_i_t_e_r_a_t_o_r_f_a_c_a_d_e_s_._h_h │ │ │ │ +This file implements iterator facade classes for writing stl conformant │ │ │ │ +iterators. │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_p_u_s_h___f_r_o_n_t │ │ │ │ +void push_front(const MemberType &item) │ │ │ │ +Add a new entry to the beginning of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:687 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListConstIterator< T, A > &other) const │ │ │ │ +Equality test for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:406 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_p_u_s_h___b_a_c_k │ │ │ │ +void push_back(const MemberType &item) │ │ │ │ +Add a new entry to the end of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:643 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_e_n_d_M_o_d_i_f_y │ │ │ │ +ModifyIterator endModify() │ │ │ │ +Get an iterator capable of deleting and inserting elements. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:780 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r │ │ │ │ +SLListModifyIterator() │ │ │ │ +DDeeffiinniittiioonn sllist.hh:438 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_E_l_e_m_e_n_t_:_:_E_l_e_m_e_n_t │ │ │ │ +Element() │ │ │ │ +DDeeffiinniittiioonn sllist.hh:557 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_d_e_r_e_f_e_r_e_n_c_e │ │ │ │ +T & dereference() const │ │ │ │ +Dereferencing function for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:294 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_o_p_e_r_a_t_o_r_!_= │ │ │ │ +bool operator!=(const SLList &sl) const │ │ │ │ +DDeeffiinniittiioonn sllist.hh:623 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_E_l_e_m_e_n_t_:_:_i_t_e_m__ │ │ │ │ +MemberType item_ │ │ │ │ +The element we hold. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:212 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListConstIterator(typename SLList< T, A >::Element *item) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:380 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_A_l_l_o_c_a_t_o_r │ │ │ │ +typename std::allocator_traits< A >::template rebind_alloc< Element > Allocator │ │ │ │ +The allocator to use. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:64 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_i_n_s_e_r_t_A_f_t_e_r │ │ │ │ +void insertAfter(const T &v) const │ │ │ │ +Insert an element in the underlying list after the current position. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:342 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_i_t_e_r_a_t_o_r │ │ │ │ +SLListIterator< T, A > iterator │ │ │ │ +The mutable iterator of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:69 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListConstIterator(const SLListModifyIterator< T, A > &other) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:388 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListIterator() │ │ │ │ +DDeeffiinniittiioonn sllist.hh:282 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_E_l_e_m_e_n_t_:_:_~_E_l_e_m_e_n_t │ │ │ │ +~Element() │ │ │ │ +DDeeffiinniittiioonn sllist.hh:562 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const SLList &sl) const │ │ │ │ +DDeeffiinniittiioonn sllist.hh:611 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_d_e_l_e_t_e_N_e_x_t │ │ │ │ +void deleteNext() const │ │ │ │ +Delete the entry after the current position. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:353 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_S_L_L_i_s_t │ │ │ │ +SLList(const SLList< T, A > &other) │ │ │ │ +Copy constructor. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:577 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListModifyIterator< T, A > &other) const │ │ │ │ +Equality test for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:324 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_d_e_r_e_f_e_r_e_n_c_e │ │ │ │ +T & dereference() const │ │ │ │ +Dereferencing function for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:446 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_s_i_z_e │ │ │ │ +int size() const │ │ │ │ +Get the number of elements the list contains. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:756 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_b_e_g_i_n │ │ │ │ +const_iterator begin() const │ │ │ │ +Get an iterator pointing to the first element in the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:768 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_e_n_d │ │ │ │ +iterator end() │ │ │ │ +Get an iterator pointing to the end of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:774 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_c_l_e_a_r │ │ │ │ +void clear() │ │ │ │ +Remove all elements from the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:738 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_S_L_L_i_s_t │ │ │ │ +SLList(const SLList< T1, A1 > &other) │ │ │ │ +Copy constructor with type conversion. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:585 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_M_e_m_b_e_r_T_y_p_e │ │ │ │ +T MemberType │ │ │ │ +The type we store. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:59 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListModifyIterator< T, A > &other) const │ │ │ │ +Test whether another iterator is equal. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:478 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_b_e_g_i_n_M_o_d_i_f_y │ │ │ │ +ModifyIterator beginModify() │ │ │ │ +Get an iterator capable of deleting and inserting elements. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:787 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ +SLList< T, A > & operator=(const SLList< T, A > &other) │ │ │ │ +Assignment operator. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:635 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListConstIterator(const SLListIterator< T, A > &other) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:384 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_c_o_n_s_t___i_t_e_r_a_t_o_r │ │ │ │ +SLListConstIterator< T, A > const_iterator │ │ │ │ +The constant iterator of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:74 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_e_m_p_t_y │ │ │ │ +bool empty() const │ │ │ │ +Check whether the list is empty. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:750 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListConstIterator() │ │ │ │ +DDeeffiinniittiioonn sllist.hh:376 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListConstIterator< T, A > &other) const │ │ │ │ +Equality test for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:304 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListConstIterator< T, A > &other) const │ │ │ │ +Test whether another iterator is equal. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:456 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_M_o_d_i_f_y_I_t_e_r_a_t_o_r │ │ │ │ +SLListModifyIterator< T, A > ModifyIterator │ │ │ │ +The type of the iterator capable of deletion and insertion. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:103 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_e_n_d │ │ │ │ +const_iterator end() const │ │ │ │ +Get an iterator pointing to the end of the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:794 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_S_L_L_i_s_t │ │ │ │ +SLList() │ │ │ │ +Constructor. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:568 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_i_n_s_e_r_t │ │ │ │ +void insert(const T &v) │ │ │ │ +Insert an element at the current position. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:505 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListIterator(typename SLList< T, A >::Element *item, SLList< T, A > *sllist) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:277 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r │ │ │ │ +SLListModifyIterator(SLListIterator< T, A > beforeIterator, SLListIterator< T, │ │ │ │ +A > _iterator) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:433 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_p_o_p___f_r_o_n_t │ │ │ │ +void pop_front() │ │ │ │ +Remove the first item in the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:732 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_i_n_c_r_e_m_e_n_t │ │ │ │ +void increment() │ │ │ │ +Increment function for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:332 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r │ │ │ │ +SLListIterator(const SLListModifyIterator< T, A > &other) │ │ │ │ +DDeeffiinniittiioonn sllist.hh:286 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_s_i_z_e___t_y_p_e │ │ │ │ +A::size_type size_type │ │ │ │ +The size type. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:54 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_r_e_m_o_v_e │ │ │ │ +void remove() │ │ │ │ +Delete the entry at the current position. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:518 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_d_e_r_e_f_e_r_e_n_c_e │ │ │ │ +const T & dereference() const │ │ │ │ +Dereferencing function for the facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:396 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_E_l_e_m_e_n_t_:_:_n_e_x_t__ │ │ │ │ +Element * next_ │ │ │ │ +The next element in the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:208 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_i_n_c_r_e_m_e_n_t │ │ │ │ +void increment() │ │ │ │ +Increment function for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:486 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r_:_:_i_n_c_r_e_m_e_n_t │ │ │ │ +void increment() │ │ │ │ +Increment function for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:414 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_~_S_L_L_i_s_t │ │ │ │ +~SLList() │ │ │ │ +Destructor. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:605 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListIterator< T, A > &other) const │ │ │ │ +Test whether another iterator is equal. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:467 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_:_:_b_e_g_i_n │ │ │ │ +iterator begin() │ │ │ │ +Get an iterator pointing to the first element in the list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:762 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r_:_:_e_q_u_a_l_s │ │ │ │ +bool equals(const SLListIterator< T, A > &other) const │ │ │ │ +Equality test for the iterator facade. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:314 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:278 │ │ │ │ +_D_u_n_e │ │ │ │ +Dune namespace. │ │ │ │ +DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ +_D_u_n_e_:_:_p_u_s_h___b_a_c_k │ │ │ │ +constexpr std::integer_sequence< T, II..., T(IN)> push_back(std:: │ │ │ │ +integer_sequence< T, II... >, std::integral_constant< T, IN >={}) │ │ │ │ +Append an index IN to the back of the sequence. │ │ │ │ +DDeeffiinniittiioonn integersequence.hh:69 │ │ │ │ +_D_u_n_e_:_:_s_i_z_e │ │ │ │ +constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std:: │ │ │ │ +integer_sequence< T, II... >) │ │ │ │ +Return the size of the sequence. │ │ │ │ +DDeeffiinniittiioonn integersequence.hh:75 │ │ │ │ +_D_u_n_e_:_:_F_o_r_w_a_r_d_I_t_e_r_a_t_o_r_F_a_c_a_d_e │ │ │ │ +Base class for stl conformant forward iterators. │ │ │ │ +DDeeffiinniittiioonn iteratorfacades.hh:142 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_I_t_e_r_a_t_o_r │ │ │ │ +A mutable iterator for the SLList. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:271 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_C_o_n_s_t_I_t_e_r_a_t_o_r │ │ │ │ +A constant iterator for the SLList. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:371 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t_M_o_d_i_f_y_I_t_e_r_a_t_o_r │ │ │ │ +A mutable iterator for the SLList. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:429 │ │ │ │ +_D_u_n_e_:_:_S_L_L_i_s_t │ │ │ │ +A single linked list. │ │ │ │ +DDeeffiinniittiioonn sllist.hh:44 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00014.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: vc.hh File Reference │ │ │ +dune-common: ios_state.cc File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -69,25 +69,27 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -
vc.hh File Reference
│ │ │ +
│ │ │ +Namespaces
│ │ │ +
ios_state.cc File Reference
│ │ │
│ │ │
│ │ │ - │ │ │ -

Compatibility header for including <Vc/Vc> │ │ │ -More...

│ │ │ - │ │ │ -

Go to the source code of this file.

│ │ │ -

Detailed Description

│ │ │ -

Compatibility header for including <Vc/Vc>

│ │ │ -

Certain versions (1.3.2) of Vc (https://github.com/VcDevel/Vc) have a problem with certain compiler versions (g++ 7.2.0) in c++17 mode, see #88.

│ │ │ -
│ │ │ +
#include <dune/common/ios_state.hh>
│ │ │ +
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -vc.hh File Reference │ │ │ │ -Compatibility header for including _M_o_r_e_._._. │ │ │ │ -_G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Compatibility header for including │ │ │ │ -Certain versions (1.3.2) of Vc (_h_t_t_p_s_:_/_/_g_i_t_h_u_b_._c_o_m_/_V_c_D_e_v_e_l_/_V_c) have a problem │ │ │ │ -with certain compiler versions (g++ 7.2.0) in c++17 mode, see #88. │ │ │ │ +_N_a_m_e_s_p_a_c_e_s │ │ │ │ +ios_state.cc File Reference │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_i_o_s___s_t_a_t_e_._h_h> │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _D_u_n_e │ │ │ │ +  _D_u_n_e namespace. │ │ │ │ +  │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00017.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: unused.hh File Reference │ │ │ +dune-common: parameterizedobject.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,31 +70,38 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -Macros
│ │ │ -
unused.hh File Reference
│ │ │ +Classes | │ │ │ +Namespaces
│ │ │ +
parameterizedobject.hh File Reference
│ │ │ │ │ │
│ │ │ - │ │ │ -

Definition of the DUNE_UNUSED_PARAMETER macro. │ │ │ -More...

│ │ │ - │ │ │ +
#include <functional>
│ │ │ +#include <map>
│ │ │ +#include <memory>
│ │ │ +#include <dune/common/exceptions.hh>
│ │ │ +#include <dune/common/typeutilities.hh>
│ │ │ +
│ │ │

Go to the source code of this file.

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

│ │ │ -Macros

#define DUNE_UNUSED_PARAMETER(param)   static_cast<void>(param)
 

│ │ │ +Classes

class  Dune::ParameterizedObjectFactory< TypeT(Args...), KeyT >
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ -

Detailed Description

│ │ │ -

Definition of the DUNE_UNUSED_PARAMETER macro.

│ │ │ -
│ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,17 +1,23 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_M_a_c_r_o_s │ │ │ │ -unused.hh File Reference │ │ │ │ -Definition of the DUNE_UNUSED_PARAMETER macro. _M_o_r_e_._._. │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ +parameterizedobject.hh File Reference │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_u_t_i_l_i_t_i_e_s_._h_h> │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -MMaaccrrooss │ │ │ │ -#define  _D_U_N_E___U_N_U_S_E_D___P_A_R_A_M_E_T_E_R(param)   static_cast(param) │ │ │ │ +CCllaasssseess │ │ │ │ +class   _D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _> │ │ │ │ +  │ │ │ │ +NNaammeessppaacceess │ │ │ │ +namespace   _D_u_n_e │ │ │ │ +  _D_u_n_e namespace. │ │ │ │   │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Definition of the DUNE_UNUSED_PARAMETER macro. │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: unused.hh Source File │ │ │ +dune-common: parameterizedobject.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,26 +74,178 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ -
unused.hh
│ │ │ +
parameterizedobject.hh
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ -
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ +Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
│ │ │ +
2// vi: set et ts=4 sw=4 sts=4:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_COMMON_UNUSED_HH
│ │ │ -
6#define DUNE_COMMON_UNUSED_HH
│ │ │ +
5#ifndef DUNE_COMMON_PARAMETERIZEDOBJECT_HH
│ │ │ +
6#define DUNE_COMMON_PARAMETERIZEDOBJECT_HH
│ │ │
7
│ │ │ -
21#define DUNE_UNUSED_PARAMETER(param) static_cast<void>(param)
│ │ │ -
22#endif
│ │ │ +
8#include <functional>
│ │ │ +
9#include <map>
│ │ │ +
10#include <memory>
│ │ │ +
11
│ │ │ + │ │ │ + │ │ │ +
14
│ │ │ +
15namespace Dune {
│ │ │ +
16
│ │ │ +
34template<typename Signature,
│ │ │ +
35 typename KeyT = std::string>
│ │ │ + │ │ │ +
37
│ │ │ +
38template<typename TypeT,
│ │ │ +
39 typename KeyT,
│ │ │ +
40 typename... Args>
│ │ │ +
│ │ │ +
41class ParameterizedObjectFactory<TypeT(Args...), KeyT>
│ │ │ +
42{
│ │ │ +
43 public:
│ │ │ +
44
│ │ │ +
46 typedef KeyT Key;
│ │ │ +
47
│ │ │ +
49 using Type = TypeT;
│ │ │ +
50
│ │ │ +
51 protected:
│ │ │ +
52
│ │ │ +
53 using Creator = std::function<Type(Args...)>;
│ │ │ +
54
│ │ │ +
55 template<class F>
│ │ │ +
│ │ │ + │ │ │ +
57 -> decltype( std::declval<F>()(std::declval<Args>()...), std::true_type())
│ │ │ +
58 {
│ │ │ +
59 return {};
│ │ │ +
60 }
│ │ │ +
│ │ │ +
61
│ │ │ +
62 template<class F>
│ │ │ +
│ │ │ +
63 static constexpr std::false_type has_proper_signature(Dune::PriorityTag<0>)
│ │ │ +
64 {
│ │ │ +
65 return {};
│ │ │ +
66 }
│ │ │ +
│ │ │ +
67
│ │ │ +
68 public:
│ │ │ +
69
│ │ │ +
│ │ │ +
77 Type create(Key const& key, Args ... args) const {
│ │ │ +
78 typename Registry::const_iterator i = registry_.find(key);
│ │ │ +
79 if (i == registry_.end()) {
│ │ │ + │ │ │ +
81 "ParametrizedObjectFactory: key ``" <<
│ │ │ +
82 key << "'' not registered");
│ │ │ +
83 }
│ │ │ +
84 else return i->second(args...);
│ │ │ +
85 }
│ │ │ +
│ │ │ +
86
│ │ │ +
100 template<class Impl>
│ │ │ +
│ │ │ +
101 void define(Key const& key)
│ │ │ +
102 {
│ │ │ +
103 registry_[key] = DefaultCreator<Impl>();
│ │ │ +
104 }
│ │ │ +
│ │ │ +
105
│ │ │ +
119 template<class F,
│ │ │ +
120 typename std::enable_if<has_proper_signature<F>(PriorityTag<42>()), int>::type = 0>
│ │ │ +
│ │ │ +
121 void define(Key const& key, F&& f)
│ │ │ +
122 {
│ │ │ +
123 registry_[key] = f;
│ │ │ +
124 }
│ │ │ +
│ │ │ +
125
│ │ │ +
140 template<class Impl,
│ │ │ +
141 typename std::enable_if<
│ │ │ +
142 std::is_convertible<Impl, Type>::value
│ │ │ +
143 and not std::is_convertible<Impl, Creator>::value,
│ │ │ +
144 int>::type = 0>
│ │ │ +
│ │ │ +
145 void define(Key const& key, Impl&& t)
│ │ │ +
146 {
│ │ │ +
147 registry_[key] = [=](Args...) { return t;};
│ │ │ +
148 }
│ │ │ +
│ │ │ +
149
│ │ │ +
│ │ │ +
150 bool contains(Key const& key) const
│ │ │ +
151 {
│ │ │ +
152 return registry_.count(key);
│ │ │ +
153 }
│ │ │ +
│ │ │ +
154
│ │ │ +
155 private:
│ │ │ +
156
│ │ │ +
157 template<class T>
│ │ │ +
158 struct Tag{};
│ │ │ +
159
│ │ │ +
160 template<class Impl>
│ │ │ +
161 struct DefaultCreator
│ │ │ +
162 {
│ │ │ +
163 template<class... T>
│ │ │ +
164 Type operator()(T&&... args) const
│ │ │ +
165 {
│ │ │ +
166 return DefaultCreator::create(Tag<Type>(), PriorityTag<42>(), std::forward<T>(args)...);
│ │ │ +
167 }
│ │ │ +
168
│ │ │ +
169 template<class Target, class... T>
│ │ │ +
170 static Type create(Tag<Target>, PriorityTag<1>, T&& ... args) {
│ │ │ +
171 return Impl(std::forward<T>(args)...);
│ │ │ +
172 }
│ │ │ +
173
│ │ │ +
174 template<class Target, class... T>
│ │ │ +
175 static Type create(Tag<std::unique_ptr<Target>>, PriorityTag<2>, T&& ... args) {
│ │ │ +
176 return std::make_unique<Impl>(std::forward<T>(args)...);
│ │ │ +
177 }
│ │ │ +
178
│ │ │ +
179 template<class Target, class... T>
│ │ │ +
180 static Type create(Tag<std::shared_ptr<Target>>, PriorityTag<3>, T&& ... args) {
│ │ │ +
181 return std::make_shared<Impl>(std::forward<T>(args)...);
│ │ │ +
182 }
│ │ │ +
183
│ │ │ +
184 };
│ │ │ +
185
│ │ │ +
186 typedef std::map<Key, Creator> Registry;
│ │ │ +
187 Registry registry_;
│ │ │ +
188};
│ │ │ +
│ │ │ +
189
│ │ │ +
190
│ │ │ +
191
│ │ │ +
192} // end namespace Dune
│ │ │ +
193
│ │ │ +
194#endif // DUNE_COMMON_PARAMETERIZEDOBJECT_HH
│ │ │ +
Utilities for type computations, constraining overloads, ...
│ │ │ +
A few common exception classes.
│ │ │ +
#define DUNE_THROW(E, m)
Definition exceptions.hh:218
│ │ │ +
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ +
Default exception if a function was called while the object is not in a valid state for that function...
Definition exceptions.hh:281
│ │ │ +
A factory class for parameterized objects.
Definition parameterizedobject.hh:36
│ │ │ +
std::function< Type(Args...)> Creator
Definition parameterizedobject.hh:53
│ │ │ +
static constexpr auto has_proper_signature(Dune::PriorityTag< 1 >) -> decltype(std::declval< F >()(std::declval< Args >()...), std::true_type())
Definition parameterizedobject.hh:56
│ │ │ +
TypeT Type
The type of objects created by the factory.
Definition parameterizedobject.hh:49
│ │ │ +
void define(Key const &key, Impl &&t)
Registers a new type with a key.
Definition parameterizedobject.hh:145
│ │ │ +
KeyT Key
The typ of the keys.
Definition parameterizedobject.hh:46
│ │ │ +
Type create(Key const &key, Args ... args) const
Creates an object identified by a key from given parameters.
Definition parameterizedobject.hh:77
│ │ │ +
void define(Key const &key)
Registers a new type with a key.
Definition parameterizedobject.hh:101
│ │ │ +
void define(Key const &key, F &&f)
Registers a new creator with a key.
Definition parameterizedobject.hh:121
│ │ │ +
static constexpr std::false_type has_proper_signature(Dune::PriorityTag< 0 >)
Definition parameterizedobject.hh:63
│ │ │ +
bool contains(Key const &key) const
Definition parameterizedobject.hh:150
│ │ │ +
Helper class for tagging priorities.
Definition typeutilities.hh:73
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,20 +1,200 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -unused.hh │ │ │ │ +parameterizedobject.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ -2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ +1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- │ │ │ │ +2// vi: set et ts=4 sw=4 sts=4: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_COMMON_UNUSED_HH │ │ │ │ -6#define DUNE_COMMON_UNUSED_HH │ │ │ │ +5#ifndef DUNE_COMMON_PARAMETERIZEDOBJECT_HH │ │ │ │ +6#define DUNE_COMMON_PARAMETERIZEDOBJECT_HH │ │ │ │ 7 │ │ │ │ -_2_1#define DUNE_UNUSED_PARAMETER(param) static_cast(param) │ │ │ │ -22#endif │ │ │ │ +8#include │ │ │ │ +9#include │ │ │ │ +10#include │ │ │ │ +11 │ │ │ │ +12#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ +13#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_u_t_i_l_i_t_i_e_s_._h_h> │ │ │ │ +14 │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ +16 │ │ │ │ +34template │ │ │ │ +_3_6class _P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y; │ │ │ │ +37 │ │ │ │ +38template │ │ │ │ +_4_1class _P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y │ │ │ │ +42{ │ │ │ │ +43 public: │ │ │ │ +44 │ │ │ │ +_4_6 typedef KeyT _K_e_y; │ │ │ │ +47 │ │ │ │ +_4_9 using _T_y_p_e = TypeT; │ │ │ │ +50 │ │ │ │ +51 protected: │ │ │ │ +52 │ │ │ │ +_5_3 using _C_r_e_a_t_o_r = std::function<_T_y_p_e(Args...)>; │ │ │ │ +54 │ │ │ │ +55 template │ │ │ │ +_5_6 static constexpr auto _h_a_s___p_r_o_p_e_r___s_i_g_n_a_t_u_r_e(_D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g_<_1_>) │ │ │ │ +57 -> decltype( std::declval()(std::declval()...), std::true_type()) │ │ │ │ +58 { │ │ │ │ +59 return {}; │ │ │ │ +60 } │ │ │ │ +61 │ │ │ │ +62 template │ │ │ │ +_6_3 static constexpr std::false_type _h_a_s___p_r_o_p_e_r___s_i_g_n_a_t_u_r_e(_D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g_<_0_>) │ │ │ │ +64 { │ │ │ │ +65 return {}; │ │ │ │ +66 } │ │ │ │ +67 │ │ │ │ +68 public: │ │ │ │ +69 │ │ │ │ +_7_7 _T_y_p_e _c_r_e_a_t_e(_K_e_y const& key, Args ... args) const { │ │ │ │ +78 typename Registry::const_iterator i = registry_.find(key); │ │ │ │ +79 if (i == registry_.end()) { │ │ │ │ +80 _D_U_N_E___T_H_R_O_W(_D_u_n_e_:_:_I_n_v_a_l_i_d_S_t_a_t_e_E_x_c_e_p_t_i_o_n, │ │ │ │ +81 "ParametrizedObjectFactory: key ``" << │ │ │ │ +82 key << "'' not registered"); │ │ │ │ +83 } │ │ │ │ +84 else return i->second(args...); │ │ │ │ +85 } │ │ │ │ +86 │ │ │ │ +100 template │ │ │ │ +_1_0_1 void _d_e_f_i_n_e(_K_e_y const& key) │ │ │ │ +102 { │ │ │ │ +103 registry_[key] = DefaultCreator(); │ │ │ │ +104 } │ │ │ │ +105 │ │ │ │ +119 template(_P_r_i_o_r_i_t_y_T_a_g_<_4_2_>()), int>:: │ │ │ │ +type = 0> │ │ │ │ +_1_2_1 void _d_e_f_i_n_e(_K_e_y const& key, F&& f) │ │ │ │ +122 { │ │ │ │ +123 registry_[key] = f; │ │ │ │ +124 } │ │ │ │ +125 │ │ │ │ +140 template::value │ │ │ │ +143 and not std::is_convertible::value, │ │ │ │ +144 int>::type = 0> │ │ │ │ +_1_4_5 void _d_e_f_i_n_e(_K_e_y const& key, Impl&& t) │ │ │ │ +146 { │ │ │ │ +147 registry_[key] = [=](Args...) { return t;}; │ │ │ │ +148 } │ │ │ │ +149 │ │ │ │ +_1_5_0 bool _c_o_n_t_a_i_n_s(_K_e_y const& key) const │ │ │ │ +151 { │ │ │ │ +152 return registry_.count(key); │ │ │ │ +153 } │ │ │ │ +154 │ │ │ │ +155 private: │ │ │ │ +156 │ │ │ │ +157 template │ │ │ │ +158 struct Tag{}; │ │ │ │ +159 │ │ │ │ +160 template │ │ │ │ +161 struct DefaultCreator │ │ │ │ +162 { │ │ │ │ +163 template │ │ │ │ +164 Type operator()(T&&... args) const │ │ │ │ +165 { │ │ │ │ +166 return DefaultCreator::create(Tag(), PriorityTag<42>(), std:: │ │ │ │ +forward(args)...); │ │ │ │ +167 } │ │ │ │ +168 │ │ │ │ +169 template │ │ │ │ +170 static Type create(Tag, PriorityTag<1>, T&& ... args) { │ │ │ │ +171 return Impl(std::forward(args)...); │ │ │ │ +172 } │ │ │ │ +173 │ │ │ │ +174 template │ │ │ │ +175 static Type create(Tag>, PriorityTag<2>, T&& ... │ │ │ │ +args) { │ │ │ │ +176 return std::make_unique(std::forward(args)...); │ │ │ │ +177 } │ │ │ │ +178 │ │ │ │ +179 template │ │ │ │ +180 static Type create(Tag>, PriorityTag<3>, T&& ... │ │ │ │ +args) { │ │ │ │ +181 return std::make_shared(std::forward(args)...); │ │ │ │ +182 } │ │ │ │ +183 │ │ │ │ +184 }; │ │ │ │ +185 │ │ │ │ +186 typedef std::map Registry; │ │ │ │ +187 Registry registry_; │ │ │ │ +188}; │ │ │ │ +189 │ │ │ │ +190 │ │ │ │ +191 │ │ │ │ +192} // end namespace Dune │ │ │ │ +193 │ │ │ │ +194#endif // DUNE_COMMON_PARAMETERIZEDOBJECT_HH │ │ │ │ +_t_y_p_e_u_t_i_l_i_t_i_e_s_._h_h │ │ │ │ +Utilities for type computations, constraining overloads, ... │ │ │ │ +_e_x_c_e_p_t_i_o_n_s_._h_h │ │ │ │ +A few common exception classes. │ │ │ │ +_D_U_N_E___T_H_R_O_W │ │ │ │ +#define DUNE_THROW(E, m) │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:218 │ │ │ │ +_D_u_n_e │ │ │ │ +Dune namespace. │ │ │ │ +DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ +_D_u_n_e_:_:_I_n_v_a_l_i_d_S_t_a_t_e_E_x_c_e_p_t_i_o_n │ │ │ │ +Default exception if a function was called while the object is not in a valid │ │ │ │ +state for that function... │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:281 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y │ │ │ │ +A factory class for parameterized objects. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:36 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_C_r_e_a_t_o_r │ │ │ │ +std::function< Type(Args...)> Creator │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:53 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_h_a_s___p_r_o_p_e_r___s_i_g_n_a_t_u_r_e │ │ │ │ +static constexpr auto has_proper_signature(Dune::PriorityTag< 1 >) -> decltype │ │ │ │ +(std::declval< F >()(std::declval< Args >()...), std::true_type()) │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:56 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_T_y_p_e │ │ │ │ +TypeT Type │ │ │ │ +The type of objects created by the factory. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:49 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_d_e_f_i_n_e │ │ │ │ +void define(Key const &key, Impl &&t) │ │ │ │ +Registers a new type with a key. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:145 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_K_e_y │ │ │ │ +KeyT Key │ │ │ │ +The typ of the keys. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:46 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_c_r_e_a_t_e │ │ │ │ +Type create(Key const &key, Args ... args) const │ │ │ │ +Creates an object identified by a key from given parameters. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:77 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_d_e_f_i_n_e │ │ │ │ +void define(Key const &key) │ │ │ │ +Registers a new type with a key. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:101 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_d_e_f_i_n_e │ │ │ │ +void define(Key const &key, F &&f) │ │ │ │ +Registers a new creator with a key. │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:121 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_h_a_s___p_r_o_p_e_r___s_i_g_n_a_t_u_r_e │ │ │ │ +static constexpr std::false_type has_proper_signature(Dune::PriorityTag< 0 >) │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:63 │ │ │ │ +_D_u_n_e_:_:_P_a_r_a_m_e_t_e_r_i_z_e_d_O_b_j_e_c_t_F_a_c_t_o_r_y_<_ _T_y_p_e_T_(_A_r_g_s_._._._)_,_ _K_e_y_T_ _>_:_:_c_o_n_t_a_i_n_s │ │ │ │ +bool contains(Key const &key) const │ │ │ │ +DDeeffiinniittiioonn parameterizedobject.hh:150 │ │ │ │ +_D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g │ │ │ │ +Helper class for tagging priorities. │ │ │ │ +DDeeffiinniittiioonn typeutilities.hh:73 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00020.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typeutilities.hh File Reference │ │ │ +dune-common: bigunsignedint.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,52 +72,95 @@ │ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ Classes | │ │ │ Namespaces | │ │ │ -Typedefs
│ │ │ -
typeutilities.hh File Reference
│ │ │ +Macros | │ │ │ +Functions
│ │ │ +
bigunsignedint.hh File Reference
│ │ │ │ │ │
│ │ │ │ │ │ -

Utilities for type computations, constraining overloads, ... │ │ │ +

Portable very large unsigned integers. │ │ │ More...

│ │ │ -
#include <cstddef>
│ │ │ +
#include <algorithm>
│ │ │ +#include <iostream>
│ │ │ +#include <limits>
│ │ │ +#include <cstdint>
│ │ │ +#include <cstdlib>
│ │ │ #include <type_traits>
│ │ │ -#include <tuple>
│ │ │ +#include <dune/common/exceptions.hh>
│ │ │ +#include <dune/common/hash.hh>
│ │ │
│ │ │

Go to the source code of this file.

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

│ │ │ Classes

struct  Dune::PriorityTag< priority >
 Helper class for tagging priorities. More...
class  Dune::bigunsignedint< k >
 Portable very large unsigned integers. More...
 
struct  Dune::PriorityTag< 0 >
 Helper class for tagging priorities. More...
struct  Dune::IsNumber< bigunsignedint< k > >
 Declare big unsigned int is a number. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ Namespaces

namespace  Dune
 Dune namespace.
 
namespace  std
 STL namespace.
 
│ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Macros

#define DUNE_BINOP(OP)
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ -Typedefs

template<class This , class... T>
using Dune::disableCopyMove = std::enable_if_t< not Impl::disableCopyMoveHelper< This, T... >::value, int >
 Helper to disable constructor as copy and move constructor.
 

│ │ │ +Functions

template<int k>
std::ostream & Dune::operator<< (std::ostream &s, const bigunsignedint< k > &x)
 
template<int k>
bigunsignedint< k > Dune::operator+ (const bigunsignedint< k > &x, std::uintmax_t y)
 
template<int k>
bigunsignedint< k > Dune::operator- (const bigunsignedint< k > &x, std::uintmax_t y)
 
template<int k>
bigunsignedint< k > Dune::operator* (const bigunsignedint< k > &x, std::uintmax_t y)
 
template<int k>
bigunsignedint< k > Dune::operator/ (const bigunsignedint< k > &x, std::uintmax_t y)
 
template<int k>
bigunsignedint< k > Dune::operator% (const bigunsignedint< k > &x, std::uintmax_t y)
 
template<int k>
bigunsignedint< k > Dune::operator+ (std::uintmax_t x, const bigunsignedint< k > &y)
 
template<int k>
bigunsignedint< k > Dune::operator- (std::uintmax_t x, const bigunsignedint< k > &y)
 
template<int k>
bigunsignedint< k > Dune::operator* (std::uintmax_t x, const bigunsignedint< k > &y)
 
template<int k>
bigunsignedint< k > Dune::operator/ (std::uintmax_t x, const bigunsignedint< k > &y)
 
template<int k>
bigunsignedint< k > Dune::operator% (std::uintmax_t x, const bigunsignedint< k > &y)
 
│ │ │

Detailed Description

│ │ │ -

Utilities for type computations, constraining overloads, ...

│ │ │ -
Author
Carsten Gräser
│ │ │ +

Portable very large unsigned integers.

│ │ │ +
Author
Peter Bastian
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ @@ -1 +1 @@ │ │ │ │ -utf-8 │ │ │ │ +us-ascii │ │ │ ├── html2text {} │ │ │ │ @@ -1,36 +1,86 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ -typeutilities.hh File Reference │ │ │ │ -Utilities for type computations, constraining overloads, ... _M_o_r_e_._._. │ │ │ │ -#include │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _M_a_c_r_o_s | _F_u_n_c_t_i_o_n_s │ │ │ │ +bigunsignedint.hh File Reference │ │ │ │ +Portable very large unsigned integers. _M_o_r_e_._._. │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ #include │ │ │ │ -#include │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_h_a_s_h_._h_h> │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ CCllaasssseess │ │ │ │ -struct   _D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g_<_ _p_r_i_o_r_i_t_y_ _> │ │ │ │ -  Helper class for tagging priorities. _M_o_r_e_._._. │ │ │ │ + class   _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_ _k_ _> │ │ │ │ +  Portable very large unsigned integers. _M_o_r_e_._._. │ │ │ │   │ │ │ │ -struct   _D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g_<_ _0_ _> │ │ │ │ -  Helper class for tagging priorities. _M_o_r_e_._._. │ │ │ │ +struct   _D_u_n_e_:_:_I_s_N_u_m_b_e_r_<_ _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_ _k_ _>_ _> │ │ │ │ +  Declare big unsigned int is a number. _M_o_r_e_._._. │ │ │ │   │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _D_u_n_e │ │ │ │   _D_u_n_e namespace. │ │ │ │   │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_d_i_s_a_b_l_e_C_o_p_y_M_o_v_e = std::enable_if_t< not Impl:: │ │ │ │ - disableCopyMoveHelper< This, T... >::value, int > │ │ │ │ -  Helper to disable constructor as copy and move constructor. │ │ │ │ +namespace   _s_t_d │ │ │ │ +  STL namespace. │ │ │ │ +  │ │ │ │ +MMaaccrrooss │ │ │ │ +#define  _D_U_N_E___B_I_N_O_P(OP) │ │ │ │ +  │ │ │ │ +FFuunnccttiioonnss │ │ │ │ +template │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &s, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &x) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k > &x, std:: │ │ │ │ + uintmax_t y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_- (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k > &x, std:: │ │ │ │ + uintmax_t y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k > &x, std:: │ │ │ │ + uintmax_t y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k > &x, std:: │ │ │ │ + uintmax_t y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_% (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k > &x, std:: │ │ │ │ + uintmax_t y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ (std::uintmax_t x, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_- (std::uintmax_t x, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (std::uintmax_t x, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (std::uintmax_t x, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &y) │ │ │ │ +  │ │ │ │ +template │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t< k >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_% (std::uintmax_t x, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t< k │ │ │ │ + > &y) │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Utilities for type computations, constraining overloads, ... │ │ │ │ +Portable very large unsigned integers. │ │ │ │ Author │ │ │ │ - Carsten Gräser │ │ │ │ + Peter Bastian │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typeutilities.hh Source File │ │ │ +dune-common: bigunsignedint.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,77 +74,799 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -
typeutilities.hh
│ │ │ +
bigunsignedint.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_COMMON_TYPEUTILITIES_HH
│ │ │ -
6#define DUNE_COMMON_TYPEUTILITIES_HH
│ │ │ -
7
│ │ │ -
8#include <cstddef>
│ │ │ -
9#include <type_traits>
│ │ │ -
10#include <tuple>
│ │ │ -
11
│ │ │ -
12
│ │ │ -
13namespace Dune {
│ │ │ -
14
│ │ │ -
22 namespace Impl
│ │ │ -
23 {
│ │ │ -
24
│ │ │ -
25 template<class This, class... T>
│ │ │ -
26 struct disableCopyMoveHelper : public std::is_base_of<This, std::tuple_element_t<0, std::tuple<std::decay_t<T>...>>>
│ │ │ -
27 {};
│ │ │ -
28
│ │ │ -
29 template<class This>
│ │ │ -
30 struct disableCopyMoveHelper<This> : public std::false_type
│ │ │ -
31 {};
│ │ │ -
32
│ │ │ -
33 } // namespace Impl
│ │ │ -
34
│ │ │ -
35
│ │ │ -
44 template<class This, class... T>
│ │ │ -
45 using disableCopyMove = std::enable_if_t< not Impl::disableCopyMoveHelper<This, T...>::value, int>;
│ │ │ -
46
│ │ │ +
5
│ │ │ +
6#ifndef DUNE_BIGUNSIGNEDINT_HH
│ │ │ +
7#define DUNE_BIGUNSIGNEDINT_HH
│ │ │ +
8
│ │ │ +
9#include <algorithm>
│ │ │ +
10#include <iostream>
│ │ │ +
11#include <limits>
│ │ │ +
12#include <cstdint>
│ │ │ +
13#include <cstdlib>
│ │ │ +
14#include <type_traits>
│ │ │ + │ │ │ +
16#include <dune/common/hash.hh>
│ │ │ +
17
│ │ │ +
24namespace Dune
│ │ │ +
25{
│ │ │ +
26#if HAVE_MPI
│ │ │ +
27 template<class K>
│ │ │ +
28 struct MPITraits;
│ │ │ +
29#endif
│ │ │ +
30
│ │ │ +
36 namespace Impl {
│ │ │ +
37
│ │ │ +
38 // numeric_limits_helper provides std::numeric_limits access to the internals
│ │ │ +
39 // of bigunsignedint. Previously, the correct specialization of std::numeric_limits
│ │ │ +
40 // was a friend of bigunsignedint, but that creates problems on recent versions
│ │ │ +
41 // of clang with the alternative libc++ library, because that library declares the
│ │ │ +
42 // base template of std::numeric_limits as a class and clang subsequently complains
│ │ │ +
43 // if the friend declaration uses 'struct'. Unfortunately, libstdc++ uses a struct,
│ │ │ +
44 // making it impossible to keep clang happy for both standard libraries.
│ │ │ +
45 // So we move the access helper functionality into a custom struct and simply let
│ │ │ +
46 // the numeric_limits specialization inherit from the helper.
│ │ │
47
│ │ │ -
48
│ │ │ -
71 template<std::size_t priority>
│ │ │ -
│ │ │ -
72 struct PriorityTag : public PriorityTag<priority-1>
│ │ │ -
73 {
│ │ │ -
74 static constexpr std::size_t value = priority;
│ │ │ -
75 };
│ │ │ -
│ │ │ -
76
│ │ │ -
85 template<>
│ │ │ -
│ │ │ -
86 struct PriorityTag<0>
│ │ │ -
87 {
│ │ │ -
88 static constexpr std::size_t value = 0;
│ │ │ -
89 };
│ │ │ -
│ │ │ +
48 template<typename T>
│ │ │ +
49 struct numeric_limits_helper
│ │ │ +
50 {
│ │ │ +
51
│ │ │ +
52 protected:
│ │ │ +
53
│ │ │ +
54 static std::uint16_t& digit(T& big_unsigned_int, std::size_t i)
│ │ │ +
55 {
│ │ │ +
56 return big_unsigned_int.digit[i];
│ │ │ +
57 }
│ │ │ +
58
│ │ │ +
59 };
│ │ │ +
60
│ │ │ +
61 }
│ │ │ +
62
│ │ │ +
72 template<int k>
│ │ │ +
│ │ │ + │ │ │ +
74 public:
│ │ │ +
75
│ │ │ +
76 // unsigned short is 16 bits wide, n is the number of digits needed
│ │ │ +
77 constexpr static int bits = std::numeric_limits<std::uint16_t>::digits;
│ │ │ +
78 constexpr static int n = k/bits+(k%bits!=0);
│ │ │ +
79 constexpr static int hexdigits = 4;
│ │ │ +
80 constexpr static int bitmask = 0xFFFF;
│ │ │ +
81 constexpr static int compbitmask = 0xFFFF0000;
│ │ │ +
82 constexpr static int overflowmask = 0x1;
│ │ │ +
83
│ │ │ + │ │ │ +
86
│ │ │ +
88 template<typename Signed>
│ │ │ +
89 bigunsignedint (Signed x, typename std::enable_if<std::is_integral<Signed>::value && std::is_signed<Signed>::value>::type* = 0);
│ │ │
90
│ │ │ -
91
│ │ │ -
92
│ │ │ -
93} // namespace Dune
│ │ │ -
94
│ │ │ -
95
│ │ │ +
92 bigunsignedint (std::uintmax_t x);
│ │ │ +
93
│ │ │ +
95 void print (std::ostream& s) const ;
│ │ │
96
│ │ │ -
97#endif // DUNE_COMMON_TYPEUTILITIES_HH
│ │ │ -
std::enable_if_t< not Impl::disableCopyMoveHelper< This, T... >::value, int > disableCopyMove
Helper to disable constructor as copy and move constructor.
Definition typeutilities.hh:45
│ │ │ + │ │ │ + │ │ │ +
100
│ │ │ + │ │ │ + │ │ │ +
104
│ │ │ + │ │ │ + │ │ │ +
108
│ │ │ + │ │ │ +
111
│ │ │ + │ │ │ + │ │ │ +
117
│ │ │ + │ │ │ + │ │ │ +
123
│ │ │ + │ │ │ + │ │ │ +
127
│ │ │ + │ │ │ + │ │ │ +
131
│ │ │ + │ │ │ + │ │ │ +
135
│ │ │ + │ │ │ +
138
│ │ │ +
139
│ │ │ +
141 bigunsignedint<k> operator<< (int i) const;
│ │ │ +
142
│ │ │ +
144 bigunsignedint<k> operator>> (int i) const;
│ │ │ +
145
│ │ │ +
146
│ │ │ +
148 bool operator< (const bigunsignedint<k>& x) const;
│ │ │ +
149
│ │ │ +
151 bool operator<= (const bigunsignedint<k>& x) const;
│ │ │ +
152
│ │ │ +
154 bool operator> (const bigunsignedint<k>& x) const;
│ │ │ +
155
│ │ │ +
157 bool operator>= (const bigunsignedint<k>& x) const;
│ │ │ +
158
│ │ │ +
160 bool operator== (const bigunsignedint<k>& x) const;
│ │ │ +
161
│ │ │ +
163 bool operator!= (const bigunsignedint<k>& x) const;
│ │ │ +
164
│ │ │ +
165
│ │ │ +
167 // operator unsigned int () const;
│ │ │ +
168 std::uint_least32_t touint() const;
│ │ │ +
174 double todouble() const;
│ │ │ +
175
│ │ │ +
176 friend class bigunsignedint<k/2>;
│ │ │ +
177 friend struct Impl::numeric_limits_helper< bigunsignedint<k> >;
│ │ │ +
178
│ │ │ +
│ │ │ +
179 inline friend std::size_t hash_value(const bigunsignedint& arg)
│ │ │ +
180 {
│ │ │ +
181 return hash_range(arg.digit,arg.digit + arg.n);
│ │ │ +
182 }
│ │ │ +
│ │ │ +
183
│ │ │ +
184 private:
│ │ │ +
185 std::uint16_t digit[n];
│ │ │ +
186#if HAVE_MPI
│ │ │ +
187 friend struct MPITraits<bigunsignedint<k> >;
│ │ │ +
188#endif
│ │ │ +
189 inline void assign(std::uintmax_t x);
│ │ │ +
190
│ │ │ +
191
│ │ │ +
192 } ;
│ │ │ +
│ │ │ +
193
│ │ │ +
194 // Constructors
│ │ │ +
195 template<int k>
│ │ │ +
│ │ │ + │ │ │ +
197 {
│ │ │ +
198 assign(0u);
│ │ │ +
199 }
│ │ │ +
│ │ │ +
200
│ │ │ +
201 template<int k>
│ │ │ +
202 template<typename Signed>
│ │ │ +
│ │ │ +
203 bigunsignedint<k>::bigunsignedint (Signed y, typename std::enable_if<std::is_integral<Signed>::value && std::is_signed<Signed>::value>::type*)
│ │ │ +
204 {
│ │ │ +
205 if (y < 0)
│ │ │ +
206 DUNE_THROW(Dune::Exception, "Trying to construct a Dune::bigunsignedint from a negative integer: " << y);
│ │ │ +
207 assign(y);
│ │ │ +
208 }
│ │ │ +
│ │ │ +
209
│ │ │ +
210 template<int k>
│ │ │ +
│ │ │ + │ │ │ +
212 {
│ │ │ +
213 assign(x);
│ │ │ +
214 }
│ │ │ +
│ │ │ +
215 template<int k>
│ │ │ +
216 void bigunsignedint<k>::assign(std::uintmax_t x)
│ │ │ +
217 {
│ │ │ +
218 static const int no=std::min(static_cast<int>(n),
│ │ │ +
219 static_cast<int>(std::numeric_limits<std::uintmax_t>::digits/bits));
│ │ │ +
220
│ │ │ +
221 for(int i=0; i<no; ++i) {
│ │ │ +
222 digit[i] = (x&bitmask);
│ │ │ +
223 x=x>>bits;
│ │ │ +
224 }
│ │ │ +
225 for (unsigned int i=no; i<n; i++) digit[i]=0;
│ │ │ +
226 }
│ │ │ +
227
│ │ │ +
228 // export
│ │ │ +
229 template<int k>
│ │ │ +
│ │ │ +
230 inline std::uint_least32_t bigunsignedint<k>::touint () const
│ │ │ +
231 {
│ │ │ +
232 return (digit[1]<<bits)+digit[0];
│ │ │ +
233 }
│ │ │ +
│ │ │ +
234
│ │ │ +
235 template<int k>
│ │ │ +
│ │ │ +
236 inline double bigunsignedint<k>::todouble() const
│ │ │ +
237 {
│ │ │ +
238 int firstInZeroRange=n;
│ │ │ +
239 for(int i=n-1; i>=0; --i)
│ │ │ +
240 if(digit[i]!=0)
│ │ │ +
241 break;
│ │ │ +
242 else
│ │ │ +
243 --firstInZeroRange;
│ │ │ +
244 int representableDigits=std::numeric_limits<double>::digits/bits;
│ │ │ +
245 int lastInRepresentableRange=0;
│ │ │ +
246 if(representableDigits<firstInZeroRange)
│ │ │ +
247 lastInRepresentableRange=firstInZeroRange-representableDigits;
│ │ │ +
248 double val=0;
│ │ │ +
249 for(int i=firstInZeroRange-1; i>=lastInRepresentableRange; --i)
│ │ │ +
250 val =val*(1<<bits)+digit[i];
│ │ │ +
251 return val*(1<<(bits*lastInRepresentableRange));
│ │ │ +
252 }
│ │ │ +
│ │ │ +
253 // print
│ │ │ +
254 template<int k>
│ │ │ +
│ │ │ +
255 inline void bigunsignedint<k>::print (std::ostream& s) const
│ │ │ +
256 {
│ │ │ +
257 bool leading=false;
│ │ │ +
258
│ │ │ +
259 // print from left to right
│ │ │ +
260 for (int i=n-1; i>=0; i--)
│ │ │ +
261 for (int d=hexdigits-1; d>=0; d--)
│ │ │ +
262 {
│ │ │ +
263 // extract one hex digit
│ │ │ +
264 int current = (digit[i]>>(d*4))&0xF;
│ │ │ +
265 if (current!=0)
│ │ │ +
266 {
│ │ │ +
267 // s.setf(std::ios::noshowbase);
│ │ │ +
268 s << std::hex << current;
│ │ │ +
269 leading = false;
│ │ │ +
270 }
│ │ │ +
271 else if (!leading) s << std::hex << current;
│ │ │ +
272 }
│ │ │ +
273 if (leading) s << "0";
│ │ │ +
274 s << std::dec;
│ │ │ +
275 }
│ │ │ +
│ │ │ +
276
│ │ │ +
277 template <int k>
│ │ │ +
│ │ │ +
278 inline std::ostream& operator<< (std::ostream& s, const bigunsignedint<k>& x)
│ │ │ +
279 {
│ │ │ +
280 x.print(s);
│ │ │ +
281 return s;
│ │ │ +
282 }
│ │ │ +
│ │ │ +
283
│ │ │ +
│ │ │ +
284 #define DUNE_BINOP(OP) \
│ │ │ +
285 template <int k> \
│ │ │ +
286 inline bigunsignedint<k> bigunsignedint<k>::operator OP (const bigunsignedint<k> &x) const \
│ │ │ +
287 { \
│ │ │ +
288 auto temp = *this; \
│ │ │ +
289 temp OP##= x; \
│ │ │ +
290 return temp; \
│ │ │ +
291 }
│ │ │ +
│ │ │ +
292
│ │ │ +
293 DUNE_BINOP(+)
│ │ │ +
294 DUNE_BINOP(-)
│ │ │ +
295 DUNE_BINOP(*)
│ │ │ +
296 DUNE_BINOP(/)
│ │ │ +
297 DUNE_BINOP(%)
│ │ │ +
298 DUNE_BINOP(&)
│ │ │ +
299 DUNE_BINOP(^)
│ │ │ +
300 DUNE_BINOP(|)
│ │ │ +
301
│ │ │ +
302 #undef DUNE_BINOP
│ │ │ +
303
│ │ │ +
304 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
306 {
│ │ │ +
307 std::uint_fast32_t overflow=0;
│ │ │ +
308
│ │ │ +
309 for (unsigned int i=0; i<n; i++)
│ │ │ +
310 {
│ │ │ +
311 std::uint_fast32_t sum = static_cast<std::uint_fast32_t>(digit[i]) + static_cast<std::uint_fast32_t>(x.digit[i]) + overflow;
│ │ │ +
312 digit[i] = sum&bitmask;
│ │ │ +
313 overflow = (sum>>bits)&overflowmask;
│ │ │ +
314 }
│ │ │ +
315 return *this;
│ │ │ +
316 }
│ │ │ +
│ │ │ +
317
│ │ │ +
318 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
320 {
│ │ │ +
321 std::int_fast32_t overflow=0;
│ │ │ +
322
│ │ │ +
323 for (unsigned int i=0; i<n; i++)
│ │ │ +
324 {
│ │ │ +
325 std::int_fast32_t diff = static_cast<std::int_fast32_t>(digit[i]) - static_cast<std::int_fast32_t>(x.digit[i]) - overflow;
│ │ │ +
326 if (diff>=0)
│ │ │ +
327 {
│ │ │ +
328 digit[i] = static_cast<std::uint16_t>(diff);
│ │ │ +
329 overflow = 0;
│ │ │ +
330 }
│ │ │ +
331 else
│ │ │ +
332 {
│ │ │ +
333 digit[i] = static_cast<std::uint16_t>(diff+bitmask+1);
│ │ │ +
334 overflow = 1;
│ │ │ +
335 }
│ │ │ +
336 }
│ │ │ +
337 return *this;
│ │ │ +
338 }
│ │ │ +
│ │ │ +
339
│ │ │ +
340 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
342 {
│ │ │ +
343 bigunsignedint<2*k> finalproduct(0);
│ │ │ +
344
│ │ │ +
345 for (unsigned int m=0; m<n; m++) // digit in right factor
│ │ │ +
346 {
│ │ │ +
347 bigunsignedint<2*k> singleproduct(0);
│ │ │ +
348 std::uint_fast32_t overflow(0);
│ │ │ +
349 for (unsigned int i=0; i<n; i++)
│ │ │ +
350 {
│ │ │ +
351 std::uint_fast32_t digitproduct = static_cast<std::uint_fast32_t>(digit[i])*static_cast<std::uint_fast32_t>(x.digit[m])+overflow;
│ │ │ +
352 singleproduct.digit[i+m] = static_cast<std::uint16_t>(digitproduct&bitmask);
│ │ │ +
353 overflow = (digitproduct>>bits)&bitmask;
│ │ │ +
354 }
│ │ │ +
355 finalproduct = finalproduct+singleproduct;
│ │ │ +
356 }
│ │ │ +
357
│ │ │ +
358 for (unsigned int i=0; i<n; i++) digit[i] = finalproduct.digit[i];
│ │ │ +
359 return *this;
│ │ │ +
360 }
│ │ │ +
│ │ │ +
361
│ │ │ +
362 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
364 {
│ │ │ +
365 std::uint_fast32_t overflow=1;
│ │ │ +
366
│ │ │ +
367 for (unsigned int i=0; i<n; i++)
│ │ │ +
368 {
│ │ │ +
369 std::uint_fast32_t sum = static_cast<std::uint_fast32_t>(digit[i]) + overflow;
│ │ │ +
370 digit[i] = sum&bitmask;
│ │ │ +
371 overflow = (sum>>bits)&overflowmask;
│ │ │ +
372 }
│ │ │ +
373 return *this;
│ │ │ +
374 }
│ │ │ +
│ │ │ +
375
│ │ │ +
376 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
378 {
│ │ │ +
379 if(x==0)
│ │ │ +
380 DUNE_THROW(Dune::MathError, "division by zero!");
│ │ │ +
381
│ │ │ +
382 // better slow than nothing
│ │ │ +
383 bigunsignedint<k> result(0);
│ │ │ +
384
│ │ │ +
385 while (*this>=x)
│ │ │ +
386 {
│ │ │ +
387 ++result;
│ │ │ +
388 *this -= x;
│ │ │ +
389 }
│ │ │ +
390
│ │ │ +
391 *this = result;
│ │ │ +
392 return *this;
│ │ │ +
393 }
│ │ │ +
│ │ │ +
394
│ │ │ +
395 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
397 {
│ │ │ +
398 // better slow than nothing
│ │ │ +
399 while (*this>=x)
│ │ │ +
400 {
│ │ │ +
401 *this -= x;
│ │ │ +
402 }
│ │ │ +
403
│ │ │ +
404 return *this;
│ │ │ +
405 }
│ │ │ +
│ │ │ +
406
│ │ │ +
407 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
409 {
│ │ │ +
410 for (unsigned int i=0; i<n; i++)
│ │ │ +
411 digit[i] = digit[i]&x.digit[i];
│ │ │ +
412 return *this;
│ │ │ +
413 }
│ │ │ +
│ │ │ +
414
│ │ │ +
415 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
417 {
│ │ │ +
418 for (unsigned int i=0; i<n; i++)
│ │ │ +
419 digit[i] = digit[i]^x.digit[i];
│ │ │ +
420 return *this;
│ │ │ +
421 }
│ │ │ +
│ │ │ +
422
│ │ │ +
423 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
425 {
│ │ │ +
426 for (unsigned int i=0; i<n; i++)
│ │ │ +
427 digit[i] = digit[i]|x.digit[i];
│ │ │ +
428 return *this;
│ │ │ +
429 }
│ │ │ +
│ │ │ +
430
│ │ │ +
431 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
433 {
│ │ │ +
434 bigunsignedint<k> result;
│ │ │ +
435 for (unsigned int i=0; i<n; i++)
│ │ │ +
436 result.digit[i] = ~digit[i];
│ │ │ +
437 return result;
│ │ │ +
438 }
│ │ │ +
439
│ │ │ +
440 template <int k>
│ │ │ + │ │ │ +
442 {
│ │ │ +
443 bigunsignedint<k> result(0);
│ │ │ +
444
│ │ │ +
445 // multiples of bits
│ │ │ +
446 int j=shift/bits;
│ │ │ +
447 for (int i=n-1-j; i>=0; i--)
│ │ │ +
448 result.digit[i+j] = digit[i];
│ │ │ +
449
│ │ │ +
450 // remainder
│ │ │ +
451 j=shift%bits;
│ │ │ +
452 for (int i=n-1; i>=0; i--)
│ │ │ +
453 {
│ │ │ +
454 unsigned int temp = result.digit[i];
│ │ │ +
455 temp = temp<<j;
│ │ │ +
456 result.digit[i] = static_cast<std::uint16_t>(temp&bitmask);
│ │ │ +
457 temp = temp>>bits;
│ │ │ +
458 if (i+1<(int)n)
│ │ │ +
459 result.digit[i+1] = result.digit[i+1]|temp;
│ │ │ +
460 }
│ │ │ +
461
│ │ │ +
462 return result;
│ │ │ +
463 }
│ │ │ +
│ │ │ +
464
│ │ │ +
465 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
467 {
│ │ │ +
468 bigunsignedint<k> result(0);
│ │ │ +
469
│ │ │ +
470 // multiples of bits
│ │ │ +
471 int j=shift/bits;
│ │ │ +
472 for (unsigned int i=0; i<n-j; i++)
│ │ │ +
473 result.digit[i] = digit[i+j];
│ │ │ +
474
│ │ │ +
475 // remainder
│ │ │ +
476 j=shift%bits;
│ │ │ +
477 for (unsigned int i=0; i<n; i++)
│ │ │ +
478 {
│ │ │ +
479 std::uint_fast32_t temp = result.digit[i];
│ │ │ +
480 temp = temp<<(bits-j);
│ │ │ +
481 result.digit[i] = static_cast<std::uint16_t>((temp&compbitmask)>>bits);
│ │ │ +
482 if (i>0)
│ │ │ +
483 result.digit[i-1] = result.digit[i-1] | (temp&bitmask);
│ │ │ +
484 }
│ │ │ +
485
│ │ │ +
486 return result;
│ │ │ +
487 }
│ │ │ +
│ │ │ +
488
│ │ │ +
489 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
491 {
│ │ │ +
492 for (unsigned int i=0; i<n; i++)
│ │ │ +
493 if (digit[i]!=x.digit[i]) return true;
│ │ │ +
494 return false;
│ │ │ +
495 }
│ │ │ +
│ │ │ +
496
│ │ │ +
497 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
499 {
│ │ │ +
500 return !((*this)!=x);
│ │ │ +
501 }
│ │ │ +
│ │ │ +
502
│ │ │ +
503 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
505 {
│ │ │ +
506 for (int i=n-1; i>=0; i--)
│ │ │ +
507 if (digit[i]<x.digit[i]) return true;
│ │ │ +
508 else if (digit[i]>x.digit[i]) return false;
│ │ │ +
509 return false;
│ │ │ +
510 }
│ │ │ +
│ │ │ +
511
│ │ │ +
512 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
514 {
│ │ │ +
515 for (int i=n-1; i>=0; i--)
│ │ │ +
516 if (digit[i]<x.digit[i]) return true;
│ │ │ +
517 else if (digit[i]>x.digit[i]) return false;
│ │ │ +
518 return true;
│ │ │ +
519 }
│ │ │ +
│ │ │ +
520
│ │ │ +
521 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
523 {
│ │ │ +
524 return !((*this)<=x);
│ │ │ +
525 }
│ │ │ +
│ │ │ +
526
│ │ │ +
527 template <int k>
│ │ │ +
│ │ │ + │ │ │ +
529 {
│ │ │ +
530 return !((*this)<x);
│ │ │ +
531 }
│ │ │ +
│ │ │ +
532
│ │ │ +
533
│ │ │ +
534 template <int k>
│ │ │ +
│ │ │ +
535 inline bigunsignedint<k> operator+ (const bigunsignedint<k>& x, std::uintmax_t y)
│ │ │ +
536 {
│ │ │ +
537 bigunsignedint<k> temp(y);
│ │ │ +
538 return x+temp;
│ │ │ +
539 }
│ │ │ +
│ │ │ +
540
│ │ │ +
541 template <int k>
│ │ │ +
│ │ │ +
542 inline bigunsignedint<k> operator- (const bigunsignedint<k>& x, std::uintmax_t y)
│ │ │ +
543 {
│ │ │ +
544 bigunsignedint<k> temp(y);
│ │ │ +
545 return x-temp;
│ │ │ +
546 }
│ │ │ +
│ │ │ +
547
│ │ │ +
548 template <int k>
│ │ │ +
│ │ │ +
549 inline bigunsignedint<k> operator* (const bigunsignedint<k>& x, std::uintmax_t y)
│ │ │ +
550 {
│ │ │ +
551 bigunsignedint<k> temp(y);
│ │ │ +
552 return x*temp;
│ │ │ +
553 }
│ │ │ +
│ │ │ +
554
│ │ │ +
555 template <int k>
│ │ │ +
│ │ │ +
556 inline bigunsignedint<k> operator/ (const bigunsignedint<k>& x, std::uintmax_t y)
│ │ │ +
557 {
│ │ │ +
558 bigunsignedint<k> temp(y);
│ │ │ +
559 return x/temp;
│ │ │ +
560 }
│ │ │ +
│ │ │ +
561
│ │ │ +
562 template <int k>
│ │ │ +
│ │ │ +
563 inline bigunsignedint<k> operator% (const bigunsignedint<k>& x, std::uintmax_t y)
│ │ │ +
564 {
│ │ │ +
565 bigunsignedint<k> temp(y);
│ │ │ +
566 return x%temp;
│ │ │ +
567 }
│ │ │ +
│ │ │ +
568
│ │ │ +
569 template <int k>
│ │ │ +
│ │ │ +
570 inline bigunsignedint<k> operator+ (std::uintmax_t x, const bigunsignedint<k>& y)
│ │ │ +
571 {
│ │ │ +
572 bigunsignedint<k> temp(x);
│ │ │ +
573 return temp+y;
│ │ │ +
574 }
│ │ │ +
│ │ │ +
575
│ │ │ +
576 template <int k>
│ │ │ +
│ │ │ +
577 inline bigunsignedint<k> operator- (std::uintmax_t x, const bigunsignedint<k>& y)
│ │ │ +
578 {
│ │ │ +
579 bigunsignedint<k> temp(x);
│ │ │ +
580 return temp-y;
│ │ │ +
581 }
│ │ │ +
│ │ │ +
582
│ │ │ +
583 template <int k>
│ │ │ +
│ │ │ +
584 inline bigunsignedint<k> operator* (std::uintmax_t x, const bigunsignedint<k>& y)
│ │ │ +
585 {
│ │ │ +
586 bigunsignedint<k> temp(x);
│ │ │ +
587 return temp*y;
│ │ │ +
588 }
│ │ │ +
│ │ │ +
589
│ │ │ +
590 template <int k>
│ │ │ +
│ │ │ +
591 inline bigunsignedint<k> operator/ (std::uintmax_t x, const bigunsignedint<k>& y)
│ │ │ +
592 {
│ │ │ +
593 bigunsignedint<k> temp(x);
│ │ │ +
594 return temp/y;
│ │ │ +
595 }
│ │ │ +
│ │ │ +
596
│ │ │ +
597 template <int k>
│ │ │ +
│ │ │ +
598 inline bigunsignedint<k> operator% (std::uintmax_t x, const bigunsignedint<k>& y)
│ │ │ +
599 {
│ │ │ +
600 bigunsignedint<k> temp(x);
│ │ │ +
601 return temp%y;
│ │ │ +
602 }
│ │ │ +
│ │ │ +
603
│ │ │ +
604 // Forward declare type-trait for numbers
│ │ │ +
605 template<class T> struct IsNumber;
│ │ │ +
606
│ │ │ +
608 template <int k>
│ │ │ +
609 struct IsNumber<bigunsignedint<k>> : public std::true_type {};
│ │ │ +
610
│ │ │ +
612}
│ │ │ +
613
│ │ │ +
614namespace std
│ │ │ +
615{
│ │ │ +
616 template<int k>
│ │ │ +
617 struct numeric_limits<Dune::bigunsignedint<k> >
│ │ │ +
618 : private Dune::Impl::numeric_limits_helper<Dune::bigunsignedint<k> > // for access to internal state of bigunsignedint
│ │ │ +
619 {
│ │ │ +
620 public:
│ │ │ +
621 static const bool is_specialized = true;
│ │ │ +
622
│ │ │ +
623 static Dune::bigunsignedint<k> min()
│ │ │ +
624 {
│ │ │ +
625 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
626 }
│ │ │ +
627
│ │ │ + │ │ │ +
629 {
│ │ │ + │ │ │ +
631 for(std::size_t i=0; i < Dune::bigunsignedint<k>::n; ++i)
│ │ │ +
632 // access internal state via the helper base class
│ │ │ +
633 Dune::Impl::numeric_limits_helper<Dune::bigunsignedint<k> >::
│ │ │ +
634 digit(max_,i)=std::numeric_limits<std::uint16_t>::max();
│ │ │ +
635 return max_;
│ │ │ +
636 }
│ │ │ +
637
│ │ │ +
638
│ │ │ +
639 static const int digits = Dune::bigunsignedint<k>::bits *
│ │ │ + │ │ │ +
641 static const bool is_signed = false;
│ │ │ +
642 static const bool is_integer = true;
│ │ │ +
643 static const bool is_exact = true;
│ │ │ +
644 static const int radix = 2;
│ │ │ +
645
│ │ │ +
646 static Dune::bigunsignedint<k> epsilon()
│ │ │ +
647 {
│ │ │ +
648 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
649 }
│ │ │ +
650
│ │ │ +
651 static Dune::bigunsignedint<k> round_error()
│ │ │ +
652 {
│ │ │ +
653 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
654 }
│ │ │ +
655
│ │ │ +
656 static const int min_exponent = 0;
│ │ │ +
657 static const int min_exponent10 = 0;
│ │ │ +
658 static const int max_exponent = 0;
│ │ │ +
659 static const int max_exponent10 = 0;
│ │ │ +
660
│ │ │ +
661 static const bool has_infinity = false;
│ │ │ +
662 static const bool has_quiet_NaN = false;
│ │ │ +
663 static const bool has_signaling_NaN = false;
│ │ │ +
664
│ │ │ +
665 static const float_denorm_style has_denorm = denorm_absent;
│ │ │ +
666 static const bool has_denorm_loss = false;
│ │ │ +
667
│ │ │ +
668 static Dune::bigunsignedint<k> infinity() noexcept
│ │ │ +
669 {
│ │ │ +
670 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
671 }
│ │ │ +
672
│ │ │ +
673 static Dune::bigunsignedint<k> quiet_NaN() noexcept
│ │ │ +
674 {
│ │ │ +
675 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
676 }
│ │ │ +
677
│ │ │ +
678 static Dune::bigunsignedint<k> signaling_NaN() noexcept
│ │ │ +
679 {
│ │ │ +
680 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
681 }
│ │ │ +
682
│ │ │ +
683 static Dune::bigunsignedint<k> denorm_min() noexcept
│ │ │ +
684 {
│ │ │ +
685 return static_cast<Dune::bigunsignedint<k> >(0);
│ │ │ +
686 }
│ │ │ +
687
│ │ │ +
688 static const bool is_iec559 = false;
│ │ │ +
689 static const bool is_bounded = true;
│ │ │ +
690 static const bool is_modulo = true;
│ │ │ +
691
│ │ │ +
692 static const bool traps = false;
│ │ │ +
693 static const bool tinyness_before = false;
│ │ │ +
694 static const float_round_style round_style = round_toward_zero;
│ │ │ +
695
│ │ │ +
696 };
│ │ │ +
697
│ │ │ +
698}
│ │ │ +
699
│ │ │ + │ │ │ +
701
│ │ │ +
702#endif
│ │ │ +
Support for calculating hash values of objects.
│ │ │ +
#define DUNE_DEFINE_HASH(template_args, type)
Defines the required struct specialization to make type hashable via Dune::hash.
Definition hash.hh:100
│ │ │ +
#define DUNE_HASH_TYPE(...)
Wrapper macro for the type to be hashed in DUNE_DEFINE_HASH.
Definition hash.hh:117
│ │ │ +
#define DUNE_HASH_TEMPLATE_ARGS(...)
Wrapper macro for the template arguments in DUNE_DEFINE_HASH.
Definition hash.hh:109
│ │ │ +
A few common exception classes.
│ │ │ +
constexpr auto max
Function object that returns the greater of the given values.
Definition hybridutilities.hh:484
│ │ │ +
bigunsignedint< k > & operator/=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:377
│ │ │ +
bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:549
│ │ │ +
bigunsignedint< k > operator<<(int i) const
left shift
Definition bigunsignedint.hh:441
│ │ │ +
bigunsignedint< k > & operator+=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:305
│ │ │ +
bigunsignedint< k > & operator^=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:416
│ │ │ +
std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
Definition bigunsignedint.hh:278
│ │ │ +
bool operator<=(const bigunsignedint< k > &x) const
less than or equal
Definition bigunsignedint.hh:513
│ │ │ +
void print(std::ostream &s) const
Print number in hex notation.
Definition bigunsignedint.hh:255
│ │ │ +
bool operator<(const bigunsignedint< k > &x) const
less than
Definition bigunsignedint.hh:504
│ │ │ +
bigunsignedint< k > operator/(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:556
│ │ │ +
bool operator==(const bigunsignedint< k > &x) const
equal
Definition bigunsignedint.hh:498
│ │ │ +
bool operator!=(const bigunsignedint< k > &x) const
not equal
Definition bigunsignedint.hh:490
│ │ │ +
bigunsignedint()
Construct uninitialized.
Definition bigunsignedint.hh:196
│ │ │ +
bigunsignedint< k > & operator&=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:408
│ │ │ +
bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:542
│ │ │ +
bool operator>=(const bigunsignedint< k > &x) const
greater or equal
Definition bigunsignedint.hh:528
│ │ │ +
bigunsignedint< k > operator>>(int i) const
right shift
Definition bigunsignedint.hh:466
│ │ │ +
bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:535
│ │ │ +
bigunsignedint< k > operator~() const
bitwise complement
Definition bigunsignedint.hh:432
│ │ │ +
bigunsignedint< k > & operator++()
prefix increment
Definition bigunsignedint.hh:363
│ │ │ +
bigunsignedint< k > & operator|=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:424
│ │ │ +
bigunsignedint< k > operator%(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:563
│ │ │ +
bigunsignedint< k > & operator%=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:396
│ │ │ +
double todouble() const
Convert to a double.
Definition bigunsignedint.hh:236
│ │ │ +
bigunsignedint< k > & operator-=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:319
│ │ │ +
bool operator>(const bigunsignedint< k > &x) const
greater than
Definition bigunsignedint.hh:522
│ │ │ +
bigunsignedint< k > & operator*=(const bigunsignedint< k > &x)
Definition bigunsignedint.hh:341
│ │ │ +
std::uint_least32_t touint() const
export to other types
Definition bigunsignedint.hh:230
│ │ │ +
#define DUNE_BINOP(OP)
Definition bigunsignedint.hh:284
│ │ │ +
#define DUNE_THROW(E, m)
Definition exceptions.hh:218
│ │ │ +
STL namespace.
│ │ │
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ -
Helper class for tagging priorities.
Definition typeutilities.hh:73
│ │ │ -
static constexpr std::size_t value
Definition typeutilities.hh:74
│ │ │ +
std::size_t hash_range(It first, It last)
Hashes all elements in the range [first,last) and returns the combined hash.
Definition hash.hh:322
│ │ │ +
void assign(T &dst, const T &src, bool mask)
masked Simd assignment (scalar version)
Definition simd.hh:447
│ │ │ +
A traits class describing the mapping of types onto MPI_Datatypes.
Definition mpitraits.hh:41
│ │ │ +
Portable very large unsigned integers.
Definition bigunsignedint.hh:73
│ │ │ +
static constexpr int overflowmask
Definition bigunsignedint.hh:82
│ │ │ +
bigunsignedint< k > operator|(const bigunsignedint< k > &x) const
bitwise or
│ │ │ +
static constexpr int hexdigits
Definition bigunsignedint.hh:79
│ │ │ +
bigunsignedint< k > operator^(const bigunsignedint< k > &x) const
bitwise exor
│ │ │ +
bigunsignedint< k > operator*(const bigunsignedint< k > &x) const
multiply
│ │ │ +
bigunsignedint< k > operator%(const bigunsignedint< k > &x) const
│ │ │ +
static constexpr int n
Definition bigunsignedint.hh:78
│ │ │ +
bigunsignedint< k > operator-(const bigunsignedint< k > &x) const
subtract
│ │ │ +
static constexpr int compbitmask
Definition bigunsignedint.hh:81
│ │ │ +
bigunsignedint< k > operator&(const bigunsignedint< k > &x) const
bitwise and
│ │ │ +
static constexpr int bits
Definition bigunsignedint.hh:77
│ │ │ +
bigunsignedint< k > operator/(const bigunsignedint< k > &x) const
│ │ │ +
bigunsignedint< k > operator+(const bigunsignedint< k > &x) const
add
│ │ │ +
friend std::size_t hash_value(const bigunsignedint &arg)
Definition bigunsignedint.hh:179
│ │ │ +
static constexpr int bitmask
Definition bigunsignedint.hh:80
│ │ │ +
Whether this type acts as a scalar in the context of (hierarchically blocked) containers.
Definition typetraits.hh:194
│ │ │ +
Base class for Dune-Exceptions.
Definition exceptions.hh:96
│ │ │ +
Default exception class for mathematical errors.
Definition exceptions.hh:241
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,79 +1,897 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -typeutilities.hh │ │ │ │ +bigunsignedint.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_COMMON_TYPEUTILITIES_HH │ │ │ │ -6#define DUNE_COMMON_TYPEUTILITIES_HH │ │ │ │ -7 │ │ │ │ -8#include │ │ │ │ -9#include │ │ │ │ -10#include │ │ │ │ -11 │ │ │ │ -12 │ │ │ │ -13namespace _D_u_n_e { │ │ │ │ -14 │ │ │ │ -22 namespace Impl │ │ │ │ -23 { │ │ │ │ -24 │ │ │ │ -25 template │ │ │ │ -26 struct disableCopyMoveHelper : public std::is_base_of...>>> │ │ │ │ -27 {}; │ │ │ │ -28 │ │ │ │ -29 template │ │ │ │ -30 struct disableCopyMoveHelper : public std::false_type │ │ │ │ -31 {}; │ │ │ │ -32 │ │ │ │ -33 } // namespace Impl │ │ │ │ -34 │ │ │ │ -35 │ │ │ │ -44 template │ │ │ │ -_4_5 using _d_i_s_a_b_l_e_C_o_p_y_M_o_v_e = std::enable_if_t< not Impl:: │ │ │ │ -disableCopyMoveHelper::value, int>; │ │ │ │ -46 │ │ │ │ +5 │ │ │ │ +6#ifndef DUNE_BIGUNSIGNEDINT_HH │ │ │ │ +7#define DUNE_BIGUNSIGNEDINT_HH │ │ │ │ +8 │ │ │ │ +9#include │ │ │ │ +10#include │ │ │ │ +11#include │ │ │ │ +12#include │ │ │ │ +13#include │ │ │ │ +14#include │ │ │ │ +15#include <_d_u_n_e_/_c_o_m_m_o_n_/_e_x_c_e_p_t_i_o_n_s_._h_h> │ │ │ │ +16#include <_d_u_n_e_/_c_o_m_m_o_n_/_h_a_s_h_._h_h> │ │ │ │ +17 │ │ │ │ +24namespace _D_u_n_e │ │ │ │ +25{ │ │ │ │ +26#if HAVE_MPI │ │ │ │ +27 template │ │ │ │ +28 struct MPITraits; │ │ │ │ +29#endif │ │ │ │ +30 │ │ │ │ +36 namespace Impl { │ │ │ │ +37 │ │ │ │ +38 // numeric_limits_helper provides std::numeric_limits access to the │ │ │ │ +internals │ │ │ │ +39 // of bigunsignedint. Previously, the correct specialization of std:: │ │ │ │ +numeric_limits │ │ │ │ +40 // was a friend of bigunsignedint, but that creates problems on recent │ │ │ │ +versions │ │ │ │ +41 // of clang with the alternative libc++ library, because that library │ │ │ │ +declares the │ │ │ │ +42 // base template of std::numeric_limits as a class and clang subsequently │ │ │ │ +complains │ │ │ │ +43 // if the friend declaration uses 'struct'. Unfortunately, libstdc++ uses a │ │ │ │ +struct, │ │ │ │ +44 // making it impossible to keep clang happy for both standard libraries. │ │ │ │ +45 // So we move the access helper functionality into a custom struct and │ │ │ │ +simply let │ │ │ │ +46 // the numeric_limits specialization inherit from the helper. │ │ │ │ 47 │ │ │ │ -48 │ │ │ │ -71 template │ │ │ │ -_7_2 struct _P_r_i_o_r_i_t_y_T_a_g : public _P_r_i_o_r_i_t_y_T_a_g │ │ │ │ -73 { │ │ │ │ -_7_4 static constexpr std::size_t _v_a_l_u_e = priority; │ │ │ │ -75 }; │ │ │ │ -76 │ │ │ │ -85 template<> │ │ │ │ -_8_6 struct _P_r_i_o_r_i_t_y_T_a_g<0> │ │ │ │ -87 { │ │ │ │ -_8_8 static constexpr std::size_t _v_a_l_u_e = 0; │ │ │ │ -89 }; │ │ │ │ +48 template │ │ │ │ +49 struct numeric_limits_helper │ │ │ │ +50 { │ │ │ │ +51 │ │ │ │ +52 protected: │ │ │ │ +53 │ │ │ │ +54 static std::uint16_t& digit(T& big_unsigned_int, std::size_t i) │ │ │ │ +55 { │ │ │ │ +56 return big_unsigned_int.digit[i]; │ │ │ │ +57 } │ │ │ │ +58 │ │ │ │ +59 }; │ │ │ │ +60 │ │ │ │ +61 } │ │ │ │ +62 │ │ │ │ +72 template │ │ │ │ +_7_3 class _b_i_g_u_n_s_i_g_n_e_d_i_n_t { │ │ │ │ +74 public: │ │ │ │ +75 │ │ │ │ +76 // unsigned short is 16 bits wide, n is the number of digits needed │ │ │ │ +_7_7 constexpr static int _b_i_t_s = std::numeric_limits::digits; │ │ │ │ +_7_8 constexpr static int _n = k/_b_i_t_s+(k%_b_i_t_s!=0); │ │ │ │ +_7_9 constexpr static int _h_e_x_d_i_g_i_t_s = 4; │ │ │ │ +_8_0 constexpr static int _b_i_t_m_a_s_k = 0xFFFF; │ │ │ │ +_8_1 constexpr static int _c_o_m_p_b_i_t_m_a_s_k = 0xFFFF0000; │ │ │ │ +_8_2 constexpr static int _o_v_e_r_f_l_o_w_m_a_s_k = 0x1; │ │ │ │ +83 │ │ │ │ +85 _b_i_g_u_n_s_i_g_n_e_d_i_n_t (); │ │ │ │ +86 │ │ │ │ +88 template │ │ │ │ +89 _b_i_g_u_n_s_i_g_n_e_d_i_n_t (Signed x, typename std::enable_if:: │ │ │ │ +value && std::is_signed::value>::type* = 0); │ │ │ │ 90 │ │ │ │ -91 │ │ │ │ -92 │ │ │ │ -93} // namespace Dune │ │ │ │ -94 │ │ │ │ -95 │ │ │ │ +92 _b_i_g_u_n_s_i_g_n_e_d_i_n_t (std::uintmax_t x); │ │ │ │ +93 │ │ │ │ +95 void _p_r_i_n_t (std::ostream& s) const ; │ │ │ │ 96 │ │ │ │ -97#endif // DUNE_COMMON_TYPEUTILITIES_HH │ │ │ │ -_D_u_n_e_:_:_d_i_s_a_b_l_e_C_o_p_y_M_o_v_e │ │ │ │ -std::enable_if_t< not Impl::disableCopyMoveHelper< This, T... >::value, int > │ │ │ │ -disableCopyMove │ │ │ │ -Helper to disable constructor as copy and move constructor. │ │ │ │ -DDeeffiinniittiioonn typeutilities.hh:45 │ │ │ │ +_9_8 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_+_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +99 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_+_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +100 │ │ │ │ +_1_0_2 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_-_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +103 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_-_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +104 │ │ │ │ +_1_0_6 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_*_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +107 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_*_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +108 │ │ │ │ +110 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_+_+_ (); │ │ │ │ +111 │ │ │ │ +_1_1_5 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_/_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +116 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_/_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +117 │ │ │ │ +_1_2_1 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_%_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +122 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_%_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +123 │ │ │ │ +_1_2_5 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_&_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +126 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_&_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +127 │ │ │ │ +_1_2_9 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_^_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +130 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_^_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +131 │ │ │ │ +_1_3_3 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_|_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +134 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _o_p_e_r_a_t_o_r_|_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x); │ │ │ │ +135 │ │ │ │ +137 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_~_ () const; │ │ │ │ +138 │ │ │ │ +139 │ │ │ │ +141 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_<_<_ (int i) const; │ │ │ │ +142 │ │ │ │ +144 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_>_>_ (int i) const; │ │ │ │ +145 │ │ │ │ +146 │ │ │ │ +148 bool _o_p_e_r_a_t_o_r_<_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +149 │ │ │ │ +151 bool _o_p_e_r_a_t_o_r_<_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +152 │ │ │ │ +154 bool _o_p_e_r_a_t_o_r_>_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +155 │ │ │ │ +157 bool _o_p_e_r_a_t_o_r_>_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +158 │ │ │ │ +160 bool _o_p_e_r_a_t_o_r_=_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +161 │ │ │ │ +163 bool _o_p_e_r_a_t_o_r_!_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const; │ │ │ │ +164 │ │ │ │ +165 │ │ │ │ +167 // operator unsigned int () const; │ │ │ │ +168 std::uint_least32_t _t_o_u_i_n_t() const; │ │ │ │ +_1_7_4 double _t_o_d_o_u_b_l_e() const; │ │ │ │ +175 │ │ │ │ +176 friend class _b_i_g_u_n_s_i_g_n_e_d_i_n_t; │ │ │ │ +177 friend struct Impl::numeric_limits_helper< _b_i_g_u_n_s_i_g_n_e_d_i_n_t >; │ │ │ │ +178 │ │ │ │ +_1_7_9 inline friend std::size_t _h_a_s_h___v_a_l_u_e(const _b_i_g_u_n_s_i_g_n_e_d_i_n_t& arg) │ │ │ │ +180 { │ │ │ │ +181 return _h_a_s_h___r_a_n_g_e(arg.digit,arg.digit + arg._n); │ │ │ │ +182 } │ │ │ │ +183 │ │ │ │ +184 private: │ │ │ │ +_1_8_5 std::uint16_t digit[_n]; │ │ │ │ +186#if HAVE_MPI │ │ │ │ +187 friend struct _M_P_I_T_r_a_i_t_s<_b_i_g_u_n_s_i_g_n_e_d_i_n_t >; │ │ │ │ +188#endif │ │ │ │ +189 inline void assign(std::uintmax_t x); │ │ │ │ +190 │ │ │ │ +191 │ │ │ │ +192 } ; │ │ │ │ +193 │ │ │ │ +194 // Constructors │ │ │ │ +195 template │ │ │ │ +_1_9_6 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t () │ │ │ │ +197 { │ │ │ │ +198 _a_s_s_i_g_n(0u); │ │ │ │ +199 } │ │ │ │ +200 │ │ │ │ +201 template │ │ │ │ +202 template │ │ │ │ +_2_0_3 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t (Signed y, typename std::enable_if::value && std::is_signed::value>::type*) │ │ │ │ +204 { │ │ │ │ +205 if (y < 0) │ │ │ │ +206 _D_U_N_E___T_H_R_O_W(_D_u_n_e_:_:_E_x_c_e_p_t_i_o_n, "Trying to construct a Dune::bigunsignedint │ │ │ │ +from a negative integer: " << y); │ │ │ │ +207 _a_s_s_i_g_n(y); │ │ │ │ +208 } │ │ │ │ +209 │ │ │ │ +210 template │ │ │ │ +_2_1_1 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t (std::uintmax_t x) │ │ │ │ +212 { │ │ │ │ +213 _a_s_s_i_g_n(x); │ │ │ │ +214 } │ │ │ │ +215 template │ │ │ │ +216 void _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_a_s_s_i_g_n(std::uintmax_t x) │ │ │ │ +217 { │ │ │ │ +218 static const int no=std::min(static_cast(n), │ │ │ │ +219 static_cast(std::numeric_limits::digits/bits)); │ │ │ │ +220 │ │ │ │ +221 for(int i=0; i>bits; │ │ │ │ +224 } │ │ │ │ +225 for (unsigned int i=no; i │ │ │ │ +_2_3_0 inline std::uint_least32_t _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_t_o_u_i_n_t () const │ │ │ │ +231 { │ │ │ │ +232 return (digit[1]< │ │ │ │ +_2_3_6 inline double _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_t_o_d_o_u_b_l_e() const │ │ │ │ +237 { │ │ │ │ +238 int firstInZeroRange=n; │ │ │ │ +239 for(int i=n-1; i>=0; --i) │ │ │ │ +240 if(digit[i]!=0) │ │ │ │ +241 break; │ │ │ │ +242 else │ │ │ │ +243 --firstInZeroRange; │ │ │ │ +244 int representableDigits=std::numeric_limits::digits/bits; │ │ │ │ +245 int lastInRepresentableRange=0; │ │ │ │ +246 if(representableDigits=lastInRepresentableRange; --i) │ │ │ │ +250 val =val*(1< │ │ │ │ +_2_5_5 inline void _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_p_r_i_n_t (std::ostream& s) const │ │ │ │ +256 { │ │ │ │ +257 bool leading=false; │ │ │ │ +258 │ │ │ │ +259 // print from left to right │ │ │ │ +260 for (int i=n-1; i>=0; i--) │ │ │ │ +261 for (int d=hexdigits-1; d>=0; d--) │ │ │ │ +262 { │ │ │ │ +263 // extract one hex digit │ │ │ │ +264 int current = (digit[i]>>(d*4))&0xF; │ │ │ │ +265 if (current!=0) │ │ │ │ +266 { │ │ │ │ +267 // s.setf(std::ios::noshowbase); │ │ │ │ +268 s << std::hex << current; │ │ │ │ +269 leading = false; │ │ │ │ +270 } │ │ │ │ +271 else if (!leading) s << std::hex << current; │ │ │ │ +272 } │ │ │ │ +273 if (leading) s << "0"; │ │ │ │ +274 s << std::dec; │ │ │ │ +275 } │ │ │ │ +276 │ │ │ │ +277 template │ │ │ │ +_2_7_8 inline std::ostream& _o_p_e_r_a_t_o_r_<_<_ (std::ostream& s, const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& │ │ │ │ +x) │ │ │ │ +279 { │ │ │ │ +280 x._p_r_i_n_t(s); │ │ │ │ +281 return s; │ │ │ │ +282 } │ │ │ │ +283 │ │ │ │ +_2_8_4 #define DUNE_BINOP(OP) \ │ │ │ │ +285 template \ │ │ │ │ +286 inline bigunsignedint bigunsignedint::operator OP (const │ │ │ │ +bigunsignedint &x) const \ │ │ │ │ +287 { \ │ │ │ │ +288 auto temp = *this; \ │ │ │ │ +289 temp OP##= x; \ │ │ │ │ +290 return temp; \ │ │ │ │ +291 } │ │ │ │ +292 │ │ │ │ +293 _D_U_N_E___B_I_N_O_P(+) │ │ │ │ +294 _D_U_N_E___B_I_N_O_P(-) │ │ │ │ +295 _D_U_N_E___B_I_N_O_P(*) │ │ │ │ +296 _D_U_N_E___B_I_N_O_P(/) │ │ │ │ +297 _D_U_N_E___B_I_N_O_P(%) │ │ │ │ +298 _D_U_N_E___B_I_N_O_P(&) │ │ │ │ +299 _D_U_N_E___B_I_N_O_P(^) │ │ │ │ +300 _D_U_N_E___B_I_N_O_P(|) │ │ │ │ +301 │ │ │ │ +302 #undef DUNE_BINOP │ │ │ │ +303 │ │ │ │ +304 template │ │ │ │ +_3_0_5 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_+_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +306 { │ │ │ │ +307 std::uint_fast32_t overflow=0; │ │ │ │ +308 │ │ │ │ +309 for (unsigned int i=0; i(digit[i]) + │ │ │ │ +static_cast(x.digit[i]) + overflow; │ │ │ │ +312 digit[i] = sum&bitmask; │ │ │ │ +313 overflow = (sum>>bits)&overflowmask; │ │ │ │ +314 } │ │ │ │ +315 return *this; │ │ │ │ +316 } │ │ │ │ +317 │ │ │ │ +318 template │ │ │ │ +_3_1_9 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_-_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +320 { │ │ │ │ +321 std::int_fast32_t overflow=0; │ │ │ │ +322 │ │ │ │ +323 for (unsigned int i=0; i(digit[i]) - │ │ │ │ +static_cast(x.digit[i]) - overflow; │ │ │ │ +326 if (diff>=0) │ │ │ │ +327 { │ │ │ │ +328 digit[i] = static_cast(diff); │ │ │ │ +329 overflow = 0; │ │ │ │ +330 } │ │ │ │ +331 else │ │ │ │ +332 { │ │ │ │ +333 digit[i] = static_cast(diff+bitmask+1); │ │ │ │ +334 overflow = 1; │ │ │ │ +335 } │ │ │ │ +336 } │ │ │ │ +337 return *this; │ │ │ │ +338 } │ │ │ │ +339 │ │ │ │ +340 template │ │ │ │ +_3_4_1 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_*_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +342 { │ │ │ │ +343 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_2_*_k_> finalproduct(0); │ │ │ │ +344 │ │ │ │ +345 for (unsigned int m=0; m singleproduct(0); │ │ │ │ +348 std::uint_fast32_t overflow(0); │ │ │ │ +349 for (unsigned int i=0; i(digit │ │ │ │ +[i])*static_cast(x.digit[m])+overflow; │ │ │ │ +352 singleproduct.digit[i+m] = static_cast │ │ │ │ +(digitproduct&bitmask); │ │ │ │ +353 overflow = (digitproduct>>bits)&bitmask; │ │ │ │ +354 } │ │ │ │ +355 finalproduct = finalproduct+singleproduct; │ │ │ │ +356 } │ │ │ │ +357 │ │ │ │ +358 for (unsigned int i=0; i │ │ │ │ +_3_6_3 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_+_+_ () │ │ │ │ +364 { │ │ │ │ +365 std::uint_fast32_t overflow=1; │ │ │ │ +366 │ │ │ │ +367 for (unsigned int i=0; i(digit[i]) + │ │ │ │ +overflow; │ │ │ │ +370 digit[i] = sum&bitmask; │ │ │ │ +371 overflow = (sum>>bits)&overflowmask; │ │ │ │ +372 } │ │ │ │ +373 return *this; │ │ │ │ +374 } │ │ │ │ +375 │ │ │ │ +376 template │ │ │ │ +_3_7_7 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_/_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +378 { │ │ │ │ +379 if(x==0) │ │ │ │ +380 _D_U_N_E___T_H_R_O_W(_D_u_n_e_:_:_M_a_t_h_E_r_r_o_r, "division by zero!"); │ │ │ │ +381 │ │ │ │ +382 // better slow than nothing │ │ │ │ +383 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> result(0); │ │ │ │ +384 │ │ │ │ +385 while (*this>=x) │ │ │ │ +386 { │ │ │ │ +387 ++result; │ │ │ │ +388 *this -= x; │ │ │ │ +389 } │ │ │ │ +390 │ │ │ │ +391 *this = result; │ │ │ │ +392 return *this; │ │ │ │ +393 } │ │ │ │ +394 │ │ │ │ +395 template │ │ │ │ +_3_9_6 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_%_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +397 { │ │ │ │ +398 // better slow than nothing │ │ │ │ +399 while (*this>=x) │ │ │ │ +400 { │ │ │ │ +401 *this -= x; │ │ │ │ +402 } │ │ │ │ +403 │ │ │ │ +404 return *this; │ │ │ │ +405 } │ │ │ │ +406 │ │ │ │ +407 template │ │ │ │ +_4_0_8 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_&_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +409 { │ │ │ │ +410 for (unsigned int i=0; i │ │ │ │ +_4_1_6 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_^_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +417 { │ │ │ │ +418 for (unsigned int i=0; i │ │ │ │ +_4_2_4 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_|_=_ (const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +425 { │ │ │ │ +426 for (unsigned int i=0; i │ │ │ │ +_4_3_2 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_~_ () const │ │ │ │ +433 { │ │ │ │ +434 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> result; │ │ │ │ +435 for (unsigned int i=0; i │ │ │ │ +441 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_<_<_ (int shift) const │ │ │ │ +442 { │ │ │ │ +443 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> result(0); │ │ │ │ +444 │ │ │ │ +445 // multiples of bits │ │ │ │ +446 int j=shift/bits; │ │ │ │ +447 for (int i=n-1-j; i>=0; i--) │ │ │ │ +448 result.digit[i+j] = digit[i]; │ │ │ │ +449 │ │ │ │ +450 // remainder │ │ │ │ +451 j=shift%bits; │ │ │ │ +452 for (int i=n-1; i>=0; i--) │ │ │ │ +453 { │ │ │ │ +454 unsigned int temp = result.digit[i]; │ │ │ │ +455 temp = temp<(temp&bitmask); │ │ │ │ +457 temp = temp>>bits; │ │ │ │ +458 if (i+1<(int)n) │ │ │ │ +459 result.digit[i+1] = result.digit[i+1]|temp; │ │ │ │ +460 } │ │ │ │ +461 │ │ │ │ +462 return result; │ │ │ │ +463 } │ │ │ │ +464 │ │ │ │ +465 template │ │ │ │ +_4_6_6 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_>_>_ (int shift) const │ │ │ │ +467 { │ │ │ │ +468 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> result(0); │ │ │ │ +469 │ │ │ │ +470 // multiples of bits │ │ │ │ +471 int j=shift/bits; │ │ │ │ +472 for (unsigned int i=0; i((temp&compbitmask)>>bits); │ │ │ │ +482 if (i>0) │ │ │ │ +483 result.digit[i-1] = result.digit[i-1] | (temp&bitmask); │ │ │ │ +484 } │ │ │ │ +485 │ │ │ │ +486 return result; │ │ │ │ +487 } │ │ │ │ +488 │ │ │ │ +489 template │ │ │ │ +_4_9_0 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_!_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +const │ │ │ │ +491 { │ │ │ │ +492 for (unsigned int i=0; i │ │ │ │ +_4_9_8 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_=_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +const │ │ │ │ +499 { │ │ │ │ +500 return !((*this)!=x); │ │ │ │ +501 } │ │ │ │ +502 │ │ │ │ +503 template │ │ │ │ +_5_0_4 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_<_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const │ │ │ │ +505 { │ │ │ │ +506 for (int i=n-1; i>=0; i--) │ │ │ │ +507 if (digit[i]x.digit[i]) return false; │ │ │ │ +509 return false; │ │ │ │ +510 } │ │ │ │ +511 │ │ │ │ +512 template │ │ │ │ +_5_1_3 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_<_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +const │ │ │ │ +514 { │ │ │ │ +515 for (int i=n-1; i>=0; i--) │ │ │ │ +516 if (digit[i]x.digit[i]) return false; │ │ │ │ +518 return true; │ │ │ │ +519 } │ │ │ │ +520 │ │ │ │ +521 template │ │ │ │ +_5_2_2 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_>_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) const │ │ │ │ +523 { │ │ │ │ +524 return !((*this)<=x); │ │ │ │ +525 } │ │ │ │ +526 │ │ │ │ +527 template │ │ │ │ +_5_2_8 inline bool _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_o_p_e_r_a_t_o_r_>_=_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x) │ │ │ │ +const │ │ │ │ +529 { │ │ │ │ +530 return !((*this) │ │ │ │ +_5_3_5 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_+_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x, std:: │ │ │ │ +uintmax_t y) │ │ │ │ +536 { │ │ │ │ +537 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(y); │ │ │ │ +538 return x+temp; │ │ │ │ +539 } │ │ │ │ +540 │ │ │ │ +541 template │ │ │ │ +_5_4_2 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_-_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x, std:: │ │ │ │ +uintmax_t y) │ │ │ │ +543 { │ │ │ │ +544 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(y); │ │ │ │ +545 return x-temp; │ │ │ │ +546 } │ │ │ │ +547 │ │ │ │ +548 template │ │ │ │ +_5_4_9 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_*_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x, std:: │ │ │ │ +uintmax_t y) │ │ │ │ +550 { │ │ │ │ +551 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(y); │ │ │ │ +552 return x*temp; │ │ │ │ +553 } │ │ │ │ +554 │ │ │ │ +555 template │ │ │ │ +_5_5_6 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_/_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x, std:: │ │ │ │ +uintmax_t y) │ │ │ │ +557 { │ │ │ │ +558 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(y); │ │ │ │ +559 return x/temp; │ │ │ │ +560 } │ │ │ │ +561 │ │ │ │ +562 template │ │ │ │ +_5_6_3 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_%_ (const _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& x, std:: │ │ │ │ +uintmax_t y) │ │ │ │ +564 { │ │ │ │ +565 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(y); │ │ │ │ +566 return x%temp; │ │ │ │ +567 } │ │ │ │ +568 │ │ │ │ +569 template │ │ │ │ +_5_7_0 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_+_ (std::uintmax_t x, const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& y) │ │ │ │ +571 { │ │ │ │ +572 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(x); │ │ │ │ +573 return temp+y; │ │ │ │ +574 } │ │ │ │ +575 │ │ │ │ +576 template │ │ │ │ +_5_7_7 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_-_ (std::uintmax_t x, const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& y) │ │ │ │ +578 { │ │ │ │ +579 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(x); │ │ │ │ +580 return temp-y; │ │ │ │ +581 } │ │ │ │ +582 │ │ │ │ +583 template │ │ │ │ +_5_8_4 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_*_ (std::uintmax_t x, const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& y) │ │ │ │ +585 { │ │ │ │ +586 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(x); │ │ │ │ +587 return temp*y; │ │ │ │ +588 } │ │ │ │ +589 │ │ │ │ +590 template │ │ │ │ +_5_9_1 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_/_ (std::uintmax_t x, const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& y) │ │ │ │ +592 { │ │ │ │ +593 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(x); │ │ │ │ +594 return temp/y; │ │ │ │ +595 } │ │ │ │ +596 │ │ │ │ +597 template │ │ │ │ +_5_9_8 inline _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _o_p_e_r_a_t_o_r_%_ (std::uintmax_t x, const │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>& y) │ │ │ │ +599 { │ │ │ │ +600 _b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> temp(x); │ │ │ │ +601 return temp%y; │ │ │ │ +602 } │ │ │ │ +603 │ │ │ │ +604 // Forward declare type-trait for numbers │ │ │ │ +605 template struct IsNumber; │ │ │ │ +606 │ │ │ │ +608 template │ │ │ │ +_6_0_9 struct _I_s_N_u_m_b_e_r<_b_i_g_u_n_s_i_g_n_e_d_i_n_t> : public std::true_type {}; │ │ │ │ +610 │ │ │ │ +612} │ │ │ │ +613 │ │ │ │ +614namespace _s_t_d │ │ │ │ +615{ │ │ │ │ +616 template │ │ │ │ +617 struct numeric_limits<_D_u_n_e::bigunsignedint > │ │ │ │ +618 : private Dune::Impl::numeric_limits_helper > / │ │ │ │ +/ for access to internal state of bigunsignedint │ │ │ │ +619 { │ │ │ │ +620 public: │ │ │ │ +621 static const bool is_specialized = true; │ │ │ │ +622 │ │ │ │ +623 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> min() │ │ │ │ +624 { │ │ │ │ +625 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +626 } │ │ │ │ +627 │ │ │ │ +628 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> _m_a_x() │ │ │ │ +629 { │ │ │ │ +630 _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> max_; │ │ │ │ +631 for(std::size_t i=0; i < Dune::bigunsignedint::n; ++i) │ │ │ │ +632 // access internal state via the helper base class │ │ │ │ +633 Dune::Impl::numeric_limits_helper<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >:: │ │ │ │ +634 digit(max_,i)=_s_t_d::numeric_limits<_s_t_d::uint16_t>::_m_a_x(); │ │ │ │ +635 return max_; │ │ │ │ +636 } │ │ │ │ +637 │ │ │ │ +638 │ │ │ │ +639 static const int digits = _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_b_i_t_s * │ │ │ │ +640 _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>_:_:_n; │ │ │ │ +641 static const bool is_signed = false; │ │ │ │ +642 static const bool is_integer = true; │ │ │ │ +643 static const bool is_exact = true; │ │ │ │ +644 static const int radix = 2; │ │ │ │ +645 │ │ │ │ +646 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> epsilon() │ │ │ │ +647 { │ │ │ │ +648 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +649 } │ │ │ │ +650 │ │ │ │ +651 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> round_error() │ │ │ │ +652 { │ │ │ │ +653 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +654 } │ │ │ │ +655 │ │ │ │ +656 static const int min_exponent = 0; │ │ │ │ +657 static const int min_exponent10 = 0; │ │ │ │ +658 static const int max_exponent = 0; │ │ │ │ +659 static const int max_exponent10 = 0; │ │ │ │ +660 │ │ │ │ +661 static const bool has_infinity = false; │ │ │ │ +662 static const bool has_quiet_NaN = false; │ │ │ │ +663 static const bool has_signaling_NaN = false; │ │ │ │ +664 │ │ │ │ +665 static const float_denorm_style has_denorm = denorm_absent; │ │ │ │ +666 static const bool has_denorm_loss = false; │ │ │ │ +667 │ │ │ │ +668 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> infinity() noexcept │ │ │ │ +669 { │ │ │ │ +670 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +671 } │ │ │ │ +672 │ │ │ │ +673 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> quiet_NaN() noexcept │ │ │ │ +674 { │ │ │ │ +675 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +676 } │ │ │ │ +677 │ │ │ │ +678 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> signaling_NaN() noexcept │ │ │ │ +679 { │ │ │ │ +680 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +681 } │ │ │ │ +682 │ │ │ │ +683 static _D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> denorm_min() noexcept │ │ │ │ +684 { │ │ │ │ +685 return static_cast<_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_> >(0); │ │ │ │ +686 } │ │ │ │ +687 │ │ │ │ +688 static const bool is_iec559 = false; │ │ │ │ +689 static const bool is_bounded = true; │ │ │ │ +690 static const bool is_modulo = true; │ │ │ │ +691 │ │ │ │ +692 static const bool traps = false; │ │ │ │ +693 static const bool tinyness_before = false; │ │ │ │ +694 static const float_round_style round_style = round_toward_zero; │ │ │ │ +695 │ │ │ │ +696 }; │ │ │ │ +697 │ │ │ │ +698} │ │ │ │ +699 │ │ │ │ +700_D_U_N_E___D_E_F_I_N_E___H_A_S_H(_D_U_N_E___H_A_S_H___T_E_M_P_L_A_T_E___A_R_G_S(int k),_D_U_N_E___H_A_S_H___T_Y_P_E(_D_u_n_e_:_: │ │ │ │ +_b_i_g_u_n_s_i_g_n_e_d_i_n_t_<_k_>)) │ │ │ │ +701 │ │ │ │ +702#endif │ │ │ │ +_h_a_s_h_._h_h │ │ │ │ +Support for calculating hash values of objects. │ │ │ │ +_D_U_N_E___D_E_F_I_N_E___H_A_S_H │ │ │ │ +#define DUNE_DEFINE_HASH(template_args, type) │ │ │ │ +Defines the required struct specialization to make type hashable via Dune:: │ │ │ │ +hash. │ │ │ │ +DDeeffiinniittiioonn hash.hh:100 │ │ │ │ +_D_U_N_E___H_A_S_H___T_Y_P_E │ │ │ │ +#define DUNE_HASH_TYPE(...) │ │ │ │ +Wrapper macro for the type to be hashed in DUNE_DEFINE_HASH. │ │ │ │ +DDeeffiinniittiioonn hash.hh:117 │ │ │ │ +_D_U_N_E___H_A_S_H___T_E_M_P_L_A_T_E___A_R_G_S │ │ │ │ +#define DUNE_HASH_TEMPLATE_ARGS(...) │ │ │ │ +Wrapper macro for the template arguments in DUNE_DEFINE_HASH. │ │ │ │ +DDeeffiinniittiioonn hash.hh:109 │ │ │ │ +_e_x_c_e_p_t_i_o_n_s_._h_h │ │ │ │ +A few common exception classes. │ │ │ │ +_D_u_n_e_:_:_H_y_b_r_i_d_:_:_m_a_x │ │ │ │ +constexpr auto max │ │ │ │ +Function object that returns the greater of the given values. │ │ │ │ +DDeeffiinniittiioonn hybridutilities.hh:484 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_/_= │ │ │ │ +bigunsignedint< k > & operator/=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:377 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:549 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +bigunsignedint< k > operator<<(int i) const │ │ │ │ +left shift │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:441 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_+_= │ │ │ │ +bigunsignedint< k > & operator+=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:305 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_^_= │ │ │ │ +bigunsignedint< k > & operator^=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:416 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ +std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:278 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_<_= │ │ │ │ +bool operator<=(const bigunsignedint< k > &x) const │ │ │ │ +less than or equal │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:513 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_p_r_i_n_t │ │ │ │ +void print(std::ostream &s) const │ │ │ │ +Print number in hex notation. │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:255 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ +bool operator<(const bigunsignedint< k > &x) const │ │ │ │ +less than │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:504 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ +bigunsignedint< k > operator/(const bigunsignedint< k > &x, std::uintmax_t y) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:556 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ +bool operator==(const bigunsignedint< k > &x) const │ │ │ │ +equal │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:498 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_!_= │ │ │ │ +bool operator!=(const bigunsignedint< k > &x) const │ │ │ │ +not equal │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:490 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t │ │ │ │ +bigunsignedint() │ │ │ │ +Construct uninitialized. │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:196 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_&_= │ │ │ │ +bigunsignedint< k > & operator&=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:408 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ +bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:542 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_>_= │ │ │ │ +bool operator>=(const bigunsignedint< k > &x) const │ │ │ │ +greater or equal │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:528 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_>_> │ │ │ │ +bigunsignedint< k > operator>>(int i) const │ │ │ │ +right shift │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:466 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:535 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_~ │ │ │ │ +bigunsignedint< k > operator~() const │ │ │ │ +bitwise complement │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:432 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_+_+ │ │ │ │ +bigunsignedint< k > & operator++() │ │ │ │ +prefix increment │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:363 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_|_= │ │ │ │ +bigunsignedint< k > & operator|=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:424 │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_% │ │ │ │ +bigunsignedint< k > operator%(const bigunsignedint< k > &x, std::uintmax_t y) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:563 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_%_= │ │ │ │ +bigunsignedint< k > & operator%=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:396 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_t_o_d_o_u_b_l_e │ │ │ │ +double todouble() const │ │ │ │ +Convert to a double. │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:236 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_-_= │ │ │ │ +bigunsignedint< k > & operator-=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:319 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_> │ │ │ │ +bool operator>(const bigunsignedint< k > &x) const │ │ │ │ +greater than │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:522 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ +bigunsignedint< k > & operator*=(const bigunsignedint< k > &x) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:341 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_t_o_u_i_n_t │ │ │ │ +std::uint_least32_t touint() const │ │ │ │ +export to other types │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:230 │ │ │ │ +_D_U_N_E___B_I_N_O_P │ │ │ │ +#define DUNE_BINOP(OP) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:284 │ │ │ │ +_D_U_N_E___T_H_R_O_W │ │ │ │ +#define DUNE_THROW(E, m) │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:218 │ │ │ │ +_s_t_d │ │ │ │ +STL namespace. │ │ │ │ _D_u_n_e │ │ │ │ Dune namespace. │ │ │ │ DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ -_D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g │ │ │ │ -Helper class for tagging priorities. │ │ │ │ -DDeeffiinniittiioonn typeutilities.hh:73 │ │ │ │ -_D_u_n_e_:_:_P_r_i_o_r_i_t_y_T_a_g_:_:_v_a_l_u_e │ │ │ │ -static constexpr std::size_t value │ │ │ │ -DDeeffiinniittiioonn typeutilities.hh:74 │ │ │ │ +_D_u_n_e_:_:_h_a_s_h___r_a_n_g_e │ │ │ │ +std::size_t hash_range(It first, It last) │ │ │ │ +Hashes all elements in the range [first,last) and returns the combined hash. │ │ │ │ +DDeeffiinniittiioonn hash.hh:322 │ │ │ │ +_D_u_n_e_:_:_a_s_s_i_g_n │ │ │ │ +void assign(T &dst, const T &src, bool mask) │ │ │ │ +masked Simd assignment (scalar version) │ │ │ │ +DDeeffiinniittiioonn simd.hh:447 │ │ │ │ +_D_u_n_e_:_:_M_P_I_T_r_a_i_t_s │ │ │ │ +A traits class describing the mapping of types onto MPI_Datatypes. │ │ │ │ +DDeeffiinniittiioonn mpitraits.hh:41 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t │ │ │ │ +Portable very large unsigned integers. │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:73 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_v_e_r_f_l_o_w_m_a_s_k │ │ │ │ +static constexpr int overflowmask │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:82 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_| │ │ │ │ +bigunsignedint< k > operator|(const bigunsignedint< k > &x) const │ │ │ │ +bitwise or │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_h_e_x_d_i_g_i_t_s │ │ │ │ +static constexpr int hexdigits │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:79 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_^ │ │ │ │ +bigunsignedint< k > operator^(const bigunsignedint< k > &x) const │ │ │ │ +bitwise exor │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ +bigunsignedint< k > operator*(const bigunsignedint< k > &x) const │ │ │ │ +multiply │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_% │ │ │ │ +bigunsignedint< k > operator%(const bigunsignedint< k > &x) const │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_n │ │ │ │ +static constexpr int n │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:78 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ +bigunsignedint< k > operator-(const bigunsignedint< k > &x) const │ │ │ │ +subtract │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_c_o_m_p_b_i_t_m_a_s_k │ │ │ │ +static constexpr int compbitmask │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:81 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_& │ │ │ │ +bigunsignedint< k > operator&(const bigunsignedint< k > &x) const │ │ │ │ +bitwise and │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_b_i_t_s │ │ │ │ +static constexpr int bits │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:77 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ +bigunsignedint< k > operator/(const bigunsignedint< k > &x) const │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ +bigunsignedint< k > operator+(const bigunsignedint< k > &x) const │ │ │ │ +add │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_h_a_s_h___v_a_l_u_e │ │ │ │ +friend std::size_t hash_value(const bigunsignedint &arg) │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:179 │ │ │ │ +_D_u_n_e_:_:_b_i_g_u_n_s_i_g_n_e_d_i_n_t_:_:_b_i_t_m_a_s_k │ │ │ │ +static constexpr int bitmask │ │ │ │ +DDeeffiinniittiioonn bigunsignedint.hh:80 │ │ │ │ +_D_u_n_e_:_:_I_s_N_u_m_b_e_r │ │ │ │ +Whether this type acts as a scalar in the context of (hierarchically blocked) │ │ │ │ +containers. │ │ │ │ +DDeeffiinniittiioonn typetraits.hh:194 │ │ │ │ +_D_u_n_e_:_:_E_x_c_e_p_t_i_o_n │ │ │ │ +Base class for Dune-Exceptions. │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:96 │ │ │ │ +_D_u_n_e_:_:_M_a_t_h_E_r_r_o_r │ │ │ │ +Default exception class for mathematical errors. │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:241 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00023.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typetraits.hh File Reference │ │ │ +dune-common: scalarvectorview.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,139 +70,39 @@ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ -Namespaces | │ │ │ -Typedefs | │ │ │ -Functions
│ │ │ -
typetraits.hh File Reference
│ │ │ +Namespaces
│ │ │ +
scalarvectorview.hh File Reference
│ │ │ │ │ │
│ │ │ │ │ │ -

Traits for type conversions and type information. │ │ │ +

Implements a scalar vector view wrapper around an existing scalar. │ │ │ More...

│ │ │ -
#include <complex>
│ │ │ +
#include <cstddef>
│ │ │ #include <type_traits>
│ │ │ -#include <utility>
│ │ │ -#include <vector>
│ │ │ +#include <istream>
│ │ │ +#include <dune/common/densevector.hh>
│ │ │ +#include <dune/common/fvector.hh>
│ │ │ +#include <dune/common/typetraits.hh>
│ │ │ +#include <dune/common/matvectraits.hh>
│ │ │
│ │ │

Go to the source code of this file.

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

│ │ │ -Classes

struct  Dune::Empty
 Just an empty class. More...
 
struct  Dune::IsInteroperable< T1, T2 >
 Checks whether two types are interoperable. More...
 
struct  Dune::EnableIfInterOperable< T1, T2, Type >
 Enable typedef if two types are interoperable. More...
 
struct  Dune::AlwaysFalse< T >
 template which always yields a false value More...
 
struct  Dune::AlwaysTrue< T >
 template which always yields a true value More...
 
struct  Dune::IsCallable< F(Args...), R >
 Check if a type is callable with ()-operator and given arguments. More...
 
struct  Dune::IsNumber< T >
 Whether this type acts as a scalar in the context of (hierarchically blocked) containers. More...
 
struct  Dune::HasNaN< T >
 Whether this type has a value of NaN. More...
 
struct  Dune::IsIndexable< T, I >
 Type trait to determine whether an instance of T has an operator[](I), i.e. whether it can be indexed with an index of type I. More...
 
struct  Dune::IsIterable< T, typename >
 typetrait to check that a class has begin() and end() members More...
 
struct  Dune::IsTuple< T >
 Check if T is a std::tuple<...> More...
 
struct  Dune::IsTupleOrDerived< T >
 Check if T derived from a std::tuple<...> More...
 
struct  Dune::IsIntegralConstant< T >
 Check if T is an std::integral_constant<I, i> More...
 
struct  Dune::IsCompileTimeConstant< T >
 Check if T is an integral constant or any type derived from std::integral_constant. More...
 
struct  Dune::SizeOf< T >
 Compute size of variadic type list. More...
 
struct  Dune::AutonomousValueType< T >
 Type free of internal references that T can be converted to. More...
 
struct  Dune::AutonomousValueType< T & >
 Specialization to remove lvalue references. More...
 
struct  Dune::AutonomousValueType< T && >
 Specialization to remove rvalue references. More...
 
struct  Dune::AutonomousValueType< const T >
 Specialization to remove const qualifiers. More...
 
struct  Dune::AutonomousValueType< volatile T >
 Specialization to remove volatile qualifiers. More...
 
struct  Dune::AutonomousValueType< std::vector< bool >::reference >
 Specialization for the proxies of vector<bool> More...
 
struct  Dune::AutonomousValueType< volatile const T >
 Specialization to remove both const and volatile qualifiers. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Typedefs

template<class... Types>
using Dune::void_t = typename Impl::voider< Types... >::type
 Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.
 
template<class Type >
using Dune::field_t = typename FieldTraits< Type >::field_type
 Convenient access to FieldTraits<Type>::field_type.
 
template<class Type >
using Dune::real_t = typename FieldTraits< Type >::real_type
 Convenient access to FieldTraits<Type>::real_type.
 
template<class T >
using Dune::AutonomousValue = typename AutonomousValueType< T >::type
 Type free of internal references that T can be converted to.
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │

│ │ │ -Functions

template<class T , T... t, std::size_t index>
constexpr auto Dune::integerSequenceEntry (std::integer_sequence< T, t... >, std::integral_constant< std::size_t, index > i)
 Get entry of std::integer_sequence.
 
template<class T >
constexpr AutonomousValue< T > Dune::autoCopy (T &&v)
 Autonomous copy of an expression's value for use in auto type deduction.
 
│ │ │

Detailed Description

│ │ │ -

Traits for type conversions and type information.

│ │ │ -
Author
Markus Blatt, Christian Engwer
│ │ │ +

Implements a scalar vector view wrapper around an existing scalar.

│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,125 +1,26 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -typetraits.hh File Reference │ │ │ │ -Traits for type conversions and type information. _M_o_r_e_._._. │ │ │ │ -#include │ │ │ │ +_N_a_m_e_s_p_a_c_e_s │ │ │ │ +scalarvectorview.hh File Reference │ │ │ │ +_C_o_m_m_o_n » _D_e_n_s_e_ _M_a_t_r_i_x_ _a_n_d_ _V_e_c_t_o_r_ _T_e_m_p_l_a_t_e_ _L_i_b_r_a_r_y │ │ │ │ +Implements a scalar vector view wrapper around an existing scalar. _M_o_r_e_._._. │ │ │ │ +#include │ │ │ │ #include │ │ │ │ -#include │ │ │ │ -#include │ │ │ │ +#include │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_d_e_n_s_e_v_e_c_t_o_r_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_f_v_e_c_t_o_r_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ +#include <_d_u_n_e_/_c_o_m_m_o_n_/_m_a_t_v_e_c_t_r_a_i_t_s_._h_h> │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -struct   _D_u_n_e_:_:_E_m_p_t_y │ │ │ │ -  Just an empty class. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_I_n_t_e_r_o_p_e_r_a_b_l_e_<_ _T_1_,_ _T_2_ _> │ │ │ │ -  Checks whether two types are interoperable. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_E_n_a_b_l_e_I_f_I_n_t_e_r_O_p_e_r_a_b_l_e_<_ _T_1_,_ _T_2_,_ _T_y_p_e_ _> │ │ │ │ -  Enable typedef if two types are interoperable. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_l_w_a_y_s_F_a_l_s_e_<_ _T_ _> │ │ │ │ -  template which always yields a false value _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_l_w_a_y_s_T_r_u_e_<_ _T_ _> │ │ │ │ -  template which always yields a true value _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_C_a_l_l_a_b_l_e_<_ _F_(_A_r_g_s_._._._)_,_ _R_ _> │ │ │ │ -  Check if a type is callable with ()-operator and given arguments. │ │ │ │ - _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_N_u_m_b_e_r_<_ _T_ _> │ │ │ │ -  Whether this type acts as a scalar in the context of (hierarchically │ │ │ │ - blocked) containers. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_H_a_s_N_a_N_<_ _T_ _> │ │ │ │ -  Whether this type has a value of NaN. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_I_n_d_e_x_a_b_l_e_<_ _T_,_ _I_ _> │ │ │ │ -  Type trait to determine whether an instance of T has an operator[](I), │ │ │ │ - i.e. whether it can be indexed with an index of type I. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_I_t_e_r_a_b_l_e_<_ _T_,_ _t_y_p_e_n_a_m_e_ _> │ │ │ │ -  typetrait to check that a class has begin() and end() members _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_u_p_l_e_<_ _T_ _> │ │ │ │ -  Check if T is a std::tuple<...> _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_u_p_l_e_O_r_D_e_r_i_v_e_d_<_ _T_ _> │ │ │ │ -  Check if T derived from a std::tuple<...> _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_I_n_t_e_g_r_a_l_C_o_n_s_t_a_n_t_<_ _T_ _> │ │ │ │ -  Check if T is an std::integral_constant _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_C_o_m_p_i_l_e_T_i_m_e_C_o_n_s_t_a_n_t_<_ _T_ _> │ │ │ │ -  Check if T is an integral constant or any type derived from std:: │ │ │ │ - integral_constant. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_S_i_z_e_O_f_<_ _T_ _> │ │ │ │ -  Compute size of variadic type list. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _T_ _> │ │ │ │ -  Type free of internal references that T can be converted to. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _T_ _&_ _> │ │ │ │ -  Specialization to remove lvalue references. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _T_ _&_&_ _> │ │ │ │ -  Specialization to remove rvalue references. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _c_o_n_s_t_ _T_ _> │ │ │ │ -  Specialization to remove const qualifiers. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _v_o_l_a_t_i_l_e_ _T_ _> │ │ │ │ -  Specialization to remove volatile qualifiers. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _s_t_d_:_:_v_e_c_t_o_r_<_ _b_o_o_l_ _>_:_:_r_e_f_e_r_e_n_c_e_ _> │ │ │ │ -  Specialization for the proxies of vector _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _v_o_l_a_t_i_l_e_ _c_o_n_s_t_ _T_ _> │ │ │ │ -  Specialization to remove both const and volatile qualifiers. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _D_u_n_e │ │ │ │   _D_u_n_e namespace. │ │ │ │   │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_v_o_i_d___t = typename Impl::voider< Types... >::type │ │ │ │ -  Is void for all valid input types. The workhorse for C++11 SFINAE- │ │ │ │ - techniques. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_f_i_e_l_d___t = typename _F_i_e_l_d_T_r_a_i_t_s< Type >::field_type │ │ │ │ -  Convenient access to _F_i_e_l_d_T_r_a_i_t_s_<_T_y_p_e_>_:_:_f_i_e_l_d___t_y_p_e. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_r_e_a_l___t = typename _F_i_e_l_d_T_r_a_i_t_s< Type >::real_type │ │ │ │ -  Convenient access to _F_i_e_l_d_T_r_a_i_t_s_<_T_y_p_e_>_:_:_r_e_a_l___t_y_p_e. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e = typename _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e< T >::type │ │ │ │ -  Type free of internal references that T can be converted to. │ │ │ │ -  │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - constexpr auto  _D_u_n_e_:_:_i_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y (std:: │ │ │ │ - integer_sequence< T, t... >, std:: │ │ │ │ - integral_constant< std::size_t, index > i) │ │ │ │ -  Get entry of std::integer_sequence. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -constexpr _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e< T >  _D_u_n_e_:_:_a_u_t_o_C_o_p_y (T &&v) │ │ │ │ -  Autonomous copy of an expression's value for │ │ │ │ - use in auto type deduction. │ │ │ │ -  │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Traits for type conversions and type information. │ │ │ │ - Author │ │ │ │ - Markus Blatt, Christian Engwer │ │ │ │ +Implements a scalar vector view wrapper around an existing scalar. │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typetraits.hh Source File │ │ │ +dune-common: scalarvectorview.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,439 +74,194 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -
typetraits.hh
│ │ │ +
scalarvectorview.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_TYPETRAITS_HH
│ │ │ -
6#define DUNE_TYPETRAITS_HH
│ │ │ +
5#ifndef DUNE_COMMON_SCALARVECTORVIEW_HH
│ │ │ +
6#define DUNE_COMMON_SCALARVECTORVIEW_HH
│ │ │
7
│ │ │ -
8#include <complex>
│ │ │ +
8#include <cstddef>
│ │ │
9#include <type_traits>
│ │ │ -
10#include <utility>
│ │ │ -
11#include <vector>
│ │ │ -
12
│ │ │ -
13namespace Dune
│ │ │ -
14{
│ │ │ -
15
│ │ │ -
16 namespace Impl
│ │ │ -
17 {
│ │ │ -
19
│ │ │ -
23 template <class...>
│ │ │ -
24 struct voider
│ │ │ -
25 {
│ │ │ -
26 using type = void;
│ │ │ -
27 };
│ │ │ -
28 }
│ │ │ -
29
│ │ │ -
31
│ │ │ -
39 template <class... Types>
│ │ │ -
40 using void_t = typename Impl::voider<Types...>::type;
│ │ │ +
10#include <istream>
│ │ │ +
11
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
16
│ │ │ +
17namespace Dune {
│ │ │ +
18
│ │ │ +
19namespace Impl {
│ │ │ +
20
│ │ │ +
35 template<class K>
│ │ │ +
36 class ScalarVectorView :
│ │ │ +
37 public DenseVector<ScalarVectorView<K>>
│ │ │ +
38 {
│ │ │ +
39 K* dataP_;
│ │ │ +
40 using Base = DenseVector<ScalarVectorView<K>>;
│ │ │
41
│ │ │ -
55 struct Empty {};
│ │ │ -
56
│ │ │ -
63 template<class T1, class T2>
│ │ │ -
│ │ │ - │ │ │ -
65 {
│ │ │ -
70 constexpr static bool value = std::is_convertible<T1,T2>::value || std::is_convertible<T2,T1>::value;
│ │ │ -
71 };
│ │ │ -
│ │ │ -
72
│ │ │ -
78 template<class T1, class T2, class Type>
│ │ │ -
│ │ │ - │ │ │ -
80 : public std::enable_if<IsInteroperable<T1,T2>::value, Type>
│ │ │ -
81 {};
│ │ │ -
│ │ │ -
82
│ │ │ -
100
│ │ │ -
116
│ │ │ -
123 template<typename T>
│ │ │ -
124 struct AlwaysFalse : public std::false_type {};
│ │ │ -
125
│ │ │ -
133 template<typename T>
│ │ │ -
134 struct AlwaysTrue : public std::true_type {};
│ │ │ -
135
│ │ │ -
161 template<typename D, typename R = void>
│ │ │ - │ │ │ -
163
│ │ │ -
168 template<typename R, typename F, typename... Args>
│ │ │ -
│ │ │ -
169 struct IsCallable<F(Args...), R>
│ │ │ -
170 : public std::bool_constant<
│ │ │ -
171 std::is_invocable_r_v<R, F, Args...>
│ │ │ -
172 && !std::is_member_pointer_v<std::decay_t<F>>
│ │ │ -
173 > {};
│ │ │ -
│ │ │ -
174
│ │ │ -
177
│ │ │ -
192 template <typename T>
│ │ │ -
│ │ │ -
193 struct IsNumber
│ │ │ -
194 : public std::integral_constant<bool, std::is_arithmetic<T>::value> {
│ │ │ -
195 };
│ │ │ -
│ │ │ +
42 template <class>
│ │ │ +
43 friend class ScalarVectorView;
│ │ │ +
44 public:
│ │ │ +
45
│ │ │ +
47 constexpr static int dimension = 1;
│ │ │ +
48
│ │ │ +
50 using size_type = typename Base::size_type;
│ │ │ +
51
│ │ │ +
53 using reference = std::decay_t<K>&;
│ │ │ +
54
│ │ │ +
56 using const_reference = const K&;
│ │ │ +
57
│ │ │ +
58 //===== construction
│ │ │ +
59
│ │ │ +
61 constexpr ScalarVectorView ()
│ │ │ +
62 : dataP_(nullptr)
│ │ │ +
63 {}
│ │ │ +
64
│ │ │ +
66 ScalarVectorView (K* p) :
│ │ │ +
67 dataP_(p)
│ │ │ +
68 {}
│ │ │ +
69
│ │ │ +
71 ScalarVectorView (const ScalarVectorView &other) :
│ │ │ +
72 Base(),
│ │ │ +
73 dataP_(other.dataP_)
│ │ │ +
74 {}
│ │ │ +
75
│ │ │ +
77 ScalarVectorView (ScalarVectorView &&other) :
│ │ │ +
78 Base(),
│ │ │ +
79 dataP_( other.dataP_ )
│ │ │ +
80 {}
│ │ │ +
81
│ │ │ +
83 ScalarVectorView& operator= (const ScalarVectorView& other)
│ │ │ +
84 {
│ │ │ +
85 assert(dataP_);
│ │ │ +
86 assert(other.dataP_);
│ │ │ +
87 *dataP_ = *(other.dataP_);
│ │ │ +
88 return *this;
│ │ │ +
89 }
│ │ │ +
90
│ │ │ +
91 template<class KK>
│ │ │ +
92 ScalarVectorView& operator= (const ScalarVectorView<KK>& other)
│ │ │ +
93 {
│ │ │ +
94 assert(dataP_);
│ │ │ +
95 assert(other.dataP_);
│ │ │ +
96 *dataP_ = *(other.dataP_);
│ │ │ +
97 return *this;
│ │ │ +
98 }
│ │ │ +
99
│ │ │ +
101 template<typename T,
│ │ │ +
102 std::enable_if_t<std::is_convertible<T, K>::value, int> = 0>
│ │ │ +
103 inline ScalarVectorView& operator= (const T& k)
│ │ │ +
104 {
│ │ │ +
105 *dataP_ = k;
│ │ │ +
106 return *this;
│ │ │ +
107 }
│ │ │ +
108
│ │ │ +
110 static constexpr size_type size ()
│ │ │ +
111 {
│ │ │ +
112 return 1;
│ │ │ +
113 }
│ │ │ +
114
│ │ │ +
116 K& operator[] ([[maybe_unused]] size_type i)
│ │ │ +
117 {
│ │ │ +
118 DUNE_ASSERT_BOUNDS(i == 0);
│ │ │ +
119 return *dataP_;
│ │ │ +
120 }
│ │ │ +
121
│ │ │ +
123 const K& operator[] ([[maybe_unused]] size_type i) const
│ │ │ +
124 {
│ │ │ +
125 DUNE_ASSERT_BOUNDS(i == 0);
│ │ │ +
126 return *dataP_;
│ │ │ +
127 }
│ │ │ +
128 }; // class ScalarVectorView
│ │ │ +
129
│ │ │ +
130} // namespace Impl
│ │ │ +
131
│ │ │ +
132
│ │ │ +
133 template< class K>
│ │ │ +
134 struct DenseMatVecTraits< Impl::ScalarVectorView<K> >
│ │ │ +
135 {
│ │ │ +
136 using derived_type = Impl::ScalarVectorView<K>;
│ │ │ +
137 using value_type = std::remove_const_t<K>;
│ │ │ +
138 using size_type = std::size_t;
│ │ │ +
139 };
│ │ │ +
140
│ │ │ +
141 template< class K >
│ │ │ +
142 struct FieldTraits< Impl::ScalarVectorView<K> > : public FieldTraits<std::remove_const_t<K>> {};
│ │ │ +
143
│ │ │ +
144 template<class K>
│ │ │ +
145 struct AutonomousValueType<Impl::ScalarVectorView<K>>
│ │ │ +
146 {
│ │ │ +
147 using type = FieldVector<std::remove_const_t<K>,1>;
│ │ │ +
148 };
│ │ │ +
149
│ │ │ +
150namespace Impl {
│ │ │ +
151
│ │ │ +
163 template<class K>
│ │ │ +
164 inline std::istream &operator>> ( std::istream &in, ScalarVectorView<K> &v )
│ │ │ +
165 {
│ │ │ +
166 K w;
│ │ │ +
167 if(in >> w)
│ │ │ +
168 v = w;
│ │ │ +
169 return in;
│ │ │ +
170 }
│ │ │ +
171
│ │ │ +
172
│ │ │ +
174 template<class T,
│ │ │ +
175 std::enable_if_t<IsNumber<T>::value, int> = 0>
│ │ │ +
176 auto asVector(T& t)
│ │ │ +
177 {
│ │ │ +
178 return ScalarVectorView<T>{&t};
│ │ │ +
179 }
│ │ │ +
180
│ │ │ +
182 template<class T,
│ │ │ +
183 std::enable_if_t<IsNumber<T>::value, int> = 0>
│ │ │ +
184 auto asVector(const T& t)
│ │ │ +
185 {
│ │ │ +
186 return ScalarVectorView<const T>{&t};
│ │ │ +
187 }
│ │ │ +
188
│ │ │ +
190 template<class T,
│ │ │ +
191 std::enable_if_t<not IsNumber<T>::value, int> = 0>
│ │ │ +
192 T& asVector(T& t)
│ │ │ +
193 {
│ │ │ +
194 return t;
│ │ │ +
195 }
│ │ │
196
│ │ │ -
197#ifndef DOXYGEN
│ │ │ -
198
│ │ │ -
199 template <typename T>
│ │ │ -
200 struct IsNumber<std::complex<T>>
│ │ │ -
201 : public std::integral_constant<bool, IsNumber<T>::value> {
│ │ │ -
202 };
│ │ │ -
203
│ │ │ -
204#endif // DOXYGEN
│ │ │ -
205
│ │ │ -
207
│ │ │ -
210 template <typename T>
│ │ │ -
│ │ │ -
211 struct HasNaN
│ │ │ -
212 : public std::integral_constant<bool, std::is_floating_point<T>::value> {
│ │ │ -
213 };
│ │ │ -
│ │ │ -
214
│ │ │ -
215#ifndef DOXYGEN
│ │ │ -
216
│ │ │ -
217 template <typename T>
│ │ │ -
218 struct HasNaN<std::complex<T>>
│ │ │ -
219 : public std::integral_constant<bool, std::is_floating_point<T>::value> {
│ │ │ -
220 };
│ │ │ -
221
│ │ │ -
222#endif // DOXYGEN
│ │ │ -
223
│ │ │ -
224#ifndef DOXYGEN
│ │ │ -
225
│ │ │ -
226 namespace Impl {
│ │ │ -
227
│ │ │ -
228 template<typename T, typename I, typename = int>
│ │ │ -
229 struct IsIndexable
│ │ │ -
230 : public std::false_type
│ │ │ -
231 {};
│ │ │ -
232
│ │ │ -
233 template<typename T, typename I>
│ │ │ -
234 struct IsIndexable<T,I,typename std::enable_if<(sizeof(std::declval<T>()[std::declval<I>()]) > 0),int>::type>
│ │ │ -
235 : public std::true_type
│ │ │ -
236 {};
│ │ │ -
237
│ │ │ -
238 }
│ │ │ -
239
│ │ │ -
240#endif // DOXYGEN
│ │ │ -
241
│ │ │ -
243
│ │ │ -
247 template<typename T, typename I = std::size_t>
│ │ │ -
│ │ │ - │ │ │ -
249 : public Impl::IsIndexable<T,I>
│ │ │ -
250 {};
│ │ │ -
│ │ │ -
251
│ │ │ -
252#ifndef DOXYGEN
│ │ │ -
253
│ │ │ -
254 namespace Impl {
│ │ │ -
255 // This function does nothing.
│ │ │ -
256 // By passing expressions to this function one can avoid
│ │ │ -
257 // "value computed is not used" warnings that may show up
│ │ │ -
258 // in a comma expression.
│ │ │ -
259 template<class...T>
│ │ │ -
260 void ignore(T&&... /*t*/)
│ │ │ -
261 {}
│ │ │ -
262 }
│ │ │ -
263
│ │ │ -
264#endif // DOXYGEN
│ │ │ -
265
│ │ │ -
269 // default version, gets picked if SFINAE fails
│ │ │ -
270 template<typename T, typename = void>
│ │ │ -
│ │ │ - │ │ │ -
272 : public std::false_type
│ │ │ -
273 {};
│ │ │ -
│ │ │ -
274
│ │ │ -
275#ifndef DOXYGEN
│ │ │ -
276 // version for types with begin() and end()
│ │ │ -
277 template<typename T>
│ │ │ -
278 struct IsIterable<T, decltype(Impl::ignore(
│ │ │ -
279 std::declval<T>().begin(),
│ │ │ -
280 std::declval<T>().end(),
│ │ │ -
281 std::declval<T>().begin() != std::declval<T>().end(),
│ │ │ -
282 decltype(std::declval<T>().begin()){std::declval<T>().end()},
│ │ │ -
283 ++(std::declval<std::add_lvalue_reference_t<decltype(std::declval<T>().begin())>>()),
│ │ │ -
284 *(std::declval<T>().begin())
│ │ │ -
285 ))>
│ │ │ -
286 : public std::true_type
│ │ │ -
287 {};
│ │ │ -
288#endif
│ │ │ -
289
│ │ │ -
290#ifndef DOXYGEN
│ │ │ -
291 // this is just a forward declaration
│ │ │ -
292 template <class> struct FieldTraits;
│ │ │ -
293#endif
│ │ │ -
294
│ │ │ -
296 template <class Type>
│ │ │ - │ │ │ -
298
│ │ │ -
300 template <class Type>
│ │ │ - │ │ │ -
302
│ │ │ -
303
│ │ │ -
304#ifndef DOXYGEN
│ │ │ -
305
│ │ │ -
306 // Implementation of IsTuple
│ │ │ -
307 namespace Impl {
│ │ │ -
308
│ │ │ -
309 template<class T>
│ │ │ -
310 struct IsTuple : public std::false_type
│ │ │ -
311 {};
│ │ │ -
312
│ │ │ -
313 template<class... T>
│ │ │ -
314 struct IsTuple<std::tuple<T...>> : public std::true_type
│ │ │ -
315 {};
│ │ │ -
316
│ │ │ -
317 } // namespace Impl
│ │ │ -
318
│ │ │ -
319#endif // DOXYGEN
│ │ │ -
320
│ │ │ -
326 template<class T>
│ │ │ -
│ │ │ -
327 struct IsTuple :
│ │ │ -
328 public Impl::IsTuple<T>
│ │ │ -
329 {};
│ │ │ -
│ │ │ -
330
│ │ │ -
331
│ │ │ -
332#ifndef DOXYGEN
│ │ │ -
333
│ │ │ -
334 // Implementation of IsTupleOrDerived
│ │ │ -
335 namespace Impl {
│ │ │ -
336
│ │ │ -
337 template<class... T, class Dummy>
│ │ │ -
338 std::true_type isTupleOrDerived(const std::tuple<T...>*, Dummy)
│ │ │ -
339 { return {}; }
│ │ │ -
340
│ │ │ -
341 template<class Dummy>
│ │ │ -
342 std::false_type isTupleOrDerived(const void*, Dummy)
│ │ │ -
343 { return {}; }
│ │ │ -
344
│ │ │ -
345 } // namespace Impl
│ │ │ -
346
│ │ │ -
347#endif // DOXYGEN
│ │ │ -
348
│ │ │ -
354 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
356 public decltype(Impl::isTupleOrDerived(std::declval<T*>(), true))
│ │ │ -
357 {};
│ │ │ -
│ │ │ -
358
│ │ │ -
359
│ │ │ -
360#ifndef DOXYGEN
│ │ │ -
361
│ │ │ -
362 // Implementation of is IsIntegralConstant
│ │ │ -
363 namespace Impl {
│ │ │ -
364
│ │ │ -
365 template<class T>
│ │ │ -
366 struct IsIntegralConstant : public std::false_type
│ │ │ -
367 {};
│ │ │ -
368
│ │ │ -
369 template<class T, T t>
│ │ │ -
370 struct IsIntegralConstant<std::integral_constant<T, t>> : public std::true_type
│ │ │ -
371 {};
│ │ │ -
372
│ │ │ -
373 } // namespace Impl
│ │ │ -
374
│ │ │ -
375#endif // DOXYGEN
│ │ │ -
376
│ │ │ -
382 template<class T>
│ │ │ -
│ │ │ -
383 struct IsIntegralConstant : public Impl::IsIntegralConstant<std::decay_t<T>>
│ │ │ -
384 {};
│ │ │ -
│ │ │ -
385
│ │ │ -
386
│ │ │ -
387#ifndef DOXYGEN
│ │ │ -
388
│ │ │ -
389 namespace Impl {
│ │ │ -
390
│ │ │ - │ │ │ -
392 {
│ │ │ -
393 template <class T, T value>
│ │ │ -
394 static std::true_type check(std::integral_constant<T,value>);
│ │ │ -
395 static std::false_type check(...);
│ │ │ -
396 };
│ │ │ -
397
│ │ │ -
398 } // namespace Impl
│ │ │ -
399
│ │ │ -
400#endif // DOXYGEN
│ │ │ -
401
│ │ │ -
408 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
410 : public decltype(Impl::IsCompileTimeConstant::check(std::declval<T>()))
│ │ │ -
411 {};
│ │ │ -
│ │ │ -
412
│ │ │ -
413
│ │ │ -
414
│ │ │ -
430 template<typename... T>
│ │ │ -
│ │ │ -
431 struct
│ │ │ -
432 [[deprecated("This class is deprecated and will be removed after Dune 2.10. Use sizeof...(T) instead.")]]
│ │ │ -
433 SizeOf
│ │ │ -
434 : public std::integral_constant<std::size_t,sizeof...(T)>
│ │ │ -
435 {};
│ │ │ -
│ │ │ -
436
│ │ │ -
437
│ │ │ -
438#ifndef DOXYGEN
│ │ │ -
439
│ │ │ -
440 namespace Impl {
│ │ │ -
441
│ │ │ -
442 template<class T, T...>
│ │ │ -
443 struct IntegerSequenceHelper;
│ │ │ -
444
│ │ │ -
445 // Helper struct to compute the i-th entry of a std::integer_sequence
│ │ │ -
446 //
│ │ │ -
447 // This could also be implemented using std::get<index>(std::make_tuple(t...)).
│ │ │ -
448 // However, the gcc-6 implementation of std::make_tuple increases the instantiation
│ │ │ -
449 // depth by 15 levels for each argument, such that the maximal instantiation depth
│ │ │ -
450 // is easily hit, especially with clang where it is set to 256.
│ │ │ -
451 template<class T, T head, T... tail>
│ │ │ -
452 struct IntegerSequenceHelper<T, head, tail...>
│ │ │ -
453 {
│ │ │ -
454
│ │ │ -
455 // get first entry
│ │ │ -
456 static constexpr auto get(std::integral_constant<std::size_t, 0>)
│ │ │ -
457 {
│ │ │ -
458 return std::integral_constant<T, head>();
│ │ │ -
459 }
│ │ │ -
460
│ │ │ -
461 // call get with first entry cut off and decremented index
│ │ │ -
462 template<std::size_t index,
│ │ │ -
463 std::enable_if_t<(index > 0) and (index < sizeof...(tail)+1), int> = 0>
│ │ │ -
464 static constexpr auto get(std::integral_constant<std::size_t, index>)
│ │ │ -
465 {
│ │ │ -
466 return IntegerSequenceHelper<T, tail...>::get(std::integral_constant<std::size_t, index-1>());
│ │ │ -
467 }
│ │ │ -
468
│ │ │ -
469 // use static assertion if index exceeds size
│ │ │ -
470 template<std::size_t index,
│ │ │ -
471 std::enable_if_t<(index >= sizeof...(tail)+1), int> = 0>
│ │ │ -
472 static constexpr auto get(std::integral_constant<std::size_t, index>)
│ │ │ -
473 {
│ │ │ -
474 static_assert(index < sizeof...(tail)+1, "index used in IntegerSequenceEntry exceed size");
│ │ │ -
475 }
│ │ │ -
476 };
│ │ │ -
477
│ │ │ -
478 } // end namespace Impl
│ │ │ -
479
│ │ │ -
480#endif // DOXYGEN
│ │ │ -
481
│ │ │ -
482
│ │ │ -
491 template<class T, T... t, std::size_t index>
│ │ │ -
│ │ │ -
492 constexpr auto integerSequenceEntry(std::integer_sequence<T, t...> /*seq*/, std::integral_constant<std::size_t, index> i)
│ │ │ -
493 {
│ │ │ -
494 static_assert(index < sizeof...(t), "index used in IntegerSequenceEntry exceed size");
│ │ │ -
495 return Impl::IntegerSequenceHelper<T, t...>::get(i);
│ │ │ -
496 }
│ │ │ -
│ │ │ -
497
│ │ │ -
498
│ │ │ -
505 template<class IntegerSequence, std::size_t index>
│ │ │ - │ │ │ -
507
│ │ │ -
508#ifndef DOXYGEN
│ │ │ -
509
│ │ │ -
510 template<class T, T... t, std::size_t i>
│ │ │ -
511 struct IntegerSequenceEntry<std::integer_sequence<T, t...>, i>
│ │ │ -
512 : public decltype(Impl::IntegerSequenceHelper<T, t...>::get(std::integral_constant<std::size_t, i>()))
│ │ │ -
513 {};
│ │ │ -
514
│ │ │ -
515#endif // DOXYGEN
│ │ │ -
516
│ │ │ -
530 template<class T>
│ │ │ -
531 struct AutonomousValueType { using type = T; };
│ │ │ -
532
│ │ │ -
534 template<class T>
│ │ │ - │ │ │ -
536
│ │ │ -
538 template<class T>
│ │ │ - │ │ │ -
540
│ │ │ -
542 template<class T>
│ │ │ - │ │ │ -
544
│ │ │ -
546 template<class T>
│ │ │ -
547 struct AutonomousValueType<volatile T> : AutonomousValueType<T> {};
│ │ │ -
548
│ │ │ -
550 template<>
│ │ │ -
│ │ │ -
551 struct AutonomousValueType<std::vector<bool>::reference>
│ │ │ -
552 {
│ │ │ -
553 using type = bool;
│ │ │ -
554 };
│ │ │ -
│ │ │ -
555
│ │ │ -
557 template<class T>
│ │ │ -
558 struct AutonomousValueType<volatile const T> : AutonomousValueType<T> {};
│ │ │ -
559
│ │ │ -
587 template<class T>
│ │ │ - │ │ │ -
589
│ │ │ -
671 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
673 {
│ │ │ -
674 return v;
│ │ │ -
675 }
│ │ │ -
│ │ │ -
676
│ │ │ -
678}
│ │ │ -
679#endif
│ │ │ -
constexpr auto integerSequenceEntry(std::integer_sequence< T, t... >, std::integral_constant< std::size_t, index > i)
Get entry of std::integer_sequence.
Definition typetraits.hh:492
│ │ │ -
typename FieldTraits< Type >::real_type real_t
Convenient access to FieldTraits<Type>::real_type.
Definition typetraits.hh:301
│ │ │ -
constexpr AutonomousValue< T > autoCopy(T &&v)
Autonomous copy of an expression's value for use in auto type deduction.
Definition typetraits.hh:672
│ │ │ -
typename AutonomousValueType< T >::type AutonomousValue
Type free of internal references that T can be converted to.
Definition typetraits.hh:588
│ │ │ -
typename Impl::voider< Types... >::type void_t
Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.
Definition typetraits.hh:40
│ │ │ -
typename FieldTraits< Type >::field_type field_t
Convenient access to FieldTraits<Type>::field_type.
Definition typetraits.hh:297
│ │ │ -
STL namespace.
│ │ │ +
198 template<class T,
│ │ │ +
199 std::enable_if_t<not IsNumber<T>::value, int> = 0>
│ │ │ +
200 const T& asVector(const T& t)
│ │ │ +
201 {
│ │ │ +
202 return t;
│ │ │ +
203 }
│ │ │ +
204
│ │ │ +
205} // end namespace Impl
│ │ │ +
206
│ │ │ +
207} // end namespace Dune
│ │ │ +
208
│ │ │ +
209#endif // DUNE_COMMON_SCALARVECTORVIEW_HH
│ │ │ +
Implements a vector constructed from a given type representing a field and a compile-time given size.
│ │ │ +
Implements the dense vector interface, with an exchangeable storage class.
│ │ │ +
Documentation of the traits classes you need to write for each implementation of DenseVector or Dense...
│ │ │ +
Traits for type conversions and type information.
│ │ │ +
Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)
Read a std::tuple.
Definition streamoperators.hh:43
│ │ │ +
#define DUNE_ASSERT_BOUNDS(cond)
If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
Definition boundschecking.hh:30
│ │ │
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ -
constexpr std::integer_sequence< T, II... > tail(std::integer_sequence< T, I0, II... >)
For a sequence [head,tail...) return the tail sequence.
Definition integersequence.hh:58
│ │ │ -
constexpr std::integral_constant< T, I0 > head(std::integer_sequence< T, I0, II... >)
For a sequence [head,tail...) return the single head element.
Definition integersequence.hh:53
│ │ │ -
constexpr auto get(std::integer_sequence< T, II... >, std::integral_constant< std::size_t, pos >={})
Return the entry at position pos of the given sequence.
Definition integersequence.hh:22
│ │ │ -
Whether this type acts as a scalar in the context of (hierarchically blocked) containers.
Definition typetraits.hh:194
│ │ │ -
T field_type
export the type representing the field
Definition ftraits.hh:28
│ │ │ -
T real_type
export the type representing the real type of the field
Definition ftraits.hh:30
│ │ │ -
Just an empty class.
Definition typetraits.hh:55
│ │ │ -
Checks whether two types are interoperable.
Definition typetraits.hh:65
│ │ │ -
static constexpr bool value
True if either a conversion from T1 to T2 or vice versa exists.
Definition typetraits.hh:70
│ │ │ -
Enable typedef if two types are interoperable.
Definition typetraits.hh:81
│ │ │ -
template which always yields a false value
Definition typetraits.hh:124
│ │ │ -
template which always yields a true value
Definition typetraits.hh:134
│ │ │ -
Check if a type is callable with ()-operator and given arguments.
Definition typetraits.hh:162
│ │ │ -
Whether this type has a value of NaN.
Definition typetraits.hh:212
│ │ │ -
Type trait to determine whether an instance of T has an operator[](I), i.e. whether it can be indexed...
Definition typetraits.hh:250
│ │ │ -
typetrait to check that a class has begin() and end() members
Definition typetraits.hh:273
│ │ │ -
Check if T is a std::tuple<...>
Definition typetraits.hh:329
│ │ │ -
Check if T derived from a std::tuple<...>
Definition typetraits.hh:357
│ │ │ -
Check if T is an std::integral_constant<I, i>
Definition typetraits.hh:384
│ │ │ -
Check if T is an integral constant or any type derived from std::integral_constant.
Definition typetraits.hh:411
│ │ │ -
Compute size of variadic type list.
Definition typetraits.hh:435
│ │ │ -
Get entry of std::integer_sequence.
Definition typetraits.hh:506
│ │ │ -
Type free of internal references that T can be converted to.
Definition typetraits.hh:531
│ │ │ +
size_type size() const
size method
Definition densevector.hh:336
│ │ │ +
Traits::size_type size_type
The type used for the index access and size operation.
Definition densevector.hh:259
│ │ │
T type
Definition typetraits.hh:531
│ │ │ - │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,501 +1,213 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -typetraits.hh │ │ │ │ +scalarvectorview.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_TYPETRAITS_HH │ │ │ │ -6#define DUNE_TYPETRAITS_HH │ │ │ │ +5#ifndef DUNE_COMMON_SCALARVECTORVIEW_HH │ │ │ │ +6#define DUNE_COMMON_SCALARVECTORVIEW_HH │ │ │ │ 7 │ │ │ │ -8#include │ │ │ │ +8#include │ │ │ │ 9#include │ │ │ │ -10#include │ │ │ │ -11#include │ │ │ │ -12 │ │ │ │ -13namespace _D_u_n_e │ │ │ │ -14{ │ │ │ │ -15 │ │ │ │ -16 namespace Impl │ │ │ │ -17 { │ │ │ │ -19 │ │ │ │ -23 template │ │ │ │ -24 struct voider │ │ │ │ -25 { │ │ │ │ -26 using type = void; │ │ │ │ -27 }; │ │ │ │ -28 } │ │ │ │ -29 │ │ │ │ -31 │ │ │ │ -39 template │ │ │ │ -_4_0 using _v_o_i_d___t = typename Impl::voider::type; │ │ │ │ +10#include │ │ │ │ +11 │ │ │ │ +12#include <_d_u_n_e_/_c_o_m_m_o_n_/_d_e_n_s_e_v_e_c_t_o_r_._h_h> │ │ │ │ +13#include <_d_u_n_e_/_c_o_m_m_o_n_/_f_v_e_c_t_o_r_._h_h> │ │ │ │ +14#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ +15#include <_d_u_n_e_/_c_o_m_m_o_n_/_m_a_t_v_e_c_t_r_a_i_t_s_._h_h> │ │ │ │ +16 │ │ │ │ +17namespace _D_u_n_e { │ │ │ │ +18 │ │ │ │ +19namespace Impl { │ │ │ │ +20 │ │ │ │ +35 template │ │ │ │ +36 class ScalarVectorView : │ │ │ │ +37 public DenseVector> │ │ │ │ +38 { │ │ │ │ +39 K* dataP_; │ │ │ │ +40 using Base = DenseVector>; │ │ │ │ 41 │ │ │ │ -_5_5 struct _E_m_p_t_y {}; │ │ │ │ -56 │ │ │ │ -63 template │ │ │ │ -_6_4 struct _I_s_I_n_t_e_r_o_p_e_r_a_b_l_e │ │ │ │ -65 { │ │ │ │ -_7_0 constexpr static bool _v_a_l_u_e = std::is_convertible::value || std:: │ │ │ │ -is_convertible::value; │ │ │ │ -71 }; │ │ │ │ -72 │ │ │ │ -78 template │ │ │ │ -_7_9 struct _E_n_a_b_l_e_I_f_I_n_t_e_r_O_p_e_r_a_b_l_e │ │ │ │ -80 : public std::enable_if::value, Type> │ │ │ │ -81 {}; │ │ │ │ -82 │ │ │ │ -100 │ │ │ │ -116 │ │ │ │ -123 template │ │ │ │ -_1_2_4 struct _A_l_w_a_y_s_F_a_l_s_e : public std::false_type {}; │ │ │ │ -125 │ │ │ │ -133 template │ │ │ │ -_1_3_4 struct _A_l_w_a_y_s_T_r_u_e : public std::true_type {}; │ │ │ │ -135 │ │ │ │ -161 template │ │ │ │ -_1_6_2 struct _I_s_C_a_l_l_a_b_l_e; │ │ │ │ -163 │ │ │ │ -168 template │ │ │ │ -_1_6_9 struct _I_s_C_a_l_l_a_b_l_e │ │ │ │ -170 : public std::bool_constant< │ │ │ │ -171 std::is_invocable_r_v │ │ │ │ -172 && !std::is_member_pointer_v> │ │ │ │ -173 > {}; │ │ │ │ -174 │ │ │ │ -177 │ │ │ │ -192 template │ │ │ │ -_1_9_3 struct _I_s_N_u_m_b_e_r │ │ │ │ -194 : public std::integral_constant::value> { │ │ │ │ -195 }; │ │ │ │ +42 template │ │ │ │ +43 friend class ScalarVectorView; │ │ │ │ +44 public: │ │ │ │ +45 │ │ │ │ +47 constexpr static int dimension = 1; │ │ │ │ +48 │ │ │ │ +50 using _s_i_z_e___t_y_p_e = typename _B_a_s_e_:_:_s_i_z_e___t_y_p_e; │ │ │ │ +51 │ │ │ │ +53 using reference = std::decay_t&; │ │ │ │ +54 │ │ │ │ +56 using const_reference = const K&; │ │ │ │ +57 │ │ │ │ +58 //===== construction │ │ │ │ +59 │ │ │ │ +61 constexpr ScalarVectorView () │ │ │ │ +62 : dataP_(nullptr) │ │ │ │ +63 {} │ │ │ │ +64 │ │ │ │ +66 ScalarVectorView (K* p) : │ │ │ │ +67 dataP_(p) │ │ │ │ +68 {} │ │ │ │ +69 │ │ │ │ +71 ScalarVectorView (const ScalarVectorView &other) : │ │ │ │ +72 Base(), │ │ │ │ +73 dataP_(other.dataP_) │ │ │ │ +74 {} │ │ │ │ +75 │ │ │ │ +77 ScalarVectorView (ScalarVectorView &&other) : │ │ │ │ +78 Base(), │ │ │ │ +79 dataP_( other.dataP_ ) │ │ │ │ +80 {} │ │ │ │ +81 │ │ │ │ +83 ScalarVectorView& operator= (const ScalarVectorView& other) │ │ │ │ +84 { │ │ │ │ +85 assert(dataP_); │ │ │ │ +86 assert(other.dataP_); │ │ │ │ +87 *dataP_ = *(other.dataP_); │ │ │ │ +88 return *this; │ │ │ │ +89 } │ │ │ │ +90 │ │ │ │ +91 template │ │ │ │ +92 ScalarVectorView& operator= (const ScalarVectorView& other) │ │ │ │ +93 { │ │ │ │ +94 assert(dataP_); │ │ │ │ +95 assert(other.dataP_); │ │ │ │ +96 *dataP_ = *(other.dataP_); │ │ │ │ +97 return *this; │ │ │ │ +98 } │ │ │ │ +99 │ │ │ │ +101 template::value, int> = 0> │ │ │ │ +103 inline ScalarVectorView& operator= (const T& k) │ │ │ │ +104 { │ │ │ │ +105 *dataP_ = k; │ │ │ │ +106 return *this; │ │ │ │ +107 } │ │ │ │ +108 │ │ │ │ +110 static constexpr _s_i_z_e___t_y_p_e _s_i_z_e () │ │ │ │ +111 { │ │ │ │ +112 return 1; │ │ │ │ +113 } │ │ │ │ +114 │ │ │ │ +116 K& operator[] ([[maybe_unused]] size_type i) │ │ │ │ +117 { │ │ │ │ +118 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(i == 0); │ │ │ │ +119 return *dataP_; │ │ │ │ +120 } │ │ │ │ +121 │ │ │ │ +123 const K& operator[] ([[maybe_unused]] size_type i) const │ │ │ │ +124 { │ │ │ │ +125 _D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S(i == 0); │ │ │ │ +126 return *dataP_; │ │ │ │ +127 } │ │ │ │ +128 }; // class ScalarVectorView │ │ │ │ +129 │ │ │ │ +130} // namespace Impl │ │ │ │ +131 │ │ │ │ +132 │ │ │ │ +133 template< class K> │ │ │ │ +134 struct DenseMatVecTraits< Impl::ScalarVectorView > │ │ │ │ +135 { │ │ │ │ +136 using derived_type = Impl::ScalarVectorView; │ │ │ │ +137 using value_type = std::remove_const_t; │ │ │ │ +138 using size_type = std::size_t; │ │ │ │ +139 }; │ │ │ │ +140 │ │ │ │ +141 template< class K > │ │ │ │ +142 struct FieldTraits< Impl::ScalarVectorView > : public FieldTraits> {}; │ │ │ │ +143 │ │ │ │ +144 template │ │ │ │ +145 struct AutonomousValueType> │ │ │ │ +146 { │ │ │ │ +147 using _t_y_p_e = FieldVector,1>; │ │ │ │ +148 }; │ │ │ │ +149 │ │ │ │ +150namespace Impl { │ │ │ │ +151 │ │ │ │ +163 template │ │ │ │ +164 inline std::istream &_o_p_e_r_a_t_o_r_>_>_ ( std::istream &in, ScalarVectorView &v │ │ │ │ +) │ │ │ │ +165 { │ │ │ │ +166 K w; │ │ │ │ +167 if(in >> w) │ │ │ │ +168 v = w; │ │ │ │ +169 return in; │ │ │ │ +170 } │ │ │ │ +171 │ │ │ │ +172 │ │ │ │ +174 template::value, int> = 0> │ │ │ │ +176 auto asVector(T& t) │ │ │ │ +177 { │ │ │ │ +178 return ScalarVectorView{&t}; │ │ │ │ +179 } │ │ │ │ +180 │ │ │ │ +182 template::value, int> = 0> │ │ │ │ +184 auto asVector(const T& t) │ │ │ │ +185 { │ │ │ │ +186 return ScalarVectorView{&t}; │ │ │ │ +187 } │ │ │ │ +188 │ │ │ │ +190 template::value, int> = 0> │ │ │ │ +192 T& asVector(T& t) │ │ │ │ +193 { │ │ │ │ +194 return t; │ │ │ │ +195 } │ │ │ │ 196 │ │ │ │ -197#ifndef DOXYGEN │ │ │ │ -198 │ │ │ │ -199 template │ │ │ │ -200 struct _I_s_N_u_m_b_e_r<_s_t_d::complex> │ │ │ │ -201 : public std::integral_constant::value> { │ │ │ │ -202 }; │ │ │ │ -203 │ │ │ │ -204#endif // DOXYGEN │ │ │ │ -205 │ │ │ │ -207 │ │ │ │ -210 template │ │ │ │ -_2_1_1 struct _H_a_s_N_a_N │ │ │ │ -212 : public std::integral_constant::value> { │ │ │ │ -213 }; │ │ │ │ -214 │ │ │ │ -215#ifndef DOXYGEN │ │ │ │ -216 │ │ │ │ -217 template │ │ │ │ -218 struct _H_a_s_N_a_N<_s_t_d::complex> │ │ │ │ -219 : public std::integral_constant::value> { │ │ │ │ -220 }; │ │ │ │ -221 │ │ │ │ -222#endif // DOXYGEN │ │ │ │ -223 │ │ │ │ -224#ifndef DOXYGEN │ │ │ │ -225 │ │ │ │ -226 namespace Impl { │ │ │ │ -227 │ │ │ │ -228 template │ │ │ │ -229 struct IsIndexable │ │ │ │ -230 : public std::false_type │ │ │ │ -231 {}; │ │ │ │ -232 │ │ │ │ -233 template │ │ │ │ -234 struct IsIndexable() │ │ │ │ -[std::declval()]) > 0),int>::type> │ │ │ │ -235 : public std::true_type │ │ │ │ -236 {}; │ │ │ │ -237 │ │ │ │ -238 } │ │ │ │ -239 │ │ │ │ -240#endif // DOXYGEN │ │ │ │ -241 │ │ │ │ -243 │ │ │ │ -247 template │ │ │ │ -_2_4_8 struct _I_s_I_n_d_e_x_a_b_l_e │ │ │ │ -249 : public Impl::IsIndexable │ │ │ │ -250 {}; │ │ │ │ -251 │ │ │ │ -252#ifndef DOXYGEN │ │ │ │ -253 │ │ │ │ -254 namespace Impl { │ │ │ │ -255 // This function does nothing. │ │ │ │ -256 // By passing expressions to this function one can avoid │ │ │ │ -257 // "value computed is not used" warnings that may show up │ │ │ │ -258 // in a comma expression. │ │ │ │ -259 template │ │ │ │ -260 void ignore(T&&... /*t*/) │ │ │ │ -261 {} │ │ │ │ -262 } │ │ │ │ -263 │ │ │ │ -264#endif // DOXYGEN │ │ │ │ -265 │ │ │ │ -269 // default version, gets picked if SFINAE fails │ │ │ │ -270 template │ │ │ │ -_2_7_1 struct _I_s_I_t_e_r_a_b_l_e │ │ │ │ -272 : public std::false_type │ │ │ │ -273 {}; │ │ │ │ -274 │ │ │ │ -275#ifndef DOXYGEN │ │ │ │ -276 // version for types with begin() and end() │ │ │ │ -277 template │ │ │ │ -278 struct _I_s_I_t_e_r_a_b_l_e().begin(), │ │ │ │ -280 std::declval().end(), │ │ │ │ -281 std::declval().begin() != std::declval().end(), │ │ │ │ -282 decltype(std::declval().begin()){std::declval().end()}, │ │ │ │ -283 ++(std::declval │ │ │ │ -().begin())>>()), │ │ │ │ -284 *(std::declval().begin()) │ │ │ │ -285 ))> │ │ │ │ -286 : public std::true_type │ │ │ │ -287 {}; │ │ │ │ -288#endif │ │ │ │ -289 │ │ │ │ -290#ifndef DOXYGEN │ │ │ │ -291 // this is just a forward declaration │ │ │ │ -292 template struct FieldTraits; │ │ │ │ -293#endif │ │ │ │ -294 │ │ │ │ -296 template │ │ │ │ -_2_9_7 using _f_i_e_l_d___t = typename _F_i_e_l_d_T_r_a_i_t_s_<_T_y_p_e_>_:_:_f_i_e_l_d___t_y_p_e; │ │ │ │ -298 │ │ │ │ -300 template │ │ │ │ -_3_0_1 using _r_e_a_l___t = typename _F_i_e_l_d_T_r_a_i_t_s_<_T_y_p_e_>_:_:_r_e_a_l___t_y_p_e; │ │ │ │ -302 │ │ │ │ -303 │ │ │ │ -304#ifndef DOXYGEN │ │ │ │ -305 │ │ │ │ -306 // Implementation of IsTuple │ │ │ │ -307 namespace Impl { │ │ │ │ -308 │ │ │ │ -309 template │ │ │ │ -310 struct _I_s_T_u_p_l_e : public std::false_type │ │ │ │ -311 {}; │ │ │ │ -312 │ │ │ │ -313 template │ │ │ │ -314 struct _I_s_T_u_p_l_e<_s_t_d::tuple> : public std::true_type │ │ │ │ -315 {}; │ │ │ │ -316 │ │ │ │ -317 } // namespace Impl │ │ │ │ -318 │ │ │ │ -319#endif // DOXYGEN │ │ │ │ -320 │ │ │ │ -326 template │ │ │ │ -_3_2_7 struct _I_s_T_u_p_l_e : │ │ │ │ -328 public Impl::IsTuple │ │ │ │ -329 {}; │ │ │ │ -330 │ │ │ │ -331 │ │ │ │ -332#ifndef DOXYGEN │ │ │ │ -333 │ │ │ │ -334 // Implementation of IsTupleOrDerived │ │ │ │ -335 namespace Impl { │ │ │ │ -336 │ │ │ │ -337 template │ │ │ │ -338 std::true_type isTupleOrDerived(const std::tuple*, Dummy) │ │ │ │ -339 { return {}; } │ │ │ │ -340 │ │ │ │ -341 template │ │ │ │ -342 std::false_type isTupleOrDerived(const void*, Dummy) │ │ │ │ -343 { return {}; } │ │ │ │ -344 │ │ │ │ -345 } // namespace Impl │ │ │ │ -346 │ │ │ │ -347#endif // DOXYGEN │ │ │ │ -348 │ │ │ │ -354 template │ │ │ │ -_3_5_5 struct _I_s_T_u_p_l_e_O_r_D_e_r_i_v_e_d : │ │ │ │ -356 public decltype(Impl::isTupleOrDerived(std::declval(), true)) │ │ │ │ -357 {}; │ │ │ │ -358 │ │ │ │ -359 │ │ │ │ -360#ifndef DOXYGEN │ │ │ │ -361 │ │ │ │ -362 // Implementation of is IsIntegralConstant │ │ │ │ -363 namespace Impl { │ │ │ │ -364 │ │ │ │ -365 template │ │ │ │ -366 struct _I_s_I_n_t_e_g_r_a_l_C_o_n_s_t_a_n_t : public std::false_type │ │ │ │ -367 {}; │ │ │ │ -368 │ │ │ │ -369 template │ │ │ │ -370 struct IsIntegralConstant<_s_t_d::integral_constant> : public std:: │ │ │ │ -true_type │ │ │ │ -371 {}; │ │ │ │ -372 │ │ │ │ -373 } // namespace Impl │ │ │ │ -374 │ │ │ │ -375#endif // DOXYGEN │ │ │ │ -376 │ │ │ │ -382 template │ │ │ │ -_3_8_3 struct _I_s_I_n_t_e_g_r_a_l_C_o_n_s_t_a_n_t : public Impl::IsIntegralConstant> │ │ │ │ -384 {}; │ │ │ │ -385 │ │ │ │ -386 │ │ │ │ -387#ifndef DOXYGEN │ │ │ │ -388 │ │ │ │ -389 namespace Impl { │ │ │ │ -390 │ │ │ │ -391 struct _I_s_C_o_m_p_i_l_e_T_i_m_e_C_o_n_s_t_a_n_t │ │ │ │ -392 { │ │ │ │ -393 template │ │ │ │ -394 static std::true_type check(std::integral_constant); │ │ │ │ -395 static std::false_type check(...); │ │ │ │ -396 }; │ │ │ │ -397 │ │ │ │ -398 } // namespace Impl │ │ │ │ -399 │ │ │ │ -400#endif // DOXYGEN │ │ │ │ -401 │ │ │ │ -408 template │ │ │ │ -_4_0_9 struct _I_s_C_o_m_p_i_l_e_T_i_m_e_C_o_n_s_t_a_n_t │ │ │ │ -410 : public decltype(Impl::IsCompileTimeConstant::check(std::declval())) │ │ │ │ -411 {}; │ │ │ │ -412 │ │ │ │ -413 │ │ │ │ -414 │ │ │ │ -430 template │ │ │ │ -_4_3_1 struct │ │ │ │ -432 [[deprecated("This class is deprecated and will be removed after Dune 2.10. │ │ │ │ -Use sizeof...(T) instead.")]] │ │ │ │ -433 _S_i_z_e_O_f │ │ │ │ -434 : public std::integral_constant │ │ │ │ -435 {}; │ │ │ │ -436 │ │ │ │ -437 │ │ │ │ -438#ifndef DOXYGEN │ │ │ │ -439 │ │ │ │ -440 namespace Impl { │ │ │ │ -441 │ │ │ │ -442 template │ │ │ │ -443 struct IntegerSequenceHelper; │ │ │ │ -444 │ │ │ │ -445 // Helper struct to compute the i-th entry of a std::integer_sequence │ │ │ │ -446 // │ │ │ │ -447 // This could also be implemented using std::get(std::make_tuple │ │ │ │ -(t...)). │ │ │ │ -448 // However, the gcc-6 implementation of std::make_tuple increases the │ │ │ │ -instantiation │ │ │ │ -449 // depth by 15 levels for each argument, such that the maximal │ │ │ │ -instantiation depth │ │ │ │ -450 // is easily hit, especially with clang where it is set to 256. │ │ │ │ -451 template │ │ │ │ -452 struct IntegerSequenceHelper │ │ │ │ -453 { │ │ │ │ -454 │ │ │ │ -455 // get first entry │ │ │ │ -456 static constexpr auto _g_e_t(std::integral_constant) │ │ │ │ -457 { │ │ │ │ -458 return std::integral_constant(); │ │ │ │ -459 } │ │ │ │ -460 │ │ │ │ -461 // call get with first entry cut off and decremented index │ │ │ │ -462 template 0) and (index < sizeof...(tail)+1), int> = 0> │ │ │ │ -464 static constexpr auto get(std::integral_constant) │ │ │ │ -465 { │ │ │ │ -466 return IntegerSequenceHelper::get(std::integral_constant()); │ │ │ │ -467 } │ │ │ │ -468 │ │ │ │ -469 // use static assertion if index exceeds size │ │ │ │ -470 template= sizeof...(tail)+1), int> = 0> │ │ │ │ -472 static constexpr auto _g_e_t(std::integral_constant) │ │ │ │ -473 { │ │ │ │ -474 static_assert(index < sizeof...(tail)+1, "index used in │ │ │ │ -IntegerSequenceEntry exceed size"); │ │ │ │ -475 } │ │ │ │ -476 }; │ │ │ │ -477 │ │ │ │ -478 } // end namespace Impl │ │ │ │ -479 │ │ │ │ -480#endif // DOXYGEN │ │ │ │ -481 │ │ │ │ -482 │ │ │ │ -491 template │ │ │ │ -_4_9_2 constexpr auto _i_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y(std::integer_sequence /*seq*/, │ │ │ │ -std::integral_constant i) │ │ │ │ -493 { │ │ │ │ -494 static_assert(index < sizeof...(t), "index used in IntegerSequenceEntry │ │ │ │ -exceed size"); │ │ │ │ -495 return Impl::IntegerSequenceHelper::get(i); │ │ │ │ -496 } │ │ │ │ -497 │ │ │ │ -498 │ │ │ │ -505 template │ │ │ │ -_5_0_6 struct _I_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y; │ │ │ │ -507 │ │ │ │ -508#ifndef DOXYGEN │ │ │ │ -509 │ │ │ │ -510 template │ │ │ │ -511 struct _I_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y<_s_t_d::integer_sequence, i> │ │ │ │ -512 : public decltype(Impl::IntegerSequenceHelper::get(std:: │ │ │ │ -integral_constant())) │ │ │ │ -513 {}; │ │ │ │ -514 │ │ │ │ -515#endif // DOXYGEN │ │ │ │ -516 │ │ │ │ -530 template │ │ │ │ -_5_3_1 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e { using _t_y_p_e = T; }; │ │ │ │ -532 │ │ │ │ -534 template │ │ │ │ -_5_3_5 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e : _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_T_> {}; │ │ │ │ -536 │ │ │ │ -538 template │ │ │ │ -_5_3_9 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e : _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_T_> {}; │ │ │ │ -540 │ │ │ │ -542 template │ │ │ │ -_5_4_3 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e : _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e {}; │ │ │ │ -544 │ │ │ │ -546 template │ │ │ │ -_5_4_7 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e : _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e {}; │ │ │ │ -548 │ │ │ │ -550 template<> │ │ │ │ -_5_5_1 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e<_s_t_d::vector::reference> │ │ │ │ -552 { │ │ │ │ -_5_5_3 using _t_y_p_e = bool; │ │ │ │ -554 }; │ │ │ │ -555 │ │ │ │ -557 template │ │ │ │ -_5_5_8 struct _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e : _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e {}; │ │ │ │ -559 │ │ │ │ -587 template │ │ │ │ -_5_8_8 using _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e = typename _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_T_>_:_:_t_y_p_e; │ │ │ │ -589 │ │ │ │ -671 template │ │ │ │ -_6_7_2 constexpr _A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_<_T_> _a_u_t_o_C_o_p_y(T &&v) │ │ │ │ -673 { │ │ │ │ -674 return v; │ │ │ │ -675 } │ │ │ │ -676 │ │ │ │ -678} │ │ │ │ -679#endif │ │ │ │ -_D_u_n_e_:_:_i_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y │ │ │ │ -constexpr auto integerSequenceEntry(std::integer_sequence< T, t... >, std:: │ │ │ │ -integral_constant< std::size_t, index > i) │ │ │ │ -Get entry of std::integer_sequence. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:492 │ │ │ │ -_D_u_n_e_:_:_r_e_a_l___t │ │ │ │ -typename FieldTraits< Type >::real_type real_t │ │ │ │ -Convenient access to FieldTraits::real_type. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:301 │ │ │ │ -_D_u_n_e_:_:_a_u_t_o_C_o_p_y │ │ │ │ -constexpr AutonomousValue< T > autoCopy(T &&v) │ │ │ │ -Autonomous copy of an expression's value for use in auto type deduction. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:672 │ │ │ │ -_D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e │ │ │ │ -typename AutonomousValueType< T >::type AutonomousValue │ │ │ │ -Type free of internal references that T can be converted to. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:588 │ │ │ │ -_D_u_n_e_:_:_v_o_i_d___t │ │ │ │ -typename Impl::voider< Types... >::type void_t │ │ │ │ -Is void for all valid input types. The workhorse for C++11 SFINAE-techniques. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:40 │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___t │ │ │ │ -typename FieldTraits< Type >::field_type field_t │ │ │ │ -Convenient access to FieldTraits::field_type. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:297 │ │ │ │ -_s_t_d │ │ │ │ -STL namespace. │ │ │ │ +198 template::value, int> = 0> │ │ │ │ +200 const T& asVector(const T& t) │ │ │ │ +201 { │ │ │ │ +202 return t; │ │ │ │ +203 } │ │ │ │ +204 │ │ │ │ +205} // end namespace Impl │ │ │ │ +206 │ │ │ │ +207} // end namespace Dune │ │ │ │ +208 │ │ │ │ +209#endif // DUNE_COMMON_SCALARVECTORVIEW_HH │ │ │ │ +_f_v_e_c_t_o_r_._h_h │ │ │ │ +Implements a vector constructed from a given type representing a field and a │ │ │ │ +compile-time given size. │ │ │ │ +_d_e_n_s_e_v_e_c_t_o_r_._h_h │ │ │ │ +Implements the dense vector interface, with an exchangeable storage class. │ │ │ │ +_m_a_t_v_e_c_t_r_a_i_t_s_._h_h │ │ │ │ +Documentation of the traits classes you need to write for each implementation │ │ │ │ +of DenseVector or Dense... │ │ │ │ +_t_y_p_e_t_r_a_i_t_s_._h_h │ │ │ │ +Traits for type conversions and type information. │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_>_> │ │ │ │ +Stream & operator>>(Stream &stream, std::tuple< Ts... > &t) │ │ │ │ +Read a std::tuple. │ │ │ │ +DDeeffiinniittiioonn streamoperators.hh:43 │ │ │ │ +_D_U_N_E___A_S_S_E_R_T___B_O_U_N_D_S │ │ │ │ +#define DUNE_ASSERT_BOUNDS(cond) │ │ │ │ +If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do │ │ │ │ +nothing. │ │ │ │ +DDeeffiinniittiioonn boundschecking.hh:30 │ │ │ │ _D_u_n_e │ │ │ │ Dune namespace. │ │ │ │ DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ -_D_u_n_e_:_:_t_a_i_l │ │ │ │ -constexpr std::integer_sequence< T, II... > tail(std::integer_sequence< T, I0, │ │ │ │ -II... >) │ │ │ │ -For a sequence [head,tail...) return the tail sequence. │ │ │ │ -DDeeffiinniittiioonn integersequence.hh:58 │ │ │ │ -_D_u_n_e_:_:_h_e_a_d │ │ │ │ -constexpr std::integral_constant< T, I0 > head(std::integer_sequence< T, I0, │ │ │ │ -II... >) │ │ │ │ -For a sequence [head,tail...) return the single head element. │ │ │ │ -DDeeffiinniittiioonn integersequence.hh:53 │ │ │ │ -_D_u_n_e_:_:_g_e_t │ │ │ │ -constexpr auto get(std::integer_sequence< T, II... >, std::integral_constant< │ │ │ │ -std::size_t, pos >={}) │ │ │ │ -Return the entry at position pos of the given sequence. │ │ │ │ -DDeeffiinniittiioonn integersequence.hh:22 │ │ │ │ -_D_u_n_e_:_:_I_s_N_u_m_b_e_r │ │ │ │ -Whether this type acts as a scalar in the context of (hierarchically blocked) │ │ │ │ -containers. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:194 │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ -T field_type │ │ │ │ -export the type representing the field │ │ │ │ -DDeeffiinniittiioonn ftraits.hh:28 │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_:_:_r_e_a_l___t_y_p_e │ │ │ │ -T real_type │ │ │ │ -export the type representing the real type of the field │ │ │ │ -DDeeffiinniittiioonn ftraits.hh:30 │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y │ │ │ │ -Just an empty class. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:55 │ │ │ │ -_D_u_n_e_:_:_I_s_I_n_t_e_r_o_p_e_r_a_b_l_e │ │ │ │ -Checks whether two types are interoperable. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:65 │ │ │ │ -_D_u_n_e_:_:_I_s_I_n_t_e_r_o_p_e_r_a_b_l_e_:_:_v_a_l_u_e │ │ │ │ -static constexpr bool value │ │ │ │ -True if either a conversion from T1 to T2 or vice versa exists. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:70 │ │ │ │ -_D_u_n_e_:_:_E_n_a_b_l_e_I_f_I_n_t_e_r_O_p_e_r_a_b_l_e │ │ │ │ -Enable typedef if two types are interoperable. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:81 │ │ │ │ -_D_u_n_e_:_:_A_l_w_a_y_s_F_a_l_s_e │ │ │ │ -template which always yields a false value │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:124 │ │ │ │ -_D_u_n_e_:_:_A_l_w_a_y_s_T_r_u_e │ │ │ │ -template which always yields a true value │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:134 │ │ │ │ -_D_u_n_e_:_:_I_s_C_a_l_l_a_b_l_e │ │ │ │ -Check if a type is callable with ()-operator and given arguments. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:162 │ │ │ │ -_D_u_n_e_:_:_H_a_s_N_a_N │ │ │ │ -Whether this type has a value of NaN. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:212 │ │ │ │ -_D_u_n_e_:_:_I_s_I_n_d_e_x_a_b_l_e │ │ │ │ -Type trait to determine whether an instance of T has an operator[](I), i.e. │ │ │ │ -whether it can be indexed... │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:250 │ │ │ │ -_D_u_n_e_:_:_I_s_I_t_e_r_a_b_l_e │ │ │ │ -typetrait to check that a class has begin() and end() members │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:273 │ │ │ │ -_D_u_n_e_:_:_I_s_T_u_p_l_e │ │ │ │ -Check if T is a std::tuple<...> │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:329 │ │ │ │ -_D_u_n_e_:_:_I_s_T_u_p_l_e_O_r_D_e_r_i_v_e_d │ │ │ │ -Check if T derived from a std::tuple<...> │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:357 │ │ │ │ -_D_u_n_e_:_:_I_s_I_n_t_e_g_r_a_l_C_o_n_s_t_a_n_t │ │ │ │ -Check if T is an std::integral_constant │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:384 │ │ │ │ -_D_u_n_e_:_:_I_s_C_o_m_p_i_l_e_T_i_m_e_C_o_n_s_t_a_n_t │ │ │ │ -Check if T is an integral constant or any type derived from std:: │ │ │ │ -integral_constant. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:411 │ │ │ │ -_D_u_n_e_:_:_S_i_z_e_O_f │ │ │ │ -Compute size of variadic type list. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:435 │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_g_e_r_S_e_q_u_e_n_c_e_E_n_t_r_y │ │ │ │ -Get entry of std::integer_sequence. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:506 │ │ │ │ -_D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e │ │ │ │ -Type free of internal references that T can be converted to. │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:531 │ │ │ │ +_D_u_n_e_:_:_D_e_n_s_e_V_e_c_t_o_r_<_ _S_c_a_l_a_r_V_e_c_t_o_r_V_i_e_w_<_ _K_ _>_ _>_:_:_s_i_z_e │ │ │ │ +size_type size() const │ │ │ │ +size method │ │ │ │ +DDeeffiinniittiioonn densevector.hh:336 │ │ │ │ +_D_u_n_e_:_:_D_e_n_s_e_V_e_c_t_o_r_<_ _S_c_a_l_a_r_V_e_c_t_o_r_V_i_e_w_<_ _K_ _>_ _>_:_:_s_i_z_e___t_y_p_e │ │ │ │ +Traits::size_type size_type │ │ │ │ +The type used for the index access and size operation. │ │ │ │ +DDeeffiinniittiioonn densevector.hh:259 │ │ │ │ _D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_:_:_t_y_p_e │ │ │ │ T type │ │ │ │ DDeeffiinniittiioonn typetraits.hh:531 │ │ │ │ -_D_u_n_e_:_:_A_u_t_o_n_o_m_o_u_s_V_a_l_u_e_T_y_p_e_<_ _s_t_d_:_:_v_e_c_t_o_r_<_ _b_o_o_l_ _>_:_:_r_e_f_e_r_e_n_c_e_ _>_:_:_t_y_p_e │ │ │ │ -bool type │ │ │ │ -DDeeffiinniittiioonn typetraits.hh:553 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00026.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typelist.hh File Reference │ │ │ +dune-common: concepts.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -69,89 +69,19 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -
│ │ │ -Classes | │ │ │ -Namespaces | │ │ │ -Typedefs | │ │ │ -Functions
│ │ │ -
typelist.hh File Reference
│ │ │ +
concepts.hh File Reference
│ │ │
│ │ │
│ │ │ -
#include <type_traits>
│ │ │ -#include <tuple>
│ │ │ -#include <utility>
│ │ │ -
│ │ │ + │ │ │

Go to the source code of this file.

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

│ │ │ -Classes

struct  Dune::MetaType< T >
 A type that refers to another type. More...
 
struct  Dune::IsTypeList< T >
 Check if given type is a TypeList. More...
 
struct  Dune::IsTypeList< TypeList< T... > >
 Check if given type is a TypeList. More...
 
struct  Dune::IsEmptyTypeList< T >
 Check if given type is an empty TypeList. More...
 
struct  Dune::TypeListSize< T >
 
struct  Dune::TypeListSize< TypeList< T... > >
 Get size of TypeList. More...
 
struct  Dune::TypeListElement< i, T >
 
struct  Dune::TypeListElement< i, TypeList< T... > >
 Get element of TypeList. More...
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Typedefs

template<class... T>
using Dune::TypeList = std::tuple< MetaType< T >... >
 A simple type list.
 
template<std::size_t i, class T >
using Dune::TypeListEntry_t = typename TypeListElement< i, T >::type
 Shortcut for TypeListElement<i, T>::type;.
 
template<template< class... > class Target, class TL >
using Dune::UnpackTypeList_t = typename Impl::UnpackTypeList< Target, TL >::type
 Unpack Dune::TypeList.
 
template<template< class... > class Target, class... T>
using Dune::UniqueTypes_t = typename Impl::UniqueTypesHelper< Target, TypeList< T... > >::type
 Remove duplicates from a list of types.
 
template<class NonUniqueTypeList >
using Dune::UniqueTypeList_t = typename Impl::UniqueTypesHelper< TypeList, NonUniqueTypeList >::type
 Remove duplicates from a Dune::TypeList.
 
│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -

│ │ │ -Functions

template<class... T>
constexpr auto Dune::uniqueTypeList (TypeList< T... > list)
 Remove duplicates from a Dune::TypeList.
 
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,70 +1,10 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -typelist.hh File Reference │ │ │ │ -#include │ │ │ │ -#include │ │ │ │ -#include │ │ │ │ +concepts.hh File Reference │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -struct   _D_u_n_e_:_:_M_e_t_a_T_y_p_e_<_ _T_ _> │ │ │ │ -  A type that refers to another type. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_y_p_e_L_i_s_t_<_ _T_ _> │ │ │ │ -  Check if given type is a TypeList. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_y_p_e_L_i_s_t_<_ _T_y_p_e_L_i_s_t_<_ _T_._._._ _>_ _> │ │ │ │ -  Check if given type is a TypeList. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_E_m_p_t_y_T_y_p_e_L_i_s_t_<_ _T_ _> │ │ │ │ -  Check if given type is an empty TypeList. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_y_p_e_L_i_s_t_S_i_z_e_<_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_y_p_e_L_i_s_t_S_i_z_e_<_ _T_y_p_e_L_i_s_t_<_ _T_._._._ _>_ _> │ │ │ │ -  Get size of TypeList. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_l_e_m_e_n_t_<_ _i_,_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_l_e_m_e_n_t_<_ _i_,_ _T_y_p_e_L_i_s_t_<_ _T_._._._ _>_ _> │ │ │ │ -  Get element of TypeList. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -NNaammeessppaacceess │ │ │ │ -namespace   _D_u_n_e │ │ │ │ -  _D_u_n_e namespace. │ │ │ │ -  │ │ │ │ -TTyyppeeddeeffss │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_T_y_p_e_L_i_s_t = std::tuple< _M_e_t_a_T_y_p_e< T >... > │ │ │ │ -  A simple type list. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_n_t_r_y___t = typename _T_y_p_e_L_i_s_t_E_l_e_m_e_n_t< i, T >::type │ │ │ │ -  Shortcut for TypeListElement::type;. │ │ │ │ -  │ │ │ │ -template class Target, class TL > │ │ │ │ -using  _D_u_n_e_:_:_U_n_p_a_c_k_T_y_p_e_L_i_s_t___t = typename Impl::UnpackTypeList< Target, TL >:: │ │ │ │ - type │ │ │ │ -  Unpack _D_u_n_e_:_:_T_y_p_e_L_i_s_t. │ │ │ │ -  │ │ │ │ -template class Target, class... T> │ │ │ │ -using  _D_u_n_e_:_:_U_n_i_q_u_e_T_y_p_e_s___t = typename Impl::UniqueTypesHelper< Target, │ │ │ │ - _T_y_p_e_L_i_s_t< T... > >::type │ │ │ │ -  Remove duplicates from a list of types. │ │ │ │ -  │ │ │ │ -template │ │ │ │ -using  _D_u_n_e_:_:_U_n_i_q_u_e_T_y_p_e_L_i_s_t___t = typename Impl::UniqueTypesHelper< _T_y_p_e_L_i_s_t, │ │ │ │ - NonUniqueTypeList >::type │ │ │ │ -  Remove duplicates from a _D_u_n_e_:_:_T_y_p_e_L_i_s_t. │ │ │ │ -  │ │ │ │ -FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -constexpr auto  _D_u_n_e_:_:_u_n_i_q_u_e_T_y_p_e_L_i_s_t (_T_y_p_e_L_i_s_t< T... > list) │ │ │ │ -  Remove duplicates from a _D_u_n_e_:_:_T_y_p_e_L_i_s_t. │ │ │ │ -  │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: typelist.hh Source File │ │ │ +dune-common: concepts.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,148 +74,44 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ -
typelist.hh
│ │ │ +
concepts.hh
│ │ │
│ │ │
│ │ │ -Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ -
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ -
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ -
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_COMMON_TYPELIST_HH
│ │ │ -
6#define DUNE_COMMON_TYPELIST_HH
│ │ │ +Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ +
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ +
3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ +
4// vi: set et ts=4 sw=2 sts=2:
│ │ │ +
5#ifndef DUNE_COMMON_CONCEPTS_HH
│ │ │ +
6#define DUNE_COMMON_CONCEPTS_HH
│ │ │
7
│ │ │ -
8#include <type_traits>
│ │ │ -
9#include <tuple>
│ │ │ -
10#include <utility>
│ │ │ -
11
│ │ │ -
12namespace Dune {
│ │ │ -
13
│ │ │ -
32 template<class T>
│ │ │ -
│ │ │ -
33 struct MetaType {
│ │ │ -
35 using type = T;
│ │ │ -
36 };
│ │ │ -
│ │ │ -
37
│ │ │ -
86 template<class... T>
│ │ │ -
87 using TypeList = std::tuple<MetaType<T>...>;
│ │ │ -
88
│ │ │ -
89
│ │ │ -
90
│ │ │ -
99 template<class T>
│ │ │ -
100 struct IsTypeList : std::false_type {};
│ │ │ -
101
│ │ │ -
107 template<class... T>
│ │ │ -
108 struct IsTypeList<TypeList<T...> > : std::true_type {};
│ │ │ -
109
│ │ │ -
110
│ │ │ -
111
│ │ │ -
120 template<class T>
│ │ │ -
121 struct IsEmptyTypeList : std::is_same<T, TypeList<> > {};
│ │ │ -
122
│ │ │ -
123
│ │ │ -
124
│ │ │ -
125 template<class T>
│ │ │ -
126 struct TypeListSize {};
│ │ │ -
127
│ │ │ -
136 template<class... T>
│ │ │ -
137 struct TypeListSize<TypeList<T...>> : std::integral_constant<std::size_t, sizeof...(T)> {};
│ │ │ -
138
│ │ │ -
139
│ │ │ -
140
│ │ │ -
141 template<std::size_t i, class T>
│ │ │ - │ │ │ -
143
│ │ │ -
149 template<std::size_t i, class... T>
│ │ │ -
│ │ │ -
150 struct TypeListElement<i, TypeList<T...>>
│ │ │ -
151 {
│ │ │ -
157 using type = typename std::tuple_element<i, std::tuple<T...>>::type;
│ │ │ -
158
│ │ │ -
164 using Type = type;
│ │ │ -
165 };
│ │ │ -
│ │ │ -
166
│ │ │ -
170 template<std::size_t i, class T>
│ │ │ - │ │ │ -
172
│ │ │ -
173 namespace Impl {
│ │ │ -
174
│ │ │ -
175 template<template<class...> class Target, class ToDoList, class... Processed>
│ │ │ -
176 struct UniqueTypesHelper;
│ │ │ -
177
│ │ │ -
178 template<template<class...> class Target, class... Processed>
│ │ │ -
179 struct UniqueTypesHelper<Target, TypeList<>, Processed...>
│ │ │ -
180 {
│ │ │ -
181 using type = Target<Processed...>;
│ │ │ -
182 };
│ │ │ -
183
│ │ │ -
184 template<template<class...> class Target, class T0, class... T, class... Processed>
│ │ │ -
185 struct UniqueTypesHelper<Target, TypeList<T0, T...>, Processed...>
│ │ │ -
186 {
│ │ │ -
187 using type = std::conditional_t<
│ │ │ -
188 std::disjunction<std::is_same<T0, Processed>...>::value,
│ │ │ -
189 typename UniqueTypesHelper<Target, TypeList<T...>, Processed...>::type,
│ │ │ -
190 typename UniqueTypesHelper<Target, TypeList<T...>, T0, Processed...>::type>;
│ │ │ -
191 };
│ │ │ -
192
│ │ │ -
193 // Helper for unpacking Dune::TypeList
│ │ │ -
194 template<template<class...> class Target, class TL>
│ │ │ -
195 struct UnpackTypeList;
│ │ │ -
196
│ │ │ -
197 template<template<class...> class Target, class... T>
│ │ │ -
198 struct UnpackTypeList<Target, Dune::TypeList<T...>>
│ │ │ -
199 {
│ │ │ -
200 using type = Target<T...>;
│ │ │ -
201 };
│ │ │ -
202
│ │ │ -
203 } // namespace Impl
│ │ │ -
204
│ │ │ -
209 template<template<class...> class Target, class TL>
│ │ │ -
210 using UnpackTypeList_t = typename Impl::UnpackTypeList<Target, TL>::type;
│ │ │ -
211
│ │ │ -
219 template<template<class...> class Target, class... T>
│ │ │ -
220 using UniqueTypes_t = typename Impl::UniqueTypesHelper<Target, TypeList<T...>>::type;
│ │ │ -
221
│ │ │ -
227 template<class NonUniqueTypeList>
│ │ │ -
228 using UniqueTypeList_t = typename Impl::UniqueTypesHelper<TypeList, NonUniqueTypeList>::type;
│ │ │ -
229
│ │ │ -
235 template<class... T>
│ │ │ -
│ │ │ -
236 constexpr auto uniqueTypeList(TypeList<T...> list)
│ │ │ -
237 {
│ │ │ -
238 return typename Impl::UniqueTypesHelper<TypeList, TypeList<T...>>::type{};
│ │ │ -
239 }
│ │ │ -
│ │ │ -
240
│ │ │ -
241
│ │ │ -
242
│ │ │ -
243} // namespace Dune
│ │ │ -
244
│ │ │ -
245#endif // DUNE_COMMON_TYPELIST_HH
│ │ │ -
std::tuple< MetaType< T >... > TypeList
A simple type list.
Definition typelist.hh:87
│ │ │ -
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ -
typename Impl::UnpackTypeList< Target, TL >::type UnpackTypeList_t
Unpack Dune::TypeList.
Definition typelist.hh:210
│ │ │ -
constexpr auto uniqueTypeList(TypeList< T... > list)
Remove duplicates from a Dune::TypeList.
Definition typelist.hh:236
│ │ │ -
typename Impl::UniqueTypesHelper< Target, TypeList< T... > >::type UniqueTypes_t
Remove duplicates from a list of types.
Definition typelist.hh:220
│ │ │ -
typename Impl::UniqueTypesHelper< TypeList, NonUniqueTypeList >::type UniqueTypeList_t
Remove duplicates from a Dune::TypeList.
Definition typelist.hh:228
│ │ │ -
typename TypeListElement< i, T >::type TypeListEntry_t
Shortcut for TypeListElement<i, T>::type;.
Definition typelist.hh:171
│ │ │ -
A type that refers to another type.
Definition typelist.hh:33
│ │ │ -
T type
The referred-to type.
Definition typelist.hh:35
│ │ │ -
Check if given type is a TypeList.
Definition typelist.hh:100
│ │ │ -
Check if given type is an empty TypeList.
Definition typelist.hh:121
│ │ │ -
Definition typelist.hh:126
│ │ │ -
Definition typelist.hh:142
│ │ │ -
typename std::tuple_element< i, std::tuple< T... > >::type type
Export type of i-th element in TypeList.
Definition typelist.hh:157
│ │ │ -
type Type
Export type of i-th element in TypeList.
Definition typelist.hh:164
│ │ │ +
8// check whether c++20 concept can be used
│ │ │ +
9#if __has_include(<version>) && __has_include(<concepts>)
│ │ │ +
10 #include <version>
│ │ │ +
11 #if __cpp_concepts >= 201907L && __cpp_lib_concepts >= 202002L
│ │ │ +
12 #ifndef DUNE_ENABLE_CONCEPTS
│ │ │ +
13 #define DUNE_ENABLE_CONCEPTS 1
│ │ │ +
14 #endif
│ │ │ +
15 #endif
│ │ │ +
16#endif
│ │ │ +
17
│ │ │ +
18#if DUNE_ENABLE_CONCEPTS
│ │ │ +
19
│ │ │ + │ │ │ + │ │ │ +
22
│ │ │ +
23#endif // DUNE_ENABLE_CONCEPTS
│ │ │ +
24
│ │ │ +
25#endif // DUNE_COMMON_CONCEPTS_HH
│ │ │ + │ │ │ + │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,181 +1,38 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -typelist.hh │ │ │ │ +concepts.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ -2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ -3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ +1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ -4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_COMMON_TYPELIST_HH │ │ │ │ -6#define DUNE_COMMON_TYPELIST_HH │ │ │ │ +2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ +3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ +4// vi: set et ts=4 sw=2 sts=2: │ │ │ │ +5#ifndef DUNE_COMMON_CONCEPTS_HH │ │ │ │ +6#define DUNE_COMMON_CONCEPTS_HH │ │ │ │ 7 │ │ │ │ -8#include │ │ │ │ -9#include │ │ │ │ -10#include │ │ │ │ -11 │ │ │ │ -12namespace _D_u_n_e { │ │ │ │ -13 │ │ │ │ -32 template │ │ │ │ -_3_3 struct _M_e_t_a_T_y_p_e { │ │ │ │ -_3_5 using _t_y_p_e = T; │ │ │ │ -36 }; │ │ │ │ -37 │ │ │ │ -86 template │ │ │ │ -_8_7 using _T_y_p_e_L_i_s_t = std::tuple...>; │ │ │ │ -88 │ │ │ │ -89 │ │ │ │ -90 │ │ │ │ -99 template │ │ │ │ -_1_0_0 struct _I_s_T_y_p_e_L_i_s_t : std::false_type {}; │ │ │ │ -101 │ │ │ │ -107 template │ │ │ │ -_1_0_8 struct _I_s_T_y_p_e_L_i_s_t<_T_y_p_e_L_i_s_t > : std::true_type {}; │ │ │ │ -109 │ │ │ │ -110 │ │ │ │ -111 │ │ │ │ -120 template │ │ │ │ -_1_2_1 struct _I_s_E_m_p_t_y_T_y_p_e_L_i_s_t : std::is_same > {}; │ │ │ │ -122 │ │ │ │ -123 │ │ │ │ -124 │ │ │ │ -125 template │ │ │ │ -_1_2_6 struct _T_y_p_e_L_i_s_t_S_i_z_e {}; │ │ │ │ -127 │ │ │ │ -136 template │ │ │ │ -_1_3_7 struct _T_y_p_e_L_i_s_t_S_i_z_e<_T_y_p_e_L_i_s_t> : std::integral_constant {}; │ │ │ │ -138 │ │ │ │ -139 │ │ │ │ -140 │ │ │ │ -141 template │ │ │ │ -_1_4_2 struct _T_y_p_e_L_i_s_t_E_l_e_m_e_n_t {}; │ │ │ │ -143 │ │ │ │ -149 template │ │ │ │ -_1_5_0 struct _T_y_p_e_L_i_s_t_E_l_e_m_e_n_t> │ │ │ │ -151 { │ │ │ │ -_1_5_7 using _t_y_p_e = typename std::tuple_element>::type; │ │ │ │ -158 │ │ │ │ -_1_6_4 using _T_y_p_e = _t_y_p_e; │ │ │ │ -165 }; │ │ │ │ -166 │ │ │ │ -170 template │ │ │ │ -_1_7_1 using _T_y_p_e_L_i_s_t_E_n_t_r_y___t = typename _T_y_p_e_L_i_s_t_E_l_e_m_e_n_t_<_i_,_ _T_>_:_:_t_y_p_e; │ │ │ │ -172 │ │ │ │ -173 namespace Impl { │ │ │ │ -174 │ │ │ │ -175 template class Target, class ToDoList, class... │ │ │ │ -Processed> │ │ │ │ -176 struct UniqueTypesHelper; │ │ │ │ -177 │ │ │ │ -178 template class Target, class... Processed> │ │ │ │ -179 struct UniqueTypesHelper, Processed...> │ │ │ │ -180 { │ │ │ │ -181 using type = Target; │ │ │ │ -182 }; │ │ │ │ -183 │ │ │ │ -184 template class Target, class T0, class... T, class... │ │ │ │ -Processed> │ │ │ │ -185 struct UniqueTypesHelper, Processed...> │ │ │ │ -186 { │ │ │ │ -187 using type = std::conditional_t< │ │ │ │ -188 std::disjunction...>::value, │ │ │ │ -189 typename UniqueTypesHelper, Processed...>::type, │ │ │ │ -190 typename UniqueTypesHelper, T0, Processed...>:: │ │ │ │ -type>; │ │ │ │ -191 }; │ │ │ │ -192 │ │ │ │ -193 // Helper for unpacking Dune::TypeList │ │ │ │ -194 template class Target, class TL> │ │ │ │ -195 struct UnpackTypeList; │ │ │ │ -196 │ │ │ │ -197 template class Target, class... T> │ │ │ │ -198 struct UnpackTypeList> │ │ │ │ -199 { │ │ │ │ -200 using type = Target; │ │ │ │ -201 }; │ │ │ │ -202 │ │ │ │ -203 } // namespace Impl │ │ │ │ -204 │ │ │ │ -209 template class Target, class TL> │ │ │ │ -_2_1_0 using _U_n_p_a_c_k_T_y_p_e_L_i_s_t___t = typename Impl::UnpackTypeList::type; │ │ │ │ -211 │ │ │ │ -219 template class Target, class... T> │ │ │ │ -_2_2_0 using _U_n_i_q_u_e_T_y_p_e_s___t = typename Impl::UniqueTypesHelper>::type; │ │ │ │ -221 │ │ │ │ -227 template │ │ │ │ -_2_2_8 using _U_n_i_q_u_e_T_y_p_e_L_i_s_t___t = typename Impl::UniqueTypesHelper::type; │ │ │ │ -229 │ │ │ │ -235 template │ │ │ │ -_2_3_6 constexpr auto _u_n_i_q_u_e_T_y_p_e_L_i_s_t(_T_y_p_e_L_i_s_t_<_T_._._._> list) │ │ │ │ -237 { │ │ │ │ -238 return typename Impl::UniqueTypesHelper<_T_y_p_e_L_i_s_t, _T_y_p_e_L_i_s_t>::type{}; │ │ │ │ -239 } │ │ │ │ -240 │ │ │ │ -241 │ │ │ │ -242 │ │ │ │ -243} // namespace Dune │ │ │ │ -244 │ │ │ │ -245#endif // DUNE_COMMON_TYPELIST_HH │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t │ │ │ │ -std::tuple< MetaType< T >... > TypeList │ │ │ │ -A simple type list. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:87 │ │ │ │ -_D_u_n_e │ │ │ │ -Dune namespace. │ │ │ │ -DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ -_D_u_n_e_:_:_U_n_p_a_c_k_T_y_p_e_L_i_s_t___t │ │ │ │ -typename Impl::UnpackTypeList< Target, TL >::type UnpackTypeList_t │ │ │ │ -Unpack Dune::TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:210 │ │ │ │ -_D_u_n_e_:_:_u_n_i_q_u_e_T_y_p_e_L_i_s_t │ │ │ │ -constexpr auto uniqueTypeList(TypeList< T... > list) │ │ │ │ -Remove duplicates from a Dune::TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:236 │ │ │ │ -_D_u_n_e_:_:_U_n_i_q_u_e_T_y_p_e_s___t │ │ │ │ -typename Impl::UniqueTypesHelper< Target, TypeList< T... > >::type │ │ │ │ -UniqueTypes_t │ │ │ │ -Remove duplicates from a list of types. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:220 │ │ │ │ -_D_u_n_e_:_:_U_n_i_q_u_e_T_y_p_e_L_i_s_t___t │ │ │ │ -typename Impl::UniqueTypesHelper< TypeList, NonUniqueTypeList >::type │ │ │ │ -UniqueTypeList_t │ │ │ │ -Remove duplicates from a Dune::TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:228 │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_n_t_r_y___t │ │ │ │ -typename TypeListElement< i, T >::type TypeListEntry_t │ │ │ │ -Shortcut for TypeListElement::type;. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:171 │ │ │ │ -_D_u_n_e_:_:_M_e_t_a_T_y_p_e │ │ │ │ -A type that refers to another type. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:33 │ │ │ │ -_D_u_n_e_:_:_M_e_t_a_T_y_p_e_:_:_t_y_p_e │ │ │ │ -T type │ │ │ │ -The referred-to type. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:35 │ │ │ │ -_D_u_n_e_:_:_I_s_T_y_p_e_L_i_s_t │ │ │ │ -Check if given type is a TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:100 │ │ │ │ -_D_u_n_e_:_:_I_s_E_m_p_t_y_T_y_p_e_L_i_s_t │ │ │ │ -Check if given type is an empty TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:121 │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t_S_i_z_e │ │ │ │ -DDeeffiinniittiioonn typelist.hh:126 │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_l_e_m_e_n_t │ │ │ │ -DDeeffiinniittiioonn typelist.hh:142 │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_l_e_m_e_n_t_<_ _i_,_ _T_y_p_e_L_i_s_t_<_ _T_._._._ _>_ _>_:_:_t_y_p_e │ │ │ │ -typename std::tuple_element< i, std::tuple< T... > >::type type │ │ │ │ -Export type of i-th element in TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:157 │ │ │ │ -_D_u_n_e_:_:_T_y_p_e_L_i_s_t_E_l_e_m_e_n_t_<_ _i_,_ _T_y_p_e_L_i_s_t_<_ _T_._._._ _>_ _>_:_:_T_y_p_e │ │ │ │ -type Type │ │ │ │ -Export type of i-th element in TypeList. │ │ │ │ -DDeeffiinniittiioonn typelist.hh:164 │ │ │ │ +8// check whether c++20 concept can be used │ │ │ │ +9#if __has_include() && __has_include() │ │ │ │ +10 #include │ │ │ │ +11 #if __cpp_concepts >= 201907L && __cpp_lib_concepts >= 202002L │ │ │ │ +12 #ifndef DUNE_ENABLE_CONCEPTS │ │ │ │ +13 #define DUNE_ENABLE_CONCEPTS 1 │ │ │ │ +14 #endif │ │ │ │ +15 #endif │ │ │ │ +16#endif │ │ │ │ +17 │ │ │ │ +18#if DUNE_ENABLE_CONCEPTS │ │ │ │ +19 │ │ │ │ +20#include <_d_u_n_e_/_c_o_m_m_o_n_/_c_o_n_c_e_p_t_s_/_c_o_n_t_a_i_n_e_r_._h_h> │ │ │ │ +21#include <_d_u_n_e_/_c_o_m_m_o_n_/_c_o_n_c_e_p_t_s_/_h_a_s_h_a_b_l_e_._h_h> │ │ │ │ +22 │ │ │ │ +23#endif // DUNE_ENABLE_CONCEPTS │ │ │ │ +24 │ │ │ │ +25#endif // DUNE_COMMON_CONCEPTS_HH │ │ │ │ +_c_o_n_t_a_i_n_e_r_._h_h │ │ │ │ +_h_a_s_h_a_b_l_e_._h_h │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00029.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: tuplevector.hh File Reference │ │ │ +dune-common: dynmatrixev.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,61 +70,47 @@ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ Namespaces | │ │ │ Functions
│ │ │ -
tuplevector.hh File Reference
│ │ │ +
dynmatrixev.hh File Reference
│ │ │
│ │ │
│ │ │ │ │ │ -

Provides the TupleVector class that augments std::tuple by operator[]. │ │ │ +

utility functions to compute eigenvalues for dense matrices. │ │ │ More...

│ │ │ -
#include <tuple>
│ │ │ -#include <utility>
│ │ │ -#include <dune/common/indices.hh>
│ │ │ -#include <dune/common/typetraits.hh>
│ │ │ -#include <dune/common/std/type_traits.hh>
│ │ │ +
#include <algorithm>
│ │ │ +#include <memory>
│ │ │ +#include <dune-common-config.hh>
│ │ │ +#include "dynmatrix.hh"
│ │ │ +#include "fmatrixev.hh"
│ │ │
│ │ │

Go to the source code of this file.

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

│ │ │ -Classes

class  Dune::TupleVector< T >
 A class augmenting std::tuple by element access via operator[]. More...
 
struct  std::tuple_element< i, Dune::TupleVector< Args... > >
 Make std::tuple_element work for TupleVector. More...
 
struct  std::tuple_size< Dune::TupleVector< Args... > >
 Make std::tuple_size work for TupleVector. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ - │ │ │ + │ │ │ │ │ │

│ │ │ Namespaces

namespace  Dune
 Dune namespace.
 
namespace  std
 STL namespace.
namespace  Dune::DynamicMatrixHelp
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ Functions

template<class... T>
constexpr auto Dune::makeTupleVector (T &&... t)
 
template<typename K , class C >
static void Dune::DynamicMatrixHelp::eigenValuesNonSym (const DynamicMatrix< K > &matrix, DynamicVector< C > &eigenValues, std::vector< DynamicVector< K > > *eigenVectors=nullptr)
 calculates the eigenvalues of a symmetric field matrix
 
│ │ │

Detailed Description

│ │ │ -

Provides the TupleVector class that augments std::tuple by operator[].

│ │ │ -
Author
Carsten Gräser
│ │ │ +

utility functions to compute eigenvalues for dense matrices.

│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ @@ -1 +1 @@ │ │ │ │ -utf-8 │ │ │ │ +us-ascii │ │ │ ├── html2text {} │ │ │ │ @@ -1,43 +1,32 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -tuplevector.hh File Reference │ │ │ │ -Provides the TupleVector class that augments std::tuple by operator[]. _M_o_r_e_._._. │ │ │ │ -#include │ │ │ │ -#include │ │ │ │ -#include <_d_u_n_e_/_c_o_m_m_o_n_/_i_n_d_i_c_e_s_._h_h> │ │ │ │ -#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ -#include <_d_u_n_e_/_c_o_m_m_o_n_/_s_t_d_/_t_y_p_e___t_r_a_i_t_s_._h_h> │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ +dynmatrixev.hh File Reference │ │ │ │ +utility functions to compute eigenvalues for dense matrices. _M_o_r_e_._._. │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include │ │ │ │ +#include "_d_y_n_m_a_t_r_i_x_._h_h" │ │ │ │ +#include "_f_m_a_t_r_i_x_e_v_._h_h" │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ - class   _D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_<_ _T_ _> │ │ │ │ -  A class augmenting std::tuple by element access via operator[]. │ │ │ │ - _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _s_t_d_:_:_t_u_p_l_e___e_l_e_m_e_n_t_<_ _i_,_ _D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_<_ _A_r_g_s_._._._ _>_ _> │ │ │ │ -  Make std::tuple_element work for TupleVector. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _s_t_d_:_:_t_u_p_l_e___s_i_z_e_<_ _D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_<_ _A_r_g_s_._._._ _>_ _> │ │ │ │ -  Make std::tuple_size work for TupleVector. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _D_u_n_e │ │ │ │   _D_u_n_e namespace. │ │ │ │   │ │ │ │ -namespace   _s_t_d │ │ │ │ -  STL namespace. │ │ │ │ +namespace   _D_u_n_e_:_:_D_y_n_a_m_i_c_M_a_t_r_i_x_H_e_l_p │ │ │ │   │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ -constexpr auto  _D_u_n_e_:_:_m_a_k_e_T_u_p_l_e_V_e_c_t_o_r (T &&... t) │ │ │ │ +template │ │ │ │ +static void  _D_u_n_e_:_:_D_y_n_a_m_i_c_M_a_t_r_i_x_H_e_l_p_:_:_e_i_g_e_n_V_a_l_u_e_s_N_o_n_S_y_m (const _D_y_n_a_m_i_c_M_a_t_r_i_x< K │ │ │ │ + > &matrix, _D_y_n_a_m_i_c_V_e_c_t_o_r< C > &eigenValues, std::vector< │ │ │ │ + _D_y_n_a_m_i_c_V_e_c_t_o_r< K > > *eigenVectors=nullptr) │ │ │ │ +  calculates the eigenvalues of a symmetric field matrix │ │ │ │   │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Provides the TupleVector class that augments std::tuple by operator[]. │ │ │ │ - Author │ │ │ │ - Carsten Gräser │ │ │ │ +utility functions to compute eigenvalues for dense matrices. │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: tuplevector.hh Source File │ │ │ +dune-common: dynmatrixev.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,141 +74,125 @@ │ │ │ │ │ │ │ │ │
│ │ │
│ │ │ -
tuplevector.hh
│ │ │ +
dynmatrixev.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5#ifndef DUNE_COMMON_TUPLEVECTOR_HH
│ │ │ -
6#define DUNE_COMMON_TUPLEVECTOR_HH
│ │ │ +
5#ifndef DUNE_DYNMATRIXEIGENVALUES_HH
│ │ │ +
6#define DUNE_DYNMATRIXEIGENVALUES_HH
│ │ │
7
│ │ │ -
8#include <tuple>
│ │ │ -
9#include <utility>
│ │ │ +
8#include <algorithm>
│ │ │ +
9#include <memory>
│ │ │
10
│ │ │ - │ │ │ - │ │ │ - │ │ │ -
14
│ │ │ +
11#include <dune-common-config.hh> // HAVE_LAPACK
│ │ │ +
12
│ │ │ +
13#include "dynmatrix.hh"
│ │ │ +
14#include "fmatrixev.hh"
│ │ │
15
│ │ │ -
16
│ │ │ -
23namespace Dune
│ │ │ -
24{
│ │ │ +
24namespace Dune {
│ │ │
25
│ │ │ -
26
│ │ │ +
│ │ │ +
26 namespace DynamicMatrixHelp {
│ │ │
27
│ │ │ -
33template<class... T>
│ │ │ -
│ │ │ -
34class TupleVector : public std::tuple<T...>
│ │ │ -
35{
│ │ │ -
36 using Base = std::tuple<T...>;
│ │ │ -
37
│ │ │ -
38 template<class... TT>
│ │ │ -
39 using TupleConstructorDetector = decltype(Base(std::declval<TT&&>()...));
│ │ │ -
40
│ │ │ -
41 template<class... TT>
│ │ │ -
42 using hasTupleConstructor = Dune::Std::is_detected<TupleConstructorDetector, TT...>;
│ │ │ -
43
│ │ │ -
44
│ │ │ -
45public:
│ │ │ +
28#if HAVE_LAPACK
│ │ │ +
29 using Dune::FMatrixHelp::eigenValuesNonsymLapackCall;
│ │ │ +
30#endif
│ │ │ +
31
│ │ │ +
40 template <typename K, class C>
│ │ │ +
│ │ │ +
41 static void eigenValuesNonSym(const DynamicMatrix<K>& matrix,
│ │ │ +
42 DynamicVector<C>& eigenValues,
│ │ │ +
43 std::vector<DynamicVector<K>>* eigenVectors = nullptr
│ │ │ +
44 )
│ │ │ +
45 {
│ │ │
46
│ │ │ -
53 template<class... TT,
│ │ │ -
54 std::enable_if_t<hasTupleConstructor<TT...>::value, int> = 0>
│ │ │ -
│ │ │ -
55 constexpr TupleVector(TT&&... tt) :
│ │ │ -
56 Base(std::forward<TT>(tt)...)
│ │ │ -
57 {}
│ │ │ -
│ │ │ -
58
│ │ │ -
│ │ │ -
61 constexpr TupleVector()
│ │ │ -
62 {}
│ │ │ -
│ │ │ -
63
│ │ │ -
66 template<std::size_t i,
│ │ │ -
67 std::enable_if_t<(i < sizeof...(T)), int> = 0>
│ │ │ -
│ │ │ -
68 constexpr decltype(auto) operator[](const Dune::index_constant<i>&) const
│ │ │ -
69 {
│ │ │ -
70 return std::get<i>(*this);
│ │ │ -
71 }
│ │ │ -
│ │ │ -
72
│ │ │ -
75 template<std::size_t i,
│ │ │ -
76 std::enable_if_t<(i < sizeof...(T)), int> = 0>
│ │ │ -
│ │ │ -
77 decltype(auto) operator[](const Dune::index_constant<i>&)
│ │ │ -
78 {
│ │ │ -
79 return std::get<i>(*this);
│ │ │ -
80 }
│ │ │ -
│ │ │ -
81
│ │ │ -
│ │ │ -
83 static constexpr std::size_t size()
│ │ │ -
84 {
│ │ │ -
85 return std::tuple_size<Base>::value;
│ │ │ -
86 }
│ │ │ -
│ │ │ -
87};
│ │ │ -
│ │ │ +
47#if HAVE_LAPACK
│ │ │ +
48 {
│ │ │ +
49 const long int N = matrix.rows();
│ │ │ +
50 const char jobvl = 'n';
│ │ │ +
51 const char jobvr = eigenVectors ? 'v' : 'n';
│ │ │ +
52
│ │ │ +
53
│ │ │ +
54 // matrix to put into dgeev
│ │ │ +
55 auto matrixVector = std::make_unique<double[]>(N*N);
│ │ │ +
56
│ │ │ +
57 // copy matrix
│ │ │ +
58 int row = 0;
│ │ │ +
59 for(int i=0; i<N; ++i)
│ │ │ +
60 {
│ │ │ +
61 for(int j=0; j<N; ++j, ++row)
│ │ │ +
62 {
│ │ │ +
63 matrixVector[ row ] = matrix[ i ][ j ];
│ │ │ +
64 }
│ │ │ +
65 }
│ │ │ +
66
│ │ │ +
67 // working memory
│ │ │ +
68 auto eigenR = std::make_unique<double[]>(N);
│ │ │ +
69 auto eigenI = std::make_unique<double[]>(N);
│ │ │ +
70
│ │ │ +
71 const long int lwork = eigenVectors ? 4*N : 3*N;
│ │ │ +
72 auto work = std::make_unique<double[]>(lwork);
│ │ │ +
73 auto vr = eigenVectors ? std::make_unique<double[]>(N*N) : std::unique_ptr<double[]>{};
│ │ │ +
74
│ │ │ +
75 // return value information
│ │ │ +
76 long int info = 0;
│ │ │ +
77
│ │ │ +
78 // call LAPACK routine (see fmatrixev_ext.cc)
│ │ │ +
79 eigenValuesNonsymLapackCall(&jobvl, &jobvr, &N, matrixVector.get(), &N,
│ │ │ +
80 eigenR.get(), eigenI.get(), nullptr, &N, vr.get(), &N, work.get(),
│ │ │ +
81 &lwork, &info);
│ │ │ +
82
│ │ │ +
83 if( info != 0 )
│ │ │ +
84 {
│ │ │ +
85 std::cerr << "For matrix " << matrix << " eigenvalue calculation failed! " << std::endl;
│ │ │ +
86 DUNE_THROW(InvalidStateException,"eigenValues: Eigenvalue calculation failed!");
│ │ │ +
87 }
│ │ │
88
│ │ │ -
89
│ │ │ -
90
│ │ │ -
91template<class... T>
│ │ │ -
│ │ │ -
92constexpr auto makeTupleVector(T&&... t)
│ │ │ -
93{
│ │ │ -
94 // The std::decay_t<T> is is a slight simplification,
│ │ │ -
95 // because std::reference_wrapper needs special care.
│ │ │ -
96 return TupleVector<std::decay_t<T>...>(std::forward<T>(t)...);
│ │ │ -
97}
│ │ │ -
│ │ │ -
98
│ │ │ -
99
│ │ │ -
100
│ │ │ -
101} // namespace Dune
│ │ │ -
102
│ │ │ -
103namespace std
│ │ │ -
104{
│ │ │ -
109 template <size_t i, typename... Args>
│ │ │ -
│ │ │ -
110 struct tuple_element<i,Dune::TupleVector<Args...> >
│ │ │ -
111 {
│ │ │ -
112 using type = typename std::tuple_element<i, std::tuple<Args...> >::type;
│ │ │ -
113 };
│ │ │ -
│ │ │ -
114
│ │ │ -
119 template <typename... Args>
│ │ │ -
│ │ │ -
120 struct tuple_size<Dune::TupleVector<Args...> >
│ │ │ -
121 : std::integral_constant<std::size_t, sizeof...(Args)>
│ │ │ -
122 {};
│ │ │ -
│ │ │ -
123}
│ │ │ -
124
│ │ │ -
125#endif // DUNE_COMMON_TUPLEVECTOR_HH
│ │ │ -
Traits for type conversions and type information.
│ │ │ - │ │ │ - │ │ │ -
std::integral_constant< std::size_t, i > index_constant
An index constant with value i.
Definition indices.hh:29
│ │ │ -
typename detected_or< nonesuch, Op, Args... >::value_t is_detected
Detects whether Op<Args...> is valid.
Definition type_traits.hh:145
│ │ │ -
STL namespace.
│ │ │ +
89 eigenValues.resize(N);
│ │ │ +
90 for (int i=0; i<N; ++i)
│ │ │ +
91 eigenValues[i] = std::complex<double>(eigenR[i], eigenI[i]);
│ │ │ +
92
│ │ │ +
93 if (eigenVectors) {
│ │ │ +
94 eigenVectors->resize(N);
│ │ │ +
95 for (int i = 0; i < N; ++i) {
│ │ │ +
96 auto& v = (*eigenVectors)[i];
│ │ │ +
97 v.resize(N);
│ │ │ +
98 std::copy(vr.get() + N*i, vr.get() + N*(i+1), &v[0]);
│ │ │ +
99 }
│ │ │ +
100 }
│ │ │ +
101 }
│ │ │ +
102#else // #if HAVE_LAPACK
│ │ │ +
103 DUNE_THROW(NotImplemented,"LAPACK not found!");
│ │ │ +
104#endif
│ │ │ +
105 }
│ │ │ +
│ │ │ +
106 }
│ │ │ +
│ │ │ +
107
│ │ │ +
108}
│ │ │ +
110#endif
│ │ │ +
Eigenvalue computations for the FieldMatrix class.
│ │ │ +
This file implements a dense matrix with dynamic numbers of rows and columns.
│ │ │ +
#define DUNE_THROW(E, m)
Definition exceptions.hh:218
│ │ │
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ -
constexpr auto makeTupleVector(T &&... t)
Definition tuplevector.hh:92
│ │ │ -
A class augmenting std::tuple by element access via operator[].
Definition tuplevector.hh:35
│ │ │ -
static constexpr std::size_t size()
Number of elements of the tuple.
Definition tuplevector.hh:83
│ │ │ -
constexpr TupleVector(TT &&... tt)
Construct from a set of arguments.
Definition tuplevector.hh:55
│ │ │ -
constexpr TupleVector()
Default constructor.
Definition tuplevector.hh:61
│ │ │ -
typename std::tuple_element< i, std::tuple< Args... > >::type type
Definition tuplevector.hh:112
│ │ │ +
static void eigenValuesNonSym(const DynamicMatrix< K > &matrix, DynamicVector< C > &eigenValues, std::vector< DynamicVector< K > > *eigenVectors=nullptr)
calculates the eigenvalues of a symmetric field matrix
Definition dynmatrixev.hh:41
│ │ │ +
constexpr size_type rows() const
number of rows
Definition densematrix.hh:709
│ │ │ +
Construct a matrix with a dynamic size.
Definition dynmatrix.hh:61
│ │ │ +
Construct a vector with a dynamic size.
Definition dynvector.hh:59
│ │ │ +
void resize(size_type n, value_type c=value_type())
Definition dynvector.hh:141
│ │ │ +
Default exception for dummy implementations.
Definition exceptions.hh:263
│ │ │ +
Default exception if a function was called while the object is not in a valid state for that function...
Definition exceptions.hh:281
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,143 +1,142 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -tuplevector.hh │ │ │ │ +dynmatrixev.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5#ifndef DUNE_COMMON_TUPLEVECTOR_HH │ │ │ │ -6#define DUNE_COMMON_TUPLEVECTOR_HH │ │ │ │ +5#ifndef DUNE_DYNMATRIXEIGENVALUES_HH │ │ │ │ +6#define DUNE_DYNMATRIXEIGENVALUES_HH │ │ │ │ 7 │ │ │ │ -8#include │ │ │ │ -9#include │ │ │ │ +8#include │ │ │ │ +9#include │ │ │ │ 10 │ │ │ │ -11#include <_d_u_n_e_/_c_o_m_m_o_n_/_i_n_d_i_c_e_s_._h_h> │ │ │ │ -12#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ -13#include <_d_u_n_e_/_c_o_m_m_o_n_/_s_t_d_/_t_y_p_e___t_r_a_i_t_s_._h_h> │ │ │ │ -14 │ │ │ │ +11#include // HAVE_LAPACK │ │ │ │ +12 │ │ │ │ +13#include "_d_y_n_m_a_t_r_i_x_._h_h" │ │ │ │ +14#include "_f_m_a_t_r_i_x_e_v_._h_h" │ │ │ │ 15 │ │ │ │ -16 │ │ │ │ -23namespace _D_u_n_e │ │ │ │ -24{ │ │ │ │ +24namespace _D_u_n_e { │ │ │ │ 25 │ │ │ │ -26 │ │ │ │ +_2_6 namespace DynamicMatrixHelp { │ │ │ │ 27 │ │ │ │ -33template │ │ │ │ -_3_4class _T_u_p_l_e_V_e_c_t_o_r : public std::tuple │ │ │ │ -35{ │ │ │ │ -36 using Base = std::tuple; │ │ │ │ -37 │ │ │ │ -38 template │ │ │ │ -39 using TupleConstructorDetector = decltype(Base(std::declval()...)); │ │ │ │ -40 │ │ │ │ -41 template │ │ │ │ -42 using hasTupleConstructor = _D_u_n_e_:_:_S_t_d_:_:_i_s___d_e_t_e_c_t_e_d; │ │ │ │ -43 │ │ │ │ -44 │ │ │ │ -45public: │ │ │ │ +28#if HAVE_LAPACK │ │ │ │ +29 using Dune::FMatrixHelp::eigenValuesNonsymLapackCall; │ │ │ │ +30#endif │ │ │ │ +31 │ │ │ │ +40 template │ │ │ │ +_4_1 static void _e_i_g_e_n_V_a_l_u_e_s_N_o_n_S_y_m(const _D_y_n_a_m_i_c_M_a_t_r_i_x_<_K_>& matrix, │ │ │ │ +42 _D_y_n_a_m_i_c_V_e_c_t_o_r_<_C_>& eigenValues, │ │ │ │ +43 std::vector<_D_y_n_a_m_i_c_V_e_c_t_o_r_<_K_>>* eigenVectors = nullptr │ │ │ │ +44 ) │ │ │ │ +45 { │ │ │ │ 46 │ │ │ │ -53 template::value, int> = 0> │ │ │ │ -_5_5 constexpr _T_u_p_l_e_V_e_c_t_o_r(TT&&... tt) : │ │ │ │ -56 Base(_s_t_d::forward(tt)...) │ │ │ │ -57 {} │ │ │ │ -58 │ │ │ │ -_6_1 constexpr _T_u_p_l_e_V_e_c_t_o_r() │ │ │ │ -62 {} │ │ │ │ -63 │ │ │ │ -66 template = 0> │ │ │ │ -_6_8 constexpr decltype(auto) operator[](const _D_u_n_e_:_:_i_n_d_e_x___c_o_n_s_t_a_n_t_<_i_>&) const │ │ │ │ -69 { │ │ │ │ -70 return std::get(*this); │ │ │ │ -71 } │ │ │ │ -72 │ │ │ │ -75 template = 0> │ │ │ │ -_7_7 decltype(auto) operator[](const _D_u_n_e_:_:_i_n_d_e_x___c_o_n_s_t_a_n_t_<_i_>&) │ │ │ │ -78 { │ │ │ │ -79 return std::get(*this); │ │ │ │ -80 } │ │ │ │ -81 │ │ │ │ -_8_3 static constexpr std::size_t _s_i_z_e() │ │ │ │ +47#if HAVE_LAPACK │ │ │ │ +48 { │ │ │ │ +49 const long int N = matrix._r_o_w_s(); │ │ │ │ +50 const char jobvl = 'n'; │ │ │ │ +51 const char jobvr = eigenVectors ? 'v' : 'n'; │ │ │ │ +52 │ │ │ │ +53 │ │ │ │ +54 // matrix to put into dgeev │ │ │ │ +55 auto matrixVector = std::make_unique(N*N); │ │ │ │ +56 │ │ │ │ +57 // copy matrix │ │ │ │ +58 int row = 0; │ │ │ │ +59 for(int i=0; i(N); │ │ │ │ +69 auto eigenI = std::make_unique(N); │ │ │ │ +70 │ │ │ │ +71 const long int lwork = eigenVectors ? 4*N : 3*N; │ │ │ │ +72 auto work = std::make_unique(lwork); │ │ │ │ +73 auto vr = eigenVectors ? std::make_unique(N*N) : std:: │ │ │ │ +unique_ptr{}; │ │ │ │ +74 │ │ │ │ +75 // return value information │ │ │ │ +76 long int info = 0; │ │ │ │ +77 │ │ │ │ +78 // call LAPACK routine (see fmatrixev_ext.cc) │ │ │ │ +79 eigenValuesNonsymLapackCall(&jobvl, &jobvr, &N, matrixVector.get(), &N, │ │ │ │ +80 eigenR.get(), eigenI.get(), nullptr, &N, vr.get(), &N, work.get(), │ │ │ │ +81 &lwork, &info); │ │ │ │ +82 │ │ │ │ +83 if( info != 0 ) │ │ │ │ 84 { │ │ │ │ -85 return std::tuple_size::value; │ │ │ │ -86 } │ │ │ │ -87}; │ │ │ │ +85 std::cerr << "For matrix " << matrix << " eigenvalue calculation failed! " │ │ │ │ +<< std::endl; │ │ │ │ +86 _D_U_N_E___T_H_R_O_W(_I_n_v_a_l_i_d_S_t_a_t_e_E_x_c_e_p_t_i_o_n,"eigenValues: Eigenvalue calculation │ │ │ │ +failed!"); │ │ │ │ +87 } │ │ │ │ 88 │ │ │ │ -89 │ │ │ │ -90 │ │ │ │ -91template │ │ │ │ -_9_2constexpr auto _m_a_k_e_T_u_p_l_e_V_e_c_t_o_r(T&&... t) │ │ │ │ -93{ │ │ │ │ -94 // The std::decay_t is is a slight simplification, │ │ │ │ -95 // because std::reference_wrapper needs special care. │ │ │ │ -96 return _T_u_p_l_e_V_e_c_t_o_r_<_s_t_d_:_:_d_e_c_a_y___t_<_T_>...>(std::forward(t)...); │ │ │ │ -97} │ │ │ │ -98 │ │ │ │ -99 │ │ │ │ -100 │ │ │ │ -101} // namespace Dune │ │ │ │ -102 │ │ │ │ -103namespace _s_t_d │ │ │ │ -104{ │ │ │ │ -109 template │ │ │ │ -_1_1_0 struct tuple_element > │ │ │ │ -111 { │ │ │ │ -_1_1_2 using _t_y_p_e = typename std::tuple_element >::type; │ │ │ │ -113 }; │ │ │ │ -114 │ │ │ │ -119 template │ │ │ │ -_1_2_0 struct tuple_size<_D_u_n_e::TupleVector > │ │ │ │ -121 : std::integral_constant │ │ │ │ -122 {}; │ │ │ │ -123} │ │ │ │ -124 │ │ │ │ -125#endif // DUNE_COMMON_TUPLEVECTOR_HH │ │ │ │ -_t_y_p_e_t_r_a_i_t_s_._h_h │ │ │ │ -Traits for type conversions and type information. │ │ │ │ -_t_y_p_e___t_r_a_i_t_s_._h_h │ │ │ │ -_i_n_d_i_c_e_s_._h_h │ │ │ │ -_D_u_n_e_:_:_i_n_d_e_x___c_o_n_s_t_a_n_t │ │ │ │ -std::integral_constant< std::size_t, i > index_constant │ │ │ │ -An index constant with value i. │ │ │ │ -DDeeffiinniittiioonn indices.hh:29 │ │ │ │ -_D_u_n_e_:_:_S_t_d_:_:_i_s___d_e_t_e_c_t_e_d │ │ │ │ -typename detected_or< nonesuch, Op, Args... >::value_t is_detected │ │ │ │ -Detects whether Op is valid. │ │ │ │ -DDeeffiinniittiioonn type_traits.hh:145 │ │ │ │ -_s_t_d │ │ │ │ -STL namespace. │ │ │ │ +89 eigenValues._r_e_s_i_z_e(N); │ │ │ │ +90 for (int i=0; i(eigenR[i], eigenI[i]); │ │ │ │ +92 │ │ │ │ +93 if (eigenVectors) { │ │ │ │ +94 eigenVectors->_r_e_s_i_z_e(N); │ │ │ │ +95 for (int i = 0; i < N; ++i) { │ │ │ │ +96 auto& v = (*eigenVectors)[i]; │ │ │ │ +97 v.resize(N); │ │ │ │ +98 std::copy(vr.get() + N*i, vr.get() + N*(i+1), &v[0]); │ │ │ │ +99 } │ │ │ │ +100 } │ │ │ │ +101 } │ │ │ │ +102#else // #if HAVE_LAPACK │ │ │ │ +103 _D_U_N_E___T_H_R_O_W(_N_o_t_I_m_p_l_e_m_e_n_t_e_d,"LAPACK not found!"); │ │ │ │ +104#endif │ │ │ │ +105 } │ │ │ │ +106 } │ │ │ │ +107 │ │ │ │ +108} │ │ │ │ +110#endif │ │ │ │ +_f_m_a_t_r_i_x_e_v_._h_h │ │ │ │ +Eigenvalue computations for the FieldMatrix class. │ │ │ │ +_d_y_n_m_a_t_r_i_x_._h_h │ │ │ │ +This file implements a dense matrix with dynamic numbers of rows and columns. │ │ │ │ +_D_U_N_E___T_H_R_O_W │ │ │ │ +#define DUNE_THROW(E, m) │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:218 │ │ │ │ _D_u_n_e │ │ │ │ Dune namespace. │ │ │ │ DDeeffiinniittiioonn alignedallocator.hh:13 │ │ │ │ -_D_u_n_e_:_:_m_a_k_e_T_u_p_l_e_V_e_c_t_o_r │ │ │ │ -constexpr auto makeTupleVector(T &&... t) │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:92 │ │ │ │ -_D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r │ │ │ │ -A class augmenting std::tuple by element access via operator[]. │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:35 │ │ │ │ -_D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_:_:_s_i_z_e │ │ │ │ -static constexpr std::size_t size() │ │ │ │ -Number of elements of the tuple. │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:83 │ │ │ │ -_D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_:_:_T_u_p_l_e_V_e_c_t_o_r │ │ │ │ -constexpr TupleVector(TT &&... tt) │ │ │ │ -Construct from a set of arguments. │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:55 │ │ │ │ -_D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_:_:_T_u_p_l_e_V_e_c_t_o_r │ │ │ │ -constexpr TupleVector() │ │ │ │ -Default constructor. │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:61 │ │ │ │ -_s_t_d_:_:_t_u_p_l_e___e_l_e_m_e_n_t_<_ _i_,_ _D_u_n_e_:_:_T_u_p_l_e_V_e_c_t_o_r_<_ _A_r_g_s_._._._ _>_ _>_:_:_t_y_p_e │ │ │ │ -typename std::tuple_element< i, std::tuple< Args... > >::type type │ │ │ │ -DDeeffiinniittiioonn tuplevector.hh:112 │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_M_a_t_r_i_x_H_e_l_p_:_:_e_i_g_e_n_V_a_l_u_e_s_N_o_n_S_y_m │ │ │ │ +static void eigenValuesNonSym(const DynamicMatrix< K > &matrix, DynamicVector< │ │ │ │ +C > &eigenValues, std::vector< DynamicVector< K > > *eigenVectors=nullptr) │ │ │ │ +calculates the eigenvalues of a symmetric field matrix │ │ │ │ +DDeeffiinniittiioonn dynmatrixev.hh:41 │ │ │ │ +_D_u_n_e_:_:_D_e_n_s_e_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ +constexpr size_type rows() const │ │ │ │ +number of rows │ │ │ │ +DDeeffiinniittiioonn densematrix.hh:709 │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_M_a_t_r_i_x │ │ │ │ +Construct a matrix with a dynamic size. │ │ │ │ +DDeeffiinniittiioonn dynmatrix.hh:61 │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_V_e_c_t_o_r │ │ │ │ +Construct a vector with a dynamic size. │ │ │ │ +DDeeffiinniittiioonn dynvector.hh:59 │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_V_e_c_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ +void resize(size_type n, value_type c=value_type()) │ │ │ │ +DDeeffiinniittiioonn dynvector.hh:141 │ │ │ │ +_D_u_n_e_:_:_N_o_t_I_m_p_l_e_m_e_n_t_e_d │ │ │ │ +Default exception for dummy implementations. │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:263 │ │ │ │ +_D_u_n_e_:_:_I_n_v_a_l_i_d_S_t_a_t_e_E_x_c_e_p_t_i_o_n │ │ │ │ +Default exception if a function was called while the object is not in a valid │ │ │ │ +state for that function... │ │ │ │ +DDeeffiinniittiioonn exceptions.hh:281 │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00032.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: tupleutility.hh File Reference │ │ │ +dune-common: referencehelper.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,60 @@ │ │ │ │ │ │
│ │ │
│ │ │
│ │ │ -Classes | │ │ │ Namespaces | │ │ │ -Functions
│ │ │ -
tupleutility.hh File Reference
│ │ │ +Typedefs | │ │ │ +Functions | │ │ │ +Variables
│ │ │ +
referencehelper.hh File Reference
│ │ │ │ │ │
│ │ │ - │ │ │ -

Contains utility classes which can be used with std::tuple. │ │ │ -More...

│ │ │ -
#include <cstddef>
│ │ │ -#include <tuple>
│ │ │ -#include <type_traits>
│ │ │ -#include <utility>
│ │ │ -#include <dune/common/hybridutilities.hh>
│ │ │ -#include <dune/common/typetraits.hh>
│ │ │ +
#include <type_traits>
│ │ │ +#include <functional>
│ │ │
│ │ │

Go to the source code of this file.

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

│ │ │ -Classes

struct  Dune::TupleAccessTraits< T >
 
struct  Dune::TupleAccessTraits< T * >
 
struct  Dune::TupleAccessTraits< T & >
 
struct  Dune::NullPointerInitialiser< std::tuple< Args... > >
 
struct  Dune::ForEachType< TE, std::tuple< Args... > >
 
class  Dune::TransformTupleFunctor< TE, Args >
 
struct  Dune::TransformTupleFunctor< TE, Args >::TypeEvaluator< T >
 
struct  Dune::AddRefTypeEvaluator< T >
 TypeEvaluator to turn a type T into a reference to T More...
 
struct  Dune::AddPtrTypeEvaluator< T >
 TypeEvaluator to turn a type T into a pointer to T More...
 
struct  Dune::AddPtrTypeEvaluator< T & >
 
struct  Dune::AtType< N, Tuple >
 Type for reverse element access. More...
 
struct  Dune::At< N >
 Reverse element access. More...
 
struct  Dune::PointerPairDeletor< Tuple >
 Deletes all objects pointed to in a std::tuple of pointers. More...
 
class  Dune::FirstPredicateIndex< Tuple, Predicate, start, size >
 Finding the index of a certain type in a std::tuple. More...
 
struct  Dune::IsType< T >
 Generator for predicates accepting one particular type. More...
 
struct  Dune::IsType< T >::Predicate< U >
 The actual predicate. More...
 
struct  Dune::FirstTypeIndex< Tuple, T, start >
 Find the first occurrence of a type in a std::tuple. More...
 
struct  Dune::PushBackTuple< typename std::tuple< Args... >, T >
 
struct  Dune::PushFrontTuple< typename std::tuple< Args... >, T >
 
struct  Dune::ReduceTuple< F, Tuple, Seed, N >
 Apply reduce with meta binary function to template. More...
 
struct  Dune::ReduceTuple< F, Tuple, Seed, 0 >
 Apply reduce with meta binary function to template. More...
 
struct  Dune::JoinTuples< Head, Tail >
 Join two std::tuple's. More...
 
struct  Dune::FlattenTuple< Tuple >
 Flatten a std::tuple of std::tuple's. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ Namespaces

namespace  Dune
 Dune namespace.
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ +Typedefs

template<class T >
using Dune::ResolveRef_t = std::remove_reference_t< decltype(Dune::resolveRef(std::declval< T & >()))>
 Type trait to resolve std::reference_wrapper.
 
│ │ │ │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +

│ │ │ Functions

template<class F , class ArgTuple , class I , I... i>
decltype(auto) Dune::applyPartial (F &&f, ArgTuple &&args, std::integer_sequence< I, i... >)
 Apply function with arguments from a given tuple.
 
template<class Tuple , class Functor >
auto Dune::genericTransformTuple (Tuple &&t, Functor &&f) -> decltype(genericTransformTupleBackend(t, f))
 
template<template< class > class TE, class... Args>
TransformTupleFunctor< TE, Args... > Dune::makeTransformTupleFunctor (Args &&... args)
 
template<template< class > class TypeEvaluator, class Tuple , class... Args>
auto Dune::transformTuple (Tuple &&orig, Args &&... args) -> decltype(genericTransformTuple(orig, makeTransformTupleFunctor< TypeEvaluator >(args...)))
 
template<class T >
constexpr T & Dune::resolveRef (T &gf) noexcept
 Helper function to resolve std::reference_wrapper.
 
template<class T >
const auto & Dune::resolveRef (T &&gf)=delete
 
template<class T >
constexpr T & Dune::resolveRef (std::reference_wrapper< T > gf) noexcept
 Helper function to resolve std::reference_wrapper.
 
│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │

│ │ │ +Variables

template<class T >
constexpr bool Dune::IsReferenceWrapper_v = Impl::IsReferenceWrapper<T>::value
 Helper to detect if given type is a std::reference_wrapper.
 
│ │ │ -

Detailed Description

│ │ │ -

Contains utility classes which can be used with std::tuple.

│ │ │ -
│ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,108 +1,40 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ -tupleutility.hh File Reference │ │ │ │ -_C_o_m_m_o_n » _U_t_i_l_i_t_i_e_s » _T_u_p_l_e_ _U_t_i_l_i_t_i_e_s │ │ │ │ -Contains utility classes which can be used with std::tuple. _M_o_r_e_._._. │ │ │ │ -#include │ │ │ │ -#include │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s | _F_u_n_c_t_i_o_n_s | _V_a_r_i_a_b_l_e_s │ │ │ │ +referencehelper.hh File Reference │ │ │ │ #include │ │ │ │ -#include │ │ │ │ -#include <_d_u_n_e_/_c_o_m_m_o_n_/_h_y_b_r_i_d_u_t_i_l_i_t_i_e_s_._h_h> │ │ │ │ -#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ +#include │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ -CCllaasssseess │ │ │ │ -struct   _D_u_n_e_:_:_T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s_<_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s_<_ _T_ _*_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s_<_ _T_ _&_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_N_u_l_l_P_o_i_n_t_e_r_I_n_i_t_i_a_l_i_s_e_r_<_ _s_t_d_:_:_t_u_p_l_e_<_ _A_r_g_s_._._._ _>_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_F_o_r_E_a_c_h_T_y_p_e_<_ _T_E_,_ _s_t_d_:_:_t_u_p_l_e_<_ _A_r_g_s_._._._ _>_ _> │ │ │ │ -  │ │ │ │ - class   _D_u_n_e_:_:_T_r_a_n_s_f_o_r_m_T_u_p_l_e_F_u_n_c_t_o_r_<_ _T_E_,_ _A_r_g_s_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_T_r_a_n_s_f_o_r_m_T_u_p_l_e_F_u_n_c_t_o_r_<_ _T_E_,_ _A_r_g_s_ _>_:_:_T_y_p_e_E_v_a_l_u_a_t_o_r_<_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_d_d_R_e_f_T_y_p_e_E_v_a_l_u_a_t_o_r_<_ _T_ _> │ │ │ │ -  TypeEvaluator to turn a type T into a reference to T _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_d_d_P_t_r_T_y_p_e_E_v_a_l_u_a_t_o_r_<_ _T_ _> │ │ │ │ -  TypeEvaluator to turn a type T into a pointer to T _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_d_d_P_t_r_T_y_p_e_E_v_a_l_u_a_t_o_r_<_ _T_ _&_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_t_T_y_p_e_<_ _N_,_ _T_u_p_l_e_ _> │ │ │ │ -  Type for reverse element access. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_A_t_<_ _N_ _> │ │ │ │ -  Reverse element access. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_P_o_i_n_t_e_r_P_a_i_r_D_e_l_e_t_o_r_<_ _T_u_p_l_e_ _> │ │ │ │ -  Deletes all objects pointed to in a std::tuple of pointers. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ - class   _D_u_n_e_:_:_F_i_r_s_t_P_r_e_d_i_c_a_t_e_I_n_d_e_x_<_ _T_u_p_l_e_,_ _P_r_e_d_i_c_a_t_e_,_ _s_t_a_r_t_,_ _s_i_z_e_ _> │ │ │ │ -  Finding the index of a certain type in a std::tuple. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_y_p_e_<_ _T_ _> │ │ │ │ -  Generator for predicates accepting one particular type. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_I_s_T_y_p_e_<_ _T_ _>_:_:_P_r_e_d_i_c_a_t_e_<_ _U_ _> │ │ │ │ -  The actual predicate. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_F_i_r_s_t_T_y_p_e_I_n_d_e_x_<_ _T_u_p_l_e_,_ _T_,_ _s_t_a_r_t_ _> │ │ │ │ -  Find the first occurrence of a type in a std::tuple. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_P_u_s_h_B_a_c_k_T_u_p_l_e_<_ _t_y_p_e_n_a_m_e_ _s_t_d_:_:_t_u_p_l_e_<_ _A_r_g_s_._._._ _>_,_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_P_u_s_h_F_r_o_n_t_T_u_p_l_e_<_ _t_y_p_e_n_a_m_e_ _s_t_d_:_:_t_u_p_l_e_<_ _A_r_g_s_._._._ _>_,_ _T_ _> │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_R_e_d_u_c_e_T_u_p_l_e_<_ _F_,_ _T_u_p_l_e_,_ _S_e_e_d_,_ _N_ _> │ │ │ │ -  Apply reduce with meta binary function to template. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_R_e_d_u_c_e_T_u_p_l_e_<_ _F_,_ _T_u_p_l_e_,_ _S_e_e_d_,_ _0_ _> │ │ │ │ -  Apply reduce with meta binary function to template. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_J_o_i_n_T_u_p_l_e_s_<_ _H_e_a_d_,_ _T_a_i_l_ _> │ │ │ │ -  Join two std::tuple's. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ -struct   _D_u_n_e_:_:_F_l_a_t_t_e_n_T_u_p_l_e_<_ _T_u_p_l_e_ _> │ │ │ │ -  Flatten a std::tuple of std::tuple's. _M_o_r_e_._._. │ │ │ │ -  │ │ │ │ NNaammeessppaacceess │ │ │ │ namespace   _D_u_n_e │ │ │ │   _D_u_n_e namespace. │ │ │ │   │ │ │ │ +TTyyppeeddeeffss │ │ │ │ +template │ │ │ │ +using  _D_u_n_e_:_:_R_e_s_o_l_v_e_R_e_f___t = std::remove_reference_t< decltype(_D_u_n_e_:_:_r_e_s_o_l_v_e_R_e_f │ │ │ │ + (std::declval< T & >()))> │ │ │ │ +  Type trait to resolve std::reference_wrapper. │ │ │ │ +  │ │ │ │ FFuunnccttiioonnss │ │ │ │ -template │ │ │ │ - decltype(auto)  _D_u_n_e_:_:_a_p_p_l_y_P_a_r_t_i_a_l (F &&f, ArgTuple │ │ │ │ - &&args, std::integer_sequence< I, i... >) │ │ │ │ -  Apply function with arguments from a │ │ │ │ - given tuple. │ │ │ │ -  │ │ │ │ -template │ │ │ │ - auto  _D_u_n_e_:_:_g_e_n_e_r_i_c_T_r_a_n_s_f_o_r_m_T_u_p_l_e (Tuple &&t, │ │ │ │ - Functor &&f) -> decltype │ │ │ │ - (genericTransformTupleBackend(t, f)) │ │ │ │ -  │ │ │ │ -template class TE, class... Args> │ │ │ │ -_T_r_a_n_s_f_o_r_m_T_u_p_l_e_F_u_n_c_t_o_r< TE, Args... >  _D_u_n_e_:_:_m_a_k_e_T_r_a_n_s_f_o_r_m_T_u_p_l_e_F_u_n_c_t_o_r (Args │ │ │ │ - &&... args) │ │ │ │ -  │ │ │ │ -template class TypeEvaluator, class Tuple , class... Args> │ │ │ │ - auto  _D_u_n_e_:_:_t_r_a_n_s_f_o_r_m_T_u_p_l_e (Tuple &&orig, Args │ │ │ │ - &&... args) -> decltype │ │ │ │ - (_g_e_n_e_r_i_c_T_r_a_n_s_f_o_r_m_T_u_p_l_e(orig, │ │ │ │ - _m_a_k_e_T_r_a_n_s_f_o_r_m_T_u_p_l_e_F_u_n_c_t_o_r< TypeEvaluator │ │ │ │ - >(args...))) │ │ │ │ +template │ │ │ │ +constexpr T &  _D_u_n_e_:_:_r_e_s_o_l_v_e_R_e_f (T &gf) noexcept │ │ │ │ +  Helper function to resolve std::reference_wrapper. │ │ │ │ +  │ │ │ │ +template │ │ │ │ + const auto &  _D_u_n_e_:_:_r_e_s_o_l_v_e_R_e_f (T &&gf)=delete │ │ │ │ +  │ │ │ │ +template │ │ │ │ +constexpr T &  _D_u_n_e_:_:_r_e_s_o_l_v_e_R_e_f (std::reference_wrapper< T > gf) noexcept │ │ │ │ +  Helper function to resolve std::reference_wrapper. │ │ │ │ +  │ │ │ │ +VVaarriiaabblleess │ │ │ │ +template │ │ │ │ +constexpr bool  _D_u_n_e_:_:_I_s_R_e_f_e_r_e_n_c_e_W_r_a_p_p_e_r___v = Impl::IsReferenceWrapper::value │ │ │ │ +  Helper to detect if given type is a std::reference_wrapper. │ │ │ │   │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ -Contains utility classes which can be used with std::tuple. │ │ │ │ =============================================================================== │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ ├── ./usr/share/doc/libdune-common-doc/doxygen/a00032_source.html │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-common: tupleutility.hh Source File │ │ │ +dune-common: referencehelper.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,448 +74,92 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ -
tupleutility.hh
│ │ │ +
referencehelper.hh
│ │ │
│ │ │
│ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ -
5
│ │ │ -
6#ifndef DUNE_TUPLE_UTILITY_HH
│ │ │ -
7#define DUNE_TUPLE_UTILITY_HH
│ │ │ -
8
│ │ │ -
9#include <cstddef>
│ │ │ -
10#include <tuple>
│ │ │ -
11#include <type_traits>
│ │ │ -
12#include <utility>
│ │ │ -
13
│ │ │ - │ │ │ - │ │ │ +
5#ifndef DUNE_COMMON_REFERENCE_HELPER_HH
│ │ │ +
6#define DUNE_COMMON_REFERENCE_HELPER_HH
│ │ │ +
7
│ │ │ +
8#include <type_traits>
│ │ │ +
9#include <functional>
│ │ │ +
10
│ │ │ +
11
│ │ │ +
12
│ │ │ +
13namespace Dune {
│ │ │ +
14
│ │ │ +
15namespace Impl {
│ │ │
16
│ │ │ -
17namespace Dune {
│ │ │ -
18
│ │ │ -
41 template<class F, class ArgTuple, class I, I... i>
│ │ │ -
│ │ │ -
42 decltype(auto) applyPartial(F&& f, ArgTuple&& args, std::integer_sequence<I, i...> /*indices*/)
│ │ │ -
43 {
│ │ │ -
44 return f(std::get<i>(args)...);
│ │ │ -
45 }
│ │ │ -
│ │ │ -
46
│ │ │ -
47 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
49 {
│ │ │ -
50 typedef typename std::add_const<T>::type& ConstType;
│ │ │ -
51 typedef T& NonConstType;
│ │ │ -
52 typedef const typename std::remove_const<T>::type& ParameterType;
│ │ │ -
53 };
│ │ │ -
│ │ │ -
54
│ │ │ -
55 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
57 {
│ │ │ -
58 typedef typename std::add_const<T>::type* ConstType;
│ │ │ -
59 typedef T* NonConstType;
│ │ │ -
60 typedef T* ParameterType;
│ │ │ -
61 };
│ │ │ -
│ │ │ +
17 template<class T>
│ │ │ +
18 class IsReferenceWrapper : public std::false_type {};
│ │ │ +
19
│ │ │ +
20 template<class T>
│ │ │ +
21 class IsReferenceWrapper<std::reference_wrapper<T>> : public std::true_type {};
│ │ │ +
22
│ │ │ +
23 template<class T>
│ │ │ +
24 class IsReferenceWrapper<const std::reference_wrapper<T>> : public std::true_type {};
│ │ │ +
25
│ │ │ +
26} // namespace Dune::Impl
│ │ │ +
27
│ │ │ +
28
│ │ │ +
34template<class T>
│ │ │ +
35constexpr bool IsReferenceWrapper_v = Impl::IsReferenceWrapper<T>::value;
│ │ │ +
36
│ │ │ +
37
│ │ │ +
46template<class T>
│ │ │ +
│ │ │ +
47constexpr T& resolveRef(T& gf) noexcept
│ │ │ +
48{
│ │ │ +
49 return gf;
│ │ │ +
50}
│ │ │ +
│ │ │ +
51
│ │ │ +
52
│ │ │ +
53// There's no overload for non std::reference_wrapper r-values,
│ │ │ +
54// because this may lead to undefined behavior whenever the
│ │ │ +
55// return value is stored.
│ │ │ +
56// Notice that deleting the overload is not necessary, but
│ │ │ +
57// helps to document that it is missing on purpose. It also
│ │ │ +
58// leads to nicer error messages.
│ │ │ +
59template<class T>
│ │ │ +
60const auto& resolveRef(T&& gf) = delete;
│ │ │ +
61
│ │ │
62
│ │ │ -
63 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
65 {
│ │ │ -
66 typedef T& ConstType;
│ │ │ -
67 typedef T& NonConstType;
│ │ │ -
68 typedef T& ParameterType;
│ │ │ -
69 };
│ │ │ -
│ │ │ -
70
│ │ │ -
78 template<class T>
│ │ │ - │ │ │ -
80
│ │ │ -
81 template<class... Args>
│ │ │ -
│ │ │ -
82 struct NullPointerInitialiser<std::tuple<Args...> >
│ │ │ -
83 {
│ │ │ -
84 typedef std::tuple<Args...> ResultType;
│ │ │ -
│ │ │ - │ │ │ -
86 {
│ │ │ -
87 return ResultType(static_cast<Args>(nullptr)...);
│ │ │ -
88 }
│ │ │ -
│ │ │ -
89 };
│ │ │ -
│ │ │ -
90
│ │ │ -
115 template<template <class> class TE, class T>
│ │ │ - │ │ │ -
117
│ │ │ -
118 template<template <class> class TE, class... Args>
│ │ │ -
│ │ │ -
119 struct ForEachType<TE, std::tuple<Args...> >
│ │ │ -
120 {
│ │ │ -
121 typedef std::tuple<typename TE<Args>::Type...> Type;
│ │ │ -
122 };
│ │ │ -
│ │ │ -
123
│ │ │ -
124#ifndef DOXYGEN
│ │ │ -
125 template<class Tuple, class Functor, std::size_t... I>
│ │ │ -
126 inline auto genericTransformTupleBackendImpl(Tuple& t, Functor& f, const std::index_sequence<I...>& )
│ │ │ -
127 -> std::tuple<decltype(f(std::get<I>(t)))...>
│ │ │ -
128 {
│ │ │ -
129 return std::tuple<decltype(f(std::get<I>(t)))...>(f(std::get<I>(t))...);
│ │ │ -
130 }
│ │ │ -
131
│ │ │ -
132 template<class... Args, class Functor>
│ │ │ -
133 auto genericTransformTupleBackend(std::tuple<Args...>& t, Functor& f) ->
│ │ │ -
134 decltype(genericTransformTupleBackendImpl(t, f,std::index_sequence_for<Args...>{}))
│ │ │ -
135 {
│ │ │ -
136 return genericTransformTupleBackendImpl(t, f,std::index_sequence_for<Args...>{});
│ │ │ -
137 }
│ │ │ -
138
│ │ │ -
139 template<class... Args, class Functor>
│ │ │ -
140 auto genericTransformTupleBackend(const std::tuple<Args...>& t, Functor& f) ->
│ │ │ -
141 decltype(genericTransformTupleBackendImpl(t, f, std::index_sequence_for<Args...>{}))
│ │ │ -
142 {
│ │ │ -
143 return genericTransformTupleBackendImpl(t, f, std::index_sequence_for<Args...>{});
│ │ │ -
144 }
│ │ │ -
145#endif
│ │ │ -
146
│ │ │ -
185 template<class Tuple, class Functor>
│ │ │ -
│ │ │ -
186 auto genericTransformTuple(Tuple&& t, Functor&& f) ->
│ │ │ -
187 decltype(genericTransformTupleBackend(t, f))
│ │ │ -
188 {
│ │ │ -
189 return genericTransformTupleBackend(t, f);
│ │ │ -
190 }
│ │ │ -
│ │ │ -
191
│ │ │ -
224 template<template<class> class TE, class... Args>
│ │ │ -
│ │ │ - │ │ │ -
226 {
│ │ │ -
227 mutable std::tuple<Args&...> tup;
│ │ │ -
228
│ │ │ -
229 template<class T, std::size_t... I>
│ │ │ -
230 inline auto apply(T&& t, const std::index_sequence<I...>& ) ->
│ │ │ -
231 decltype(TE<T>::apply(t,std::get<I>(tup)...)) const
│ │ │ -
232 {
│ │ │ -
233 return TE<T>::apply(t,std::get<I>(tup)...);
│ │ │ -
234 }
│ │ │ -
235
│ │ │ -
236 public:
│ │ │ -
237 template<class T>
│ │ │ -
│ │ │ -
238 struct TypeEvaluator : public TE<T>
│ │ │ -
239 {};
│ │ │ -
│ │ │ -
240
│ │ │ -
│ │ │ -
241 TransformTupleFunctor(Args&&... args)
│ │ │ -
242 : tup(args...)
│ │ │ -
243 { }
│ │ │ -
│ │ │ -
244
│ │ │ -
245 template<class T>
│ │ │ -
│ │ │ -
246 inline auto operator()(T&& t) ->
│ │ │ -
247 decltype(this->apply(t,std::index_sequence_for<Args...>{})) const
│ │ │ -
248 {
│ │ │ -
249 return apply(t,std::index_sequence_for<Args...>{});
│ │ │ -
250 }
│ │ │ -
│ │ │ -
251 };
│ │ │ -
│ │ │ -
252
│ │ │ -
253 template<template<class> class TE, class... Args>
│ │ │ -
│ │ │ - │ │ │ -
255 {
│ │ │ -
256 return TransformTupleFunctor<TE, Args...>(args...);
│ │ │ -
257 }
│ │ │ -
│ │ │ -
258
│ │ │ -
291 template<template<class> class TypeEvaluator, class Tuple, class... Args>
│ │ │ -
│ │ │ -
292 auto transformTuple(Tuple&& orig, Args&&... args) ->
│ │ │ -
293 decltype(genericTransformTuple(orig, makeTransformTupleFunctor<TypeEvaluator>(args...)))
│ │ │ -
294 {
│ │ │ -
295 return genericTransformTuple(orig, makeTransformTupleFunctor<TypeEvaluator>(args...));
│ │ │ -
296 }
│ │ │ -
│ │ │ -
297
│ │ │ -
299
│ │ │ -
303 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
305 {
│ │ │ -
306 typedef T& Type;
│ │ │ -
│ │ │ -
307 static Type apply(T& t)
│ │ │ -
308 {
│ │ │ -
309 return t;
│ │ │ -
310 }
│ │ │ -
│ │ │ -
311 };
│ │ │ -
│ │ │ -
312
│ │ │ -
314
│ │ │ -
318 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
320 {
│ │ │ -
321 typedef typename std::remove_reference<T>::type* Type;
│ │ │ -
│ │ │ -
322 static Type apply(T& t)
│ │ │ -
323 {
│ │ │ -
324 return &t;
│ │ │ -
325 }
│ │ │ -
│ │ │ -
326 };
│ │ │ -
│ │ │ -
327
│ │ │ -
328 // Specialization, in case the type is already a reference
│ │ │ -
329 template<class T>
│ │ │ -
│ │ │ - │ │ │ -
331 {
│ │ │ -
332 typedef typename std::remove_reference<T>::type* Type;
│ │ │ -
│ │ │ -
333 static Type apply(T& t)
│ │ │ -
334 {
│ │ │ -
335 return &t;
│ │ │ -
336 }
│ │ │ -
│ │ │ -
337 };
│ │ │ -
│ │ │ -
338
│ │ │ -
344 template<int N, class Tuple>
│ │ │ -
│ │ │ -
345 struct AtType
│ │ │ -
346 {
│ │ │ -
347 typedef typename std::tuple_element<std::tuple_size<Tuple>::value - N - 1, Tuple>::type Type;
│ │ │ -
348 };
│ │ │ -
│ │ │ -
349
│ │ │ -
357 template<int N>
│ │ │ -
│ │ │ -
358 struct At
│ │ │ -
359 {
│ │ │ -
360 template<typename Tuple>
│ │ │ -
361 static typename TupleAccessTraits<typename AtType<N, Tuple>::Type>::NonConstType
│ │ │ -
│ │ │ -
362 get(Tuple& t)
│ │ │ -
363 {
│ │ │ -
364 return std::get<std::tuple_size<Tuple>::value - N - 1>(t);
│ │ │ -
365 }
│ │ │ -
│ │ │ -
366
│ │ │ -
367 template<typename Tuple>
│ │ │ -
368 static typename TupleAccessTraits<typename AtType<N, Tuple>::Type>::ConstType
│ │ │ -
│ │ │ -
369 get(const Tuple& t)
│ │ │ -
370 {
│ │ │ -
371 return std::get<std::tuple_size<Tuple>::value - N - 1>(t);
│ │ │ -
372 }
│ │ │ -
│ │ │ -
373 };
│ │ │ -
│ │ │ -
374
│ │ │ -
378 template<class Tuple>
│ │ │ -
│ │ │ - │ │ │ -
380 {
│ │ │ -
381 template<typename... Ts>
│ │ │ -
│ │ │ -
382 static void apply(std::tuple<Ts...>& t)
│ │ │ -
383 {
│ │ │ -
384 Hybrid::forEach(t,[&](auto&& ti){delete ti; ti=nullptr;});
│ │ │ -
385 }
│ │ │ -
│ │ │ -
386 };
│ │ │ -
│ │ │ -
387
│ │ │ -
411 template<class Tuple, template<class> class Predicate, std::size_t start = 0,
│ │ │ -
412 std::size_t size = std::tuple_size<Tuple>::value>
│ │ │ -
│ │ │ - │ │ │ -
414 public std::conditional<Predicate<typename std::tuple_element<start,
│ │ │ -
415 Tuple>::type>::value,
│ │ │ -
416 std::integral_constant<std::size_t, start>,
│ │ │ -
417 FirstPredicateIndex<Tuple, Predicate, start+1> >::type
│ │ │ -
418 {
│ │ │ -
419 static_assert(std::tuple_size<Tuple>::value == size, "The \"size\" "
│ │ │ -
420 "template parameter of FirstPredicateIndex is an "
│ │ │ -
421 "implementation detail and should never be set "
│ │ │ -
422 "explicitly!");
│ │ │ -
423 };
│ │ │ -
│ │ │ -
424
│ │ │ -
425#ifndef DOXYGEN
│ │ │ -
426 template<class Tuple, template<class> class Predicate, std::size_t size>
│ │ │ -
427 class FirstPredicateIndex<Tuple, Predicate, size, size>
│ │ │ -
428 {
│ │ │ -
429 static_assert(AlwaysFalse<Tuple>::value, "None of the std::tuple element "
│ │ │ -
430 "types matches the predicate!");
│ │ │ -
431 };
│ │ │ -
432#endif // !DOXYGEN
│ │ │ -
433
│ │ │ -
443 template<class T>
│ │ │ -
│ │ │ -
444 struct IsType
│ │ │ -
445 {
│ │ │ -
447 template<class U>
│ │ │ -
448 struct Predicate : public std::is_same<T, U> {};
│ │ │ -
449 };
│ │ │ -
│ │ │ -
450
│ │ │ -
464 template<class Tuple, class T, std::size_t start = 0>
│ │ │ -
│ │ │ - │ │ │ -
466 public FirstPredicateIndex<Tuple, IsType<T>::template Predicate, start>
│ │ │ -
467 { };
│ │ │ -
│ │ │ -
468
│ │ │ -
475 template<class Tuple, class T>
│ │ │ - │ │ │ -
477
│ │ │ -
478 template<class... Args, class T>
│ │ │ -
│ │ │ -
479 struct PushBackTuple<typename std::tuple<Args...>, T>
│ │ │ -
480 {
│ │ │ -
481 typedef typename std::tuple<Args..., T> type;
│ │ │ -
482 };
│ │ │ -
│ │ │ -
483
│ │ │ -
490 template<class Tuple, class T>
│ │ │ - │ │ │ -
492
│ │ │ -
493 template<class... Args, class T>
│ │ │ -
│ │ │ -
494 struct PushFrontTuple<typename std::tuple<Args...>, T>
│ │ │ -
495 {
│ │ │ -
496 typedef typename std::tuple<T, Args...> type;
│ │ │ -
497 };
│ │ │ -
│ │ │ -
498
│ │ │ -
511 template<
│ │ │ -
512 template <class, class> class F,
│ │ │ -
513 class Tuple,
│ │ │ -
514 class Seed=std::tuple<>,
│ │ │ -
515 int N=std::tuple_size<Tuple>::value>
│ │ │ -
│ │ │ - │ │ │ -
517 {
│ │ │ -
518 typedef typename ReduceTuple<F, Tuple, Seed, N-1>::type Accumulated;
│ │ │ -
519 typedef typename std::tuple_element<N-1, Tuple>::type Value;
│ │ │ -
520
│ │ │ -
522 typedef typename F<Accumulated, Value>::type type;
│ │ │ -
523 };
│ │ │ -
│ │ │ -
524
│ │ │ -
535 template<
│ │ │ -
536 template <class, class> class F,
│ │ │ -
537 class Tuple,
│ │ │ -
538 class Seed>
│ │ │ -
│ │ │ -
539 struct ReduceTuple<F, Tuple, Seed, 0>
│ │ │ -
540 {
│ │ │ -
542 typedef Seed type;
│ │ │ -
543 };
│ │ │ -
│ │ │ -
544
│ │ │ -
554 template<class Head, class Tail>
│ │ │ -
│ │ │ - │ │ │ -
556 {
│ │ │ - │ │ │ -
559 };
│ │ │ -
│ │ │ -
560
│ │ │ -
569 template<class Tuple>
│ │ │ -
│ │ │ - │ │ │ -
571 {
│ │ │ - │ │ │ -
574 };
│ │ │ -
│ │ │ -
575
│ │ │ -
577}
│ │ │ -
578
│ │ │ -
579#endif
│ │ │ -
Traits for type conversions and type information.
│ │ │ - │ │ │ -
std::add_const< T >::type & ConstType
Definition tupleutility.hh:50
│ │ │ -
static void apply(std::tuple< Ts... > &t)
Definition tupleutility.hh:382
│ │ │ -
T * ParameterType
Definition tupleutility.hh:60
│ │ │ -
auto transformTuple(Tuple &&orig, Args &&... args) -> decltype(genericTransformTuple(orig, makeTransformTupleFunctor< TypeEvaluator >(args...)))
Definition tupleutility.hh:292
│ │ │ -
T & ConstType
Definition tupleutility.hh:66
│ │ │ -
ReduceTuple< F, Tuple, Seed, N-1 >::type Accumulated
Definition tupleutility.hh:518
│ │ │ -
T * NonConstType
Definition tupleutility.hh:59
│ │ │ -
Seed type
Result of the reduce operation.
Definition tupleutility.hh:542
│ │ │ -
std::remove_reference< T >::type * Type
Definition tupleutility.hh:321
│ │ │ -
static Type apply(T &t)
Definition tupleutility.hh:307
│ │ │ -
static ResultType apply()
Definition tupleutility.hh:85
│ │ │ -
std::tuple< Args... > ResultType
Definition tupleutility.hh:84
│ │ │ -
std::remove_reference< T >::type * Type
Definition tupleutility.hh:332
│ │ │ -
TransformTupleFunctor(Args &&... args)
Definition tupleutility.hh:241
│ │ │ -
std::tuple_element< std::tuple_size< Tuple >::value-N-1, Tuple >::type Type
Definition tupleutility.hh:347
│ │ │ -
static Type apply(T &t)
Definition tupleutility.hh:333
│ │ │ -
auto operator()(T &&t) -> decltype(this->apply(t, std::index_sequence_for< Args... >{})) const
Definition tupleutility.hh:246
│ │ │ -
T & NonConstType
Definition tupleutility.hh:67
│ │ │ -
T & NonConstType
Definition tupleutility.hh:51
│ │ │ -
static TupleAccessTraits< typenameAtType< N, Tuple >::Type >::ConstType get(const Tuple &t)
Definition tupleutility.hh:369
│ │ │ -
T & Type
Definition tupleutility.hh:306
│ │ │ -
static TupleAccessTraits< typenameAtType< N, Tuple >::Type >::NonConstType get(Tuple &t)
Definition tupleutility.hh:362
│ │ │ -
std::tuple< Args..., T > type
Definition tupleutility.hh:481
│ │ │ -
std::tuple_element< N-1, Tuple >::type Value
Definition tupleutility.hh:519
│ │ │ -
std::tuple< T, Args... > type
Definition tupleutility.hh:496
│ │ │ -
ReduceTuple< JoinTuples, Tuple >::type type
Result of the flatten operation.
Definition tupleutility.hh:573
│ │ │ -
static Type apply(T &t)
Definition tupleutility.hh:322
│ │ │ -
F< Accumulated, Value >::type type
Result of the reduce operation.
Definition tupleutility.hh:522
│ │ │ -
ReduceTuple< PushBackTuple, Tail, Head >::type type
Result of the join operation.
Definition tupleutility.hh:558
│ │ │ -
std::tuple< typename TE< Args >::Type... > Type
Definition tupleutility.hh:121
│ │ │ -
auto genericTransformTuple(Tuple &&t, Functor &&f) -> decltype(genericTransformTupleBackend(t, f))
Definition tupleutility.hh:186
│ │ │ -
decltype(auto) applyPartial(F &&f, ArgTuple &&args, std::integer_sequence< I, i... >)
Apply function with arguments from a given tuple.
Definition tupleutility.hh:42
│ │ │ -
T & ParameterType
Definition tupleutility.hh:68
│ │ │ -
const std::remove_const< T >::type & ParameterType
Definition tupleutility.hh:52
│ │ │ -
std::add_const< T >::type * ConstType
Definition tupleutility.hh:58
│ │ │ -
TransformTupleFunctor< TE, Args... > makeTransformTupleFunctor(Args &&... args)
Definition tupleutility.hh:254
│ │ │ -
constexpr void forEach(Range &&range, F &&f)
Range based for loop.
Definition hybridutilities.hh:256
│ │ │ +
81template<class T>
│ │ │ +
│ │ │ +
82constexpr T& resolveRef(std::reference_wrapper<T> gf) noexcept
│ │ │ +
83{
│ │ │ +
84 return gf.get();
│ │ │ +
85}
│ │ │ +
│ │ │ +
86
│ │ │ +
87
│ │ │ +
88
│ │ │ +
99template<class T>
│ │ │ +
100using ResolveRef_t = std::remove_reference_t<decltype(Dune::resolveRef(std::declval<T&>()))>;
│ │ │ +
101
│ │ │ +
102
│ │ │ +
103} // namespace Dune
│ │ │ +
104
│ │ │ +
105
│ │ │ +
106
│ │ │ +
107#endif // DUNE_COMMON_REFERENCE_HELPER_HH
│ │ │ +
constexpr bool IsReferenceWrapper_v
Helper to detect if given type is a std::reference_wrapper.
Definition referencehelper.hh:35
│ │ │ +
constexpr T & resolveRef(T &gf) noexcept
Helper function to resolve std::reference_wrapper.
Definition referencehelper.hh:47
│ │ │
STL namespace.
│ │ │
Dune namespace.
Definition alignedallocator.hh:13
│ │ │ -
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition integersequence.hh:75
│ │ │ -
Definition tupleutility.hh:49
│ │ │ -
A helper template that initializes a std::tuple consisting of pointers to nullptr.
Definition tupleutility.hh:79
│ │ │ -
Helper template to clone the type definition of a std::tuple with the storage types replaced by a use...
Definition tupleutility.hh:116
│ │ │ -
Definition tupleutility.hh:226
│ │ │ -
Definition tupleutility.hh:239
│ │ │ -
TypeEvaluator to turn a type T into a reference to T
Definition tupleutility.hh:305
│ │ │ -
TypeEvaluator to turn a type T into a pointer to T
Definition tupleutility.hh:320
│ │ │ -
Type for reverse element access.
Definition tupleutility.hh:346
│ │ │ -
Reverse element access.
Definition tupleutility.hh:359
│ │ │ -
Deletes all objects pointed to in a std::tuple of pointers.
Definition tupleutility.hh:380
│ │ │ -
Finding the index of a certain type in a std::tuple.
Definition tupleutility.hh:418
│ │ │ -
Generator for predicates accepting one particular type.
Definition tupleutility.hh:445
│ │ │ -
The actual predicate.
Definition tupleutility.hh:448
│ │ │ -
Find the first occurrence of a type in a std::tuple.
Definition tupleutility.hh:467
│ │ │ -
Helper template to append a type to a std::tuple.
Definition tupleutility.hh:476
│ │ │ -
Helper template to prepend a type to a std::tuple.
Definition tupleutility.hh:491
│ │ │ -
Apply reduce with meta binary function to template.
Definition tupleutility.hh:517
│ │ │ -
Join two std::tuple's.
Definition tupleutility.hh:556
│ │ │ -
Flatten a std::tuple of std::tuple's.
Definition tupleutility.hh:571
│ │ │ -
template which always yields a false value
Definition typetraits.hh:124
│ │ │ +
std::remove_reference_t< decltype(Dune::resolveRef(std::declval< T & >()))> ResolveRef_t
Type trait to resolve std::reference_wrapper.
Definition referencehelper.hh:100
│ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -1,520 +1,98 @@ │ │ │ │ dune-common 2.10 │ │ │ │ Loading... │ │ │ │ Searching... │ │ │ │ No Matches │ │ │ │ * _d_u_n_e │ │ │ │ * _c_o_m_m_o_n │ │ │ │ -tupleutility.hh │ │ │ │ +referencehelper.hh │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ LICENSE.md in module root │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ -5 │ │ │ │ -6#ifndef DUNE_TUPLE_UTILITY_HH │ │ │ │ -7#define DUNE_TUPLE_UTILITY_HH │ │ │ │ -8 │ │ │ │ -9#include │ │ │ │ -10#include │ │ │ │ -11#include │ │ │ │ -12#include │ │ │ │ -13 │ │ │ │ -14#include <_d_u_n_e_/_c_o_m_m_o_n_/_h_y_b_r_i_d_u_t_i_l_i_t_i_e_s_._h_h> │ │ │ │ -15#include <_d_u_n_e_/_c_o_m_m_o_n_/_t_y_p_e_t_r_a_i_t_s_._h_h> │ │ │ │ +5#ifndef DUNE_COMMON_REFERENCE_HELPER_HH │ │ │ │ +6#define DUNE_COMMON_REFERENCE_HELPER_HH │ │ │ │ +7 │ │ │ │ +8#include │ │ │ │ +9#include │ │ │ │ +10 │ │ │ │ +11 │ │ │ │ +12 │ │ │ │ +13namespace _D_u_n_e { │ │ │ │ +14 │ │ │ │ +15namespace Impl { │ │ │ │ 16 │ │ │ │ -17namespace _D_u_n_e { │ │ │ │ -18 │ │ │ │ -41 template │ │ │ │ -_4_2 decltype(auto) _a_p_p_l_y_P_a_r_t_i_a_l(F&& f, ArgTuple&& args, std::integer_sequence /*indices*/) │ │ │ │ -43 { │ │ │ │ -44 return f(std::get(args)...); │ │ │ │ -45 } │ │ │ │ -46 │ │ │ │ -47 template │ │ │ │ -_4_8 struct _T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s │ │ │ │ -49 { │ │ │ │ -_5_0 typedef typename std::add_const::type& _C_o_n_s_t_T_y_p_e; │ │ │ │ -_5_1 typedef T& _N_o_n_C_o_n_s_t_T_y_p_e; │ │ │ │ -_5_2 typedef const typename std::remove_const::type& _P_a_r_a_m_e_t_e_r_T_y_p_e; │ │ │ │ -53 }; │ │ │ │ -54 │ │ │ │ -55 template │ │ │ │ -_5_6 struct _T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s │ │ │ │ -57 { │ │ │ │ -_5_8 typedef typename std::add_const::type* _C_o_n_s_t_T_y_p_e; │ │ │ │ -_5_9 typedef T* _N_o_n_C_o_n_s_t_T_y_p_e; │ │ │ │ -_6_0 typedef T* _P_a_r_a_m_e_t_e_r_T_y_p_e; │ │ │ │ -61 }; │ │ │ │ +17 template │ │ │ │ +18 class IsReferenceWrapper : public std::false_type {}; │ │ │ │ +19 │ │ │ │ +20 template │ │ │ │ +21 class IsReferenceWrapper<_s_t_d::reference_wrapper> : public std::true_type │ │ │ │ +{}; │ │ │ │ +22 │ │ │ │ +23 template │ │ │ │ +24 class IsReferenceWrapper> : public std:: │ │ │ │ +true_type {}; │ │ │ │ +25 │ │ │ │ +26} // namespace Dune::Impl │ │ │ │ +27 │ │ │ │ +28 │ │ │ │ +34template │ │ │ │ +_3_5constexpr bool _I_s_R_e_f_e_r_e_n_c_e_W_r_a_p_p_e_r___v = Impl::IsReferenceWrapper::value; │ │ │ │ +36 │ │ │ │ +37 │ │ │ │ +46template │ │ │ │ +_4_7constexpr T& _r_e_s_o_l_v_e_R_e_f(T& gf) noexcept │ │ │ │ +48{ │ │ │ │ +49 return gf; │ │ │ │ +50} │ │ │ │ +51 │ │ │ │ +52 │ │ │ │ +53// There's no overload for non std::reference_wrapper r-values, │ │ │ │ +54// because this may lead to undefined behavior whenever the │ │ │ │ +55// return value is stored. │ │ │ │ +56// Notice that deleting the overload is not necessary, but │ │ │ │ +57// helps to document that it is missing on purpose. It also │ │ │ │ +58// leads to nicer error messages. │ │ │ │ +59template │ │ │ │ +_6_0const auto& _r_e_s_o_l_v_e_R_e_f(T&& gf) = delete; │ │ │ │ +61 │ │ │ │ 62 │ │ │ │ -63 template │ │ │ │ -_6_4 struct _T_u_p_l_e_A_c_c_e_s_s_T_r_a_i_t_s │ │ │ │ -65 { │ │ │ │ -_6_6 typedef T& _C_o_n_s_t_T_y_p_e; │ │ │ │ -_6_7 typedef T& _N_o_n_C_o_n_s_t_T_y_p_e; │ │ │ │ -_6_8 typedef T& _P_a_r_a_m_e_t_e_r_T_y_p_e; │ │ │ │ -69 }; │ │ │ │ -70 │ │ │ │ -78 template │ │ │ │ -_7_9 struct _N_u_l_l_P_o_i_n_t_e_r_I_n_i_t_i_a_l_i_s_e_r; │ │ │ │ -80 │ │ │ │ -81 template │ │ │ │ -_8_2 struct _N_u_l_l_P_o_i_n_t_e_r_I_n_i_t_i_a_l_i_s_e_r<_s_t_d::tuple > │ │ │ │ -83 { │ │ │ │ -_8_4 typedef std::tuple _R_e_s_u_l_t_T_y_p_e; │ │ │ │ -_8_5 static _R_e_s_u_l_t_T_y_p_e _a_p_p_l_y() │ │ │ │ -86 { │ │ │ │ -87 return _R_e_s_u_l_t_T_y_p_e(static_cast(nullptr)...); │ │ │ │ -88 } │ │ │ │ -89 }; │ │ │ │ -90 │ │ │ │ -115 template