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

    This file implements a quadratic diagonal matrix of fixed size. \n+

    Implements the dense vector interface, with an exchangeable storage class. \n More...

    \n
    #include <algorithm>
    \n-#include <cassert>
    \n-#include <cmath>
    \n-#include <complex>
    \n-#include <cstddef>
    \n-#include <initializer_list>
    \n-#include <iostream>
    \n-#include <memory>
    \n-#include <dune/common/boundschecking.hh>
    \n-#include <dune/common/densematrix.hh>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/common/fmatrix.hh>
    \n-#include <dune/common/fvector.hh>
    \n-#include <dune/common/genericiterator.hh>
    \n-#include <dune/common/typetraits.hh>
    \n+#include <limits>
    \n+#include <type_traits>
    \n+#include "genericiterator.hh"
    \n+#include "ftraits.hh"
    \n+#include "matvectraits.hh"
    \n+#include "promotiontraits.hh"
    \n+#include "dotproduct.hh"
    \n+#include "boundschecking.hh"
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n \n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n Classes

    class  Dune::DiagonalMatrix< K, n >
     A diagonal matrix of static size. More...
    struct  Dune::FieldTraits< DenseVector< V > >
     
    struct  Dune::FieldTraits< DiagonalMatrix< K, n > >
    class  Dune::DenseIterator< C, T, R >
     Generic iterator class for dense vector and matrix implementations. More...
     
    class  Dune::DiagonalMatrixWrapper< DiagonalMatrixType >
     
    class  Dune::DiagonalRowVectorConst< K, n >
     
    class  Dune::DiagonalRowVector< K, n >
     
    struct  Dune::const_reference< DiagonalRowVector< K, n > >
     
    struct  Dune::const_reference< DiagonalRowVectorConst< K, n > >
     
    struct  Dune::mutable_reference< DiagonalRowVector< K, n > >
     
    struct  Dune::mutable_reference< DiagonalRowVectorConst< K, n > >
     
    class  Dune::ContainerWrapperIterator< CW, T, R >
     Iterator class for sparse vector-like containers. More...
     
    struct  Dune::DenseMatrixAssigner< DenseMatrix, DiagonalMatrix< field, N > >
    class  Dune::DenseVector< V >
     Interface for a class of dense vectors over a given field. More...
     
    \n \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::fvmeta
     
    \n

    Detailed Description

    \n-

    This file implements a quadratic diagonal matrix of fixed size.

    \n+

    Implements the dense vector interface, with an exchangeable storage class.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,58 +1,41 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-diagonalmatrix.hh File Reference\n-This file implements a quadratic diagonal matrix of fixed size. _\bM_\bo_\br_\be_\b._\b._\b.\n+densevector.hh File Reference\n+_\bC_\bo_\bm_\bm_\bo_\bn \u00bb _\bD_\be_\bn_\bs_\be_\b _\bM_\ba_\bt_\br_\bi_\bx_\b _\ba_\bn_\bd_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\bT_\be_\bm_\bp_\bl_\ba_\bt_\be_\b _\bL_\bi_\bb_\br_\ba_\br_\by\n+Implements the dense vector interface, with an exchangeable storage class.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n #include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include \n+#include \n+#include \"_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh\"\n+#include \"_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+#include \"_\bm_\ba_\bt_\bv_\be_\bc_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+#include \"_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+#include \"_\bd_\bo_\bt_\bp_\br_\bo_\bd_\bu_\bc_\bt_\b._\bh_\bh\"\n+#include \"_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bn_\b _\b>\n-\u00a0 A diagonal matrix of static size. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bV_\b _\b>_\b _\b>\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bC_\b,_\b _\bT_\b,_\b _\bR_\b _\b>\n+\u00a0 Generic iterator class for dense vector and matrix implementations.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bT_\by_\bp_\be_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\b _\bK_\b,_\b _\bn_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bC_\bW_\b,_\b _\bT_\b,_\b _\bR_\b _\b>\n-\u00a0 Iterator class for sparse vector-like containers. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bA_\bs_\bs_\bi_\bg_\bn_\be_\br_\b<_\b _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b,_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bf_\bi_\be_\bl_\bd_\b,_\b _\bN_\b _\b>_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bV_\b _\b>\n+\u00a0 _\bI_\bn_\bt_\be_\br_\bf_\ba_\bc_\be for a class of dense vectors over a given field. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bv_\bm_\be_\bt_\ba\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-This file implements a quadratic diagonal matrix of fixed size.\n+Implements the dense vector interface, with an exchangeable storage class.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: diagonalmatrix.hh Source File\n+dune-common: densevector.hh Source File\n \n \n \n \n \n \n \n@@ -74,1353 +74,830 @@\n \n
    \n \n
    \n
    \n
    \n-
    diagonalmatrix.hh
    \n+
    densevector.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_DIAGONAL_MATRIX_HH
    \n-
    6#define DUNE_DIAGONAL_MATRIX_HH
    \n+
    5#ifndef DUNE_DENSEVECTOR_HH
    \n+
    6#define DUNE_DENSEVECTOR_HH
    \n
    7
    \n-
    12#include <algorithm>
    \n-
    13#include <cassert>
    \n-
    14#include <cmath>
    \n-
    15#include <complex>
    \n-
    16#include <cstddef>
    \n-
    17#include <initializer_list>
    \n-
    18#include <iostream>
    \n-
    19#include <memory>
    \n+
    8#include <algorithm>
    \n+
    9#include <limits>
    \n+
    10#include <type_traits>
    \n+
    11
    \n+
    12#include "genericiterator.hh"
    \n+
    13#include "ftraits.hh"
    \n+
    14#include "matvectraits.hh"
    \n+
    15#include "promotiontraits.hh"
    \n+
    16#include "dotproduct.hh"
    \n+
    17#include "boundschecking.hh"
    \n+
    18
    \n+
    19namespace Dune {
    \n
    20
    \n-\n-\n-\n-\n-\n-\n-\n-
    28
    \n-
    29
    \n-
    30namespace Dune {
    \n-
    31
    \n-
    32 template< class K, int n > class DiagonalRowVectorConst;
    \n-
    33 template< class K, int n > class DiagonalRowVector;
    \n-
    34 template< class DiagonalMatrixType > class DiagonalMatrixWrapper;
    \n-
    35 template< class C, class T, class R> class ContainerWrapperIterator;
    \n-
    36
    \n-
    51 template<class K, int n>
    \n-
    \n-\n-
    53 {
    \n-\n-
    55
    \n-
    56 public:
    \n-
    57 //===== type definitions and constants
    \n-
    58
    \n-
    60 typedef K value_type;
    \n-\n-
    62
    \n-
    64 typedef K block_type;
    \n-
    65
    \n-
    67 typedef std::size_t size_type;
    \n-
    68
    \n-
    70 constexpr static int blocklevel = 1;
    \n-
    71
    \n-\n-\n-\n-\n-\n-\n-
    79
    \n-
    81 constexpr static int rows = n;
    \n-
    83 constexpr static int cols = n;
    \n-
    84
    \n-
    85 //==== size
    \n-
    86
    \n-
    \n-
    87 static constexpr size_type size ()
    \n-
    88 {
    \n-
    89 return rows;
    \n-
    90 }
    \n-
    \n-
    91
    \n-
    92 //===== constructors
    \n-
    93
    \n-
    95 constexpr DiagonalMatrix() = default;
    \n-
    96
    \n-
    \n-
    98 DiagonalMatrix (const K& k)
    \n-
    99 : diag_(k)
    \n-
    100 {}
    \n-
    \n-
    101
    \n-
    \n-\n-
    104 : diag_(diag)
    \n-
    105 {}
    \n-
    \n-
    106
    \n-
    \n-
    115 DiagonalMatrix (std::initializer_list<K> const &l)
    \n-
    116 {
    \n-
    117 std::copy_n(l.begin(), std::min(static_cast<std::size_t>(rows),
    \n-
    118 l.size()),
    \n-
    119 diag_.begin());
    \n+
    21 // forward declaration of template
    \n+
    22 template<typename V> class DenseVector;
    \n+
    23
    \n+
    24 template<typename V>
    \n+\n+
    30
    \n+
    \n+
    40 namespace fvmeta
    \n+
    41 {
    \n+
    46 template<class K>
    \n+
    47 inline typename FieldTraits<K>::real_type absreal (const K& k)
    \n+
    48 {
    \n+
    49 using std::abs;
    \n+
    50 return abs(k);
    \n+
    51 }
    \n+
    52
    \n+
    57 template<class K>
    \n+
    58 inline typename FieldTraits<K>::real_type absreal (const std::complex<K>& c)
    \n+
    59 {
    \n+
    60 using std::abs;
    \n+
    61 return abs(c.real()) + abs(c.imag());
    \n+
    62 }
    \n+
    63
    \n+
    68 template<class K>
    \n+
    69 inline typename FieldTraits<K>::real_type abs2 (const K& k)
    \n+
    70 {
    \n+
    71 return k*k;
    \n+
    72 }
    \n+
    73
    \n+
    78 template<class K>
    \n+
    79 inline typename FieldTraits<K>::real_type abs2 (const std::complex<K>& c)
    \n+
    80 {
    \n+
    81 return c.real()*c.real() + c.imag()*c.imag();
    \n+
    82 }
    \n+
    83
    \n+
    88 template<class K, bool isInteger = std::numeric_limits<K>::is_integer>
    \n+
    89 struct Sqrt
    \n+
    90 {
    \n+
    91 static inline typename FieldTraits<K>::real_type sqrt (const K& k)
    \n+
    92 {
    \n+
    93 using std::sqrt;
    \n+
    94 return sqrt(k);
    \n+
    95 }
    \n+
    96 };
    \n+
    97
    \n+
    102 template<class K>
    \n+
    103 struct Sqrt<K, true>
    \n+
    104 {
    \n+
    105 static inline typename FieldTraits<K>::real_type sqrt (const K& k)
    \n+
    106 {
    \n+
    107 using std::sqrt;
    \n+
    108 return typename FieldTraits<K>::real_type(sqrt(double(k)));
    \n+
    109 }
    \n+
    110 };
    \n+
    111
    \n+
    116 template<class K>
    \n+
    117 inline typename FieldTraits<K>::real_type sqrt (const K& k)
    \n+
    118 {
    \n+
    119 return Sqrt<K>::sqrt(k);
    \n
    120 }
    \n-
    \n
    121
    \n-
    \n-\n-
    124 {
    \n-
    125 diag_ = k;
    \n-
    126 return *this;
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    \n-
    130 bool identical(const DiagonalMatrix<K,n>& other) const
    \n-
    131 {
    \n-
    132 return (this==&other);
    \n-
    133 }
    \n+
    122 }
    \n
    \n+
    123
    \n+
    128 template<class C, class T, class R =T&>
    \n+
    \n+\n+
    130 public Dune::RandomAccessIteratorFacade<DenseIterator<C,T,R>,T, R, std::ptrdiff_t>
    \n+
    131 {
    \n+
    132 friend class DenseIterator<typename std::remove_const<C>::type, typename std::remove_const<T>::type, typename mutable_reference<R>::type >;
    \n+
    133 friend class DenseIterator<const typename std::remove_const<C>::type, const typename std::remove_const<T>::type, typename const_reference<R>::type >;
    \n
    134
    \n-
    \n-\n-
    137 {
    \n-
    138 return *this;
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    141 //===== iterator interface to rows of the matrix
    \n-\n-\n-\n-\n-
    150
    \n-
    \n-\n-
    153 {
    \n-
    154 return Iterator(WrapperType(this),0);
    \n-
    155 }
    \n+
    135 typedef DenseIterator<typename std::remove_const<C>::type, typename std::remove_const<T>::type, typename mutable_reference<R>::type > MutableIterator;
    \n+
    136 typedef DenseIterator<const typename std::remove_const<C>::type, const typename std::remove_const<T>::type, typename const_reference<R>::type > ConstIterator;
    \n+
    137 public:
    \n+
    138
    \n+
    142 typedef std::ptrdiff_t DifferenceType;
    \n+
    143
    \n+
    147 typedef typename C::size_type SizeType;
    \n+
    148
    \n+
    149 // Constructors needed by the base iterators.
    \n+
    \n+\n+
    151 : container_(0), position_()
    \n+
    152 {}
    \n+
    \n+
    153
    \n+
    \n+\n+
    155 : container_(&cont), position_(pos)
    \n+
    156 {}
    \n
    \n-
    156
    \n+
    157
    \n
    \n-\n-
    159 {
    \n-
    160 return Iterator(WrapperType(this),n);
    \n-
    161 }
    \n-
    \n-
    162
    \n-
    \n-\n-
    166 {
    \n-
    167 return Iterator(WrapperType(this),n-1);
    \n-
    168 }
    \n-
    \n-
    169
    \n-
    \n-\n-
    173 {
    \n-
    174 return Iterator(WrapperType(this),-1);
    \n-
    175 }
    \n+\n+
    159 : container_(other.container_), position_(other.position_)
    \n+
    160 {}
    \n+
    \n+
    161
    \n+
    \n+\n+
    163 : container_(other.container_), position_(other.position_)
    \n+
    164 {}
    \n+
    \n+
    165
    \n+
    166 // Methods needed by the forward iterator
    \n+
    \n+
    167 bool equals(const MutableIterator &other) const
    \n+
    168 {
    \n+
    169 return position_ == other.position_ && container_ == other.container_;
    \n+
    170 }
    \n+
    \n+
    171
    \n+
    172
    \n+
    \n+
    173 bool equals(const ConstIterator & other) const
    \n+
    174 {
    \n+
    175 return position_ == other.position_ && container_ == other.container_;
    \n+
    176 }
    \n
    \n-
    176
    \n
    177
    \n-\n-\n-\n-\n-
    186
    \n-
    \n-\n-
    189 {
    \n-
    190 return ConstIterator(WrapperType(this),0);
    \n-
    191 }
    \n-
    \n-
    192
    \n-
    \n-\n-
    195 {
    \n-
    196 return ConstIterator(WrapperType(this),n);
    \n-
    197 }
    \n-
    \n-
    198
    \n-
    \n-\n-
    202 {
    \n-
    203 return ConstIterator(WrapperType(this),n-1);
    \n+
    \n+
    178 R dereference() const {
    \n+
    179 return container_->operator[](position_);
    \n+
    180 }
    \n+
    \n+
    181
    \n+
    \n+
    182 void increment(){
    \n+
    183 ++position_;
    \n+
    184 }
    \n+
    \n+
    185
    \n+
    186 // Additional function needed by BidirectionalIterator
    \n+
    \n+
    187 void decrement(){
    \n+
    188 --position_;
    \n+
    189 }
    \n+
    \n+
    190
    \n+
    191 // Additional function needed by RandomAccessIterator
    \n+
    \n+\n+
    193 return container_->operator[](position_+i);
    \n+
    194 }
    \n+
    \n+
    195
    \n+
    \n+\n+
    197 position_=position_+n;
    \n+
    198 }
    \n+
    \n+
    199
    \n+
    \n+
    200 DifferenceType distanceTo(DenseIterator<const typename std::remove_const<C>::type,const typename std::remove_const<T>::type> other) const
    \n+
    201 {
    \n+
    202 assert(other.container_==container_);
    \n+
    203 return static_cast< DifferenceType >( other.position_ ) - static_cast< DifferenceType >( position_ );
    \n
    204 }
    \n
    \n
    205
    \n-
    \n-\n-
    209 {
    \n-
    210 return ConstIterator(WrapperType(this),-1);
    \n-
    211 }
    \n-
    \n-
    212
    \n-
    213
    \n-
    214
    \n-
    215 //===== vector space arithmetic
    \n-
    216
    \n-
    \n-\n-
    219 {
    \n-
    220 diag_ += y.diag_;
    \n-
    221 return *this;
    \n-
    222 }
    \n-
    \n-
    223
    \n-
    \n-\n-
    226 {
    \n-
    227 diag_ -= y.diag_;
    \n-
    228 return *this;
    \n-
    229 }
    \n-
    \n-
    230
    \n-
    \n-\n-
    233 {
    \n-
    234 diag_ += k;
    \n-
    235 return *this;
    \n-
    236 }
    \n-
    \n-
    237
    \n-
    \n-\n-
    240 {
    \n-
    241 diag_ -= k;
    \n-
    242 return *this;
    \n-
    243 }
    \n-
    \n-
    244
    \n-
    \n-\n-
    247 {
    \n-
    248 diag_ *= k;
    \n-
    249 return *this;
    \n-
    250 }
    \n-
    \n+
    \n+
    206 DifferenceType distanceTo(DenseIterator<typename std::remove_const<C>::type, typename std::remove_const<T>::type> other) const
    \n+
    207 {
    \n+
    208 assert(other.container_==container_);
    \n+
    209 return static_cast< DifferenceType >( other.position_ ) - static_cast< DifferenceType >( position_ );
    \n+
    210 }
    \n+
    \n+
    211
    \n+
    \n+\n+
    214 {
    \n+
    215 return this->position_;
    \n+
    216 }
    \n+
    \n+
    217
    \n+
    218 private:
    \n+
    219 C *container_;
    \n+
    220 SizeType position_;
    \n+
    221 };
    \n+
    \n+
    222
    \n+
    227 template<typename V>
    \n+
    \n+\n+
    229 {
    \n+\n+
    231 // typedef typename Traits::value_type K;
    \n+
    232
    \n+
    233 // Curiously recurring template pattern
    \n+
    234 V & asImp() { return static_cast<V&>(*this); }
    \n+
    235 const V & asImp() const { return static_cast<const V&>(*this); }
    \n+
    236
    \n+
    237 protected:
    \n+
    238 // construction allowed to derived classes only
    \n+
    239 constexpr DenseVector() = default;
    \n+
    240 // copying only allowed by derived classes
    \n+
    241 DenseVector(const DenseVector&) = default;
    \n+
    242
    \n+
    243 public:
    \n+
    244 //===== type definitions and constants
    \n+
    245
    \n+
    247 typedef typename Traits::derived_type derived_type;
    \n+
    248
    \n+
    250 typedef typename Traits::value_type value_type;
    \n
    251
    \n-
    \n-\n-
    254 {
    \n-
    255 diag_ /= k;
    \n-
    256 return *this;
    \n-
    257 }
    \n-
    \n-
    258
    \n-
    259 //===== comparison ops
    \n+\n+
    254
    \n+
    256 typedef typename Traits::value_type block_type;
    \n+
    257
    \n+
    259 typedef typename Traits::size_type size_type;
    \n
    260
    \n-
    \n-
    262 bool operator==(const DiagonalMatrix& other) const
    \n-
    263 {
    \n-
    264 return diag_==other.diagonal();
    \n-
    265 }
    \n-
    \n-
    266
    \n-
    \n-
    268 bool operator!=(const DiagonalMatrix& other) const
    \n-
    269 {
    \n-
    270 return diag_!=other.diagonal();
    \n+
    262 constexpr static int blocklevel = 1;
    \n+
    263
    \n+
    264 //===== assignment from scalar
    \n+
    \n+\n+
    267 {
    \n+
    268 for (size_type i=0; i<size(); i++)
    \n+
    269 asImp()[i] = k;
    \n+
    270 return asImp();
    \n
    271 }
    \n
    \n
    272
    \n-
    273
    \n-
    274 //===== linear maps
    \n-
    275
    \n-
    277 template<class X, class Y>
    \n-
    \n-
    278 void mv (const X& x, Y& y) const
    \n-
    279 {
    \n-
    280#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    281 if (x.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    282 if (y.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    283#endif
    \n-
    284 for (size_type i=0; i<n; ++i)
    \n-
    285 y[i] = diag_[i] * x[i];
    \n-
    286 }
    \n-
    \n-
    287
    \n-
    289 template<class X, class Y>
    \n-
    \n-
    290 void mtv (const X& x, Y& y) const
    \n-
    291 {
    \n-
    292 mv(x, y);
    \n-
    293 }
    \n-
    \n-
    294
    \n-
    296 template<class X, class Y>
    \n-
    \n-
    297 void umv (const X& x, Y& y) const
    \n-
    298 {
    \n-
    299#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    300 if (x.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    301 if (y.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    302#endif
    \n-
    303 for (size_type i=0; i<n; ++i)
    \n-
    304 y[i] += diag_[i] * x[i];
    \n-
    305 }
    \n-
    \n-
    306
    \n-
    308 template<class X, class Y>
    \n-
    \n-
    309 void umtv (const X& x, Y& y) const
    \n-
    310 {
    \n-
    311#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    312 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    313 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    314#endif
    \n-
    315 for (size_type i=0; i<n; ++i)
    \n-
    316 y[i] += diag_[i] * x[i];
    \n-
    317 }
    \n-
    \n-
    318
    \n-
    320 template<class X, class Y>
    \n-
    \n-
    321 void umhv (const X& x, Y& y) const
    \n-
    322 {
    \n-
    323#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    324 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    325 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    326#endif
    \n-
    327 for (size_type i=0; i<n; i++)
    \n-
    328 y[i] += conjugateComplex(diag_[i])*x[i];
    \n-
    329 }
    \n-
    \n-
    330
    \n-
    332 template<class X, class Y>
    \n-
    \n-
    333 void mmv (const X& x, Y& y) const
    \n-
    334 {
    \n-
    335#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    336 if (x.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    337 if (y.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    338#endif
    \n-
    339 for (size_type i=0; i<n; ++i)
    \n-
    340 y[i] -= diag_[i] * x[i];
    \n-
    341 }
    \n-
    \n-
    342
    \n-
    344 template<class X, class Y>
    \n-
    \n-
    345 void mmtv (const X& x, Y& y) const
    \n-
    346 {
    \n-
    347#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    348 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    349 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    350#endif
    \n-
    351 for (size_type i=0; i<n; ++i)
    \n-
    352 y[i] -= diag_[i] * x[i];
    \n-
    353 }
    \n-
    \n-
    354
    \n-
    356 template<class X, class Y>
    \n-
    \n-
    357 void mmhv (const X& x, Y& y) const
    \n-
    358 {
    \n-
    359#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    360 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    361 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    362#endif
    \n-
    363 for (size_type i=0; i<n; i++)
    \n-
    364 y[i] -= conjugateComplex(diag_[i])*x[i];
    \n-
    365 }
    \n-
    \n-
    366
    \n-
    368 template<class X, class Y>
    \n-
    \n-
    369 void usmv (const typename FieldTraits<Y>::field_type & alpha,
    \n-
    370 const X& x, Y& y) const
    \n-
    371 {
    \n-
    372#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    373 if (x.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    374 if (y.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    375#endif
    \n-
    376 for (size_type i=0; i<n; i++)
    \n-
    377 y[i] += alpha * diag_[i] * x[i];
    \n-
    378 }
    \n-
    \n-
    379
    \n-
    381 template<class X, class Y>
    \n-
    \n-
    382 void usmtv (const typename FieldTraits<Y>::field_type & alpha,
    \n-
    383 const X& x, Y& y) const
    \n-
    384 {
    \n-
    385#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    386 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    387 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    388#endif
    \n-
    389 for (size_type i=0; i<n; i++)
    \n-
    390 y[i] += alpha * diag_[i] * x[i];
    \n-
    391 }
    \n-
    \n-
    392
    \n-
    394 template<class X, class Y>
    \n-
    \n-
    395 void usmhv (const typename FieldTraits<Y>::field_type & alpha,
    \n-
    396 const X& x, Y& y) const
    \n-
    397 {
    \n-
    398#ifdef DUNE_FMatrix_WITH_CHECKING
    \n-
    399 if (x.N()!=N()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    400 if (y.N()!=M()) DUNE_THROW(FMatrixError,"index out of range");
    \n-
    401#endif
    \n-
    402 for (size_type i=0; i<n; i++)
    \n-
    403 y[i] += alpha * conjugateComplex(diag_[i]) * x[i];
    \n-
    404 }
    \n-
    \n-
    405
    \n-
    406 //===== norms
    \n-
    407
    \n-
    \n-
    409 double frobenius_norm () const
    \n-
    410 {
    \n-
    411 return diag_.two_norm();
    \n-
    412 }
    \n-
    \n-
    413
    \n-
    \n-
    415 double frobenius_norm2 () const
    \n-
    416 {
    \n-
    417 return diag_.two_norm2();
    \n-
    418 }
    \n-
    \n-
    419
    \n-
    \n-
    421 double infinity_norm () const
    \n-
    422 {
    \n-
    423 return diag_.infinity_norm();
    \n-
    424 }
    \n-
    \n-
    425
    \n-
    \n-
    427 double infinity_norm_real () const
    \n-
    428 {
    \n-
    429 return diag_.infinity_norm_real();
    \n-
    430 }
    \n-
    \n-
    431
    \n-
    432
    \n-
    433
    \n-
    434 //===== solve
    \n-
    435
    \n-
    437 template<class V>
    \n-
    \n-
    438 void solve (V& x, const V& b) const
    \n-
    439 {
    \n-
    440 for (int i=0; i<n; i++)
    \n-
    441 x[i] = b[i]/diag_[i];
    \n-
    442 }
    \n-
    \n-
    443
    \n-
    \n-
    445 void invert()
    \n-
    446 {
    \n-
    447 using real_type = typename FieldTraits<K>::real_type;
    \n-
    448 for (int i=0; i<n; i++)
    \n-
    449 diag_[i] = real_type(1.0)/diag_[i];
    \n-
    450 }
    \n-
    \n-
    451
    \n-
    \n-
    453 K determinant () const
    \n-
    454 {
    \n-
    455 K det = diag_[0];
    \n-
    456 for (int i=1; i<n; i++)
    \n-
    457 det *= diag_[i];
    \n-
    458 return det;
    \n-
    459 }
    \n-
    \n-
    460
    \n+
    273 //===== assignment from other DenseVectors
    \n+
    274 protected:
    \n+\n+
    277
    \n+
    278 public:
    \n+
    279
    \n+
    281 template <typename W,
    \n+
    282 std::enable_if_t<
    \n+
    283 std::is_assignable<value_type&, typename DenseVector<W>::value_type>::value, int> = 0>
    \n+
    \n+\n+
    285 {
    \n+
    286 assert(other.size() == size());
    \n+
    287 for (size_type i=0; i<size(); i++)
    \n+
    288 asImp()[i] = other[i];
    \n+
    289 return asImp();
    \n+
    290 }
    \n+
    \n+
    291
    \n+
    292 //===== access to components
    \n+
    293
    \n+
    \n+\n+
    296 {
    \n+
    297 return asImp()[i];
    \n+
    298 }
    \n+
    \n+
    299
    \n+
    \n+\n+
    301 {
    \n+
    302 return asImp()[i];
    \n+
    303 }
    \n+
    \n+
    304
    \n+
    \n+\n+
    307 {
    \n+
    308 return asImp()[0];
    \n+
    309 }
    \n+
    \n+
    310
    \n+
    \n+
    312 const value_type& front() const
    \n+
    313 {
    \n+
    314 return asImp()[0];
    \n+
    315 }
    \n+
    \n+
    316
    \n+
    \n+\n+
    319 {
    \n+
    320 return asImp()[size()-1];
    \n+
    321 }
    \n+
    \n+
    322
    \n+
    \n+
    324 const value_type& back() const
    \n+
    325 {
    \n+
    326 return asImp()[size()-1];
    \n+
    327 }
    \n+
    \n+
    328
    \n+
    \n+
    330 bool empty() const
    \n+
    331 {
    \n+
    332 return size() == 0;
    \n+
    333 }
    \n+
    \n+
    334
    \n+
    \n+\n+
    337 {
    \n+
    338 return asImp().size();
    \n+
    339 }
    \n+
    \n+
    340
    \n+\n+\n+
    345
    \n+
    \n+\n+
    348 {
    \n+
    349 return Iterator(*this,0);
    \n+
    350 }
    \n+
    \n+
    351
    \n+
    \n+\n+
    354 {
    \n+
    355 return Iterator(*this,size());
    \n+
    356 }
    \n+
    \n+
    357
    \n+
    \n+\n+
    361 {
    \n+
    362 return Iterator(*this,size()-1);
    \n+
    363 }
    \n+
    \n+
    364
    \n+
    \n+\n+
    368 {
    \n+
    369 return Iterator(*this,-1);
    \n+
    370 }
    \n+
    \n+
    371
    \n+
    \n+\n+
    374 {
    \n+
    375 return Iterator(*this,std::min(i,size()));
    \n+
    376 }
    \n+
    \n+
    377
    \n+\n+\n+
    382
    \n+
    \n+\n+
    385 {
    \n+
    386 return ConstIterator(*this,0);
    \n+
    387 }
    \n+
    \n+
    388
    \n+
    \n+\n+
    391 {
    \n+
    392 return ConstIterator(*this,size());
    \n+
    393 }
    \n+
    \n+
    394
    \n+
    \n+\n+
    398 {
    \n+
    399 return ConstIterator(*this,size()-1);
    \n+
    400 }
    \n+
    \n+
    401
    \n+
    \n+\n+
    405 {
    \n+
    406 return ConstIterator(*this,-1);
    \n+
    407 }
    \n+
    \n+
    408
    \n+
    \n+\n+
    411 {
    \n+
    412 return ConstIterator(*this,std::min(i,size()));
    \n+
    413 }
    \n+
    \n+
    414
    \n+
    415 //===== vector space arithmetic
    \n+
    416
    \n+
    418 template <class Other>
    \n+
    \n+\n+
    420 {
    \n+
    421 DUNE_ASSERT_BOUNDS(x.size() == size());
    \n+
    422 for (size_type i=0; i<size(); i++)
    \n+
    423 (*this)[i] += x[i];
    \n+
    424 return asImp();
    \n+
    425 }
    \n+
    \n+
    426
    \n+
    428 template <class Other>
    \n+
    \n+\n+
    430 {
    \n+
    431 DUNE_ASSERT_BOUNDS(x.size() == size());
    \n+
    432 for (size_type i=0; i<size(); i++)
    \n+
    433 (*this)[i] -= x[i];
    \n+
    434 return asImp();
    \n+
    435 }
    \n+
    \n+
    436
    \n+
    438 template <class Other>
    \n+
    \n+\n+
    440 {
    \n+
    441 derived_type z = asImp();
    \n+
    442 return (z+=b);
    \n+
    443 }
    \n+
    \n+
    444
    \n+
    446 template <class Other>
    \n+
    \n+\n+
    448 {
    \n+
    449 derived_type z = asImp();
    \n+
    450 return (z-=b);
    \n+
    451 }
    \n+
    \n+
    452
    \n+
    \n+\n+
    455 {
    \n+
    456 V result;
    \n+
    457 using idx_type = typename decltype(result)::size_type;
    \n+
    458
    \n+
    459 for (idx_type i = 0; i < size(); ++i)
    \n+
    460 result[i] = -asImp()[i];
    \n
    461
    \n-
    462
    \n-
    463 //===== matrix-matrix multiplication
    \n+
    462 return result;
    \n+
    463 }
    \n+
    \n
    464
    \n-
    467 template <class OtherScalar>
    \n-
    \n-
    468 friend auto operator* ( const DiagonalMatrix& matrixA,
    \n-
    469 const DiagonalMatrix<OtherScalar, n>& matrixB)
    \n-
    470 {
    \n-\n-
    472 for(int i=0; i<n; ++i)
    \n-
    473 result.diagonal(i) = matrixA.diagonal(i)*matrixB.diagonal(i);
    \n-
    474 return result;
    \n-
    475 }
    \n-
    \n-
    476
    \n-
    477
    \n-
    478
    \n-
    479 //===== sizes
    \n-
    480
    \n-
    \n-
    482 static constexpr size_type N ()
    \n-
    483 {
    \n-
    484 return n;
    \n+
    466
    \n+
    474 template <typename ValueType>
    \n+
    475 typename std::enable_if<
    \n+
    476 std::is_convertible<ValueType, value_type>::value,
    \n+\n+
    478 >::type&
    \n+
    \n+
    479 operator+= (const ValueType& kk)
    \n+
    480 {
    \n+
    481 const value_type& k = kk;
    \n+
    482 for (size_type i=0; i<size(); i++)
    \n+
    483 (*this)[i] += k;
    \n+
    484 return asImp();
    \n
    485 }
    \n
    \n
    486
    \n-
    \n-
    488 static constexpr size_type M ()
    \n-
    489 {
    \n-
    490 return n;
    \n-
    491 }
    \n-
    \n-
    492
    \n-
    493
    \n-
    494
    \n-
    495 //===== query
    \n-
    496
    \n-
    \n-
    498 bool exists (size_type i, size_type j) const
    \n-
    499 {
    \n-
    500 DUNE_ASSERT_BOUNDS(i >= 0 && i < n);
    \n-
    501 DUNE_ASSERT_BOUNDS(j >= 0 && j < n);
    \n-
    502 return i==j;
    \n-
    503 }
    \n-
    \n-
    504
    \n-
    505
    \n-
    506
    \n-
    \n-
    508 friend std::ostream& operator<< (std::ostream& s, const DiagonalMatrix<K,n>& a)
    \n-
    509 {
    \n-
    510 for (size_type i=0; i<n; i++) {
    \n-
    511 for (size_type j=0; j<n; j++)
    \n-
    512 s << ((i==j) ? a.diag_[i] : 0) << " ";
    \n-
    513 s << std::endl;
    \n-
    514 }
    \n-
    515 return s;
    \n-
    516 }
    \n-
    \n-
    517
    \n-
    \n-\n-
    520 {
    \n-
    521 return reference(const_cast<K*>(&diag_[i]), i);
    \n-
    522 }
    \n-
    \n-
    523
    \n-
    \n-\n-
    526 {
    \n-
    527 return const_reference(const_cast<K*>(&diag_[i]), i);
    \n-
    528 }
    \n-
    \n-
    529
    \n-
    \n-
    531 const K& diagonal(size_type i) const
    \n-
    532 {
    \n-
    533 return diag_[i];
    \n-
    534 }
    \n-
    \n-
    535
    \n-
    \n-\n-
    538 {
    \n-
    539 return diag_[i];
    \n-
    540 }
    \n-
    \n-
    541
    \n-
    \n-\n-
    544 {
    \n-
    545 return diag_;
    \n-
    546 }
    \n-
    \n-
    547
    \n-
    \n-\n-
    550 {
    \n-
    551 return diag_;
    \n-
    552 }
    \n-
    \n-
    553
    \n-
    554 private:
    \n-
    555
    \n-
    556 // the data, a FieldVector storing the diagonal
    \n-
    557 FieldVector<K,n> diag_;
    \n-
    558 };
    \n-
    \n-
    559
    \n-
    560 template< class K, int n >
    \n-
    \n-\n-
    562 {
    \n-\n-\n-
    565 };
    \n-
    \n-
    566
    \n-
    567
    \n-
    568#ifndef DOXYGEN // hide specialization
    \n-
    571 template< class K >
    \n-
    572 class DiagonalMatrix<K, 1> : public FieldMatrix<K, 1, 1>
    \n-
    573 {
    \n-
    574 typedef FieldMatrix<K,1,1> Base;
    \n-
    575 public:
    \n-
    577 typedef typename Base::size_type size_type;
    \n-
    578
    \n-
    581 constexpr static int blocklevel = 1;
    \n+
    488
    \n+
    496 template <typename ValueType>
    \n+
    497 typename std::enable_if<
    \n+
    498 std::is_convertible<ValueType, value_type>::value,
    \n+\n+
    500 >::type&
    \n+
    \n+
    501 operator-= (const ValueType& kk)
    \n+
    502 {
    \n+
    503 const value_type& k = kk;
    \n+
    504 for (size_type i=0; i<size(); i++)
    \n+
    505 (*this)[i] -= k;
    \n+
    506 return asImp();
    \n+
    507 }
    \n+
    \n+
    508
    \n+
    510
    \n+
    518 template <typename FieldType>
    \n+
    519 typename std::enable_if<
    \n+
    520 std::is_convertible<FieldType, field_type>::value,
    \n+\n+
    522 >::type&
    \n+
    \n+
    523 operator*= (const FieldType& kk)
    \n+
    524 {
    \n+
    525 const field_type& k = kk;
    \n+
    526 for (size_type i=0; i<size(); i++)
    \n+
    527 (*this)[i] *= k;
    \n+
    528 return asImp();
    \n+
    529 }
    \n+
    \n+
    530
    \n+
    532
    \n+
    540 template <typename FieldType>
    \n+
    541 typename std::enable_if<
    \n+
    542 std::is_convertible<FieldType, field_type>::value,
    \n+\n+
    544 >::type&
    \n+
    \n+
    545 operator/= (const FieldType& kk)
    \n+
    546 {
    \n+
    547 const field_type& k = kk;
    \n+
    548 for (size_type i=0; i<size(); i++)
    \n+
    549 (*this)[i] /= k;
    \n+
    550 return asImp();
    \n+
    551 }
    \n+
    \n+
    552
    \n+
    554 template <class Other>
    \n+
    \n+
    555 bool operator== (const DenseVector<Other>& x) const
    \n+
    556 {
    \n+
    557 DUNE_ASSERT_BOUNDS(x.size() == size());
    \n+
    558 for (size_type i=0; i<size(); i++)
    \n+
    559 if ((*this)[i]!=x[i])
    \n+
    560 return false;
    \n+
    561
    \n+
    562 return true;
    \n+
    563 }
    \n+
    \n+
    564
    \n+
    566 template <class Other>
    \n+
    \n+
    567 bool operator!= (const DenseVector<Other>& x) const
    \n+
    568 {
    \n+
    569 return !operator==(x);
    \n+
    570 }
    \n+
    \n+
    571
    \n+
    572
    \n+
    574 template <class Other>
    \n+
    \n+\n+
    576 {
    \n+
    577 DUNE_ASSERT_BOUNDS(x.size() == size());
    \n+
    578 for (size_type i=0; i<size(); i++)
    \n+
    579 (*this)[i] += a*x[i];
    \n+
    580 return asImp();
    \n+
    581 }
    \n+
    \n
    582
    \n-
    583 typedef typename Base::row_type row_type;
    \n-
    584
    \n-
    585 typedef typename Base::row_reference row_reference;
    \n-
    586 typedef typename Base::const_row_reference const_row_reference;
    \n-
    587
    \n-
    590 constexpr static int rows = 1;
    \n-
    593 constexpr static int cols = 1;
    \n-
    594
    \n-
    595
    \n-
    597 constexpr DiagonalMatrix() = default;
    \n-
    598
    \n-
    600 DiagonalMatrix(const K& scalar)
    \n-
    601 {
    \n-
    602 (*this)[0][0] = scalar;
    \n-
    603 }
    \n-
    604
    \n-
    606 const K& diagonal(size_type) const
    \n-
    607 {
    \n-
    608 return (*this)[0][0];
    \n-
    609 }
    \n-
    610
    \n-\n-
    613 {
    \n-
    614 return (*this)[0][0];
    \n-
    615 }
    \n-
    616
    \n-
    618 const FieldVector<K,1>& diagonal() const
    \n-
    619 {
    \n-
    620 return (*this)[0];
    \n-
    621 }
    \n-
    622
    \n-
    624 FieldVector<K,1>& diagonal()
    \n-
    625 {
    \n-
    626 return (*this)[0];
    \n-
    627 }
    \n-
    628
    \n-
    630 DiagonalMatrix<K, 1> transposed() const
    \n-
    631 {
    \n-
    632 return *this;
    \n-
    633 }
    \n-
    634
    \n-
    637 template <class OtherScalar>
    \n-
    638 friend auto operator* ( const DiagonalMatrix& matrixA,
    \n-
    639 const DiagonalMatrix<OtherScalar, 1>& matrixB)
    \n-
    640 {
    \n-
    641 return DiagonalMatrix<typename PromotionTraits<K,OtherScalar>::PromotedType, 1>{matrixA.diagonal(0)*matrixB.diagonal(0)};
    \n-
    642 }
    \n-
    643
    \n-
    644 };
    \n-
    645#endif
    \n-
    646
    \n-
    647
    \n-
    648 template<class DiagonalMatrixType>
    \n-
    \n-\n-
    650 {
    \n-
    651 typedef typename DiagonalMatrixType::reference reference;
    \n-
    652 typedef typename DiagonalMatrixType::const_reference const_reference;
    \n-
    653 typedef typename DiagonalMatrixType::field_type K;
    \n-\n-
    655 typedef std::size_t size_type;
    \n-\n+
    590 template<class Other>
    \n+
    \n+\n+
    592 typedef typename PromotionTraits<field_type, typename DenseVector<Other>::field_type>::PromotedType PromotedType;
    \n+
    593 PromotedType result(0);
    \n+
    594 assert(x.size() == size());
    \n+
    595 for (size_type i=0; i<size(); i++) {
    \n+
    596 result += PromotedType((*this)[i]*x[i]);
    \n+
    597 }
    \n+
    598 return result;
    \n+
    599 }
    \n+
    \n+
    600
    \n+
    608 template<class Other>
    \n+
    \n+\n+
    610 typedef typename PromotionTraits<field_type, typename DenseVector<Other>::field_type>::PromotedType PromotedType;
    \n+
    611 PromotedType result(0);
    \n+
    612 assert(x.size() == size());
    \n+
    613 for (size_type i=0; i<size(); i++) {
    \n+
    614 result += Dune::dot((*this)[i],x[i]);
    \n+
    615 }
    \n+
    616 return result;
    \n+
    617 }
    \n+
    \n+
    618
    \n+
    619 //===== norms
    \n+
    620
    \n+
    \n+\n+
    623 using std::abs;
    \n+
    624 typename FieldTraits<value_type>::real_type result( 0 );
    \n+
    625 for (size_type i=0; i<size(); i++)
    \n+
    626 result += abs((*this)[i]);
    \n+
    627 return result;
    \n+
    628 }
    \n+
    \n+
    629
    \n+
    630
    \n+
    \n+\n+
    633 {
    \n+
    634 typename FieldTraits<value_type>::real_type result( 0 );
    \n+
    635 for (size_type i=0; i<size(); i++)
    \n+
    636 result += fvmeta::absreal((*this)[i]);
    \n+
    637 return result;
    \n+
    638 }
    \n+
    \n+
    639
    \n+
    \n+\n+
    642 {
    \n+
    643 typename FieldTraits<value_type>::real_type result( 0 );
    \n+
    644 for (size_type i=0; i<size(); i++)
    \n+
    645 result += fvmeta::abs2((*this)[i]);
    \n+
    646 return fvmeta::sqrt(result);
    \n+
    647 }
    \n+
    \n+
    648
    \n+
    \n+\n+
    651 {
    \n+
    652 typename FieldTraits<value_type>::real_type result( 0 );
    \n+
    653 for (size_type i=0; i<size(); i++)
    \n+
    654 result += fvmeta::abs2((*this)[i]);
    \n+
    655 return result;
    \n+
    656 }
    \n+
    \n
    657
    \n-
    658 friend class ContainerWrapperIterator<const MyType, reference, reference>;
    \n-
    659 friend class ContainerWrapperIterator<const MyType, const_reference, const_reference>;
    \n-
    660
    \n-
    661 public:
    \n-
    662
    \n-
    \n-\n-
    664 mat_(0)
    \n-
    665 {}
    \n-
    \n-
    666
    \n-
    \n-
    667 DiagonalMatrixWrapper(const DiagonalMatrixType* mat) :
    \n-
    668 mat_(const_cast<DiagonalMatrixType*>(mat))
    \n-
    669 {}
    \n-
    \n-
    670
    \n-
    \n-
    671 size_type realIndex(int i) const
    \n-
    672 {
    \n-
    673 return i;
    \n-
    674 }
    \n-
    \n-
    675
    \n-
    \n-
    676 row_type* pointer(int i) const
    \n-
    677 {
    \n-
    678 row_ = row_type(&(mat_->diagonal(i)), i);
    \n-
    679 return &row_;
    \n-
    680 }
    \n-
    \n-
    681
    \n-
    \n-
    682 bool identical(const DiagonalMatrixWrapper& other) const
    \n-
    683 {
    \n-
    684 return mat_==other.mat_;
    \n-
    685 }
    \n+
    659 template <typename vt = value_type,
    \n+
    660 typename std::enable_if<!HasNaN<vt>::value, int>::type = 0>
    \n+
    \n+\n+
    662 using real_type = typename FieldTraits<vt>::real_type;
    \n+
    663 using std::abs;
    \n+
    664 using std::max;
    \n+
    665
    \n+
    666 real_type norm = 0;
    \n+
    667 for (auto const &x : *this) {
    \n+
    668 real_type const a = abs(x);
    \n+
    669 norm = max(a, norm);
    \n+
    670 }
    \n+
    671 return norm;
    \n+
    672 }
    \n+
    \n+
    673
    \n+
    675 template <typename vt = value_type,
    \n+
    676 typename std::enable_if<!HasNaN<vt>::value, int>::type = 0>
    \n+
    \n+\n+
    678 using real_type = typename FieldTraits<vt>::real_type;
    \n+
    679 using std::max;
    \n+
    680
    \n+
    681 real_type norm = 0;
    \n+
    682 for (auto const &x : *this) {
    \n+
    683 real_type const a = fvmeta::absreal(x);
    \n+
    684 norm = max(a, norm);
    \n+
    685 }
    \n+
    686 return norm;
    \n+
    687 }
    \n
    \n-
    686
    \n-
    687 private:
    \n
    688
    \n-
    689 mutable DiagonalMatrixType* mat_;
    \n-
    690 mutable row_type row_;
    \n-
    691 };
    \n-
    \n-
    692
    \n-
    696 template< class K, int n >
    \n-
    \n-\n-
    698 {
    \n-
    699 template<class DiagonalMatrixType>
    \n-\n-
    701 friend class ContainerWrapperIterator<DiagonalRowVectorConst<K,n>, const K, const K&>;
    \n-
    702
    \n-
    703 public:
    \n-
    704 // remember size of vector
    \n-
    705 constexpr static int dimension = n;
    \n+
    690 template <typename vt = value_type,
    \n+
    691 typename std::enable_if<HasNaN<vt>::value, int>::type = 0>
    \n+
    \n+\n+
    693 using real_type = typename FieldTraits<vt>::real_type;
    \n+
    694 using std::abs;
    \n+
    695 using std::max;
    \n+
    696
    \n+
    697 real_type norm = 0;
    \n+
    698 real_type isNaN = 1;
    \n+
    699 for (auto const &x : *this) {
    \n+
    700 real_type const a = abs(x);
    \n+
    701 norm = max(a, norm);
    \n+
    702 isNaN += a;
    \n+
    703 }
    \n+
    704 return norm * (isNaN / isNaN);
    \n+
    705 }
    \n+
    \n
    706
    \n-
    707 // standard constructor and everything is sufficient ...
    \n-
    708
    \n-
    709 //===== type definitions and constants
    \n-
    710
    \n-
    712 typedef K field_type;
    \n+
    708 template <typename vt = value_type,
    \n+
    709 typename std::enable_if<HasNaN<vt>::value, int>::type = 0>
    \n+
    \n+\n+
    711 using real_type = typename FieldTraits<vt>::real_type;
    \n+
    712 using std::max;
    \n
    713
    \n-
    715 typedef K block_type;
    \n-
    716
    \n-
    718 typedef std::size_t size_type;
    \n-
    719
    \n-
    721 constexpr static int blocklevel = 1;
    \n-
    722
    \n-
    724 constexpr static int size = n;
    \n+
    714 real_type norm = 0;
    \n+
    715 real_type isNaN = 1;
    \n+
    716 for (auto const &x : *this) {
    \n+
    717 real_type const a = fvmeta::absreal(x);
    \n+
    718 norm = max(a, norm);
    \n+
    719 isNaN += a;
    \n+
    720 }
    \n+
    721 return norm * (isNaN / isNaN);
    \n+
    722 }
    \n+
    \n+
    723
    \n+
    724 //===== sizes
    \n
    725
    \n
    \n-\n-
    728 p_(0),
    \n-
    729 row_(0)
    \n-
    730 {}
    \n+
    727 size_type N () const
    \n+
    728 {
    \n+
    729 return size();
    \n+
    730 }
    \n
    \n
    731
    \n
    \n-
    733 explicit DiagonalRowVectorConst (K* p, int col) :
    \n-
    734 p_(p),
    \n-
    735 row_(col)
    \n-
    736 {}
    \n+
    733 size_type dim () const
    \n+
    734 {
    \n+
    735 return size();
    \n+
    736 }
    \n
    \n
    737
    \n-
    738 //===== access to components
    \n+
    738 };
    \n+
    \n
    739
    \n-
    \n-
    741 const K& operator[] ([[maybe_unused]] size_type i) const
    \n-
    742 {
    \n-\n-
    744 return *p_;
    \n-
    745 }
    \n-
    \n-
    746
    \n-
    747 // check if row is identical to other row (not only identical values)
    \n-
    748 // since this is a proxy class we need to check equality of the stored pointer
    \n+
    748 template<typename V>
    \n
    \n-
    749 bool identical(const DiagonalRowVectorConst<K,n>& other) const
    \n-
    750 {
    \n-
    751 return ((p_ == other.p_)and (row_ == other.row_));
    \n-
    752 }
    \n-
    \n-
    753
    \n-\n-\n-
    758
    \n-
    \n-\n-
    761 {
    \n-
    762 return ConstIterator(*this,0);
    \n-
    763 }
    \n-
    \n-
    764
    \n-
    \n-\n-
    767 {
    \n-
    768 return ConstIterator(*this,1);
    \n-
    769 }
    \n-
    \n-
    770
    \n-
    \n-\n-
    774 {
    \n-
    775 return ConstIterator(*this,0);
    \n-
    776 }
    \n-
    \n-
    777
    \n-
    \n-\n-
    781 {
    \n-
    782 return ConstIterator(*this,-1);
    \n-
    783 }
    \n-
    \n-
    784
    \n-
    \n-\n-
    787 {
    \n-
    788 return ((p_==y.p_)and (row_==y.row_));
    \n-
    789 }
    \n-
    \n-
    790
    \n-
    791 //===== sizes
    \n-
    792
    \n-
    \n-
    794 size_type N () const
    \n-
    795 {
    \n-
    796 return n;
    \n-
    797 }
    \n-
    \n-
    798
    \n-
    \n-
    800 size_type dim () const
    \n-
    801 {
    \n-
    802 return n;
    \n-
    803 }
    \n-
    \n-
    804
    \n-
    \n-\n-
    807 {
    \n-
    808 return row_;
    \n-
    809 }
    \n-
    \n-
    810
    \n-
    \n-
    812 const K& diagonal() const
    \n-
    813 {
    \n-
    814 return *p_;
    \n-
    815 }
    \n-
    \n-
    816
    \n-
    817 protected:
    \n-
    818
    \n-
    \n-
    819 size_type realIndex([[maybe_unused]] int i) const
    \n-
    820 {
    \n-
    821 return rowIndex();
    \n-
    822 }
    \n-
    \n-
    823
    \n-
    \n-
    824 K* pointer([[maybe_unused]] size_type i) const
    \n-
    825 {
    \n-
    826 return const_cast<K*>(p_);
    \n-
    827 }
    \n-
    \n-
    828
    \n-
    \n-\n-
    830 {
    \n-
    831 return this;
    \n-
    832 }
    \n-
    \n-
    833
    \n-
    834 // the data, very simply a pointer to the diagonal value and the row number
    \n-
    835 K* p_;
    \n-\n-
    837 };
    \n-
    \n-
    838
    \n-
    839 template< class K, int n >
    \n-
    \n-\n-
    841 {
    \n-
    842 template<class DiagonalMatrixType>
    \n-\n-
    844 friend class ContainerWrapperIterator<DiagonalRowVector<K,n>, K, K&>;
    \n-
    845
    \n-
    846 public:
    \n-
    847 // standard constructor and everything is sufficient ...
    \n-
    848
    \n-
    849 //===== type definitions and constants
    \n-
    850
    \n-
    852 typedef K field_type;
    \n-
    853
    \n-
    855 typedef K block_type;
    \n-
    856
    \n-
    858 typedef std::size_t size_type;
    \n-
    859
    \n-
    \n-\n-
    862 {}
    \n-
    \n-
    863
    \n-
    \n-
    865 explicit DiagonalRowVector (K* p, int col) : DiagonalRowVectorConst<K,n>(p, col)
    \n-
    866 {}
    \n-
    \n-
    867
    \n-
    868 //===== assignment from scalar
    \n-
    \n-\n-
    871 {
    \n-
    872 *p_ = k;
    \n-
    873 return *this;
    \n-
    874 }
    \n-
    \n-
    875
    \n-
    876 //===== access to components
    \n-
    877
    \n-
    \n-
    879 K& operator[] ([[maybe_unused]] size_type i)
    \n-
    880 {
    \n-\n-
    882 return *p_;
    \n-
    883 }
    \n-
    \n-
    884
    \n-\n-\n-
    889
    \n-
    \n-\n-
    892 {
    \n-
    893 return Iterator(*this, 0);
    \n-
    894 }
    \n-
    \n-
    895
    \n-
    \n-\n-
    898 {
    \n-
    899 return Iterator(*this, 1);
    \n-
    900 }
    \n-
    \n-
    901
    \n-
    \n-\n-
    905 {
    \n-
    906 return Iterator(*this, 0);
    \n-
    907 }
    \n-
    \n-
    908
    \n-
    \n-\n-
    912 {
    \n-
    913 return Iterator(*this, -1);
    \n-
    914 }
    \n-
    \n-
    915
    \n-\n-\n-
    920
    \n-\n-
    922 using DiagonalRowVectorConst<K,n>::operator[];
    \n-
    923 using DiagonalRowVectorConst<K,n>::operator==;
    \n-\n-\n-\n-\n-
    928 using DiagonalRowVectorConst<K,n>::N;
    \n-\n-\n-\n-
    932
    \n-
    933 protected:
    \n-
    934
    \n-
    \n-\n-
    936 {
    \n-
    937 return this;
    \n-
    938 }
    \n-
    \n-
    939
    \n-
    940 private:
    \n-
    941
    \n-\n-\n-
    944 };
    \n-
    \n-
    945
    \n-
    946
    \n-
    947 // implement type traits
    \n-
    948 template<class K, int n>
    \n-
    \n-\n-
    950 {
    \n-\n-
    952 };
    \n-
    \n-
    953
    \n-
    954 template<class K, int n>
    \n-
    \n-\n-
    956 {
    \n-\n-
    958 };
    \n-
    \n-
    959
    \n-
    960 template<class K, int n>
    \n-
    \n-\n-
    962 {
    \n-\n-
    964 };
    \n-
    \n-
    965
    \n-
    966 template<class K, int n>
    \n-
    \n-\n-
    968 {
    \n-\n-
    970 };
    \n-
    \n-
    971
    \n-
    972
    \n-
    973
    \n-
    996 template<class CW, class T, class R>
    \n-
    \n-
    997 class ContainerWrapperIterator : public BidirectionalIteratorFacade<ContainerWrapperIterator<CW,T,R>,T, R, int>
    \n-
    998 {
    \n-
    999 typedef typename std::remove_const<CW>::type NonConstCW;
    \n-
    1000
    \n-
    1001 friend class ContainerWrapperIterator<CW, typename mutable_reference<T>::type, typename mutable_reference<R>::type>;
    \n-
    1002 friend class ContainerWrapperIterator<CW, typename const_reference<T>::type, typename const_reference<R>::type>;
    \n-
    1003
    \n-
    1004 typedef ContainerWrapperIterator<CW, typename mutable_reference<T>::type, typename mutable_reference<R>::type> MyType;
    \n-
    1005 typedef ContainerWrapperIterator<CW, typename const_reference<T>::type, typename const_reference<R>::type> MyConstType;
    \n-
    1006
    \n-
    1007 public:
    \n-
    1008
    \n-
    1009 // Constructors needed by the facade iterators.
    \n-
    \n-\n-
    1011 containerWrapper_(),
    \n-
    1012 position_(0)
    \n-
    1013 {}
    \n-
    \n-
    1014
    \n-
    \n-
    1015 ContainerWrapperIterator(CW containerWrapper, int position) :
    \n-
    1016 containerWrapper_(containerWrapper),
    \n-
    1017 position_(position)
    \n-
    1018 {}
    \n-
    \n-
    1019
    \n-
    1020 template<class OtherContainerWrapperIteratorType>
    \n-
    \n-
    1021 ContainerWrapperIterator(OtherContainerWrapperIteratorType& other) :
    \n-
    1022 containerWrapper_(other.containerWrapper_),
    \n-
    1023 position_(other.position_)
    \n-
    1024 {}
    \n-
    \n-
    1025
    \n-
    \n-\n-
    1027 containerWrapper_(other.containerWrapper_),
    \n-
    1028 position_(other.position_)
    \n-
    1029 {}
    \n-
    \n-
    1030
    \n-
    \n-\n-
    1032 containerWrapper_(other.containerWrapper_),
    \n-
    1033 position_(other.position_)
    \n-
    1034 {}
    \n-
    \n-
    1035
    \n-
    1036 template<class OtherContainerWrapperIteratorType>
    \n-
    \n-
    1037 ContainerWrapperIterator& operator=(OtherContainerWrapperIteratorType& other)
    \n-
    1038 {
    \n-
    1039 containerWrapper_ = other.containerWrapper_;
    \n-
    1040 position_ = other.position_;
    \n-
    1041 return *this;
    \n-
    1042 }
    \n-
    \n-
    1043
    \n-
    1044 // This operator is needed since we can not get the address of the
    \n-
    1045 // temporary object returned by dereference
    \n-
    \n-
    1046 T* operator->() const
    \n-
    1047 {
    \n-
    1048 return containerWrapper_.pointer(position_);
    \n-
    1049 }
    \n-
    \n-
    1050
    \n-
    1051 // Methods needed by the forward iterator
    \n-
    \n-
    1052 bool equals(const MyType& other) const
    \n-
    1053 {
    \n-
    1054 return position_ == other.position_ && containerWrapper_.identical(other.containerWrapper_);
    \n-
    1055 }
    \n-
    \n-
    1056
    \n-
    \n-
    1057 bool equals(const MyConstType& other) const
    \n-
    1058 {
    \n-
    1059 return position_ == other.position_ && containerWrapper_.identical(other.containerWrapper_);
    \n-
    1060 }
    \n-
    \n-
    1061
    \n-
    \n-
    1062 R dereference() const
    \n-
    1063 {
    \n-
    1064 return *containerWrapper_.pointer(position_);
    \n-
    1065 }
    \n-
    \n-
    1066
    \n-
    \n-\n-
    1068 {
    \n-
    1069 ++position_;
    \n-
    1070 }
    \n-
    \n-
    1071
    \n-
    1072 // Additional function needed by BidirectionalIterator
    \n-
    \n-\n-
    1074 {
    \n-
    1075 --position_;
    \n-
    1076 }
    \n-
    \n-
    1077
    \n-
    1078 // Additional function needed by RandomAccessIterator
    \n-
    \n-
    1079 R elementAt(int i) const
    \n-
    1080 {
    \n-
    1081 return *containerWrapper_.pointer(position_+i);
    \n-
    1082 }
    \n-
    \n-
    1083
    \n-
    \n-
    1084 void advance(int n)
    \n-
    1085 {
    \n-
    1086 position_=position_+n;
    \n-
    1087 }
    \n-
    \n-
    1088
    \n-
    1089 template<class OtherContainerWrapperIteratorType>
    \n-
    \n-
    1090 std::ptrdiff_t distanceTo(OtherContainerWrapperIteratorType& other) const
    \n-
    1091 {
    \n-
    1092 assert(containerWrapper_.identical(other));
    \n-
    1093 return other.position_ - position_;
    \n-
    1094 }
    \n-
    \n-
    1095
    \n-
    \n-
    1096 std::ptrdiff_t index() const
    \n-
    1097 {
    \n-
    1098 return containerWrapper_.realIndex(position_);
    \n-
    1099 }
    \n-
    \n-
    1100
    \n-
    1101 private:
    \n-
    1102 NonConstCW containerWrapper_;
    \n-
    1103 size_t position_;
    \n-
    1104 };
    \n-
    \n-
    1105
    \n-
    1106 template <class DenseMatrix, class field, int N>
    \n-
    \n-\n-
    \n-
    1108 static void apply(DenseMatrix& denseMatrix,
    \n-
    1109 DiagonalMatrix<field, N> const& rhs) {
    \n-
    1110 DUNE_ASSERT_BOUNDS(denseMatrix.M() == N);
    \n-
    1111 DUNE_ASSERT_BOUNDS(denseMatrix.N() == N);
    \n-
    1112 denseMatrix = field(0);
    \n-
    1113 for (int i = 0; i < N; ++i)
    \n-
    1114 denseMatrix[i][i] = rhs.diagonal()[i];
    \n-
    1115 }
    \n-
    \n-
    1116 };
    \n-
    \n-
    1117 /* @} */
    \n-
    1118} // end namespace
    \n-
    1119#endif
    \n-
    Implements a matrix constructed from a given type representing a field and compile-time given number ...
    \n-
    Macro for wrapping boundary checks.
    \n-
    Implements a matrix constructed from a given type representing a field and a compile-time given numbe...
    \n-
    Traits for type conversions and type information.
    \n-
    Implements a generic iterator class for writing stl conformant iterators.
    \n-
    Implements a vector constructed from a given type representing a field and a compile-time given size.
    \n-
    A few common exception classes.
    \n+
    749 std::ostream& operator<< (std::ostream& s, const DenseVector<V>& v)
    \n+
    750 {
    \n+
    751 for (typename DenseVector<V>::size_type i=0; i<v.size(); i++)
    \n+
    752 s << ((i>0) ? " " : "") << v[i];
    \n+
    753 return s;
    \n+
    754 }
    \n+
    \n+
    755
    \n+
    758} // end namespace
    \n+
    759
    \n+
    760#endif // DUNE_DENSEVECTOR_HH
    \n+
    Documentation of the traits classes you need to write for each implementation of DenseVector or Dense...
    \n+
    Implements a generic iterator class for writing stl conformant iterators.
    \n+
    Provides the functions dot(a,b) := and dotT(a,b) := .
    \n+
    Type traits to determine the type of reals (when working with complex numbers)
    \n+
    Compute type of the result of an arithmetic operation involving two different number types.
    \n+
    Macro for wrapping boundary checks.
    \n
    #define DUNE_ASSERT_BOUNDS(cond)
    If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
    Definition boundschecking.hh:30
    \n-
    ConstIterator beforeBegin() const
    Definition diagonalmatrix.hh:208
    \n-
    DiagonalMatrix< K, n > transposed() const
    Return transposed of the matrix as DiagonalMatrix.
    Definition diagonalmatrix.hh:136
    \n-
    void mmhv(const X &x, Y &y) const
    y -= A^H x
    Definition diagonalmatrix.hh:357
    \n-
    DiagonalMatrix & operator*=(const K &k)
    vector space multiplication with scalar
    Definition diagonalmatrix.hh:246
    \n-
    FieldTraits< K >::field_type field_type
    Definition diagonalmatrix.hh:563
    \n-
    std::size_t size_type
    The type used for the index access and size operations.
    Definition diagonalmatrix.hh:67
    \n-
    size_type dim() const
    dimension of the vector space
    Definition diagonalmatrix.hh:800
    \n-
    ConstIterator ConstRowIterator
    rename the iterators for easier access
    Definition diagonalmatrix.hh:183
    \n-
    row_type row_reference
    Definition diagonalmatrix.hh:75
    \n-
    K & operator[](size_type i)
    random access
    Definition diagonalmatrix.hh:879
    \n-
    ContainerWrapperIterator & operator=(OtherContainerWrapperIteratorType &other)
    Definition diagonalmatrix.hh:1037
    \n-
    static constexpr int rows
    The number of rows.
    Definition diagonalmatrix.hh:81
    \n-
    static constexpr size_type M()
    number of blocks in column direction
    Definition diagonalmatrix.hh:488
    \n-
    FieldVector< K, n > & diagonal()
    Get reference to diagonal vector.
    Definition diagonalmatrix.hh:549
    \n-
    void usmhv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
    y += alpha A^H x
    Definition diagonalmatrix.hh:395
    \n-
    Iterator iterator
    typedef for stl compliant access
    Definition diagonalmatrix.hh:888
    \n-
    void increment()
    Definition diagonalmatrix.hh:1067
    \n-
    static constexpr int blocklevel
    The number of block levels we contain. This is the leaf, that is, 1.
    Definition diagonalmatrix.hh:70
    \n-
    DiagonalRowVectorConst< K, n > type
    Definition diagonalmatrix.hh:957
    \n-
    T * operator->() const
    Definition diagonalmatrix.hh:1046
    \n-
    static constexpr int size
    The size of this vector.
    Definition diagonalmatrix.hh:724
    \n-
    K * pointer(size_type i) const
    Definition diagonalmatrix.hh:824
    \n-
    K field_type
    export the type representing the field
    Definition diagonalmatrix.hh:712
    \n-
    DiagonalRowVector< K, n > type
    Definition diagonalmatrix.hh:963
    \n-
    ConstIterator beforeEnd() const
    Definition diagonalmatrix.hh:773
    \n-
    const_row_type::ConstIterator ConstColIterator
    rename the iterators for easier access
    Definition diagonalmatrix.hh:185
    \n-
    bool exists(size_type i, size_type j) const
    return true when (i,j) is in pattern
    Definition diagonalmatrix.hh:498
    \n-
    ContainerWrapperIterator< const WrapperType, const_reference, const_reference > ConstIterator
    Iterator class for sequential access.
    Definition diagonalmatrix.hh:179
    \n-
    const_row_type const_row_reference
    Definition diagonalmatrix.hh:78
    \n-
    static constexpr size_type size()
    Definition diagonalmatrix.hh:87
    \n-
    size_type row_
    Definition diagonalmatrix.hh:836
    \n-
    ContainerWrapperIterator(CW containerWrapper, int position)
    Definition diagonalmatrix.hh:1015
    \n-
    DiagonalRowVector(K *p, int col)
    Constructor making vector with identical coordinates.
    Definition diagonalmatrix.hh:865
    \n-
    K & diagonal(size_type i)
    Get reference to diagonal entry.
    Definition diagonalmatrix.hh:537
    \n-
    void solve(V &x, const V &b) const
    Solve system A x = b.
    Definition diagonalmatrix.hh:438
    \n-
    static constexpr size_type N()
    number of blocks in row direction
    Definition diagonalmatrix.hh:482
    \n-
    Iterator beforeBegin()
    Definition diagonalmatrix.hh:911
    \n-
    ContainerWrapperIterator(OtherContainerWrapperIteratorType &other)
    Definition diagonalmatrix.hh:1021
    \n-
    const_reference operator[](size_type i) const
    Return const_reference object as row replacement.
    Definition diagonalmatrix.hh:525
    \n-
    Iterator iterator
    typedef for stl compliant access
    Definition diagonalmatrix.hh:145
    \n-
    ConstIterator begin() const
    begin ConstIterator
    Definition diagonalmatrix.hh:760
    \n-
    ConstIterator const_iterator
    typedef for stl compliant access
    Definition diagonalmatrix.hh:919
    \n-
    bool identical(const DiagonalRowVectorConst< K, n > &other) const
    Definition diagonalmatrix.hh:749
    \n-
    DiagonalMatrix & operator-=(const DiagonalMatrix &y)
    vector space subtraction
    Definition diagonalmatrix.hh:225
    \n-
    DiagonalRowVectorConst(K *p, int col)
    Constructor making vector with identical coordinates.
    Definition diagonalmatrix.hh:733
    \n-
    void mmtv(const X &x, Y &y) const
    y -= A^T x
    Definition diagonalmatrix.hh:345
    \n-
    static constexpr int blocklevel
    The number of block levels we contain.
    Definition diagonalmatrix.hh:721
    \n-
    row_type * pointer(int i) const
    Definition diagonalmatrix.hh:676
    \n-
    DiagonalMatrix(const K &k)
    Constructor initializing the whole matrix with a scalar.
    Definition diagonalmatrix.hh:98
    \n-
    ContainerWrapperIterator< DiagonalRowVector< K, n >, K, K & > Iterator
    Iterator class for sequential access.
    Definition diagonalmatrix.hh:886
    \n-
    R elementAt(int i) const
    Definition diagonalmatrix.hh:1079
    \n-
    std::ptrdiff_t distanceTo(OtherContainerWrapperIteratorType &other) const
    Definition diagonalmatrix.hh:1090
    \n-
    Iterator beforeEnd()
    Definition diagonalmatrix.hh:904
    \n-
    void umtv(const X &x, Y &y) const
    y += A^T x
    Definition diagonalmatrix.hh:309
    \n-
    ConstIterator const_iterator
    typedef for stl compliant access
    Definition diagonalmatrix.hh:757
    \n-
    double infinity_norm_real() const
    simplified infinity norm (uses Manhattan norm for complex values)
    Definition diagonalmatrix.hh:427
    \n-
    DiagonalMatrixWrapper(const DiagonalMatrixType *mat)
    Definition diagonalmatrix.hh:667
    \n-
    void umv(const X &x, Y &y) const
    y += A x
    Definition diagonalmatrix.hh:297
    \n-
    ContainerWrapperIterator< const WrapperType, reference, reference > Iterator
    Iterator class for sequential access.
    Definition diagonalmatrix.hh:143
    \n-
    DiagonalRowVector< K, n > type
    Definition diagonalmatrix.hh:969
    \n-
    void mv(const X &x, Y &y) const
    y = A x
    Definition diagonalmatrix.hh:278
    \n-
    double frobenius_norm() const
    frobenius norm: sqrt(sum over squared values of entries)
    Definition diagonalmatrix.hh:409
    \n-
    ConstIterator end() const
    end iterator
    Definition diagonalmatrix.hh:194
    \n-
    static constexpr int cols
    The number of columns.
    Definition diagonalmatrix.hh:83
    \n-
    static constexpr int dimension
    Definition diagonalmatrix.hh:705
    \n-
    K * p_
    Definition diagonalmatrix.hh:835
    \n-
    size_type rowIndex() const
    index of this row in surrounding matrix
    Definition diagonalmatrix.hh:806
    \n-
    R dereference() const
    Definition diagonalmatrix.hh:1062
    \n-
    DiagonalRowVector & operator=(const K &k)
    Assignment operator for scalar.
    Definition diagonalmatrix.hh:870
    \n-
    bool operator!=(const DiagonalMatrix &other) const
    incomparison operator
    Definition diagonalmatrix.hh:268
    \n-
    value_type field_type
    Definition diagonalmatrix.hh:61
    \n-
    void advance(int n)
    Definition diagonalmatrix.hh:1084
    \n-
    ConstIterator begin() const
    begin iterator
    Definition diagonalmatrix.hh:188
    \n-
    Iterator begin()
    begin iterator
    Definition diagonalmatrix.hh:891
    \n-
    void mmv(const X &x, Y &y) const
    y -= A x
    Definition diagonalmatrix.hh:333
    \n-
    DiagonalMatrix & operator/=(const K &k)
    vector space division by scalar
    Definition diagonalmatrix.hh:253
    \n-
    ConstIterator const_iterator
    typedef for stl compliant access
    Definition diagonalmatrix.hh:181
    \n-
    const_row_type const_reference
    Definition diagonalmatrix.hh:77
    \n-
    bool identical(const DiagonalMatrix< K, n > &other) const
    Check if matrix is the same object as the other matrix.
    Definition diagonalmatrix.hh:130
    \n-
    friend auto operator*(const DiagonalMatrix &matrixA, const DiagonalMatrix< OtherScalar, n > &matrixB)
    Matrix-matrix multiplication.
    Definition diagonalmatrix.hh:468
    \n-
    size_type realIndex(int i) const
    Definition diagonalmatrix.hh:671
    \n-
    Iterator end()
    end iterator
    Definition diagonalmatrix.hh:158
    \n-
    const K & operator[](size_type i) const
    same for read only access
    Definition diagonalmatrix.hh:741
    \n-
    DiagonalRowVector()
    Constructor making uninitialized vector.
    Definition diagonalmatrix.hh:861
    \n-
    row_type reference
    Definition diagonalmatrix.hh:74
    \n-
    DiagonalRowVectorConst * operator&()
    Definition diagonalmatrix.hh:829
    \n-
    bool operator==(const DiagonalRowVectorConst &y) const
    Binary vector comparison.
    Definition diagonalmatrix.hh:786
    \n-
    double frobenius_norm2() const
    square of frobenius norm, need for block recursion
    Definition diagonalmatrix.hh:415
    \n-
    constexpr DiagonalMatrix()=default
    Default constructor.
    \n-
    void mtv(const X &x, Y &y) const
    y = A^T x
    Definition diagonalmatrix.hh:290
    \n-
    ContainerWrapperIterator< DiagonalRowVectorConst< K, n >, const K, const K & > ConstIterator
    ConstIterator class for sequential access.
    Definition diagonalmatrix.hh:917
    \n-
    bool identical(const DiagonalMatrixWrapper &other) const
    Definition diagonalmatrix.hh:682
    \n-
    void usmtv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
    y += alpha A^T x
    Definition diagonalmatrix.hh:382
    \n-
    void decrement()
    Definition diagonalmatrix.hh:1073
    \n-
    std::ptrdiff_t index() const
    Definition diagonalmatrix.hh:1096
    \n-
    const FieldVector< K, n > & diagonal() const
    Get const reference to diagonal vector.
    Definition diagonalmatrix.hh:543
    \n-
    void invert()
    Compute inverse.
    Definition diagonalmatrix.hh:445
    \n-
    DiagonalRowVector * operator&()
    Definition diagonalmatrix.hh:935
    \n-
    const K & diagonal(size_type i) const
    Get const reference to diagonal entry.
    Definition diagonalmatrix.hh:531
    \n-
    size_type N() const
    number of blocks in the vector (are of size 1 here)
    Definition diagonalmatrix.hh:794
    \n-
    DiagonalMatrix(std::initializer_list< K > const &l)
    Construct diagonal matrix from an initializer list.
    Definition diagonalmatrix.hh:115
    \n-
    row_type::Iterator ColIterator
    rename the iterators for easier access
    Definition diagonalmatrix.hh:149
    \n-
    K field_type
    export the type representing the field
    Definition diagonalmatrix.hh:852
    \n-
    reference operator[](size_type i)
    Return reference object as row replacement.
    Definition diagonalmatrix.hh:519
    \n-
    DiagonalRowVectorConst< K, n > type
    Definition diagonalmatrix.hh:951
    \n-
    Iterator end()
    end iterator
    Definition diagonalmatrix.hh:897
    \n-
    DiagonalMatrix(const FieldVector< K, n > &diag)
    Constructor initializing the diagonal with a vector.
    Definition diagonalmatrix.hh:103
    \n-
    std::size_t size_type
    The type used for the index access and size operation.
    Definition diagonalmatrix.hh:858
    \n-
    void usmv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y) const
    y += alpha A x
    Definition diagonalmatrix.hh:369
    \n-
    double infinity_norm() const
    infinity norm (row sum norm, how to generalize for blocks?)
    Definition diagonalmatrix.hh:421
    \n-
    DiagonalMatrix & operator+=(const DiagonalMatrix &y)
    vector space addition
    Definition diagonalmatrix.hh:218
    \n-
    K block_type
    export the type representing the components
    Definition diagonalmatrix.hh:64
    \n-
    void umhv(const X &x, Y &y) const
    y += A^H x
    Definition diagonalmatrix.hh:321
    \n-
    Iterator beforeBegin()
    Definition diagonalmatrix.hh:172
    \n-
    static void apply(DenseMatrix &denseMatrix, DiagonalMatrix< field, N > const &rhs)
    Definition diagonalmatrix.hh:1108
    \n-
    ContainerWrapperIterator(const MyType &other)
    Definition diagonalmatrix.hh:1026
    \n-
    ConstIterator end() const
    end ConstIterator
    Definition diagonalmatrix.hh:766
    \n-
    std::size_t size_type
    The type used for the index access and size operation.
    Definition diagonalmatrix.hh:718
    \n-
    DiagonalMatrix & operator=(const K &k)
    Assignment from a scalar.
    Definition diagonalmatrix.hh:123
    \n-
    DiagonalRowVectorConst()
    Constructor making uninitialized vector.
    Definition diagonalmatrix.hh:727
    \n-
    Iterator beforeEnd()
    Definition diagonalmatrix.hh:165
    \n-
    size_type realIndex(int i) const
    Definition diagonalmatrix.hh:819
    \n-
    friend std::ostream & operator<<(std::ostream &s, const DiagonalMatrix< K, n > &a)
    Sends the matrix to an output stream.
    Definition diagonalmatrix.hh:508
    \n-
    K value_type
    export the type representing the field
    Definition diagonalmatrix.hh:60
    \n-
    K block_type
    export the type representing the components
    Definition diagonalmatrix.hh:715
    \n-
    K determinant() const
    calculates the determinant of this matrix
    Definition diagonalmatrix.hh:453
    \n-
    FieldTraits< K >::real_type real_type
    Definition diagonalmatrix.hh:564
    \n-
    ConstIterator beforeBegin() const
    Definition diagonalmatrix.hh:780
    \n-
    DiagonalMatrixWrapper()
    Definition diagonalmatrix.hh:663
    \n-
    ContainerWrapperIterator< DiagonalRowVectorConst< K, n >, const K, const K & > ConstIterator
    ConstIterator class for sequential access.
    Definition diagonalmatrix.hh:755
    \n-
    Iterator begin()
    begin iterator
    Definition diagonalmatrix.hh:152
    \n-
    bool operator==(const DiagonalMatrix &other) const
    comparison operator
    Definition diagonalmatrix.hh:262
    \n-
    DiagonalRowVectorConst< K, n > const_row_type
    Definition diagonalmatrix.hh:76
    \n-
    DiagonalRowVector< K, n > row_type
    Each row is implemented by a field vector.
    Definition diagonalmatrix.hh:73
    \n-
    bool equals(const MyType &other) const
    Definition diagonalmatrix.hh:1052
    \n-
    Iterator RowIterator
    rename the iterators for easier access
    Definition diagonalmatrix.hh:147
    \n-
    K block_type
    export the type representing the components
    Definition diagonalmatrix.hh:855
    \n-
    ConstIterator beforeEnd() const
    Definition diagonalmatrix.hh:201
    \n-
    const K & diagonal() const
    the diagonal value
    Definition diagonalmatrix.hh:812
    \n-
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n+
    auto dot(const A &a, const B &b) -> typename std::enable_if< IsNumber< A >::value &&!IsVector< A >::value &&!std::is_same< typename FieldTraits< A >::field_type, typename FieldTraits< A >::real_type > ::value, decltype(conj(a) *b)>::type
    computes the dot product for fundamental data types according to Petsc's VectDot function: dot(a,...
    Definition dotproduct.hh:42
    \n+
    std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
    Definition bigunsignedint.hh:278
    \n+
    STL namespace.
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    K conjugateComplex(const K &x)
    compute conjugate complex of x
    Definition math.hh:164
    \n-
    A dense n x m matrix.
    Definition densematrix.hh:140
    \n-
    constexpr size_type M() const
    number of columns
    Definition densematrix.hh:703
    \n-
    constexpr size_type N() const
    number of rows
    Definition densematrix.hh:697
    \n-
    A dense n x m matrix.
    Definition fmatrix.hh:117
    \n-
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n-
    you have to specialize this structure for any type that should be assignable to a DenseMatrix
    Definition densematrix.hh:59
    \n-
    Error thrown if operations of a FieldMatrix fail.
    Definition densematrix.hh:126
    \n+
    Interface for a class of dense vectors over a given field.
    Definition densevector.hh:229
    \n+
    Traits::value_type value_type
    export the type representing the field
    Definition densevector.hh:250
    \n
    FieldTraits< value_type >::real_type two_norm2() const
    square of two norm (sum over squared values of entries), need for block recursion
    Definition densevector.hh:650
    \n+
    ConstIterator const_iterator
    typedef for stl compliant access
    Definition densevector.hh:381
    \n+
    Iterator iterator
    typedef for stl compliant access
    Definition densevector.hh:344
    \n+
    ConstIterator find(size_type i) const
    return iterator to given element or end()
    Definition densevector.hh:410
    \n+
    ConstIterator end() const
    end ConstIterator
    Definition densevector.hh:390
    \n+
    value_type & front()
    return reference to first element
    Definition densevector.hh:306
    \n
    FieldTraits< value_type >::real_type two_norm() const
    two norm sqrt(sum over squared values of entries)
    Definition densevector.hh:641
    \n+
    ConstIterator beforeBegin() const
    Definition densevector.hh:404
    \n+
    bool operator==(const DenseVector< Other > &x) const
    Binary vector comparison.
    Definition densevector.hh:555
    \n
    Iterator begin()
    begin iterator
    Definition densevector.hh:347
    \n+
    Iterator beforeBegin()
    Definition densevector.hh:367
    \n+
    DenseIterator< const DenseVector, const value_type > ConstIterator
    ConstIterator class for sequential access.
    Definition densevector.hh:379
    \n+
    Traits::derived_type derived_type
    type of derived vector class
    Definition densevector.hh:247
    \n+
    const value_type & front() const
    return reference to first element
    Definition densevector.hh:312
    \n+
    derived_type operator+(const DenseVector< Other > &b) const
    Binary vector addition.
    Definition densevector.hh:439
    \n+
    size_type size() const
    size method
    Definition densevector.hh:336
    \n+
    size_type dim() const
    dimension of the vector space
    Definition densevector.hh:733
    \n
    FieldTraits< vt >::real_type infinity_norm() const
    infinity norm (maximum of absolute values of entries)
    Definition densevector.hh:661
    \n+
    ConstIterator beforeEnd() const
    Definition densevector.hh:397
    \n+
    derived_type & axpy(const field_type &a, const DenseVector< Other > &x)
    vector space axpy operation ( *this += a x )
    Definition densevector.hh:575
    \n+
    derived_type & operator=(const value_type &k)
    Assignment operator for scalar.
    Definition densevector.hh:266
    \n+
    static constexpr int blocklevel
    The number of block levels we contain. This is the leaf, that is, 1.
    Definition densevector.hh:262
    \n+
    Iterator end()
    end iterator
    Definition densevector.hh:353
    \n+
    Traits::size_type size_type
    The type used for the index access and size operation.
    Definition densevector.hh:259
    \n+
    DenseIterator< DenseVector, value_type > Iterator
    Iterator class for sequential access.
    Definition densevector.hh:342
    \n+
    derived_type & operator-=(const DenseVector< Other > &x)
    vector space subtraction
    Definition densevector.hh:429
    \n+
    DenseVector(const DenseVector &)=default
    \n+
    Iterator beforeEnd()
    Definition densevector.hh:360
    \n+
    derived_type & operator+=(const DenseVector< Other > &x)
    vector space addition
    Definition densevector.hh:419
    \n+
    std::enable_if< std::is_convertible< FieldType, field_type >::value, derived_type >::type & operator*=(const FieldType &kk)
    vector space multiplication with scalar
    Definition densevector.hh:523
    \n+
    bool operator!=(const DenseVector< Other > &x) const
    Binary vector incomparison.
    Definition densevector.hh:567
    \n+
    const value_type & back() const
    return reference to last element
    Definition densevector.hh:324
    \n+
    ConstIterator begin() const
    begin ConstIterator
    Definition densevector.hh:384
    \n+
    PromotionTraits< field_type, typenameDenseVector< Other >::field_type >::PromotedType operator*(const DenseVector< Other > &x) const
    indefinite vector dot product which corresponds to Petsc's VecTDot
    Definition densevector.hh:591
    \n+
    constexpr DenseVector()=default
    \n
    FieldTraits< vt >::real_type infinity_norm_real() const
    simplified infinity norm (uses Manhattan norm for complex values)
    Definition densevector.hh:677
    \n-
    Definition diagonalmatrix.hh:698
    \n-
    Definition diagonalmatrix.hh:841
    \n-
    Definition diagonalmatrix.hh:650
    \n-
    Iterator class for sparse vector-like containers.
    Definition diagonalmatrix.hh:998
    \n-
    ContainerWrapperIterator(const MyConstType &other)
    Definition diagonalmatrix.hh:1031
    \n-
    bool equals(const MyConstType &other) const
    Definition diagonalmatrix.hh:1057
    \n-
    A diagonal matrix of static size.
    Definition diagonalmatrix.hh:53
    \n+
    DenseVector & operator=(const DenseVector &)=default
    Assignment operator for other DenseVector of same type.
    \n+
    Traits::value_type block_type
    export the type representing the components
    Definition densevector.hh:256
    \n+
    value_type & operator[](size_type i)
    random access
    Definition densevector.hh:295
    \n+
    FieldTraits< value_type >::field_type field_type
    export the type representing the field
    Definition densevector.hh:253
    \n+
    value_type & back()
    return reference to last element
    Definition densevector.hh:318
    \n+
    derived_type operator-() const
    Vector negation.
    Definition densevector.hh:454
    \n+
    std::enable_if< std::is_convertible< FieldType, field_type >::value, derived_type >::type & operator/=(const FieldType &kk)
    vector space division by scalar
    Definition densevector.hh:545
    \n+
    FieldTraits< value_type >::real_type one_norm_real() const
    simplified one norm (uses Manhattan norm for complex values)
    Definition densevector.hh:632
    \n+
    PromotionTraits< field_type, typenameDenseVector< Other >::field_type >::PromotedType dot(const DenseVector< Other > &x) const
    vector dot product which corresponds to Petsc's VecDot
    Definition densevector.hh:609
    \n+
    Iterator find(size_type i)
    return iterator to given element or end()
    Definition densevector.hh:373
    \n+
    FieldTraits< value_type >::real_type one_norm() const
    one norm (sum over absolute values of entries)
    Definition densevector.hh:622
    \n+
    size_type N() const
    number of blocks in the vector (are of size 1 here)
    Definition densevector.hh:727
    \n+
    bool empty() const
    checks whether the container is empty
    Definition densevector.hh:330
    \n+
    FieldTraits< typenameDenseMatVecTraits< V >::value_type >::real_type real_type
    Definition densevector.hh:28
    \n+
    FieldTraits< typenameDenseMatVecTraits< V >::value_type >::field_type field_type
    Definition densevector.hh:27
    \n+
    Generic iterator class for dense vector and matrix implementations.
    Definition densevector.hh:131
    \n+
    void increment()
    Definition densevector.hh:182
    \n+
    SizeType index() const
    return index
    Definition densevector.hh:213
    \n+
    bool equals(const MutableIterator &other) const
    Definition densevector.hh:167
    \n+
    DenseIterator(const MutableIterator &other)
    Definition densevector.hh:158
    \n+
    bool equals(const ConstIterator &other) const
    Definition densevector.hh:173
    \n+
    R elementAt(DifferenceType i) const
    Definition densevector.hh:192
    \n+
    DifferenceType distanceTo(DenseIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T >::type > other) const
    Definition densevector.hh:200
    \n+
    void decrement()
    Definition densevector.hh:187
    \n+
    DenseIterator(const ConstIterator &other)
    Definition densevector.hh:162
    \n+
    DifferenceType distanceTo(DenseIterator< typename std::remove_const< C >::type, typename std::remove_const< T >::type > other) const
    Definition densevector.hh:206
    \n+
    DenseIterator(C &cont, SizeType pos)
    Definition densevector.hh:154
    \n+
    std::ptrdiff_t DifferenceType
    The type of the difference between two positions.
    Definition densevector.hh:142
    \n+
    R dereference() const
    Definition densevector.hh:178
    \n+
    void advance(DifferenceType n)
    Definition densevector.hh:196
    \n+
    C::size_type SizeType
    The type to index the underlying container.
    Definition densevector.hh:147
    \n
    Definition ftraits.hh:26
    \n
    T field_type
    export the type representing the field
    Definition ftraits.hh:28
    \n
    T real_type
    export the type representing the real type of the field
    Definition ftraits.hh:30
    \n-
    Get the 'const' version of a reference to a mutable object.
    Definition genericiterator.hh:87
    \n
    get the 'mutable' version of a reference to a const object
    Definition genericiterator.hh:116
    \n-
    Facade class for stl conformant bidirectional iterators.
    Definition iteratorfacades.hh:275
    \n+
    Base class for stl conformant forward iterators.
    Definition iteratorfacades.hh:435
    \n+
    Definition matvectraits.hh:31
    \n+
    Compute type of the result of an arithmetic operation involving two different number types.
    Definition promotiontraits.hh:27
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1601 +1,944 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-diagonalmatrix.hh\n+densevector.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_DIAGONAL_MATRIX_HH\n-6#define DUNE_DIAGONAL_MATRIX_HH\n+5#ifndef DUNE_DENSEVECTOR_HH\n+6#define DUNE_DENSEVECTOR_HH\n 7\n-12#include \n-13#include \n-14#include \n-15#include \n-16#include \n-17#include \n-18#include \n-19#include \n+8#include \n+9#include \n+10#include \n+11\n+12#include \"_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh\"\n+13#include \"_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+14#include \"_\bm_\ba_\bt_\bv_\be_\bc_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+15#include \"_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+16#include \"_\bd_\bo_\bt_\bp_\br_\bo_\bd_\bu_\bc_\bt_\b._\bh_\bh\"\n+17#include \"_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\"\n+18\n+19namespace _\bD_\bu_\bn_\be {\n 20\n-21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n-26#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh>\n-27#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-28\n-29\n-30namespace _\bD_\bu_\bn_\be {\n-31\n-32 template< class K, int n > class DiagonalRowVectorConst;\n-33 template< class K, int n > class DiagonalRowVector;\n-34 template< class DiagonalMatrixType > class DiagonalMatrixWrapper;\n-35 template< class C, class T, class R> class ContainerWrapperIterator;\n-36\n-51 template\n-_\b5_\b2 class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-53 {\n-54 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bn_\b> > _\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be;\n-55\n-56 public:\n-57 //===== type definitions and constants\n-58\n-_\b6_\b0 typedef K _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b6_\b1 typedef _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n-62\n-_\b6_\b4 typedef K _\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be;\n-65\n-_\b6_\b7 typedef std::size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-68\n-_\b7_\b0 constexpr static int _\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl = 1;\n-71\n-_\b7_\b3 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b> _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-_\b7_\b4 typedef _\br_\bo_\bw_\b__\bt_\by_\bp_\be _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b7_\b5 typedef _\br_\bo_\bw_\b__\bt_\by_\bp_\be _\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b7_\b6 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b> _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-_\b7_\b7 typedef _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\bt_\by_\bp_\be _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b7_\b8 typedef _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\bt_\by_\bp_\be _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-79\n-_\b8_\b1 constexpr static int _\br_\bo_\bw_\bs = n;\n-_\b8_\b3 constexpr static int _\bc_\bo_\bl_\bs = n;\n-84\n-85 //==== size\n-86\n-_\b8_\b7 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be ()\n-88 {\n-89 return _\br_\bo_\bw_\bs;\n-90 }\n-91\n-92 //===== constructors\n-93\n-_\b9_\b5 constexpr _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx() = default;\n-96\n-_\b9_\b8 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx (const K& k)\n-99 : diag_(k)\n-100 {}\n-101\n-_\b1_\b0_\b3 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b>& diag)\n-104 : diag_(diag)\n-105 {}\n-106\n-_\b1_\b1_\b5 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx (std::initializer_list const &l)\n-116 {\n-117 std::copy_n(l.begin(), std::min(static_cast(_\br_\bo_\bw_\bs),\n-118 l.size()),\n-119 diag_._\bb_\be_\bg_\bi_\bn());\n+21 // forward declaration of template\n+22 template class DenseVector;\n+23\n+24 template\n+_\b2_\b5 struct _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs< _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br >\n+26 {\n+_\b2_\b7 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be >_\b:_\b:\n+_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n+_\b2_\b8 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be >_\b:_\b:\n+_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+29 };\n+30\n+_\b4_\b0 namespace fvmeta\n+41 {\n+46 template\n+47 inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be absreal (const K& k)\n+48 {\n+49 using std::abs;\n+50 return abs(k);\n+51 }\n+52\n+57 template\n+58 inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be absreal (const std::complex& c)\n+59 {\n+60 using std::abs;\n+61 return abs(c.real()) + abs(c.imag());\n+62 }\n+63\n+68 template\n+69 inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be abs2 (const K& k)\n+70 {\n+71 return k*k;\n+72 }\n+73\n+78 template\n+79 inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be abs2 (const std::complex& c)\n+80 {\n+81 return c.real()*c.real() + c.imag()*c.imag();\n+82 }\n+83\n+88 template::is_integer>\n+89 struct Sqrt\n+90 {\n+91 static inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be sqrt (const K& k)\n+92 {\n+93 using std::sqrt;\n+94 return sqrt(k);\n+95 }\n+96 };\n+97\n+102 template\n+103 struct Sqrt\n+104 {\n+_\b1_\b0_\b5 static inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be sqrt (const K& k)\n+106 {\n+107 using std::sqrt;\n+108 return typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be(sqrt(double(k)));\n+109 }\n+110 };\n+111\n+116 template\n+117 inline typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be sqrt (const K& k)\n+118 {\n+119 return Sqrt::sqrt(k);\n 120 }\n 121\n-_\b1_\b2_\b3 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const K& k)\n-124 {\n-125 diag_ = k;\n-126 return *this;\n-127 }\n-128\n-_\b1_\b3_\b0 bool _\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl(const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bn_\b>& other) const\n+122 }\n+123\n+128 template\n+_\b1_\b2_\b9 class _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br :\n+130 public _\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be,T, R, std::\n+ptrdiff_t>\n 131 {\n-132 return (this==&other);\n-133 }\n+132 friend class _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type, typename\n+std::remove_const::type, typename _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be::type >;\n+133 friend class _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type, const\n+typename std::remove_const::type, typename const_reference::type >;\n 134\n-_\b1_\b3_\b6 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b _\bn_\b> _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd() const\n-137 {\n-138 return *this;\n-139 }\n-140\n-141 //===== iterator interface to rows of the matrix\n-_\b1_\b4_\b3 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be_\b,_\b _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b,_\b _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b>\n-_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b4_\b5 typedef _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b4_\b7 typedef _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bR_\bo_\bw_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b4_\b9 typedef typename _\br_\bo_\bw_\b__\bt_\by_\bp_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-150\n-_\b1_\b5_\b2 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn ()\n-153 {\n-154 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),0);\n-155 }\n-156\n-_\b1_\b5_\b8 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd ()\n-159 {\n-160 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),n);\n-161 }\n-162\n-_\b1_\b6_\b5 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd ()\n-166 {\n-167 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),n-1);\n-168 }\n-169\n-_\b1_\b7_\b2 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn ()\n-173 {\n-174 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),-1);\n-175 }\n-176\n+135 typedef _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type, typename std::\n+remove_const::type, typename mutable_reference::type > _\bM_\bu_\bt_\ba_\bb_\bl_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+136 typedef _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type, const\n+typename std::remove_const::type, typename const_reference::type >\n+_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+137 public:\n+138\n+_\b1_\b4_\b2 typedef std::ptrdiff_t _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be;\n+143\n+_\b1_\b4_\b7 typedef typename C::size_type _\bS_\bi_\bz_\be_\bT_\by_\bp_\be;\n+148\n+149 // Constructors needed by the base iterators.\n+_\b1_\b5_\b0 _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br()\n+151 : container_(0), position_()\n+152 {}\n+153\n+_\b1_\b5_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(C& cont, _\bS_\bi_\bz_\be_\bT_\by_\bp_\be pos)\n+155 : container_(&cont), position_(pos)\n+156 {}\n+157\n+_\b1_\b5_\b8 _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bM_\bu_\bt_\ba_\bb_\bl_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br & other)\n+159 : container_(other.container_), position_(other.position_)\n+160 {}\n+161\n+_\b1_\b6_\b2 _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br & other)\n+163 : container_(other.container_), position_(other.position_)\n+164 {}\n+165\n+166 // Methods needed by the forward iterator\n+_\b1_\b6_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bM_\bu_\bt_\ba_\bb_\bl_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br &other) const\n+168 {\n+169 return position_ == other.position_ && container_ == other.container_;\n+170 }\n+171\n+172\n+_\b1_\b7_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br & other) const\n+174 {\n+175 return position_ == other.position_ && container_ == other.container_;\n+176 }\n 177\n-_\b1_\b7_\b9 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be_\b,_\b _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b,\n-_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b> _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b8_\b1 typedef _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b8_\b3 typedef _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bn_\bs_\bt_\bR_\bo_\bw_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b1_\b8_\b5 typedef typename _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\bt_\by_\bp_\be_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bC_\bo_\bn_\bs_\bt_\bC_\bo_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-186\n-_\b1_\b8_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn () const\n-189 {\n-190 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),0);\n-191 }\n-192\n-_\b1_\b9_\b4 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd () const\n-195 {\n-196 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),n);\n-197 }\n-198\n-_\b2_\b0_\b1 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd() const\n-202 {\n-203 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),n-1);\n+_\b1_\b7_\b8 R _\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const {\n+179 return container_->operator[](position_);\n+180 }\n+181\n+_\b1_\b8_\b2 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt(){\n+183 ++position_;\n+184 }\n+185\n+186 // Additional function needed by BidirectionalIterator\n+_\b1_\b8_\b7 void _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt(){\n+188 --position_;\n+189 }\n+190\n+191 // Additional function needed by RandomAccessIterator\n+_\b1_\b9_\b2 R _\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be i) const {\n+193 return container_->operator[](position_+i);\n+194 }\n+195\n+_\b1_\b9_\b6 void _\ba_\bd_\bv_\ba_\bn_\bc_\be(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n){\n+197 position_=position_+n;\n+198 }\n+199\n+_\b2_\b0_\b0 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo(_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type,const typename std::remove_const::type> other) const\n+201 {\n+202 assert(other.container_==container_);\n+203 return static_cast< _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be >( other.position_ ) - static_cast<\n+_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be >( position_ );\n 204 }\n 205\n-_\b2_\b0_\b8 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn () const\n-209 {\n-210 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bW_\br_\ba_\bp_\bp_\be_\br_\bT_\by_\bp_\be(this),-1);\n-211 }\n-212\n-213\n-214\n-215 //===== vector space arithmetic\n-216\n-_\b2_\b1_\b8 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=_\b (const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& y)\n-219 {\n-220 diag_ += y.diag_;\n-221 return *this;\n-222 }\n-223\n-_\b2_\b2_\b5 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=_\b (const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& y)\n-226 {\n-227 diag_ -= y.diag_;\n-228 return *this;\n-229 }\n-230\n-_\b2_\b3_\b2 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=_\b (const K& k)\n-233 {\n-234 diag_ += k;\n-235 return *this;\n-236 }\n-237\n-_\b2_\b3_\b9 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=_\b (const K& k)\n-240 {\n-241 diag_ -= k;\n-242 return *this;\n-243 }\n-244\n-_\b2_\b4_\b6 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b=_\b (const K& k)\n-247 {\n-248 diag_ *= k;\n-249 return *this;\n-250 }\n+_\b2_\b0_\b6 _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo(_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::\n+type, typename std::remove_const::type> other) const\n+207 {\n+208 assert(other.container_==container_);\n+209 return static_cast< _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be >( other.position_ ) - static_cast<\n+_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be >( position_ );\n+210 }\n+211\n+_\b2_\b1_\b3 _\bS_\bi_\bz_\be_\bT_\by_\bp_\be _\bi_\bn_\bd_\be_\bx () const\n+214 {\n+215 return this->position_;\n+216 }\n+217\n+218 private:\n+219 C *container_;\n+220 _\bS_\bi_\bz_\be_\bT_\by_\bp_\be position_;\n+221 };\n+222\n+227 template\n+_\b2_\b2_\b8 class _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br\n+229 {\n+230 typedef _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b> _\bT_\br_\ba_\bi_\bt_\bs;\n+231 // typedef typename Traits::value_type K;\n+232\n+233 // Curiously recurring template pattern\n+234 V & asImp() { return static_cast(*this); }\n+235 const V & asImp() const { return static_cast(*this); }\n+236\n+237 protected:\n+238 // construction allowed to derived classes only\n+_\b2_\b3_\b9 constexpr _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br() = default;\n+240 // copying only allowed by derived classes\n+_\b2_\b4_\b1 _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br(const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br&) = default;\n+242\n+243 public:\n+244 //===== type definitions and constants\n+245\n+_\b2_\b4_\b7 typedef typename Traits::derived_type _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be;\n+248\n+_\b2_\b5_\b0 typedef typename Traits::value_type _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n 251\n-_\b2_\b5_\b3 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b=_\b (const K& k)\n-254 {\n-255 diag_ /= k;\n-256 return *this;\n-257 }\n-258\n-259 //===== comparison ops\n+_\b2_\b5_\b3 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b _\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n+254\n+_\b2_\b5_\b6 typedef typename Traits::value_type _\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be;\n+257\n+_\b2_\b5_\b9 typedef typename Traits::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n 260\n-_\b2_\b6_\b2 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& other) const\n-263 {\n-264 return diag_==other._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl();\n-265 }\n-266\n-_\b2_\b6_\b8 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& other) const\n-269 {\n-270 return diag_!=other._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl();\n+_\b2_\b6_\b2 constexpr static int _\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl = 1;\n+263\n+264 //===== assignment from scalar\n+_\b2_\b6_\b6 inline _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& k)\n+267 {\n+268 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+269 asImp()[i] = k;\n+270 return asImp();\n 271 }\n 272\n-273\n-274 //===== linear maps\n-275\n-277 template\n-_\b2_\b7_\b8 void _\bm_\bv (const X& x, Y& y) const\n-279 {\n-280#ifdef DUNE_FMatrix_WITH_CHECKING\n-281 if (x.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-282 if (y.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-283#endif\n-284 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b2_\b9_\b0 void _\bm_\bt_\bv (const X& x, Y& y) const\n-291 {\n-292 _\bm_\bv(x, y);\n-293 }\n-294\n-296 template\n-_\b2_\b9_\b7 void _\bu_\bm_\bv (const X& x, Y& y) const\n-298 {\n-299#ifdef DUNE_FMatrix_WITH_CHECKING\n-300 if (x.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-301 if (y.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-302#endif\n-303 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b0_\b9 void _\bu_\bm_\bt_\bv (const X& x, Y& y) const\n-310 {\n-311#ifdef DUNE_FMatrix_WITH_CHECKING\n-312 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-313 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-314#endif\n-315 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b2_\b1 void _\bu_\bm_\bh_\bv (const X& x, Y& y) const\n-322 {\n-323#ifdef DUNE_FMatrix_WITH_CHECKING\n-324 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-325 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-326#endif\n-327 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b3_\b3 void _\bm_\bm_\bv (const X& x, Y& y) const\n-334 {\n-335#ifdef DUNE_FMatrix_WITH_CHECKING\n-336 if (x.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-337 if (y.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-338#endif\n-339 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b4_\b5 void _\bm_\bm_\bt_\bv (const X& x, Y& y) const\n-346 {\n-347#ifdef DUNE_FMatrix_WITH_CHECKING\n-348 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-349 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-350#endif\n-351 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b5_\b7 void _\bm_\bm_\bh_\bv (const X& x, Y& y) const\n-358 {\n-359#ifdef DUNE_FMatrix_WITH_CHECKING\n-360 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-361 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-362#endif\n-363 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b6_\b9 void _\bu_\bs_\bm_\bv (const typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be & alpha,\n-370 const X& x, Y& y) const\n-371 {\n-372#ifdef DUNE_FMatrix_WITH_CHECKING\n-373 if (x.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-374 if (y.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-375#endif\n-376 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b8_\b2 void _\bu_\bs_\bm_\bt_\bv (const typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be & alpha,\n-383 const X& x, Y& y) const\n-384 {\n-385#ifdef DUNE_FMatrix_WITH_CHECKING\n-386 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-387 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-388#endif\n-389 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b9_\b5 void _\bu_\bs_\bm_\bh_\bv (const typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be & alpha,\n-396 const X& x, Y& y) const\n-397 {\n-398#ifdef DUNE_FMatrix_WITH_CHECKING\n-399 if (x.N()!=_\bN()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-400 if (y.N()!=_\bM()) _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br,\"index out of range\");\n-401#endif\n-402 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b4_\b3_\b8 void _\bs_\bo_\bl_\bv_\be (V& x, const V& b) const\n-439 {\n-440 for (int i=0; i_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-448 for (int i=0; i::value_type>::\n+value, int> = 0>\n+_\b2_\b8_\b4 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bW_\b>& other)\n+285 {\n+286 assert(other._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+287 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+288 asImp()[i] = other[i];\n+289 return asImp();\n+290 }\n+291\n+292 //===== access to components\n+293\n+_\b2_\b9_\b5 _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n+296 {\n+297 return asImp()[i];\n+298 }\n+299\n+_\b3_\b0_\b0 const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be & _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+301 {\n+302 return asImp()[i];\n+303 }\n+304\n+_\b3_\b0_\b6 _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\bf_\br_\bo_\bn_\bt()\n+307 {\n+308 return asImp()[0];\n+309 }\n+310\n+_\b3_\b1_\b2 const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\bf_\br_\bo_\bn_\bt() const\n+313 {\n+314 return asImp()[0];\n+315 }\n+316\n+_\b3_\b1_\b8 _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\bb_\ba_\bc_\bk()\n+319 {\n+320 return asImp()[_\bs_\bi_\bz_\be()-1];\n+321 }\n+322\n+_\b3_\b2_\b4 const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\bb_\ba_\bc_\bk() const\n+325 {\n+326 return asImp()[_\bs_\bi_\bz_\be()-1];\n+327 }\n+328\n+_\b3_\b3_\b0 bool _\be_\bm_\bp_\bt_\by() const\n+331 {\n+332 return _\bs_\bi_\bz_\be() == 0;\n+333 }\n+334\n+_\b3_\b3_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+337 {\n+338 return asImp().size();\n+339 }\n+340\n+_\b3_\b4_\b2 typedef _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b,_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b> _\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b3_\b4_\b4 typedef _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+345\n+_\b3_\b4_\b7 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn ()\n+348 {\n+349 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,0);\n+350 }\n+351\n+_\b3_\b5_\b3 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd ()\n+354 {\n+355 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,_\bs_\bi_\bz_\be());\n+356 }\n+357\n+_\b3_\b6_\b0 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd ()\n+361 {\n+362 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,_\bs_\bi_\bz_\be()-1);\n+363 }\n+364\n+_\b3_\b6_\b7 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn ()\n+368 {\n+369 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,-1);\n+370 }\n+371\n+_\b3_\b7_\b3 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n+374 {\n+375 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,std::min(i,_\bs_\bi_\bz_\be()));\n+376 }\n+377\n+_\b3_\b7_\b9 typedef _\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b,_\bc_\bo_\bn_\bs_\bt_\b _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b> _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b3_\b8_\b1 typedef _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+382\n+_\b3_\b8_\b4 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn () const\n+385 {\n+386 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,0);\n+387 }\n+388\n+_\b3_\b9_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd () const\n+391 {\n+392 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,_\bs_\bi_\bz_\be());\n+393 }\n+394\n+_\b3_\b9_\b7 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd () const\n+398 {\n+399 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,_\bs_\bi_\bz_\be()-1);\n+400 }\n+401\n+_\b4_\b0_\b4 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn () const\n+405 {\n+406 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,-1);\n+407 }\n+408\n+_\b4_\b1_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n+411 {\n+412 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,std::min(i,_\bs_\bi_\bz_\be()));\n+413 }\n+414\n+415 //===== vector space arithmetic\n+416\n+418 template \n+_\b4_\b1_\b9 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x)\n+420 {\n+421 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+422 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+423 (*this)[i] += x[i];\n+424 return asImp();\n+425 }\n+426\n+428 template \n+_\b4_\b2_\b9 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x)\n+430 {\n+431 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+432 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+433 (*this)[i] -= x[i];\n+434 return asImp();\n+435 }\n+436\n+438 template \n+_\b4_\b3_\b9 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& b) const\n+440 {\n+441 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be z = asImp();\n+442 return (z+=b);\n+443 }\n+444\n+446 template \n+_\b4_\b4_\b7 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& b) const\n+448 {\n+449 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be z = asImp();\n+450 return (z-=b);\n+451 }\n+452\n+_\b4_\b5_\b4 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b () const\n+455 {\n+456 V result;\n+457 using idx_type = typename decltype(result)_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+458\n+459 for (idx_type i = 0; i < _\bs_\bi_\bz_\be(); ++i)\n+460 result[i] = -asImp()[i];\n 461\n-462\n-463 //===== matrix-matrix multiplication\n+462 return result;\n+463 }\n 464\n-467 template \n-_\b4_\b6_\b8 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-469 const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b,_\b _\bn_\b>& matrixB)\n-470 {\n-471 auto result = _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:\n-_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be, n>{};\n-472 for(int i=0; i\n+475 typename std::enable_if<\n+476 std::is_convertible::value,\n+477 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+478 >::type&\n+_\b4_\b7_\b9 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=_\b (const ValueType& kk)\n+480 {\n+481 const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& k = kk;\n+482 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+483 (*this)[i] += k;\n+484 return asImp();\n 485 }\n 486\n-_\b4_\b8_\b8 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bM ()\n-489 {\n-490 return n;\n-491 }\n-492\n-493\n-494\n-495 //===== query\n-496\n-_\b4_\b9_\b8 bool _\be_\bx_\bi_\bs_\bt_\bs (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j) const\n-499 {\n-500 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i >= 0 && i < n);\n-501 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(j >= 0 && j < n);\n-502 return i==j;\n-503 }\n-504\n-505\n-506\n-_\b5_\b0_\b8 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const\n-_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bn_\b>& a)\n-509 {\n-510 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i(&diag_[i]), i);\n-522 }\n-523\n-_\b5_\b2_\b5 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-526 {\n-527 return _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be(const_cast(&diag_[i]), i);\n-528 }\n-529\n-_\b5_\b3_\b1 const K& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-532 {\n-533 return diag_[i];\n-534 }\n-535\n-_\b5_\b3_\b7 K& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n-538 {\n-539 return diag_[i];\n-540 }\n-541\n-_\b5_\b4_\b3 const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b>& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const\n-544 {\n-545 return diag_;\n-546 }\n-547\n-_\b5_\b4_\b9 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b>& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl()\n-550 {\n-551 return diag_;\n-552 }\n-553\n-554 private:\n-555\n-556 // the data, a FieldVector storing the diagonal\n-557 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b> diag_;\n-558 };\n-559\n-560 template< class K, int n >\n-_\b5_\b6_\b1 struct _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs< _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx >\n-562 {\n-_\b5_\b6_\b3 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n-_\b5_\b6_\b4 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-565 };\n-566\n-567\n-568#ifndef DOXYGEN // hide specialization\n-571 template< class K >\n-572 class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx : public _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-573 {\n-574 typedef _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b1_\b,_\b1_\b> Base;\n-575 public:\n-577 typedef typename Base::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-578\n-581 constexpr static int _\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl = 1;\n+488\n+496 template \n+497 typename std::enable_if<\n+498 std::is_convertible::value,\n+499 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+500 >::type&\n+_\b5_\b0_\b1 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=_\b (const ValueType& kk)\n+502 {\n+503 const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& k = kk;\n+504 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+505 (*this)[i] -= k;\n+506 return asImp();\n+507 }\n+508\n+510\n+518 template \n+519 typename std::enable_if<\n+520 std::is_convertible::value,\n+521 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+522 >::type&\n+_\b5_\b2_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b=_\b (const FieldType& kk)\n+524 {\n+525 const _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be& k = kk;\n+526 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+527 (*this)[i] *= k;\n+528 return asImp();\n+529 }\n+530\n+532\n+540 template \n+541 typename std::enable_if<\n+542 std::is_convertible::value,\n+543 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+544 >::type&\n+_\b5_\b4_\b5 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b=_\b (const FieldType& kk)\n+546 {\n+547 const _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be& k = kk;\n+548 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+549 (*this)[i] /= k;\n+550 return asImp();\n+551 }\n+552\n+554 template \n+_\b5_\b5_\b5 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x) const\n+556 {\n+557 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+558 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+559 if ((*this)[i]!=x[i])\n+560 return false;\n+561\n+562 return true;\n+563 }\n+564\n+566 template \n+_\b5_\b6_\b7 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x) const\n+568 {\n+569 return !_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(x);\n+570 }\n+571\n+572\n+574 template \n+_\b5_\b7_\b5 _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be& _\ba_\bx_\bp_\by (const _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be& a, const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x)\n+576 {\n+577 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+578 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+579 (*this)[i] += a*x[i];\n+580 return asImp();\n+581 }\n 582\n-583 typedef typename Base::row_type _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-584\n-585 typedef typename Base::row_reference _\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-586 typedef typename Base::const_row_reference _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-587\n-590 constexpr static int _\br_\bo_\bw_\bs = 1;\n-593 constexpr static int _\bc_\bo_\bl_\bs = 1;\n-594\n-595\n-597 constexpr _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx() = default;\n-598\n-600 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx(const K& scalar)\n-601 {\n-602 (*this)[0][0] = scalar;\n-603 }\n-604\n-606 const K& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be) const\n-607 {\n-608 return (*this)[0][0];\n-609 }\n-610\n-612 K& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be)\n-613 {\n-614 return (*this)[0][0];\n+590 template\n+_\b5_\b9_\b1 typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b,_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>_\b:_\b:\n+_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be>::PromotedType _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x) const {\n+592 typedef typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>_\b:_\b:\n+_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be>::PromotedType PromotedType;\n+593 PromotedType result(0);\n+594 assert(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+595 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++) {\n+596 result += PromotedType((*this)[i]*x[i]);\n+597 }\n+598 return result;\n+599 }\n+600\n+608 template\n+_\b6_\b0_\b9 typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b,_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>_\b:_\b:\n+_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be>::PromotedType _\bd_\bo_\bt(const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>& x) const {\n+610 typedef typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bO_\bt_\bh_\be_\br_\b>_\b:_\b:\n+_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be>::PromotedType PromotedType;\n+611 PromotedType result(0);\n+612 assert(x._\bs_\bi_\bz_\be() == _\bs_\bi_\bz_\be());\n+613 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++) {\n+614 result += _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt((*this)[i],x[i]);\n 615 }\n-616\n-618 const FieldVector& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const\n-619 {\n-620 return (*this)[0];\n-621 }\n-622\n-624 FieldVector& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl()\n-625 {\n-626 return (*this)[0];\n-627 }\n-628\n-630 DiagonalMatrix _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd() const\n-631 {\n-632 return *this;\n-633 }\n-634\n-637 template \n-638 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-639 const DiagonalMatrix& matrixB)\n-640 {\n-641 return DiagonalMatrix::\n-PromotedType, 1>{matrixA.diagonal(0)*matrixB.diagonal(0)};\n-642 }\n-643\n-644 };\n-645#endif\n-646\n-647\n-648 template\n-_\b6_\b4_\b9 class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br\n-650 {\n-651 typedef typename DiagonalMatrixType::reference reference;\n-652 typedef typename DiagonalMatrixType::const_reference const_reference;\n-653 typedef typename DiagonalMatrixType::field_type K;\n-654 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bT_\by_\bp_\be_\b:_\b:_\br_\bo_\bw_\bs_\b> _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-655 typedef std::size_t size_type;\n-_\b6_\b5_\b6 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bT_\by_\bp_\be_\b> _\bM_\by_\bT_\by_\bp_\be;\n+616 return result;\n+617 }\n+618\n+619 //===== norms\n+620\n+_\b6_\b2_\b2 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bo_\bn_\be_\b__\bn_\bo_\br_\bm() const {\n+623 using std::abs;\n+624 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be result( 0 );\n+625 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+626 result += abs((*this)[i]);\n+627 return result;\n+628 }\n+629\n+630\n+_\b6_\b3_\b2 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bo_\bn_\be_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl () const\n+633 {\n+634 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be result( 0 );\n+635 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+636 result += fvmeta::absreal((*this)[i]);\n+637 return result;\n+638 }\n+639\n+_\b6_\b4_\b1 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bt_\bw_\bo_\b__\bn_\bo_\br_\bm () const\n+642 {\n+643 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be result( 0 );\n+644 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+645 result += fvmeta::abs2((*this)[i]);\n+646 return fvmeta::sqrt(result);\n+647 }\n+648\n+_\b6_\b5_\b0 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bt_\bw_\bo_\b__\bn_\bo_\br_\bm_\b2 () const\n+651 {\n+652 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be result( 0 );\n+653 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\bs_\bi_\bz_\be(); i++)\n+654 result += fvmeta::abs2((*this)[i]);\n+655 return result;\n+656 }\n 657\n-658 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-659 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-660\n-661 public:\n-662\n-_\b6_\b6_\b3 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br() :\n-664 mat_(0)\n-665 {}\n-666\n-_\b6_\b6_\b7 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br(const DiagonalMatrixType* mat) :\n-668 mat_(const_cast(mat))\n-669 {}\n-670\n-_\b6_\b7_\b1 size_type _\br_\be_\ba_\bl_\bI_\bn_\bd_\be_\bx(int i) const\n-672 {\n-673 return i;\n-674 }\n-675\n-_\b6_\b7_\b6 _\br_\bo_\bw_\b__\bt_\by_\bp_\be* _\bp_\bo_\bi_\bn_\bt_\be_\br(int i) const\n-677 {\n-678 row_ = _\br_\bo_\bw_\b__\bt_\by_\bp_\be(&(mat_->diagonal(i)), i);\n-679 return &row_;\n-680 }\n-681\n-_\b6_\b8_\b2 bool _\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl(const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br& other) const\n-683 {\n-684 return mat_==other.mat_;\n+659 template ::value, int>::type = 0>\n+_\b6_\b6_\b1 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm() const {\n+662 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+663 using std::abs;\n+664 using std::max;\n+665\n+666 real_type norm = 0;\n+667 for (auto const &x : *this) {\n+668 real_type const a = abs(x);\n+669 norm = max(a, norm);\n+670 }\n+671 return norm;\n+672 }\n+673\n+675 template ::value, int>::type = 0>\n+_\b6_\b7_\b7 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl() const {\n+678 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+679 using std::max;\n+680\n+681 real_type norm = 0;\n+682 for (auto const &x : *this) {\n+683 real_type const a = fvmeta::absreal(x);\n+684 norm = max(a, norm);\n 685 }\n-686\n-687 private:\n+686 return norm;\n+687 }\n 688\n-689 mutable DiagonalMatrixType* mat_;\n-690 mutable row_type row_;\n-691 };\n-692\n-696 template< class K, int n >\n-_\b6_\b9_\b7 class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt\n-698 {\n-699 template\n-_\b7_\b0_\b0 friend class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br;\n-701 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br<_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt, const K,\n-const K&>;\n-702\n-703 public:\n-704 // remember size of vector\n-_\b7_\b0_\b5 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = n;\n+690 template ::value, int>::type = 0>\n+_\b6_\b9_\b2 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm() const {\n+693 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+694 using std::abs;\n+695 using std::max;\n+696\n+697 real_type norm = 0;\n+698 real_type isNaN = 1;\n+699 for (auto const &x : *this) {\n+700 real_type const a = abs(x);\n+701 norm = max(a, norm);\n+702 isNaN += a;\n+703 }\n+704 return norm * (isNaN / isNaN);\n+705 }\n 706\n-707 // standard constructor and everything is sufficient ...\n-708\n-709 //===== type definitions and constants\n-710\n-_\b7_\b1_\b2 typedef K _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n+708 template ::value, int>::type = 0>\n+_\b7_\b1_\b0 typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl() const {\n+711 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\bt_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+712 using std::max;\n 713\n-_\b7_\b1_\b5 typedef K _\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be;\n-716\n-_\b7_\b1_\b8 typedef std::size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-719\n-_\b7_\b2_\b1 constexpr static int _\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl = 1;\n-722\n-_\b7_\b2_\b4 constexpr static int _\bs_\bi_\bz_\be = n;\n+714 real_type norm = 0;\n+715 real_type isNaN = 1;\n+716 for (auto const &x : *this) {\n+717 real_type const a = fvmeta::absreal(x);\n+718 norm = max(a, norm);\n+719 isNaN += a;\n+720 }\n+721 return norm * (isNaN / isNaN);\n+722 }\n+723\n+724 //===== sizes\n 725\n-_\b7_\b2_\b7 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt() :\n-728 _\bp_\b_(0),\n-729 _\br_\bo_\bw_\b_(0)\n-730 {}\n+_\b7_\b2_\b7 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bN () const\n+728 {\n+729 return _\bs_\bi_\bz_\be();\n+730 }\n 731\n-_\b7_\b3_\b3 explicit _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt (K* p, int col) :\n-734 _\bp_\b_(p),\n-735 _\br_\bo_\bw_\b_(col)\n-736 {}\n+_\b7_\b3_\b3 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm () const\n+734 {\n+735 return _\bs_\bi_\bz_\be();\n+736 }\n 737\n-738 //===== access to components\n+738 };\n 739\n-_\b7_\b4_\b1 const K& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b ([[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-742 {\n-743 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i == _\br_\bo_\bw_\b_);\n-744 return *_\bp_\b_;\n-745 }\n-746\n-747 // check if row is identical to other row (not only identical values)\n-748 // since this is a proxy class we need to check equality of the stored\n-pointer\n-_\b7_\b4_\b9 bool _\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl(const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b>& other) const\n+748 template\n+_\b7_\b4_\b9 std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\b>& v)\n 750 {\n-751 return ((_\bp_\b_ == other._\bp_\b_)and (_\br_\bo_\bw_\b_ == other._\br_\bo_\bw_\b_));\n-752 }\n-753\n-_\b7_\b5_\b5 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b>, const K,\n-const K&> _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b7_\b5_\b7 typedef _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-758\n-_\b7_\b6_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn () const\n-761 {\n-762 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,0);\n-763 }\n-764\n-_\b7_\b6_\b6 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd () const\n-767 {\n-768 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,1);\n-769 }\n-770\n-_\b7_\b7_\b3 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd() const\n-774 {\n-775 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,0);\n-776 }\n-777\n-_\b7_\b8_\b0 _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn () const\n-781 {\n-782 return _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this,-1);\n-783 }\n-784\n-_\b7_\b8_\b6 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b (const _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt& y) const\n-787 {\n-788 return ((_\bp_\b_==y._\bp_\b_)and (_\br_\bo_\bw_\b_==y._\br_\bo_\bw_\b_));\n-789 }\n-790\n-791 //===== sizes\n-792\n-_\b7_\b9_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bN () const\n-795 {\n-796 return n;\n-797 }\n-798\n-_\b8_\b0_\b0 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bd_\bi_\bm () const\n-801 {\n-802 return n;\n-803 }\n-804\n-_\b8_\b0_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\br_\bo_\bw_\bI_\bn_\bd_\be_\bx() const\n-807 {\n-808 return _\br_\bo_\bw_\b_;\n-809 }\n-810\n-_\b8_\b1_\b2 const K& _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const\n-813 {\n-814 return *_\bp_\b_;\n-815 }\n-816\n-817 protected:\n-818\n-_\b8_\b1_\b9 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\br_\be_\ba_\bl_\bI_\bn_\bd_\be_\bx([[maybe_unused]] int i) const\n-820 {\n-821 return _\br_\bo_\bw_\bI_\bn_\bd_\be_\bx();\n-822 }\n-823\n-_\b8_\b2_\b4 K* _\bp_\bo_\bi_\bn_\bt_\be_\br([[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-825 {\n-826 return const_cast(_\bp_\b_);\n-827 }\n-828\n-_\b8_\b2_\b9 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&()\n-830 {\n-831 return this;\n-832 }\n-833\n-834 // the data, very simply a pointer to the diagonal value and the row number\n-_\b8_\b3_\b5 K* _\bp_\b_;\n-_\b8_\b3_\b6 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\br_\bo_\bw_\b_;\n-837 };\n-838\n-839 template< class K, int n >\n-_\b8_\b4_\b0 class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br : public _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt\n-841 {\n-842 template\n-_\b8_\b4_\b3 friend class _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br;\n-844 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br<_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br, K, K&>;\n-845\n-846 public:\n-847 // standard constructor and everything is sufficient ...\n-848\n-849 //===== type definitions and constants\n-850\n-_\b8_\b5_\b2 typedef K _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n-853\n-_\b8_\b5_\b5 typedef K _\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be;\n-856\n-_\b8_\b5_\b8 typedef std::size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-859\n-_\b8_\b6_\b1 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br() : _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt()\n-862 {}\n-863\n-_\b8_\b6_\b5 explicit _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br (K* p, int col) : _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt(p,\n-col)\n-866 {}\n-867\n-868 //===== assignment from scalar\n-_\b8_\b7_\b0 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const K& k)\n-871 {\n-872 *_\bp_\b_ = k;\n-873 return *this;\n-874 }\n-875\n-876 //===== access to components\n-877\n-_\b8_\b7_\b9 K& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b ([[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n-880 {\n-881 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i == _\br_\bo_\bw_\b_);\n-882 return *_\bp_\b_;\n-883 }\n-884\n-_\b8_\b8_\b6 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b>, K, K&> _\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b8_\b8_\b8 typedef _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-889\n-_\b8_\b9_\b1 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn ()\n-892 {\n-893 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-894 }\n-895\n-_\b8_\b9_\b7 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd ()\n-898 {\n-899 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 1);\n-900 }\n-901\n-_\b9_\b0_\b4 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd ()\n-905 {\n-906 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-907 }\n-908\n-_\b9_\b1_\b1 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn ()\n-912 {\n-913 return _\bI_\bt_\be_\br_\ba_\bt_\bo_\br(*this, -1);\n-914 }\n-915\n-_\b9_\b1_\b7 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b>, const K,\n-const K&> _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b9_\b1_\b9 typedef _\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-920\n-921 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl;\n-922 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt::operator[];\n-923 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt::operator==;\n-924 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn;\n-925 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\be_\bn_\bd;\n-926 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd;\n-927 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn;\n-928 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bN;\n-929 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bd_\bi_\bm;\n-930 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\br_\bo_\bw_\bI_\bn_\bd_\be_\bx;\n-931 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n-932\n-933 protected:\n-934\n-_\b9_\b3_\b5 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&()\n-936 {\n-937 return this;\n-938 }\n-939\n-940 private:\n-941\n-942 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bp_\b_;\n-943 using _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\br_\bo_\bw_\b_;\n-944 };\n-945\n-946\n-947 // implement type traits\n-948 template\n-_\b9_\b4_\b9 struct _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br >\n-950 {\n-_\b9_\b5_\b1 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b> _\bt_\by_\bp_\be;\n-952 };\n-953\n-954 template\n-_\b9_\b5_\b5 struct _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt >\n-956 {\n-_\b9_\b5_\b7 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\bK_\b,_\bn_\b> _\bt_\by_\bp_\be;\n-958 };\n-959\n-960 template\n-_\b9_\b6_\b1 struct _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br >\n-962 {\n-_\b9_\b6_\b3 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b> _\bt_\by_\bp_\be;\n-964 };\n-965\n-966 template\n-_\b9_\b6_\b7 struct _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt >\n-968 {\n-_\b9_\b6_\b9 typedef _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bn_\b> _\bt_\by_\bp_\be;\n-970 };\n-971\n-972\n-973\n-996 template\n-_\b9_\b9_\b7 class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br : public\n-_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be,T, R, int>\n-998 {\n-_\b9_\b9_\b9 typedef typename std::remove_const::type NonConstCW;\n-1000\n-1001 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::\n-type, typename _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be::type>;\n-1002 friend class _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::\n-type, typename const_reference::type>;\n-1003\n-1004 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type,\n-typename mutable_reference::type> _\bM_\by_\bT_\by_\bp_\be;\n-1005 typedef _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br::type,\n-typename const_reference::type> _\bM_\by_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-1006\n-1007 public:\n-1008\n-1009 // Constructors needed by the facade iterators.\n-_\b1_\b0_\b1_\b0 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br() :\n-1011 containerWrapper_(),\n-1012 position_(0)\n-1013 {}\n-1014\n-_\b1_\b0_\b1_\b5 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(CW containerWrapper, int position) :\n-1016 containerWrapper_(containerWrapper),\n-1017 position_(position)\n-1018 {}\n-1019\n-1020 template\n-_\b1_\b0_\b2_\b1 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(OtherContainerWrapperIteratorType& other) :\n-1022 containerWrapper_(other.containerWrapper_),\n-1023 position_(other.position_)\n-1024 {}\n-1025\n-_\b1_\b0_\b2_\b6 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bM_\by_\bT_\by_\bp_\be& other) :\n-1027 containerWrapper_(other.containerWrapper_),\n-1028 position_(other.position_)\n-1029 {}\n-1030\n-_\b1_\b0_\b3_\b1 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bM_\by_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be& other) :\n-1032 containerWrapper_(other.containerWrapper_),\n-1033 position_(other.position_)\n-1034 {}\n-1035\n-1036 template\n-_\b1_\b0_\b3_\b7 _\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(OtherContainerWrapperIteratorType&\n-other)\n-1038 {\n-1039 containerWrapper_ = other.containerWrapper_;\n-1040 position_ = other.position_;\n-1041 return *this;\n-1042 }\n-1043\n-1044 // This operator is needed since we can not get the address of the\n-1045 // temporary object returned by dereference\n-_\b1_\b0_\b4_\b6 T* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const\n-1047 {\n-1048 return containerWrapper_.pointer(position_);\n-1049 }\n-1050\n-1051 // Methods needed by the forward iterator\n-_\b1_\b0_\b5_\b2 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bM_\by_\bT_\by_\bp_\be& other) const\n-1053 {\n-1054 return position_ == other.position_ && containerWrapper_.identical\n-(other.containerWrapper_);\n-1055 }\n-1056\n-_\b1_\b0_\b5_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bM_\by_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be& other) const\n-1058 {\n-1059 return position_ == other.position_ && containerWrapper_.identical\n-(other.containerWrapper_);\n-1060 }\n-1061\n-_\b1_\b0_\b6_\b2 R _\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const\n-1063 {\n-1064 return *containerWrapper_.pointer(position_);\n-1065 }\n-1066\n-_\b1_\b0_\b6_\b7 void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-1068 {\n-1069 ++position_;\n-1070 }\n-1071\n-1072 // Additional function needed by BidirectionalIterator\n-_\b1_\b0_\b7_\b3 void _\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt()\n-1074 {\n-1075 --position_;\n-1076 }\n-1077\n-1078 // Additional function needed by RandomAccessIterator\n-_\b1_\b0_\b7_\b9 R _\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt(int i) const\n-1080 {\n-1081 return *containerWrapper_.pointer(position_+i);\n-1082 }\n-1083\n-_\b1_\b0_\b8_\b4 void _\ba_\bd_\bv_\ba_\bn_\bc_\be(int n)\n-1085 {\n-1086 position_=position_+n;\n-1087 }\n-1088\n-1089 template\n-_\b1_\b0_\b9_\b0 std::ptrdiff_t _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo(OtherContainerWrapperIteratorType& other) const\n-1091 {\n-1092 assert(containerWrapper_.identical(other));\n-1093 return other.position_ - position_;\n-1094 }\n-1095\n-_\b1_\b0_\b9_\b6 std::ptrdiff_t _\bi_\bn_\bd_\be_\bx() const\n-1097 {\n-1098 return containerWrapper_.realIndex(position_);\n-1099 }\n-1100\n-1101 private:\n-1102 NonConstCW containerWrapper_;\n-1103 size_t position_;\n-1104 };\n-1105\n-1106 template \n-_\b1_\b1_\b0_\b7 struct _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bA_\bs_\bs_\bi_\bg_\bn_\be_\br<_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx, _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx> {\n-_\b1_\b1_\b0_\b8 static void _\ba_\bp_\bp_\bl_\by(_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx& denseMatrix,\n-1109 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bf_\bi_\be_\bl_\bd_\b,_\b _\bN_\b> const& rhs) {\n-1110 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(denseMatrix._\bM() == N);\n-1111 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(denseMatrix._\bN() == N);\n-1112 denseMatrix = field(0);\n-1113 for (int i = 0; i < N; ++i)\n-1114 denseMatrix[i][i] = rhs._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl()[i];\n-1115 }\n-1116 };\n-1117 /* @} */\n-1118} // end namespace\n-1119#endif\n-_\bf_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\n-Implements a matrix constructed from a given type representing a field and\n-compile-time given number ...\n-_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\n-Macro for wrapping boundary checks.\n-_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\n-Implements a matrix constructed from a given type representing a field and a\n-compile-time given numbe...\n-_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Traits for type conversions and type information.\n+751 for (typename _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i0) ? \" \" : \"\") << v[i];\n+753 return s;\n+754 }\n+755\n+758} // end namespace\n+759\n+760#endif // DUNE_DENSEVECTOR_HH\n+_\bm_\ba_\bt_\bv_\be_\bc_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Documentation of the traits classes you need to write for each implementation\n+of DenseVector or Dense...\n _\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh\n Implements a generic iterator class for writing stl conformant iterators.\n-_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh\n-Implements a vector constructed from a given type representing a field and a\n-compile-time given size.\n-_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n-A few common exception classes.\n+_\bd_\bo_\bt_\bp_\br_\bo_\bd_\bu_\bc_\bt_\b._\bh_\bh\n+Provides the functions dot(a,b) := and dotT(a,b) := .\n+_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Type traits to determine the type of reals (when working with complex numbers)\n+_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Compute type of the result of an arithmetic operation involving two different\n+number types.\n+_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\n+Macro for wrapping boundary checks.\n _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS\n #define DUNE_ASSERT_BOUNDS(cond)\n If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do\n nothing.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundschecking.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n-ConstIterator beforeBegin() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-DiagonalMatrix< K, n > transposed() const\n-Return transposed of the matrix as DiagonalMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:136\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bm_\bh_\bv\n-void mmhv(const X &x, Y &y) const\n-y -= A^H x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:357\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b=\n-DiagonalMatrix & operator*=(const K &k)\n-vector space multiplication with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-FieldTraits< K >::field_type field_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:563\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for the index access and size operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bd_\bi_\bm\n-size_type dim() const\n-dimension of the vector space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:800\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bR_\bo_\bw_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ConstIterator ConstRowIterator\n-rename the iterators for easier access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:183\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-row_type row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-K & operator[](size_type i)\n-random access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:879\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-ContainerWrapperIterator & operator=(OtherContainerWrapperIteratorType &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1037\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-static constexpr int rows\n-The number of rows.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bM\n-static constexpr size_type M()\n-number of blocks in column direction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:488\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-FieldVector< K, n > & diagonal()\n-Get reference to diagonal vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:549\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bs_\bm_\bh_\bv\n-void usmhv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y\n-&y) const\n-y += alpha A^H x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:395\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator iterator\n-typedef for stl compliant access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:888\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1067\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl\n-static constexpr int blocklevel\n-The number of block levels we contain. This is the leaf, that is, 1.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-DiagonalRowVectorConst< K, n > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:957\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-T * operator->() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1046\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr int size\n-The size of this vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:724\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-K * pointer(size_type i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:824\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-K field_type\n-export the type representing the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:712\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-DiagonalRowVector< K, n > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:963\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n-ConstIterator beforeEnd() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:773\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bC_\bo_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-const_row_type::ConstIterator ConstColIterator\n-rename the iterators for easier access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:185\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(size_type i, size_type j) const\n-return true when (i,j) is in pattern\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:498\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator< const WrapperType, const_reference, const_reference >\n-ConstIterator\n-Iterator class for sequential access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const_row_type const_row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:78\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr size_type size()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\br_\bo_\bw_\b_\n-size_type row_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:836\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator(CW containerWrapper, int position)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1015\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br\n-DiagonalRowVector(K *p, int col)\n-Constructor making vector with identical coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:865\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-K & diagonal(size_type i)\n-Get reference to diagonal entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:537\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\bo_\bl_\bv_\be\n-void solve(V &x, const V &b) const\n-Solve system A x = b.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:438\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bN\n-static constexpr size_type N()\n-number of blocks in row direction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:482\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n-Iterator beforeBegin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:911\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator(OtherContainerWrapperIteratorType &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1021\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const_reference operator[](size_type i) const\n-Return const_reference object as row replacement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:525\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator iterator\n-typedef for stl compliant access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-ConstIterator begin() const\n-begin ConstIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:760\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-ConstIterator const_iterator\n-typedef for stl compliant access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:919\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl\n-bool identical(const DiagonalRowVectorConst< K, n > &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:749\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=\n-DiagonalMatrix & operator-=(const DiagonalMatrix &y)\n-vector space subtraction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt\n-DiagonalRowVectorConst(K *p, int col)\n-Constructor making vector with identical coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:733\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bm_\bt_\bv\n-void mmtv(const X &x, Y &y) const\n-y -= A^T x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:345\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl\n-static constexpr int blocklevel\n-The number of block levels we contain.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:721\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-row_type * pointer(int i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:676\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-DiagonalMatrix(const K &k)\n-Constructor initializing the whole matrix with a scalar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:98\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator< DiagonalRowVector< K, n >, K, K & > Iterator\n-Iterator class for sequential access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:886\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt\n-R elementAt(int i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1079\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo\n-std::ptrdiff_t distanceTo(OtherContainerWrapperIteratorType &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1090\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n-Iterator beforeEnd()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:904\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bm_\bt_\bv\n-void umtv(const X &x, Y &y) const\n-y += A^T x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:309\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-ConstIterator const_iterator\n-typedef for stl compliant access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:757\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl\n-double infinity_norm_real() const\n-simplified infinity norm (uses Manhattan norm for complex values)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:427\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br\n-DiagonalMatrixWrapper(const DiagonalMatrixType *mat)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:667\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bm_\bv\n-void umv(const X &x, Y &y) const\n-y += A x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:297\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator< const WrapperType, reference, reference > Iterator\n-Iterator class for sequential access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:143\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-DiagonalRowVector< K, n > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:969\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bv\n-void mv(const X &x, Y &y) const\n-y = A x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:278\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\b__\bn_\bo_\br_\bm\n-double frobenius_norm() const\n-frobenius norm: sqrt(sum over squared values of entries)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:409\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\be_\bn_\bd\n-ConstIterator end() const\n-end iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-static constexpr int cols\n-The number of columns.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-static constexpr int dimension\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:705\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bp_\b_\n-K * p_\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:835\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\br_\bo_\bw_\bI_\bn_\bd_\be_\bx\n-size_type rowIndex() const\n-index of this row in surrounding matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:806\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R dereference() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1062\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-DiagonalRowVector & operator=(const K &k)\n-Assignment operator for scalar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:870\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const DiagonalMatrix &other) const\n-incomparison operator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:268\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-value_type field_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bv_\ba_\bn_\bc_\be\n-void advance(int n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1084\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-ConstIterator begin() const\n-begin iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:188\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-Iterator begin()\n-begin iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:891\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bm_\bv\n-void mmv(const X &x, Y &y) const\n-y -= A x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:333\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b=\n-DiagonalMatrix & operator/=(const K &k)\n-vector space division by scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:253\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-ConstIterator const_iterator\n-typedef for stl compliant access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const_row_type const_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:77\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl\n-bool identical(const DiagonalMatrix< K, n > &other) const\n-Check if matrix is the same object as the other matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-friend auto operator*(const DiagonalMatrix &matrixA, const DiagonalMatrix<\n-OtherScalar, n > &matrixB)\n-Matrix-matrix multiplication.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:468\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\br_\be_\ba_\bl_\bI_\bn_\bd_\be_\bx\n-size_type realIndex(int i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:671\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\be_\bn_\bd\n-Iterator end()\n-end iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const K & operator[](size_type i) const\n-same for read only access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:741\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br\n-DiagonalRowVector()\n-Constructor making uninitialized vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:861\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-row_type reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n-DiagonalRowVectorConst * operator&()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:829\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const DiagonalRowVectorConst &y) const\n-Binary vector comparison.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:786\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\b__\bn_\bo_\br_\bm_\b2\n-double frobenius_norm2() const\n-square of frobenius norm, need for block recursion\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:415\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-constexpr DiagonalMatrix()=default\n-Default constructor.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bt_\bv\n-void mtv(const X &x, Y &y) const\n-y = A^T x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:290\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator< DiagonalRowVectorConst< K, n >, const K, const K & >\n-ConstIterator\n-ConstIterator class for sequential access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:917\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bi_\bd_\be_\bn_\bt_\bi_\bc_\ba_\bl\n-bool identical(const DiagonalMatrixWrapper &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:682\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bs_\bm_\bt_\bv\n-void usmtv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y\n-&y) const\n-y += alpha A^T x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:382\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt\n-void decrement()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1073\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-std::ptrdiff_t index() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1096\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-const FieldVector< K, n > & diagonal() const\n-Get const reference to diagonal vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:543\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt\n-void invert()\n-Compute inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:445\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n-DiagonalRowVector * operator&()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:935\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-const K & diagonal(size_type i) const\n-Get const reference to diagonal entry.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:531\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bN\n-size_type N() const\n-number of blocks in the vector (are of size 1 here)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:794\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-DiagonalMatrix(std::initializer_list< K > const &l)\n-Construct diagonal matrix from an initializer list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:115\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bC_\bo_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-row_type::Iterator ColIterator\n-rename the iterators for easier access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-K field_type\n-export the type representing the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:852\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-reference operator[](size_type i)\n-Return reference object as row replacement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:519\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-DiagonalRowVectorConst< K, n > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:951\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n-Iterator end()\n-end iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:897\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-DiagonalMatrix(const FieldVector< K, n > &diag)\n-Constructor initializing the diagonal with a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for the index access and size operation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:858\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bs_\bm_\bv\n-void usmv(const typename FieldTraits< Y >::field_type &alpha, const X &x, Y &y)\n-const\n-y += alpha A x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:369\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm\n-double infinity_norm() const\n-infinity norm (row sum norm, how to generalize for blocks?)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:421\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-DiagonalMatrix & operator+=(const DiagonalMatrix &y)\n-vector space addition\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:218\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be\n-K block_type\n-export the type representing the components\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bm_\bh_\bv\n-void umhv(const X &x, Y &y) const\n-y += A^H x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n-Iterator beforeBegin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bA_\bs_\bs_\bi_\bg_\bn_\be_\br_\b<_\b _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b,_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bf_\bi_\be_\bl_\bd_\b,_\b _\bN_\b _\b>_\b _\b>_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-static void apply(DenseMatrix &denseMatrix, DiagonalMatrix< field, N > const\n-&rhs)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator(const MyType &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1026\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\be_\bn_\bd\n-ConstIterator end() const\n-end ConstIterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:766\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The type used for the index access and size operation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:718\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-DiagonalMatrix & operator=(const K &k)\n-Assignment from a scalar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:123\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt\n-DiagonalRowVectorConst()\n-Constructor making uninitialized vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:727\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n-Iterator beforeEnd()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\br_\be_\ba_\bl_\bI_\bn_\bd_\be_\bx\n-size_type realIndex(int i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:819\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &s, const DiagonalMatrix< K, n >\n-&a)\n-Sends the matrix to an output stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:508\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-K value_type\n-export the type representing the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be\n-K block_type\n-export the type representing the components\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:715\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt\n-K determinant() const\n-calculates the determinant of this matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:453\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n-FieldTraits< K >::real_type real_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:564\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n-ConstIterator beforeBegin() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:780\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br\n-DiagonalMatrixWrapper()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:663\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator< DiagonalRowVectorConst< K, n >, const K, const K & >\n-ConstIterator\n-ConstIterator class for sequential access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:755\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-Iterator begin()\n-begin iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:152\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const DiagonalMatrix &other) const\n-comparison operator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:262\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\bt_\by_\bp_\be\n-DiagonalRowVectorConst< K, n > const_row_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be\n-DiagonalRowVector< K, n > row_type\n-Each row is implemented by a field vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const MyType &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1052\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bR_\bo_\bw_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator RowIterator\n-rename the iterators for easier access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be\n-K block_type\n-export the type representing the components\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:855\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n-ConstIterator beforeEnd() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:201\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-const K & diagonal() const\n-the diagonal value\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:812\n-_\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW\n-#define DUNE_THROW(E, m)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:218\n+_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt\n+auto dot(const A &a, const B &b) -> typename std::enable_if< IsNumber< A >::\n+value &&!IsVector< A >::value &&!std::is_same< typename FieldTraits< A >::\n+field_type, typename FieldTraits< A >::real_type > ::value, decltype(conj(a)\n+*b)>::type\n+computes the dot product for fundamental data types according to Petsc's\n+VectDot function: dot(a,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dotproduct.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:278\n+_\bs_\bt_\bd\n+STL namespace.\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bC_\bo_\bm_\bp_\bl_\be_\bx\n-K conjugateComplex(const K &x)\n-compute conjugate complex of x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn math.hh:164\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx\n-A dense n x m matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bM\n-constexpr size_type M() const\n-number of columns\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:703\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bN\n-constexpr size_type N() const\n-number of rows\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:697\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-A dense n x m matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n-vector space out of a tensor product of fields.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:91\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bA_\bs_\bs_\bi_\bg_\bn_\be_\br\n-you have to specialize this structure for any type that should be assignable to\n-a DenseMatrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bE_\br_\br_\bo_\br\n-Error thrown if operations of a FieldMatrix fail.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:126\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br\n+Interface for a class of dense vectors over a given field.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:229\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+Traits::value_type value_type\n+export the type representing the field\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:250\n _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bw_\bo_\b__\bn_\bo_\br_\bm_\b2\n FieldTraits< value_type >::real_type two_norm2() const\n square of two norm (sum over squared values of entries), need for block\n recursion\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:650\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+ConstIterator const_iterator\n+typedef for stl compliant access\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:381\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Iterator iterator\n+typedef for stl compliant access\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:344\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bn_\bd\n+ConstIterator find(size_type i) const\n+return iterator to given element or end()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:410\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n+ConstIterator end() const\n+end ConstIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:390\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+value_type & front()\n+return reference to first element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:306\n _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bw_\bo_\b__\bn_\bo_\br_\bm\n FieldTraits< value_type >::real_type two_norm() const\n two norm sqrt(sum over squared values of entries)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:641\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n+ConstIterator beforeBegin() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:404\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const DenseVector< Other > &x) const\n+Binary vector comparison.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:555\n _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n Iterator begin()\n begin iterator\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:347\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bB_\be_\bg_\bi_\bn\n+Iterator beforeBegin()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:367\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+DenseIterator< const DenseVector, const value_type > ConstIterator\n+ConstIterator class for sequential access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:379\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+Traits::derived_type derived_type\n+type of derived vector class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:247\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+const value_type & front() const\n+return reference to first element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:312\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+derived_type operator+(const DenseVector< Other > &b) const\n+Binary vector addition.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:439\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+size method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_type dim() const\n+dimension of the vector space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:733\n _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm\n FieldTraits< vt >::real_type infinity_norm() const\n infinity norm (maximum of absolute values of entries)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:661\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n+ConstIterator beforeEnd() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:397\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bx_\bp_\by\n+derived_type & axpy(const field_type &a, const DenseVector< Other > &x)\n+vector space axpy operation ( *this += a x )\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:575\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+derived_type & operator=(const value_type &k)\n+Assignment operator for scalar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:266\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl\n+static constexpr int blocklevel\n+The number of block levels we contain. This is the leaf, that is, 1.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:262\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n+Iterator end()\n+end iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:353\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+Traits::size_type size_type\n+The type used for the index access and size operation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:259\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+DenseIterator< DenseVector, value_type > Iterator\n+Iterator class for sequential access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:342\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=\n+derived_type & operator-=(const DenseVector< Other > &x)\n+vector space subtraction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:429\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br\n+DenseVector(const DenseVector &)=default\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bf_\bo_\br_\be_\bE_\bn_\bd\n+Iterator beforeEnd()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:360\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+derived_type & operator+=(const DenseVector< Other > &x)\n+vector space addition\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:419\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b=\n+std::enable_if< std::is_convertible< FieldType, field_type >::value,\n+derived_type >::type & operator*=(const FieldType &kk)\n+vector space multiplication with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:523\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+bool operator!=(const DenseVector< Other > &x) const\n+Binary vector incomparison.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:567\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n+const value_type & back() const\n+return reference to last element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:324\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+ConstIterator begin() const\n+begin ConstIterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:384\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+PromotionTraits< field_type, typenameDenseVector< Other >::field_type >::\n+PromotedType operator*(const DenseVector< Other > &x) const\n+indefinite vector dot product which corresponds to Petsc's VecTDot\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:591\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br\n+constexpr DenseVector()=default\n _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bi_\bn_\bi_\bt_\by_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl\n FieldTraits< vt >::real_type infinity_norm_real() const\n simplified infinity norm (uses Manhattan norm for complex values)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:677\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:698\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\bo_\bw_\bV_\be_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:841\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bW_\br_\ba_\bp_\bp_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:650\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator class for sparse vector-like containers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:998\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-ContainerWrapperIterator(const MyConstType &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1031\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bW_\br_\ba_\bp_\bp_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const MyConstType &other) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:1057\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-A diagonal matrix of static size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn diagonalmatrix.hh:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+DenseVector & operator=(const DenseVector &)=default\n+Assignment operator for other DenseVector of same type.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b__\bt_\by_\bp_\be\n+Traits::value_type block_type\n+export the type representing the components\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:256\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+value_type & operator[](size_type i)\n+random access\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:295\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n+FieldTraits< value_type >::field_type field_type\n+export the type representing the field\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:253\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n+value_type & back()\n+return reference to last element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:318\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+derived_type operator-() const\n+Vector negation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:454\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b=\n+std::enable_if< std::is_convertible< FieldType, field_type >::value,\n+derived_type >::type & operator/=(const FieldType &kk)\n+vector space division by scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:545\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bn_\be_\b__\bn_\bo_\br_\bm_\b__\br_\be_\ba_\bl\n+FieldTraits< value_type >::real_type one_norm_real() const\n+simplified one norm (uses Manhattan norm for complex values)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:632\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bo_\bt\n+PromotionTraits< field_type, typenameDenseVector< Other >::field_type >::\n+PromotedType dot(const DenseVector< Other > &x) const\n+vector dot product which corresponds to Petsc's VecDot\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:609\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bn_\bd\n+Iterator find(size_type i)\n+return iterator to given element or end()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:373\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bn_\be_\b__\bn_\bo_\br_\bm\n+FieldTraits< value_type >::real_type one_norm() const\n+one norm (sum over absolute values of entries)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:622\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bN\n+size_type N() const\n+number of blocks in the vector (are of size 1 here)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:727\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+checks whether the container is empty\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:330\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bV_\b _\b>_\b _\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n+FieldTraits< typenameDenseMatVecTraits< V >::value_type >::real_type real_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:28\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bV_\b _\b>_\b _\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n+FieldTraits< typenameDenseMatVecTraits< V >::value_type >::field_type\n+field_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:27\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+Generic iterator class for dense vector and matrix implementations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:131\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n+void increment()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:182\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+SizeType index() const\n+return index\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:213\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const MutableIterator &other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:167\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+DenseIterator(const MutableIterator &other)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const ConstIterator &other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:173\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bA_\bt\n+R elementAt(DifferenceType i) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo\n+DifferenceType distanceTo(DenseIterator< const typename std::remove_const< C\n+>::type, const typename std::remove_const< T >::type > other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:200\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\br_\be_\bm_\be_\bn_\bt\n+void decrement()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:187\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+DenseIterator(const ConstIterator &other)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bo\n+DifferenceType distanceTo(DenseIterator< typename std::remove_const< C >::type,\n+typename std::remove_const< T >::type > other) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:206\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+DenseIterator(C &cont, SizeType pos)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:154\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be\n+std::ptrdiff_t DifferenceType\n+The type of the difference between two positions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+R dereference() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:178\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bv_\ba_\bn_\bc_\be\n+void advance(DifferenceType n)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bi_\bz_\be_\bT_\by_\bp_\be\n+C::size_type SizeType\n+The type to index the underlying container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:147\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:26\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n T field_type\n export the type representing the field\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:28\n _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n T real_type\n export the type representing the real type of the field\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Get the 'const' version of a reference to a mutable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:87\n _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n get the 'mutable' version of a reference to a const object\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Facade class for stl conformant bidirectional iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:275\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n+Base class for stl conformant forward iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:435\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn matvectraits.hh:31\n+_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Compute type of the result of an arithmetic operation involving two different\n+number types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn promotiontraits.hh:27\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00011.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00011.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: float_cmp.cc File Reference\n+dune-common: vc.hh File Reference\n \n \n \n \n \n \n \n@@ -69,121 +69,25 @@\n \n
    \n \n
    \n
    \n
    \n- \n-
    float_cmp.cc File Reference
    \n+
    vc.hh File Reference
    \n
    \n
    \n-
    #include "float_cmp.hh"
    \n-#include <vector>
    \n-#include <limits>
    \n-#include <algorithm>
    \n-#include <cstdlib>
    \n-#include <dune/common/fvector.hh>
    \n-
    \n+\n+

    Compatibility header for including <Vc/Vc> \n+More...

    \n+\n

    Go to the source code of this file.

    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    struct  Dune::FloatCmp::EpsilonType< T >
     Mapping of value type to epsilon type. More...
     
    struct  Dune::FloatCmp::EpsilonType< std::vector< T, A > >
     Specialization of EpsilonType for std::vector. More...
     
    struct  Dune::FloatCmp::EpsilonType< FieldVector< T, n > >
     Specialization of EpsilonType for Dune::FieldVector. More...
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, relativeWeak >
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, relativeStrong >
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, absolute >
     
    \n-\n-\n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::FloatCmp
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Functions

    template<class T , CmpStyle style>
    bool Dune::FloatCmp::eq (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for equality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ne (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for inequality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::gt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::lt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ge (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater or equal second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::le (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser or equal second
     
    template<class T >
    bool Dune::FloatCmp::eq (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::ne (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::gt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::lt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::ge (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::le (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     round using epsilon
     
    template<class I , class T , CmpStyle cstyle>
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     
    template<class I , class T >
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     truncate using epsilon
     
    template<class I , class T , CmpStyle cstyle>
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     
    template<class I , class T >
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    \n-
    \n+

    Detailed Description

    \n+

    Compatibility header for including <Vc/Vc>

    \n+

    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.

    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,126 +1,15 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-float_cmp.cc File Reference\n-#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\"\n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+vc.hh File Reference\n+Compatibility header for including _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Mapping of value type to epsilon type. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>_\b _\b>\n-\u00a0 Specialization of _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be for std::vector. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bn_\b _\b>_\b _\b>\n-\u00a0 Specialization of _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be for _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b _\b>\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0 _\bD_\bu_\bn_\be namespace.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test for equality using epsilon\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test for inequality using epsilon\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test if first greater than second\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test if first lesser than second\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test if first greater or equal second\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n-\u00a0 test if first lesser or equal second\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be (const T &first, const T &second, typename\n- _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n- value())\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n-\u00a0 round using epsilon\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::value())\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n-\u00a0 truncate using epsilon\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n-\u00a0\n-template\n- I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n- epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::value())\n-\u00a0\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Compatibility header for including \n+Certain versions (1.3.2) of Vc (_\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\bg_\bi_\bt_\bh_\bu_\bb_\b._\bc_\bo_\bm_\b/_\bV_\bc_\bD_\be_\bv_\be_\bl_\b/_\bV_\bc) have a problem\n+with certain compiler versions (g++ 7.2.0) in c++17 mode, see #88.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: float_cmp.cc Source File\n+dune-common: vc.hh Source File\n \n \n \n \n \n \n \n@@ -74,628 +74,38 @@\n \n
    \n \n
    \n
    \n
    \n-
    float_cmp.cc
    \n+
    vc.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n-
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n-
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#include "float_cmp.hh"
    \n-
    6
    \n-
    7#include <vector>
    \n-
    8#include <limits>
    \n-
    9#include <algorithm>
    \n-
    10#include <cstdlib>
    \n-\n-
    12
    \n-
    13namespace Dune {
    \n-
    14
    \n-
    15
    \n-
    \n-
    16 namespace FloatCmp {
    \n-
    17 // traits
    \n+Go to the documentation of this file.
    1// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n+
    2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n+
    3#ifndef DUNE_COMMON_VC_HH
    \n+
    4#define DUNE_COMMON_VC_HH
    \n+
    5
    \n+
    15#if HAVE_VC
    \n+
    16
    \n+
    17// include Vc's macro definitions
    \n+
    18#include <Vc/global.h>
    \n
    19
    \n-
    \n-
    23 template<class T> struct EpsilonType {
    \n-
    25 typedef T Type;
    \n-
    26 };
    \n-
    \n-
    28
    \n-
    33 template<class T, typename A>
    \n-
    \n-
    34 struct EpsilonType<std::vector<T, A> > {
    \n-
    36 typedef typename EpsilonType<T>::Type Type;
    \n-
    37 };
    \n-
    \n-
    39
    \n-
    44 template<class T, int n>
    \n-
    \n-
    45 struct EpsilonType<FieldVector<T, n> > {
    \n-
    47 typedef typename EpsilonType<T>::Type Type;
    \n-
    48 };
    \n-
    \n-
    49
    \n-
    50 // default epsilon
    \n-
    51 template<class T>
    \n-
    \n-\n-
    \n-
    53 static typename EpsilonType<T>::Type value()
    \n-
    54 { return std::numeric_limits<typename EpsilonType<T>::Type>::epsilon()*8.; }
    \n-
    \n-
    55 };
    \n-
    \n-
    56 template<class T>
    \n-
    \n-\n-
    \n-
    58 static typename EpsilonType<T>::Type value()
    \n-
    59 { return std::numeric_limits<typename EpsilonType<T>::Type>::epsilon()*8.; }
    \n-
    \n-
    60 };
    \n-
    \n-
    61 template<class T>
    \n-
    \n-\n-
    \n-
    63 static typename EpsilonType<T>::Type value()
    \n-
    64 { return std::max(std::numeric_limits<typename EpsilonType<T>::Type>::epsilon(), 1e-6); }
    \n-
    \n-
    65 };
    \n-
    \n-
    66
    \n-
    67 namespace Impl {
    \n-
    68 // basic comparison
    \n-
    69 template<class T, CmpStyle style = defaultCmpStyle>
    \n-
    70 struct eq_t;
    \n-
    71 template<class T>
    \n-
    72 struct eq_t<T, relativeWeak> {
    \n-
    73 static bool eq(const T &first,
    \n-
    74 const T &second,
    \n-\n-
    76 {
    \n-
    77 using std::abs;
    \n-
    78 return abs(first - second) <= epsilon*std::max(abs(first), abs(second));
    \n-
    79 }
    \n-
    80 };
    \n-
    81 template<class T>
    \n-
    82 struct eq_t<T, relativeStrong> {
    \n-
    83 static bool eq(const T &first,
    \n-
    84 const T &second,
    \n-\n-
    86 {
    \n-
    87 using std::abs;
    \n-
    88 return abs(first - second) <= epsilon*std::min(abs(first), abs(second));
    \n-
    89 }
    \n-
    90 };
    \n-
    91 template<class T>
    \n-
    92 struct eq_t<T, absolute> {
    \n-
    93 static bool eq(const T &first,
    \n-
    94 const T &second,
    \n-\n-
    96 {
    \n-
    97 using std::abs;
    \n-
    98 return abs(first-second) <= epsilon;
    \n-
    99 }
    \n-
    100 };
    \n-
    101 template<class T, CmpStyle cstyle>
    \n-
    102 struct eq_t_std_vec {
    \n-
    103 typedef std::vector<T> V;
    \n-
    104 static bool eq(const V &first,
    \n-
    105 const V &second,
    \n-
    106 typename EpsilonType<V>::Type epsilon = DefaultEpsilon<V>::value()) {
    \n-
    107 auto size = first.size();
    \n-
    108 if(size != second.size()) return false;
    \n-
    109 for(unsigned int i = 0; i < size; ++i)
    \n-
    110 if(!eq_t<T, cstyle>::eq(first[i], second[i], epsilon))
    \n-
    111 return false;
    \n-
    112 return true;
    \n-
    113 }
    \n-
    114 };
    \n-
    115 template< class T>
    \n-
    116 struct eq_t<std::vector<T>, relativeWeak> : eq_t_std_vec<T, relativeWeak> {};
    \n-
    117 template< class T>
    \n-
    118 struct eq_t<std::vector<T>, relativeStrong> : eq_t_std_vec<T, relativeStrong> {};
    \n-
    119 template< class T>
    \n-
    120 struct eq_t<std::vector<T>, absolute> : eq_t_std_vec<T, absolute> {};
    \n-
    121
    \n-
    122 template<class T, int n, CmpStyle cstyle>
    \n-
    123 struct eq_t_fvec {
    \n-
    124 typedef Dune::FieldVector<T, n> V;
    \n-
    125 static bool eq(const V &first,
    \n-
    126 const V &second,
    \n-
    127 typename EpsilonType<V>::Type epsilon = DefaultEpsilon<V>::value()) {
    \n-
    128 for(int i = 0; i < n; ++i)
    \n-
    129 if(!eq_t<T, cstyle>::eq(first[i], second[i], epsilon))
    \n-
    130 return false;
    \n-
    131 return true;
    \n-
    132 }
    \n-
    133 };
    \n-
    134 template< class T, int n >
    \n-
    135 struct eq_t< Dune::FieldVector<T, n>, relativeWeak> : eq_t_fvec<T, n, relativeWeak> {};
    \n-
    136 template< class T, int n >
    \n-
    137 struct eq_t< Dune::FieldVector<T, n>, relativeStrong> : eq_t_fvec<T, n, relativeStrong> {};
    \n-
    138 template< class T, int n >
    \n-
    139 struct eq_t< Dune::FieldVector<T, n>, absolute> : eq_t_fvec<T, n, absolute> {};
    \n-
    140 } // namespace Impl
    \n-
    141
    \n-
    142 // operations in functional style
    \n-
    143 template <class T, CmpStyle style>
    \n-
    \n-
    144 bool eq(const T &first,
    \n-
    145 const T &second,
    \n-
    146 typename EpsilonType<T>::Type epsilon)
    \n-
    147 {
    \n-
    148 return Impl::eq_t<T, style>::eq(first, second, epsilon);
    \n-
    149 }
    \n-
    \n-
    150 template <class T, CmpStyle style>
    \n-
    \n-
    151 bool ne(const T &first,
    \n-
    152 const T &second,
    \n-
    153 typename EpsilonType<T>::Type epsilon)
    \n-
    154 {
    \n-
    155 return !eq<T, style>(first, second, epsilon);
    \n-
    156 }
    \n-
    \n-
    157 template <class T, CmpStyle style>
    \n-
    \n-
    158 bool gt(const T &first,
    \n-
    159 const T &second,
    \n-
    160 typename EpsilonType<T>::Type epsilon)
    \n-
    161 {
    \n-
    162 return first > second && ne<T, style>(first, second, epsilon);
    \n-
    163 }
    \n-
    \n-
    164 template <class T, CmpStyle style>
    \n-
    \n-
    165 bool lt(const T &first,
    \n-
    166 const T &second,
    \n-
    167 typename EpsilonType<T>::Type epsilon)
    \n-
    168 {
    \n-
    169 return first < second && ne<T, style>(first, second, epsilon);
    \n-
    170 }
    \n-
    \n-
    171 template <class T, CmpStyle style>
    \n-
    \n-
    172 bool ge(const T &first,
    \n-
    173 const T &second,
    \n-
    174 typename EpsilonType<T>::Type epsilon)
    \n-
    175 {
    \n-
    176 return first > second || eq<T, style>(first, second, epsilon);
    \n-
    177 }
    \n-
    \n-
    178 template <class T, CmpStyle style>
    \n-
    \n-
    179 bool le(const T &first,
    \n-
    180 const T &second,
    \n-
    181 typename EpsilonType<T>::Type epsilon)
    \n-
    182 {
    \n-
    183 return first < second || eq<T, style>(first, second, epsilon);
    \n-
    184 }
    \n-
    \n-
    185
    \n-
    186 // default template arguments
    \n-
    187 template <class T>
    \n-
    \n-
    188 bool eq(const T &first,
    \n-
    189 const T &second,
    \n-\n-
    191 {
    \n-
    192 return eq<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    193 }
    \n-
    \n-
    194 template <class T>
    \n-
    \n-
    195 bool ne(const T &first,
    \n-
    196 const T &second,
    \n-\n-
    198 {
    \n-
    199 return ne<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    200 }
    \n-
    \n-
    201 template <class T>
    \n-
    \n-
    202 bool gt(const T &first,
    \n-
    203 const T &second,
    \n-\n-
    205 {
    \n-
    206 return gt<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    207 }
    \n-
    \n-
    208 template <class T>
    \n-
    \n-
    209 bool lt(const T &first,
    \n-
    210 const T &second,
    \n-\n-
    212 {
    \n-
    213 return lt<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    214 }
    \n-
    \n-
    215 template <class T>
    \n-
    \n-
    216 bool ge(const T &first,
    \n-
    217 const T &second,
    \n-\n-
    219 {
    \n-
    220 return ge<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    221 }
    \n-
    \n-
    222 template <class T>
    \n-
    \n-
    223 bool le(const T &first,
    \n-
    224 const T &second,
    \n-\n-
    226 {
    \n-
    227 return le<T, defaultCmpStyle>(first, second, epsilon);
    \n-
    228 }
    \n-
    \n-
    229
    \n-
    230 // rounding operations
    \n-
    231 namespace Impl {
    \n-
    232 template<class I, class T, CmpStyle cstyle = defaultCmpStyle, RoundingStyle rstyle = defaultRoundingStyle>
    \n-
    233 struct round_t;
    \n-
    234 template<class I, class T, CmpStyle cstyle>
    \n-
    235 struct round_t<I, T, cstyle, downward> {
    \n-
    236 static I
    \n-
    237 round(const T &val,
    \n-\n-
    239 // first get an approximation
    \n-
    240 I lower = I(val);
    \n-
    241 I upper;
    \n-
    242 if(eq<T, cstyle>(T(lower), val, epsilon)) return lower;
    \n-
    243 if(T(lower) > val) { upper = lower; lower--; }
    \n-
    244 else upper = lower+1;
    \n-
    245 if(le<T, cstyle>(val - T(lower), T(upper) - val, epsilon))
    \n-
    246 return lower;
    \n-
    247 else return upper;
    \n-
    248 }
    \n-
    249 };
    \n-
    250 template<class I, class T, CmpStyle cstyle>
    \n-
    251 struct round_t<I, T, cstyle, upward> {
    \n-
    252 static I
    \n-
    253 round(const T &val,
    \n-\n-
    255 // first get an approximation
    \n-
    256 I lower = I(val);
    \n-
    257 I upper;
    \n-
    258 if(eq<T, cstyle>(T(lower), val, epsilon)) return lower;
    \n-
    259 if(T(lower) > val) { upper = lower; lower--; }
    \n-
    260 else upper = lower+1;
    \n-
    261 if(lt<T, cstyle>(val - T(lower), T(upper) - val, epsilon))
    \n-
    262 return lower;
    \n-
    263 else return upper;
    \n-
    264 }
    \n-
    265 };
    \n-
    266 template<class I, class T, CmpStyle cstyle>
    \n-
    267 struct round_t<I, T, cstyle, towardZero> {
    \n-
    268 static I
    \n-
    269 round(const T &val,
    \n-\n-
    271 if(val > T(0))
    \n-
    272 return round_t<I, T, cstyle, downward>::round(val, epsilon);
    \n-
    273 else return round_t<I, T, cstyle, upward>::round(val, epsilon);
    \n-
    274 }
    \n-
    275 };
    \n-
    276 template<class I, class T, CmpStyle cstyle>
    \n-
    277 struct round_t<I, T, cstyle, towardInf> {
    \n-
    278 static I
    \n-
    279 round(const T &val,
    \n-\n-
    281 if(val > T(0))
    \n-
    282 return round_t<I, T, cstyle, upward>::round(val, epsilon);
    \n-
    283 else return round_t<I, T, cstyle, downward>::round(val, epsilon);
    \n-
    284 }
    \n-
    285 };
    \n-
    286 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    287 struct round_t<std::vector<I>, std::vector<T>, cstyle, rstyle> {
    \n-
    288 static std::vector<I>
    \n-
    289 round(const T &val,
    \n-\n-
    291 unsigned int size = val.size();
    \n-
    292 std::vector<I> res(size);
    \n-
    293 for(unsigned int i = 0; i < size; ++i)
    \n-
    294 res[i] = round_t<I, T, cstyle, rstyle>::round(val[i], epsilon);
    \n-
    295 return res;
    \n-
    296 }
    \n-
    297 };
    \n-
    298 template<class I, class T, int n, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    299 struct round_t<Dune::FieldVector<I, n>, Dune::FieldVector<T, n>, cstyle, rstyle> {
    \n-\n-
    301 round(const T &val,
    \n-\n-\n-
    304 for(int i = 0; i < n; ++i)
    \n-
    305 res[i] = round_t<I, T, cstyle, rstyle>::round(val[i], epsilon);
    \n-
    306 return res;
    \n-
    307 }
    \n-
    308 };
    \n-
    309 } // end namespace Impl
    \n-
    310 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    \n-
    311 I round(const T &val, typename EpsilonType<T>::Type epsilon /*= DefaultEpsilon<T, cstyle>::value()*/)
    \n-
    312 {
    \n-
    313 return Impl::round_t<I, T, cstyle, rstyle>::round(val, epsilon);
    \n-
    314 }
    \n-
    \n-
    315 template<class I, class T, CmpStyle cstyle>
    \n-
    \n-
    316 I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value())
    \n-
    317 {
    \n-
    318 return round<I, T, cstyle, defaultRoundingStyle>(val, epsilon);
    \n-
    319 }
    \n-
    \n-
    320 template<class I, class T, RoundingStyle rstyle>
    \n-
    321 I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, defaultCmpStyle>::value())
    \n-
    322 {
    \n-
    323 return round<I, T, defaultCmpStyle, rstyle>(val, epsilon);
    \n-
    324 }
    \n-
    325 template<class I, class T>
    \n-
    \n-\n-
    327 {
    \n-
    328 return round<I, T, defaultCmpStyle>(val, epsilon);
    \n-
    329 }
    \n-
    \n-
    330
    \n-
    331 // truncation
    \n-
    332 namespace Impl {
    \n-
    333 template<class I, class T, CmpStyle cstyle = defaultCmpStyle, RoundingStyle rstyle = defaultRoundingStyle>
    \n-
    334 struct trunc_t;
    \n-
    335 template<class I, class T, CmpStyle cstyle>
    \n-
    336 struct trunc_t<I, T, cstyle, downward> {
    \n-
    337 static I
    \n-
    338 trunc(const T &val,
    \n-\n-
    340 // this should be optimized away unless needed
    \n-
    341 if(!std::numeric_limits<I>::is_signed)
    \n-
    342 // make sure this works for all useful cases even if I is an unsigned type
    \n-
    343 if(eq<T, cstyle>(val, T(0), epsilon)) return I(0);
    \n-
    344 // first get an approximation
    \n-
    345 I lower = I(val); // now |val-lower| < 1
    \n-
    346 // make sure we're really lower in case the cast truncated to an unexpected direction
    \n-
    347 if(T(lower) > val) lower--; // now val-lower < 1
    \n-
    348 // check whether lower + 1 is approximately val
    \n-
    349 if(eq<T, cstyle>(T(lower+1), val, epsilon))
    \n-
    350 return lower+1;
    \n-
    351 else return lower;
    \n-
    352 }
    \n-
    353 };
    \n-
    354 template<class I, class T, CmpStyle cstyle>
    \n-
    355 struct trunc_t<I, T, cstyle, upward> {
    \n-
    356 static I
    \n-
    357 trunc(const T &val,
    \n-\n-
    359 I upper = trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n-
    360 if(ne<T, cstyle>(T(upper), val, epsilon)) ++upper;
    \n-
    361 return upper;
    \n-
    362 }
    \n-
    363 };
    \n-
    364 template<class I, class T, CmpStyle cstyle>
    \n-
    365 struct trunc_t<I, T, cstyle, towardZero> {
    \n-
    366 static I
    \n-
    367 trunc(const T &val,
    \n-\n-
    369 if(val > T(0)) return trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n-
    370 else return trunc_t<I, T, cstyle, upward>::trunc(val, epsilon);
    \n-
    371 }
    \n-
    372 };
    \n-
    373 template<class I, class T, CmpStyle cstyle>
    \n-
    374 struct trunc_t<I, T, cstyle, towardInf> {
    \n-
    375 static I
    \n-
    376 trunc(const T &val,
    \n-\n-
    378 if(val > T(0)) return trunc_t<I, T, cstyle, upward>::trunc(val, epsilon);
    \n-
    379 else return trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n-
    380 }
    \n-
    381 };
    \n-
    382 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    383 struct trunc_t<std::vector<I>, std::vector<T>, cstyle, rstyle> {
    \n-
    384 static std::vector<I>
    \n-
    385 trunc(const std::vector<T> &val,
    \n-\n-
    387 unsigned int size = val.size();
    \n-
    388 std::vector<I> res(size);
    \n-
    389 for(unsigned int i = 0; i < size; ++i)
    \n-
    390 res[i] = trunc_t<I, T, cstyle, rstyle>::trunc(val[i], epsilon);
    \n-
    391 return res;
    \n-
    392 }
    \n-
    393 };
    \n-
    394 template<class I, class T, int n, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    395 struct trunc_t<Dune::FieldVector<I, n>, Dune::FieldVector<T, n>, cstyle, rstyle> {
    \n-\n-\n-\n-\n-
    400 for(int i = 0; i < n; ++i)
    \n-
    401 res[i] = trunc_t<I, T, cstyle, rstyle>::trunc(val[i], epsilon);
    \n-
    402 return res;
    \n-
    403 }
    \n-
    404 };
    \n-
    405 } // namespace Impl
    \n-
    406 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n-
    \n-
    407 I trunc(const T &val, typename EpsilonType<T>::Type epsilon /*= DefaultEpsilon<T, cstyle>::value()*/)
    \n-
    408 {
    \n-
    409 return Impl::trunc_t<I, T, cstyle, rstyle>::trunc(val, epsilon);
    \n-
    410 }
    \n-
    \n-
    411 template<class I, class T, CmpStyle cstyle>
    \n-
    \n-
    412 I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value())
    \n-
    413 {
    \n-
    414 return trunc<I, T, cstyle, defaultRoundingStyle>(val, epsilon);
    \n-
    415 }
    \n-
    \n-
    416 template<class I, class T, RoundingStyle rstyle>
    \n-
    417 I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, defaultCmpStyle>::value())
    \n-
    418 {
    \n-
    419 return trunc<I, T, defaultCmpStyle, rstyle>(val, epsilon);
    \n-
    420 }
    \n-
    421 template<class I, class T>
    \n-
    \n-\n-
    423 {
    \n-
    424 return trunc<I, T, defaultCmpStyle>(val, epsilon);
    \n-
    425 }
    \n-
    \n-
    426 } //namespace Dune
    \n-
    \n-
    427
    \n-
    428 // oo interface
    \n-
    429 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    431 FloatCmpOps(EpsilonType epsilon) : epsilon_(epsilon) {}
    \n-
    \n-
    432
    \n-
    433
    \n-
    434 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-\n-
    \n-\n-
    437 {
    \n-
    438 return epsilon_;
    \n-
    439 }
    \n-
    \n-
    440
    \n-
    441 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    442 void
    \n-
    \n-\n-
    444 {
    \n-
    445 epsilon_ = epsilon__;
    \n-
    446 }
    \n-
    \n-
    447
    \n-
    448
    \n-
    449 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    451 eq(const ValueType &first, const ValueType &second) const
    \n-
    452 {
    \n-
    453 return Dune::FloatCmp::eq<ValueType, cstyle>(first, second, epsilon_);
    \n-
    454 }
    \n-
    \n-
    455
    \n-
    456 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    458 ne(const ValueType &first, const ValueType &second) const
    \n-
    459 {
    \n-
    460 return Dune::FloatCmp::ne<ValueType, cstyle>(first, second, epsilon_);
    \n-
    461 }
    \n-
    \n-
    462
    \n-
    463 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    465 gt(const ValueType &first, const ValueType &second) const
    \n-
    466 {
    \n-
    467 return Dune::FloatCmp::gt<ValueType, cstyle>(first, second, epsilon_);
    \n-
    468 }
    \n-
    \n-
    469
    \n-
    470 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    472 lt(const ValueType &first, const ValueType &second) const
    \n-
    473 {
    \n-
    474 return Dune::FloatCmp::lt<ValueType, cstyle>(first, second, epsilon_);
    \n-
    475 }
    \n-
    \n-
    476
    \n-
    477 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    479 ge(const ValueType &first, const ValueType &second) const
    \n-
    480 {
    \n-
    481 return Dune::FloatCmp::ge<ValueType, cstyle>(first, second, epsilon_);
    \n-
    482 }
    \n-
    \n-
    483
    \n-
    484 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    \n-\n-
    486 le(const ValueType &first, const ValueType &second) const
    \n-
    487 {
    \n-
    488 return Dune::FloatCmp::le<ValueType, cstyle>(first, second, epsilon_);
    \n-
    489 }
    \n-
    \n-
    490
    \n-
    491
    \n-
    492 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    493 template<class I>
    \n-
    \n-\n-
    495 round(const ValueType &val) const
    \n-
    496 {
    \n-
    497 return Dune::FloatCmp::round<I, ValueType, cstyle, rstyle_>(val, epsilon_);
    \n-
    498 }
    \n-
    \n-
    499
    \n-
    500 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n-
    501 template<class I>
    \n-
    \n-\n-
    503 trunc(const ValueType &val) const
    \n-
    504 {
    \n-
    505 return Dune::FloatCmp::trunc<I, ValueType, cstyle, rstyle_>(val, epsilon_);
    \n-
    506 }
    \n-
    \n-
    507
    \n-
    508} //namespace Dune
    \n-
    Various ways to compare floating-point numbers.
    \n-
    Implements a vector constructed from a given type representing a field and a compile-time given size.
    \n-
    bool ne(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for inequality using epsilon
    Definition float_cmp.cc:151
    \n-
    bool eq(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for equality using epsilon
    Definition float_cmp.cc:144
    \n-
    I round(const T &val, typename EpsilonType< T >::Type epsilon)
    round using epsilon
    Definition float_cmp.cc:311
    \n-
    I trunc(const T &val, typename EpsilonType< T >::Type epsilon)
    truncate using epsilon
    Definition float_cmp.cc:407
    \n-
    bool lt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser than second
    Definition float_cmp.cc:165
    \n-
    bool gt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater than second
    Definition float_cmp.cc:158
    \n-
    bool ge(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater or equal second
    Definition float_cmp.cc:172
    \n-
    bool le(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser or equal second
    Definition float_cmp.cc:179
    \n-
    @ relativeStrong
    |a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon
    Definition float_cmp.hh:108
    \n-
    @ relativeWeak
    |a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon
    Definition float_cmp.hh:106
    \n-
    @ absolute
    |a-b| <= epsilon
    Definition float_cmp.hh:110
    \n-
    @ towardZero
    always round toward 0
    Definition float_cmp.hh:118
    \n-
    @ towardInf
    always round away from 0
    Definition float_cmp.hh:120
    \n-
    @ upward
    round toward
    Definition float_cmp.hh:124
    \n-
    @ downward
    round toward
    Definition float_cmp.hh:122
    \n-
    STL namespace.
    \n-
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    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
    \n-
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n-
    Mapping of value type to epsilon type.
    Definition float_cmp.cc:23
    \n-
    T Type
    The epsilon type corresponding to value type T.
    Definition float_cmp.cc:25
    \n-
    EpsilonType< T >::Type Type
    The epsilon type corresponding to value type std::vector<T, A>
    Definition float_cmp.cc:36
    \n-
    EpsilonType< T >::Type Type
    The epsilon type corresponding to value type Dune::FieldVector<T, n>
    Definition float_cmp.cc:47
    \n-
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:53
    \n-
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:58
    \n-
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:63
    \n-
    mapping from a value type and a compare style to a default epsilon
    Definition float_cmp.hh:138
    \n-
    static EpsilonType< T >::Type value()
    Returns the default epsilon for the given value type and compare style.
    \n-
    bool le(const ValueType &first, const ValueType &second) const
    test if first lesser or equal second
    Definition float_cmp.cc:486
    \n-
    FloatCmpOps(EpsilonType epsilon=DefaultEpsilon::value())
    construct an operations object
    Definition float_cmp.cc:431
    \n-
    bool eq(const ValueType &first, const ValueType &second) const
    test for equality using epsilon
    Definition float_cmp.cc:451
    \n-
    bool lt(const ValueType &first, const ValueType &second) const
    test if first lesser than second
    Definition float_cmp.cc:472
    \n-
    bool ge(const ValueType &first, const ValueType &second) const
    test if first greater or equal second
    Definition float_cmp.cc:479
    \n-
    FloatCmp::EpsilonType< T >::Type EpsilonType
    Type of the epsilon.
    Definition float_cmp.hh:304
    \n-
    bool ne(const ValueType &first, const ValueType &second) const
    test for inequality using epsilon
    Definition float_cmp.cc:458
    \n-
    T ValueType
    Type of the values to compare.
    Definition float_cmp.hh:299
    \n-
    EpsilonType epsilon() const
    return the current epsilon
    Definition float_cmp.cc:436
    \n-
    I round(const ValueType &val) const
    round using epsilon
    Definition float_cmp.cc:495
    \n-
    I trunc(const ValueType &val) const
    truncate using epsilon
    Definition float_cmp.cc:503
    \n-
    bool gt(const ValueType &first, const ValueType &second) const
    test if first greater than second
    Definition float_cmp.cc:465
    \n+
    20// undefine the macro that signals C++17 support, if set
    \n+
    21#ifdef Vc_CXX17
    \n+
    22#undef Vc_CXX17
    \n+
    23#endif
    \n+
    24
    \n+
    25// include the rest of Vc
    \n+
    26#include <Vc/Vc>
    \n+
    27
    \n+
    28#endif // HAVE_VC
    \n+
    29
    \n+
    30#endif // DUNE_COMMON_VC_HH
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,712 +1,32 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-float_cmp.cc\n+vc.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n-2// vi: set et ts=4 sw=2 sts=2:\n-3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n+1// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n-4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\"\n-6\n-7#include \n-8#include \n-9#include \n-10#include \n-11#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n-12\n-13namespace _\bD_\bu_\bn_\be {\n-14\n-15\n-_\b1_\b6 namespace FloatCmp {\n-17 // traits\n+2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n+3#ifndef DUNE_COMMON_VC_HH\n+4#define DUNE_COMMON_VC_HH\n+5\n+15#if HAVE_VC\n+16\n+17// include Vc's macro definitions\n+18#include \n 19\n-_\b2_\b3 template struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be {\n-_\b2_\b5 typedef T _\bT_\by_\bp_\be;\n-26 };\n-28\n-33 template\n-_\b3_\b4 struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be<_\bs_\bt_\bd::vector > {\n-_\b3_\b6 typedef typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bT_\by_\bp_\be;\n-37 };\n-39\n-44 template\n-_\b4_\b5 struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be<_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br > {\n-_\b4_\b7 typedef typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bT_\by_\bp_\be;\n-48 };\n-49\n-50 // default epsilon\n-51 template\n-_\b5_\b2 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n-_\b5_\b3 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n-54 { return std::numeric_limits::Type>::epsilon()*8.; }\n-55 };\n-56 template\n-_\b5_\b7 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n-_\b5_\b8 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n-59 { return std::numeric_limits::Type>::epsilon()*8.; }\n-60 };\n-61 template\n-_\b6_\b2 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n-_\b6_\b3 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n-64 { return std::max(std::numeric_limits_\b:_\b:_\bT_\by_\bp_\be>::\n-epsilon(), 1e-6); }\n-65 };\n-66\n-67 namespace Impl {\n-68 // basic comparison\n-69 template\n-70 struct eq_t;\n-71 template\n-72 struct eq_t {\n-73 static bool _\be_\bq(const T &first,\n-74 const T &second,\n-75 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-76 {\n-77 using std::abs;\n-78 return abs(first - second) <= epsilon*std::max(abs(first), abs(second));\n-79 }\n-80 };\n-81 template\n-82 struct eq_t {\n-83 static bool _\be_\bq(const T &first,\n-84 const T &second,\n-85 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-86 {\n-87 using std::abs;\n-88 return abs(first - second) <= epsilon*std::min(abs(first), abs(second));\n-89 }\n-90 };\n-91 template\n-92 struct eq_t {\n-93 static bool _\be_\bq(const T &first,\n-94 const T &second,\n-95 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-96 {\n-97 using std::abs;\n-98 return abs(first-second) <= epsilon;\n-99 }\n-100 };\n-101 template\n-102 struct eq_t_std_vec {\n-103 typedef std::vector V;\n-104 static bool _\be_\bq(const V &first,\n-105 const V &second,\n-106 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bV_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be()) {\n-107 auto _\bs_\bi_\bz_\be = first.size();\n-108 if(_\bs_\bi_\bz_\be != second.size()) return false;\n-109 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n-110 if(!eq_t::eq(first[i], second[i], epsilon))\n-111 return false;\n-112 return true;\n-113 }\n-114 };\n-115 template< class T>\n-116 struct eq_t<_\bs_\bt_\bd::vector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk> : eq_t_std_vec\n-{};\n-117 template< class T>\n-118 struct eq_t<_\bs_\bt_\bd::vector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg> : eq_t_std_vec {};\n-119 template< class T>\n-120 struct eq_t<_\bs_\bt_\bd::vector, _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be> : eq_t_std_vec {};\n-121\n-122 template\n-123 struct eq_t_fvec {\n-124 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bn_\b> V;\n-125 static bool _\be_\bq(const V &first,\n-126 const V &second,\n-127 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bV_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be()) {\n-128 for(int i = 0; i < n; ++i)\n-129 if(!eq_t::eq(first[i], second[i], epsilon))\n-130 return false;\n-131 return true;\n-132 }\n-133 };\n-134 template< class T, int n >\n-135 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk> : eq_t_fvec {};\n-136 template< class T, int n >\n-137 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg> : eq_t_fvec {};\n-138 template< class T, int n >\n-139 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be> : eq_t_fvec\n-{};\n-140 } // namespace Impl\n-141\n-142 // operations in functional style\n-143 template \n-_\b1_\b4_\b4 bool _\be_\bq(const T &first,\n-145 const T &second,\n-146 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-147 {\n-148 return Impl::eq_t::eq(first, second, epsilon);\n-149 }\n-150 template \n-_\b1_\b5_\b1 bool _\bn_\be(const T &first,\n-152 const T &second,\n-153 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-154 {\n-155 return !eq(first, second, epsilon);\n-156 }\n-157 template \n-_\b1_\b5_\b8 bool _\bg_\bt(const T &first,\n-159 const T &second,\n-160 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-161 {\n-162 return first > second && ne(first, second, epsilon);\n-163 }\n-164 template \n-_\b1_\b6_\b5 bool _\bl_\bt(const T &first,\n-166 const T &second,\n-167 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-168 {\n-169 return first < second && ne(first, second, epsilon);\n-170 }\n-171 template \n-_\b1_\b7_\b2 bool _\bg_\be(const T &first,\n-173 const T &second,\n-174 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-175 {\n-176 return first > second || eq(first, second, epsilon);\n-177 }\n-178 template \n-_\b1_\b7_\b9 bool _\bl_\be(const T &first,\n-180 const T &second,\n-181 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n-182 {\n-183 return first < second || eq(first, second, epsilon);\n-184 }\n-185\n-186 // default template arguments\n-187 template \n-_\b1_\b8_\b8 bool _\be_\bq(const T &first,\n-189 const T &second,\n-190 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-191 {\n-192 return eq(first, second, epsilon);\n-193 }\n-194 template \n-_\b1_\b9_\b5 bool _\bn_\be(const T &first,\n-196 const T &second,\n-197 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-198 {\n-199 return ne(first, second, epsilon);\n-200 }\n-201 template \n-_\b2_\b0_\b2 bool _\bg_\bt(const T &first,\n-203 const T &second,\n-204 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-205 {\n-206 return gt(first, second, epsilon);\n-207 }\n-208 template \n-_\b2_\b0_\b9 bool _\bl_\bt(const T &first,\n-210 const T &second,\n-211 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-212 {\n-213 return lt(first, second, epsilon);\n-214 }\n-215 template \n-_\b2_\b1_\b6 bool _\bg_\be(const T &first,\n-217 const T &second,\n-218 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-219 {\n-220 return ge(first, second, epsilon);\n-221 }\n-222 template \n-_\b2_\b2_\b3 bool _\bl_\be(const T &first,\n-224 const T &second,\n-225 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-226 {\n-227 return le(first, second, epsilon);\n-228 }\n-229\n-230 // rounding operations\n-231 namespace Impl {\n-232 template\n-233 struct round_t;\n-234 template\n-235 struct round_t {\n-236 static I\n-237 _\br_\bo_\bu_\bn_\bd(const T &val,\n-238 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-239 // first get an approximation\n-240 I lower = I(val);\n-241 I upper;\n-242 if(eq(T(lower), val, epsilon)) return lower;\n-243 if(T(lower) > val) { upper = lower; lower--; }\n-244 else upper = lower+1;\n-245 if(le(val - T(lower), T(upper) - val, epsilon))\n-246 return lower;\n-247 else return upper;\n-248 }\n-249 };\n-250 template\n-251 struct round_t {\n-252 static I\n-253 _\br_\bo_\bu_\bn_\bd(const T &val,\n-254 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-255 // first get an approximation\n-256 I lower = I(val);\n-257 I upper;\n-258 if(eq(T(lower), val, epsilon)) return lower;\n-259 if(T(lower) > val) { upper = lower; lower--; }\n-260 else upper = lower+1;\n-261 if(lt(val - T(lower), T(upper) - val, epsilon))\n-262 return lower;\n-263 else return upper;\n-264 }\n-265 };\n-266 template\n-267 struct round_t {\n-268 static I\n-269 _\br_\bo_\bu_\bn_\bd(const T &val,\n-270 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-271 if(val > T(0))\n-272 return round_t::round(val, epsilon);\n-273 else return round_t::round(val, epsilon);\n-274 }\n-275 };\n-276 template\n-277 struct round_t {\n-278 static I\n-279 _\br_\bo_\bu_\bn_\bd(const T &val,\n-280 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-281 if(val > T(0))\n-282 return round_t::round(val, epsilon);\n-283 else return round_t::round(val, epsilon);\n-284 }\n-285 };\n-286 template\n-287 struct round_t<_\bs_\bt_\bd::vector, std::vector, cstyle, rstyle> {\n-288 static std::vector\n-289 _\br_\bo_\bu_\bn_\bd(const T &val,\n-290 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-291 unsigned int _\bs_\bi_\bz_\be = val.size();\n-292 std::vector res(_\bs_\bi_\bz_\be);\n-293 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n-294 res[i] = round_t::round(val[i], epsilon);\n-295 return res;\n-296 }\n-297 };\n-298 template\n-299 struct round_t<_\bD_\bu_\bn_\be::FieldVector, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br, cstyle,\n-rstyle> {\n-300 static _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b>\n-301 _\br_\bo_\bu_\bn_\bd(const T &val,\n-302 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-303 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b> res;\n-304 for(int i = 0; i < n; ++i)\n-305 res[i] = round_t::round(val[i], epsilon);\n-306 return res;\n-307 }\n-308 };\n-309 } // end namespace Impl\n-310 template\n-_\b3_\b1_\b1 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon /*=\n-DefaultEpsilon::value()*/)\n-312 {\n-313 return Impl::round_t::round(val, epsilon);\n-314 }\n-315 template\n-_\b3_\b1_\b6 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-317 {\n-318 return round(val, epsilon);\n-319 }\n-320 template\n-321 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-322 {\n-323 return round(val, epsilon);\n-324 }\n-325 template\n-_\b3_\b2_\b6 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-327 {\n-328 return round(val, epsilon);\n-329 }\n-330\n-331 // truncation\n-332 namespace Impl {\n-333 template\n-334 struct trunc_t;\n-335 template\n-336 struct trunc_t {\n-337 static I\n-338 _\bt_\br_\bu_\bn_\bc(const T &val,\n-339 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-340 // this should be optimized away unless needed\n-341 if(!std::numeric_limits::is_signed)\n-342 // make sure this works for all useful cases even if I is an unsigned type\n-343 if(eq(val, T(0), epsilon)) return I(0);\n-344 // first get an approximation\n-345 I lower = I(val); // now |val-lower| < 1\n-346 // make sure we're really lower in case the cast truncated to an unexpected\n-direction\n-347 if(T(lower) > val) lower--; // now val-lower < 1\n-348 // check whether lower + 1 is approximately val\n-349 if(eq(T(lower+1), val, epsilon))\n-350 return lower+1;\n-351 else return lower;\n-352 }\n-353 };\n-354 template\n-355 struct trunc_t {\n-356 static I\n-357 _\bt_\br_\bu_\bn_\bc(const T &val,\n-358 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-359 I upper = trunc_t::trunc(val, epsilon);\n-360 if(ne(T(upper), val, epsilon)) ++upper;\n-361 return upper;\n-362 }\n-363 };\n-364 template\n-365 struct trunc_t {\n-366 static I\n-367 _\bt_\br_\bu_\bn_\bc(const T &val,\n-368 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-369 if(val > T(0)) return trunc_t::trunc(val, epsilon);\n-370 else return trunc_t::trunc(val, epsilon);\n-371 }\n-372 };\n-373 template\n-374 struct trunc_t {\n-375 static I\n-376 _\bt_\br_\bu_\bn_\bc(const T &val,\n-377 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-378 if(val > T(0)) return trunc_t::trunc(val, epsilon);\n-379 else return trunc_t::trunc(val, epsilon);\n-380 }\n-381 };\n-382 template\n-383 struct trunc_t<_\bs_\bt_\bd::vector, std::vector, cstyle, rstyle> {\n-384 static std::vector\n-385 _\bt_\br_\bu_\bn_\bc(const std::vector &val,\n-386 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-387 unsigned int _\bs_\bi_\bz_\be = val.size();\n-388 std::vector res(_\bs_\bi_\bz_\be);\n-389 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n-390 res[i] = trunc_t::trunc(val[i], epsilon);\n-391 return res;\n-392 }\n-393 };\n-394 template\n-395 struct trunc_t<_\bD_\bu_\bn_\be::FieldVector, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br, cstyle,\n-rstyle> {\n-396 static _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b>\n-397 _\bt_\br_\bu_\bn_\bc(const _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bn_\b> &val,\n-398 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-())) {\n-399 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b> res;\n-400 for(int i = 0; i < n; ++i)\n-401 res[i] = trunc_t::trunc(val[i], epsilon);\n-402 return res;\n-403 }\n-404 };\n-405 } // namespace Impl\n-406 template\n-_\b4_\b0_\b7 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon /*=\n-DefaultEpsilon::value()*/)\n-408 {\n-409 return Impl::trunc_t::trunc(val, epsilon);\n-410 }\n-411 template\n-_\b4_\b1_\b2 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-413 {\n-414 return trunc(val, epsilon);\n-415 }\n-416 template\n-417 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-418 {\n-419 return trunc(val, epsilon);\n-420 }\n-421 template\n-_\b4_\b2_\b2 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n-_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n-423 {\n-424 return trunc(val, epsilon);\n-425 }\n-426 } //namespace Dune\n-427\n-428 // oo interface\n-429 template\n-_\b4_\b3_\b0 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-431_\b _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon) : epsilon_(epsilon) {}\n-432\n-433\n-434 template\n-435 typename _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n-_\b4_\b3_\b6 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn() const\n-437 {\n-438 return epsilon_;\n-439 }\n-440\n-441 template\n-442 void\n-_\b4_\b4_\b3 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon__)\n-444 {\n-445 epsilon_ = epsilon__;\n-446 }\n-447\n-448\n-449 template\n-_\b4_\b5_\b0 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-451_\b _\be_\bq(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-452 {\n-453 return Dune::FloatCmp::eq(first, second, epsilon_);\n-454 }\n-455\n-456 template\n-_\b4_\b5_\b7 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-458_\b _\bn_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-459 {\n-460 return Dune::FloatCmp::ne(first, second, epsilon_);\n-461 }\n-462\n-463 template\n-_\b4_\b6_\b4 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-465_\b _\bg_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-466 {\n-467 return Dune::FloatCmp::gt(first, second, epsilon_);\n-468 }\n-469\n-470 template\n-_\b4_\b7_\b1 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-472_\b _\bl_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-473 {\n-474 return Dune::FloatCmp::lt(first, second, epsilon_);\n-475 }\n-476\n-477 template\n-_\b4_\b7_\b8 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-479_\b _\bg_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-480 {\n-481 return Dune::FloatCmp::ge(first, second, epsilon_);\n-482 }\n-483\n-484 template\n-_\b4_\b8_\b5 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-486_\b _\bl_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n-487 {\n-488 return Dune::FloatCmp::le(first, second, epsilon_);\n-489 }\n-490\n-491\n-492 template\n-493 template\n-_\b4_\b9_\b4 I _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-495_\b _\br_\bo_\bu_\bn_\bd(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const\n-496 {\n-497 return Dune::FloatCmp::round(val, epsilon_);\n-498 }\n-499\n-500 template\n-501 template\n-_\b5_\b0_\b2 I _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n-503_\b _\bt_\br_\bu_\bn_\bc(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const\n-504 {\n-505 return Dune::FloatCmp::trunc(val, epsilon_);\n-506 }\n-507\n-508} //namespace Dune\n-_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\n-Various ways to compare floating-point numbers.\n-_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh\n-Implements a vector constructed from a given type representing a field and a\n-compile-time given size.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be\n-bool ne(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test for inequality using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:151\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq\n-bool eq(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test for equality using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd\n-I round(const T &val, typename EpsilonType< T >::Type epsilon)\n-round using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:311\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc\n-I trunc(const T &val, typename EpsilonType< T >::Type epsilon)\n-truncate using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:407\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt\n-bool lt(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test if first lesser than second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:165\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt\n-bool gt(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test if first greater than second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:158\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be\n-bool ge(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test if first greater or equal second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be\n-bool le(const T &first, const T &second, typename EpsilonType< T >::Type\n-epsilon)\n-test if first lesser or equal second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg\n-@ relativeStrong\n-|a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk\n-@ relativeWeak\n-|a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be\n-@ absolute\n-|a-b| <= epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:110\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo\n-@ towardZero\n-always round toward 0\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bI_\bn_\bf\n-@ towardInf\n-always round away from 0\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bu_\bp_\bw_\ba_\br_\bd\n-@ upward\n-round toward\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd\n-@ downward\n-round toward\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:122\n-_\bs_\bt_\bd\n-STL namespace.\n-_\bD_\bu_\bn_\be\n-Dune namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bs_\bi_\bz_\be\n-constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::\n-integer_sequence< T, II... >)\n-Return the size of the sequence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn integersequence.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n-vector space out of a tensor product of fields.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:91\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n-Mapping of value type to epsilon type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:23\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b:_\b:_\bT_\by_\bp_\be\n-T Type\n-The epsilon type corresponding to value type T.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:25\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>_\b _\b>_\b:_\b:_\bT_\by_\bp_\be\n-EpsilonType< T >::Type Type\n-The epsilon type corresponding to value type std::vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bT_\by_\bp_\be\n-EpsilonType< T >::Type Type\n-The epsilon type corresponding to value type Dune::FieldVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-static EpsilonType< T >::Type value()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:53\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-static EpsilonType< T >::Type value()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-static EpsilonType< T >::Type value()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:63\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn\n-mapping from a value type and a compare style to a default epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-static EpsilonType< T >::Type value()\n-Returns the default epsilon for the given value type and compare style.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\be\n-bool le(const ValueType &first, const ValueType &second) const\n-test if first lesser or equal second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:486\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs\n-FloatCmpOps(EpsilonType epsilon=DefaultEpsilon::value())\n-construct an operations object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:431\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bq\n-bool eq(const ValueType &first, const ValueType &second) const\n-test for equality using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:451\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\bt\n-bool lt(const ValueType &first, const ValueType &second) const\n-test if first lesser than second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:472\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\be\n-bool ge(const ValueType &first, const ValueType &second) const\n-test if first greater or equal second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:479\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n-FloatCmp::EpsilonType< T >::Type EpsilonType\n-Type of the epsilon.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:304\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bn_\be\n-bool ne(const ValueType &first, const ValueType &second) const\n-test for inequality using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:458\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be\n-T ValueType\n-Type of the values to compare.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:299\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn\n-EpsilonType epsilon() const\n-return the current epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:436\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\br_\bo_\bu_\bn_\bd\n-I round(const ValueType &val) const\n-round using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:495\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bt_\br_\bu_\bn_\bc\n-I trunc(const ValueType &val) const\n-truncate using epsilon\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:503\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\bt\n-bool gt(const ValueType &first, const ValueType &second) const\n-test if first greater than second\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:465\n+20// undefine the macro that signals C++17 support, if set\n+21#ifdef Vc_CXX17\n+22#undef Vc_CXX17\n+23#endif\n+24\n+25// include the rest of Vc\n+26#include \n+27\n+28#endif // HAVE_VC\n+29\n+30#endif // DUNE_COMMON_VC_HH\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00014.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00014.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: debugalign.hh File Reference\n+dune-common: debugstream.hh File Reference\n \n \n \n \n \n \n \n@@ -72,378 +72,62 @@\n
  • dune
  • common
  • \n
    \n
    \n
    \n \n-
    debugalign.hh File Reference
    \n+Typedefs
    \n+
    debugstream.hh File Reference
    \n
    \n
    \n-
    #include <algorithm>
    \n-#include <cassert>
    \n-#include <cmath>
    \n-#include <complex>
    \n-#include <cstddef>
    \n-#include <cstdint>
    \n-#include <cstdlib>
    \n-#include <functional>
    \n-#include <istream>
    \n-#include <ostream>
    \n-#include <type_traits>
    \n-#include <utility>
    \n-#include <dune/common/classname.hh>
    \n-#include <dune/common/indices.hh>
    \n-#include <dune/common/simd/base.hh>
    \n-#include <dune/common/simd/defaults.hh>
    \n-#include <dune/common/typetraits.hh>
    \n+\n+

    Defines several output streams for messages of different importance. \n+More...

    \n+
    #include <iostream>
    \n+#include <stack>
    \n+#include <dune/common/exceptions.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n+\n \n-\n+\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n+\n \n-\n+\n+\n \n

    \n Classes

    struct  Dune::AlignedBase< align, Impl >
     CRTP base mixin class to check alignment. More...
    struct  Dune::greater_or_equal< current, threshold >
     Greater or equal template test. More...
     
    struct  Dune::IsNumber< AlignedNumberImpl::AlignedNumber< T, align > >
    struct  Dune::common_bits< current, mask >
     activate if current and mask have common bits switched on. More...
     
    class  Dune::AlignedNumberImpl::AlignedNumber< T, align >
     aligned wrappers for arithmetic types More...
    class  Dune::DebugStreamError
     standard exception for the debugstream More...
     
    struct  Dune::Simd::Overloads::ScalarType< AlignedNumber< T, align > >
    class  Dune::StreamWrap
     
    struct  Dune::Simd::Overloads::RebindType< U, AlignedNumber< T, align > >
    class  Dune::DebugStreamState
     Intermediate class to implement tie-operation of DebugStream. More...
     
    struct  Dune::Simd::Overloads::LaneCount< AlignedNumber< T, align > >
    class  Dune::DebugStream< thislevel, dlevel, alevel, activator >
     Generic class to implement debug output streams. More...
     
    \n \n \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::AlignedNumberImpl
     
    namespace  Dune::Simd
     Namespace for vectorization interface functions used by library developers.
     
    namespace  Dune::Simd::Overloads
     Namespace for the overloads and specializations that make up a SIMD implementation.
     
    \n-\n-\n-\n-\n-\n-\n-\n

    \n-Macros

    #define DUNE_ASSIGN_OP(OP)
     
    #define DUNE_BINARY_OP(OP)
     
    #define DUNE_UNARY_FUNC(name)
     
    \n \n-\n-\n-\n-

    \n Typedefs

    using Dune::ViolatedAlignmentHandler = std::function< void(const char *, std::size_t, const void *)>
     type of the handler called by violatedAlignment()
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Functions

    ViolatedAlignmentHandlerDune::violatedAlignmentHandler ()
     access the handler called by violatedAlignment()
     
    void Dune::violatedAlignment (const char *className, std::size_t expectedAlignment, const void *address)
     called when an alignment violation is detected
     
    bool Dune::isAligned (const void *p, std::size_t align)
     check whether an address conforms to the given alignment
     
    template<std::size_t align = debugAlignment, class T >
    AlignedNumber< T, align > Dune::aligned (T value)
     align a value to a certain alignment
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (+)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (-)
     
    DUNE_BINARY_OP * Dune::AlignedNumberImpl::DUNE_BINARY_OP (/);DUNE_BINARY_OP(%
     
    DUNE_BINARY_OP^ Dune::AlignedNumberImpl::DUNE_BINARY_OP (&);DUNE_BINARY_OP(|
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (<<)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (> >)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (==)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (!=)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (<=)
     
     Dune::AlignedNumberImpl::DUNE_BINARY_OP (>=)
     
    DUNE_BINARY_OP && Dune::AlignedNumberImpl::DUNE_BINARY_OP (||);#define DUNE_UNARY_FUNC(name) DUNE_UNARY_FUNC(abs
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (acos)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (acosh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (asin)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (asinh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (atan)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (atanh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (cbrt)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (ceil)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (cos)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (cosh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (erf)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (erfc)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (exp)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (exp2)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (expm1)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (fabs)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (floor)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (ilogb)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (lgamma)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (llrint)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (llround)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (log)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (log10)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (log1p)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (log2)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (logb)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (lrint)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (lround)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (nearbyint)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (rint)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (round)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (sin)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (sinh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (sqrt)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (tan)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (tanh)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (tgamma)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (trunc)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (isfinite)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (isinf)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (isnan)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (isnormal)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (signbit)
     
     Dune::AlignedNumberImpl::DUNE_UNARY_FUNC (real)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::max (const AlignedNumber< T, align > &a, const AlignedNumber< T, align > &b)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::max (const T &a, const AlignedNumber< T, align > &b)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::max (const AlignedNumber< T, align > &a, const T &b)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::min (const AlignedNumber< T, align > &a, const AlignedNumber< T, align > &b)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::min (const T &a, const AlignedNumber< T, align > &b)
     
    template<class T , std::size_t align>
    auto Dune::AlignedNumberImpl::min (const AlignedNumber< T, align > &a, const T &b)
     
    template<class T , std::size_t align>
    AlignedNumber< T, align > Dune::cond (const AlignedNumber< bool, align > &b, const AlignedNumber< T, align > &v1, const AlignedNumber< T, align > &v2)
     
    template<class T , std::size_t align>
    Dune::max_value (const AlignedNumber< T, align > &val)
     
    template<class T , std::size_t align>
    Dune::min_value (const AlignedNumber< T, align > &val)
     
    template<std::size_t align>
    bool Dune::any_true (const AlignedNumber< bool, align > &val)
     
    template<std::size_t align>
    bool Dune::all_true (const AlignedNumber< bool, align > &val)
     
    template<class T , std::size_t align>
    T & Dune::Simd::Overloads::lane (ADLTag< 5 >, std::size_t l, AlignedNumber< T, align > &v)
     
    template<class T , std::size_t align>
    Dune::Simd::Overloads::lane (ADLTag< 5 >, std::size_t l, const AlignedNumber< T, align > &v)
     
    template<class T , std::size_t align>
    const AlignedNumber< T, align > & Dune::Simd::Overloads::cond (ADLTag< 5 >, AlignedNumber< bool, align > mask, const AlignedNumber< T, align > &ifTrue, const AlignedNumber< T, align > &ifFalse)
     
    template<std::size_t align>
    bool Dune::Simd::Overloads::anyTrue (ADLTag< 5 >, const AlignedNumber< bool, align > &mask)
     
    \n-\n-\n-\n-\n+\n+\n+\n

    \n-Variables

    static constexpr auto Dune::debugAlignment = 2*alignof(std::max_align_t)
     an alignment large enough to trigger alignment errors
     
    typedef unsigned int Dune::DebugLevel
     Type for debug levels.
     
    \n-

    Macro Definition Documentation

    \n-\n-

    ◆ DUNE_ASSIGN_OP

    \n-\n-
    \n-
    \n- \n- \n- \n- \n- \n- \n- \n- \n-
    #define DUNE_ASSIGN_OP( OP)
    \n-
    \n-Value:
    template<class U, std::size_t uAlign, \\
    \n-
    class = std::enable_if_t< \\
    \n-
    ( uAlign <= align && \\
    \n-
    sizeof(std::declval<T&>() OP std::declval<U>()) ) \\
    \n-
    > > \\
    \n-
    AlignedNumber &operator OP(const AlignedNumber<U, uAlign> &u) \\
    \n-
    { \\
    \n-
    value_ OP U(u); \\
    \n-
    return *this; \\
    \n-
    } \\
    \n-
    \\
    \n-
    template<class U, \\
    \n-
    class = std::void_t<decltype(std::declval<T&>() OP \\
    \n-
    std::declval<U>())> > \\
    \n-
    AlignedNumber &operator OP(const U &u) \\
    \n-
    { \\
    \n-
    value_ OP u; \\
    \n-
    return *this; \\
    \n-
    } \\
    \n-
    \\
    \n-
    static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    STL namespace.
    \n-
    \n-
    \n-
    \n-\n-

    ◆ DUNE_BINARY_OP

    \n-\n-
    \n-
    \n- \n- \n- \n- \n- \n- \n- \n- \n-
    #define DUNE_BINARY_OP( OP)
    \n-
    \n-Value:
    template<class T, std::size_t tAlign, class U, std::size_t uAlign, \\
    \n-
    class = std::void_t<decltype(std::declval<T>() \\
    \n-
    OP std::declval<U>())> > \\
    \n-
    decltype(auto) \\
    \n-
    operator OP(const AlignedNumber<T, tAlign> &t, \\
    \n-
    const AlignedNumber<U, uAlign> &u) \\
    \n-
    { \\
    \n-
    /* can't use std::max(); not constexpr */ \\
    \n-
    return aligned<(tAlign > uAlign ? tAlign : uAlign)>(T(t) OP U(u)); \\
    \n-
    } \\
    \n-
    \\
    \n-
    template<class T, class U, std::size_t uAlign, \\
    \n-
    class = std::void_t<decltype(std::declval<T>() \\
    \n-
    OP std::declval<U>())> > \\
    \n-
    decltype(auto) \\
    \n-
    operator OP(const T &t, const AlignedNumber<U, uAlign> &u) \\
    \n-
    { \\
    \n-
    return aligned<uAlign>(t OP U(u)); \\
    \n-
    } \\
    \n-
    \\
    \n-
    template<class T, std::size_t tAlign, class U, \\
    \n-
    class = std::void_t<decltype(std::declval<T>() \\
    \n-
    OP std::declval<U>())> > \\
    \n-
    decltype(auto) \\
    \n-
    operator OP(const AlignedNumber<T, tAlign> &t, const U &u) \\
    \n-
    { \\
    \n-
    return aligned<tAlign>(T(t) OP u); \\
    \n-
    } \\
    \n-
    \\
    \n-
    static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    \n-
    \n-
    \n-\n-

    ◆ DUNE_UNARY_FUNC

    \n-\n-
    \n-
    \n- \n- \n- \n- \n- \n- \n- \n- \n-
    #define DUNE_UNARY_FUNC( name)
    \n-
    \n-Value:
    template<class T, std::size_t align> \\
    \n-
    decltype(auto) name(const AlignedNumber<T, align> &u) \\
    \n-
    { \\
    \n-
    using std::name; \\
    \n-
    return aligned<align>(name(T(u))); \\
    \n-
    } \\
    \n-
    static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    \n-
    \n-
    \n-
    \n+

    Detailed Description

    \n+

    Defines several output streams for messages of different importance.

    \n+

    This file implements the class DebugStream to support output in a variety of debug levels. Additionally, template parameters control if the output operation is really performed so that unused debug levels can be deactivated

    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,388 +1,47 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-debugalign.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bl_\ba_\bs_\bs_\bn_\ba_\bm_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bm_\bd_\b/_\bb_\ba_\bs_\be_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bm_\bd_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+debugstream.hh File Reference\n+_\bC_\bo_\bm_\bm_\bo_\bn \u00bb _\bD_\be_\bb_\bu_\bg_\b _\bo_\bu_\bt_\bp_\bu_\bt\n+Defines several output streams for messages of different importance. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bB_\ba_\bs_\be_\b<_\b _\ba_\bl_\bi_\bg_\bn_\b,_\b _\bI_\bm_\bp_\bl_\b _\b>\n-\u00a0 CRTP base mixin class to check alignment. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\br_\be_\ba_\bt_\be_\br_\b__\bo_\br_\b__\be_\bq_\bu_\ba_\bl_\b<_\b _\bc_\bu_\br_\br_\be_\bn_\bt_\b,_\b _\bt_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\b _\b>\n+\u00a0 Greater or equal template test. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bm_\bm_\bo_\bn_\b__\bb_\bi_\bt_\bs_\b<_\b _\bc_\bu_\br_\br_\be_\bn_\bt_\b,_\b _\bm_\ba_\bs_\bk_\b _\b>\n+\u00a0 activate if current and mask have common bits switched on. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>\n-\u00a0 aligned wrappers for arithmetic types _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br\n+\u00a0 standard exception for the debugstream _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\by_\bp_\be_\b<_\b _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bR_\be_\bb_\bi_\bn_\bd_\bT_\by_\bp_\be_\b<_\b _\bU_\b,_\b _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be\n+\u00a0 Intermediate class to implement tie-operation of _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bL_\ba_\bn_\be_\bC_\bo_\bu_\bn_\bt_\b<_\b _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>_\b _\b>\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\b _\bt_\bh_\bi_\bs_\bl_\be_\bv_\be_\bl_\b,_\b _\bd_\bl_\be_\bv_\be_\bl_\b,_\b _\ba_\bl_\be_\bv_\be_\bl_\b,_\b _\ba_\bc_\bt_\bi_\bv_\ba_\bt_\bo_\br_\b _\b>\n+\u00a0 Generic class to implement debug output streams. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd\n-\u00a0 Namespace for vectorization interface functions used by library\n- developers.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs\n-\u00a0 Namespace for the overloads and specializations that make up a SIMD\n- implementation.\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(OP)\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(OP)\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(name)\n-\u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br = std::function< void(const char *, std::\n- size_t, const void *)>\n-\u00a0 type of the handler called by _\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b(_\b)\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bV_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br ()\n-\u00a0 access the handler called by\n- _\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b(_\b)\n-\u00a0\n- void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt (const char\n- *_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be, std::size_t expectedAlignment,\n- const void *address)\n-\u00a0 called when an alignment violation is\n- detected\n-\u00a0\n- bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd (const void *p, std::size_t\n- align)\n-\u00a0 check whether an address conforms to the\n- given alignment\n-\u00a0\n-template\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\ba_\bl_\bi_\bg_\bn_\be_\bd (T value)\n-\u00a0 align a value to a certain alignment\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (+)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (-)\n-\u00a0\n- DUNE_BINARY_OP *\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (/\n- );DUNE_BINARY_OP(%\n-\u00a0\n- DUNE_BINARY_OP^\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP\n- (&);DUNE_BINARY_OP(|\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (<<)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (>\n- >)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (==)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (!=)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (<=)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP (>=)\n-\u00a0\n- DUNE_BINARY_OP &&\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP\n- (||);#define _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(name)\n- _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(abs\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (acos)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (acosh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (asin)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (asinh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (atan)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (atanh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (cbrt)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (ceil)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (cos)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (cosh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (erf)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (erfc)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (exp)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (exp2)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (expm1)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (fabs)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (floor)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (ilogb)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (lgamma)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (llrint)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (llround)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (log)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (log10)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (log1p)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (log2)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (logb)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (lrint)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (lround)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (nearbyint)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (rint)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (round)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (sin)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (sinh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (sqrt)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (tan)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (tanh)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (tgamma)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (trunc)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (isfinite)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (isinf)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (isnan)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (isnormal)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (signbit)\n-\u00a0\n- \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n- (real)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\ba_\bx (const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &a, const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &b)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\ba_\bx (const T &a,\n- const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &b)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\ba_\bx (const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &a, const T &b)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\bi_\bn (const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &a, const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &b)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\bi_\bn (const T &a,\n- const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &b)\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bm_\bi_\bn (const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &a, const T &b)\n-\u00a0\n-template\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bd (const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< bool, align\n- > &b, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &v1,\n- const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &v2)\n-\u00a0\n-template\n- T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be (const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T,\n- align > &val)\n-\u00a0\n-template\n- T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be (const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T,\n- align > &val)\n-\u00a0\n-template\n- bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\ba_\bn_\by_\b__\bt_\br_\bu_\be (const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< bool,\n- align > &val)\n-\u00a0\n-template\n- bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\ba_\bl_\bl_\b__\bt_\br_\bu_\be (const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< bool,\n- align > &val)\n-\u00a0\n-template\n- T &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bl_\ba_\bn_\be (_\bA_\bD_\bL_\bT_\ba_\bg< 5 >,\n- std::size_t l, _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &v)\n-\u00a0\n-template\n- T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bl_\ba_\bn_\be (_\bA_\bD_\bL_\bT_\ba_\bg< 5 >,\n- std::size_t l, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align\n- > &v)\n-\u00a0\n-template\n-const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bc_\bo_\bn_\bd (_\bA_\bD_\bL_\bT_\ba_\bg< 5 >,\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< bool, align > _\bm_\ba_\bs_\bk, const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &ifTrue, const\n- _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< T, align > &ifFalse)\n-\u00a0\n-template\n- bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\ba_\bn_\by_\bT_\br_\bu_\be (_\bA_\bD_\bL_\bT_\ba_\bg< 5 >,\n- const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br< bool, align > &_\bm_\ba_\bs_\bk)\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\be_\bb_\bu_\bg_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt = 2*alignof(std::max_align_t)\n-\u00a0 an alignment large enough to trigger alignment errors\n+typedef unsigned int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\n+\u00a0 Type for debug levels.\n \u00a0\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_A\bAS\bSS\bSI\bIG\bGN\bN_\b_O\bOP\bP *\b**\b**\b**\b**\b*\n-#define DUNE_ASSIGN_OP ( \u00a0 OP )\n-V\bVa\bal\blu\bue\be:\b:\n-template() OP std::declval()) ) \\\n-> > \\\n-AlignedNumber &operator OP(const AlignedNumber &u) \\\n-{ \\\n-value_ OP U(u); \\\n-return *this; \\\n-} \\\n-\\\n-template() OP \\\n-_\bs_\bt_\bd::declval())> > \\\n-AlignedNumber &operator OP(const U &u) \\\n-{ \\\n-value_ OP u; \\\n-return *this; \\\n-} \\\n-\\\n-static_assert(true, \"Require semicolon to unconfuse editors\")\n-_\bs_\bt_\bd\n-STL namespace.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_B\bBI\bIN\bNA\bAR\bRY\bY_\b_O\bOP\bP *\b**\b**\b**\b**\b*\n-#define DUNE_BINARY_OP ( \u00a0 OP )\n-V\bVa\bal\blu\bue\be:\b:\n-template() \\\n-OP std::declval())> > \\\n-decltype(auto) \\\n-operator OP(const AlignedNumber &t, \\\n-const AlignedNumber &u) \\\n-{ \\\n-/* can't use std::max(); not constexpr */ \\\n-return aligned<(tAlign > uAlign ? tAlign : uAlign)>(T(t) OP U(u)); \\\n-} \\\n-\\\n-template() \\\n-OP std::declval())> > \\\n-decltype(auto) \\\n-operator OP(const T &t, const AlignedNumber &u) \\\n-{ \\\n-return aligned(t OP U(u)); \\\n-} \\\n-\\\n-template() \\\n-OP std::declval())> > \\\n-decltype(auto) \\\n-operator OP(const AlignedNumber &t, const U &u) \\\n-{ \\\n-return aligned(T(t) OP u); \\\n-} \\\n-\\\n-static_assert(true, \"Require semicolon to unconfuse editors\")\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_U\bUN\bNA\bAR\bRY\bY_\b_F\bFU\bUN\bNC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_UNARY_FUNC ( \u00a0 name )\n-V\bVa\bal\blu\bue\be:\b:\n-template \\\n-decltype(auto) name(const AlignedNumber &u) \\\n-{ \\\n-using std::name; \\\n-return aligned(name(T(u))); \\\n-} \\\n-static_assert(true, \"Require semicolon to unconfuse editors\")\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Defines several output streams for messages of different importance.\n+This file implements the class DebugStream to support output in a variety of\n+debug levels. Additionally, template parameters control if the output operation\n+is really performed so that unused debug levels can be deactivated\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00014_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00014_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: debugalign.hh Source File\n+dune-common: debugstream.hh Source File\n \n \n \n \n \n \n \n@@ -74,657 +74,333 @@\n \n
    \n \n
    \n \n
    \n-
    debugalign.hh
    \n+
    debugstream.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_DEBUGALIGN_HH
    \n-
    6#define DUNE_DEBUGALIGN_HH
    \n-
    7
    \n-
    8#include <algorithm>
    \n-
    9#include <cassert>
    \n-
    10#include <cmath>
    \n-
    11#include <complex>
    \n-
    12#include <cstddef>
    \n-
    13#include <cstdint>
    \n-
    14#include <cstdlib> // abs
    \n-
    15#include <functional>
    \n-
    16#include <istream>
    \n-
    17#include <ostream>
    \n-
    18#include <type_traits>
    \n-
    19#include <utility>
    \n-
    20
    \n-\n-\n-\n-\n-\n-
    26
    \n-
    27namespace Dune {
    \n-
    28
    \n-\n-
    31 std::function<void(const char*, std::size_t, const void*)>;
    \n-
    32
    \n-
    34
    \n-\n-
    41
    \n-
    43
    \n-
    52 void violatedAlignment(const char *className, std::size_t expectedAlignment,
    \n-
    53 const void *address);
    \n-
    54
    \n-
    \n-
    56 inline bool isAligned(const void *p, std::size_t align)
    \n-
    57 {
    \n-
    58 void* aligned_p = (void*)p;
    \n-
    59 std::size_t space = align*2;
    \n-
    60 return p == std::align(align, align, aligned_p, space);
    \n-
    61 }
    \n-
    \n-
    62
    \n-
    64 template<std::size_t align, class Impl>
    \n-
    \n-
    65 struct alignas(align) AlignedBase
    \n-
    66 {
    \n-
    \n-
    75 static void* operator new(std::size_t count, void* ptr) {
    \n-
    76 if(!isAligned(ptr, align))
    \n-
    77 violatedAlignment(className<Impl>().c_str(), align, ptr);
    \n-
    78 return ::operator new(count*sizeof(Impl), ptr);
    \n-
    79 }
    \n-
    \n-
    80
    \n-
    \n-
    89 static void* operator new[](std::size_t count, void* ptr) {
    \n-
    90 if(!isAligned(ptr, align))
    \n-
    91 violatedAlignment(className<Impl>().c_str(), align, ptr);
    \n-
    92 return ::operator new[](count*sizeof(Impl), ptr);
    \n-
    93 }
    \n-
    \n-
    94 };
    \n-
    \n-
    95
    \n-
    97 static constexpr auto debugAlignment = 2*alignof(std::max_align_t);
    \n-
    98
    \n-
    \n-
    99 namespace AlignedNumberImpl {
    \n-
    100
    \n-
    101 template<class T, std::size_t align = debugAlignment>
    \n-
    102 class AlignedNumber;
    \n-
    103
    \n-
    104 } // namespace AlignedNumberImpl
    \n-
    \n-
    105
    \n-\n-
    107
    \n-
    108 template<class T, std::size_t align>
    \n-
    \n-
    109 struct IsNumber<AlignedNumberImpl::AlignedNumber<T,align>>
    \n-
    110 : public std::true_type {};
    \n-
    \n-
    111
    \n-
    113 template<std::size_t align = debugAlignment, class T>
    \n-
    114 AlignedNumber<T, align> aligned(T value) { return { std::move(value) }; }
    \n-
    115
    \n-
    116 // The purpose of this namespace is to move the `<cmath>` function overloads
    \n-
    117 // out of namespace `Dune`. This avoids problems where people called
    \n-
    118 // e.g. `sqrt(1.0)` inside the `Dune` namespace, without first doing `using
    \n-
    119 // std::sqrt;`. Without any `Dune::sqrt()`, such a use will find
    \n-
    120 // `::sqrt()`, but with `Dune::sqrt()` it will find only `Dune::sqrt()`,
    \n-
    121 // which does not have an overload for `double`.
    \n-
    122 namespace AlignedNumberImpl {
    \n-
    123
    \n-
    125 template<class T, std::size_t align>
    \n-
    \n-\n-
    127 : public AlignedBase<align, AlignedNumber<T, align> >
    \n-
    128 {
    \n-
    129 T value_;
    \n-
    130
    \n-
    131 public:
    \n-
    132 AlignedNumber() = default;
    \n-
    133 AlignedNumber(T value) : value_(std::move(value)) {}
    \n-
    134 template<class U, std::size_t uAlign,
    \n-
    135 class = std::enable_if_t<(align >= uAlign) &&
    \n-
    136 std::is_convertible<U, T>::value> >
    \n-
    137 AlignedNumber(const AlignedNumber<U, uAlign> &o) : value_(U(o)) {}
    \n-
    138
    \n-
    139 // accessors
    \n-
    140 template<class U,
    \n-
    141 class = std::enable_if_t<std::is_convertible<T, U>::value> >
    \n-
    142 explicit operator U() const { return value_; }
    \n-
    143
    \n-
    144 const T &value() const { return value_; }
    \n-
    145 T &value() { return value_; }
    \n+
    5
    \n+
    6#ifndef DUNE_DEBUGSTREAM_HH
    \n+
    7#define DUNE_DEBUGSTREAM_HH
    \n+
    8
    \n+
    13#include <iostream>
    \n+
    14#include <stack>
    \n+
    15
    \n+\n+
    17
    \n+
    18namespace Dune {
    \n+
    19
    \n+
    118 typedef unsigned int DebugLevel;
    \n+
    119
    \n+
    129 template <DebugLevel current, DebugLevel threshold>
    \n+
    \n+\n+
    131 constexpr static bool value = (current >= threshold);
    \n+
    132 };
    \n+
    \n+
    133
    \n+
    134
    \n+
    141 template <DebugLevel current, DebugLevel mask>
    \n+
    \n+
    142 struct common_bits {
    \n+
    143 constexpr static bool value = ((current & mask) != 0);
    \n+
    144 };
    \n+
    \n+
    145
    \n
    146
    \n-
    147 // I/O
    \n-
    148 template<class charT, class Traits>
    \n-
    149 friend std::basic_istream<charT, Traits>&
    \n+
    148 class DebugStreamError : public IOError {};
    \n+
    149
    \n
    \n-
    150 operator>>(std::basic_istream<charT, Traits>& str, AlignedNumber &u)
    \n-
    151 {
    \n-
    152 return str >> u.value_;
    \n-
    153 }
    \n-
    \n-
    154
    \n-
    155 template<class charT, class Traits>
    \n-
    \n-
    156 friend std::basic_ostream<charT, Traits>&
    \n-
    157 operator<<(std::basic_ostream<charT, Traits>& str,
    \n-
    158 const AlignedNumber &u)
    \n-
    159 {
    \n-
    160 return str << u.value_;
    \n-
    161 }
    \n-
    \n-
    162
    \n-
    163 // The trick with `template<class U = T, class = std::void_t<expr(U)> >` is
    \n-
    164 // needed because at least g++-4.9 seems to evaluates a default argument
    \n-
    165 // in `template<class = std::void_t<expr(T))> >` as soon as possible and will
    \n-
    166 // error out if `expr(T)` is invalid. E.g. for `expr(T)` =
    \n-
    167 // `decltype(--std::declval<T&>())`, instantiating `AlignedNumber<bool>`
    \n-
    168 // will result in an unrecoverable error (`--` cannot be applied to a
    \n-
    169 // `bool`).
    \n-
    170
    \n-
    171 // Increment, decrement
    \n-
    172 template<class U = T, class = std::void_t<decltype(++std::declval<U&>())> >
    \n-
    173 AlignedNumber &operator++() { ++value_; return *this; }
    \n-
    174
    \n-
    175 template<class U = T, class = std::void_t<decltype(--std::declval<U&>())> >
    \n-
    176 AlignedNumber &operator--() { --value_; return *this; }
    \n-
    177
    \n-
    178 template<class U = T, class = std::void_t<decltype(std::declval<U&>()++)> >
    \n-
    179 decltype(auto) operator++(int) { return aligned<align>(value_++); }
    \n-
    180
    \n-
    181 template<class U = T, class = std::void_t<decltype(std::declval<U&>()--)> >
    \n-
    182 decltype(auto) operator--(int) { return aligned<align>(value_--); }
    \n-
    183
    \n-
    184 // unary operators
    \n-
    185 template<class U = T,
    \n-
    186 class = std::void_t<decltype(+std::declval<const U&>())> >
    \n-
    187 decltype(auto) operator+() const { return aligned<align>(+value_); }
    \n-
    188
    \n-
    189 template<class U = T,
    \n-
    190 class = std::void_t<decltype(-std::declval<const U&>())> >
    \n-
    191 decltype(auto) operator-() const { return aligned<align>(-value_); }
    \n-
    192
    \n-
    193 /*
    \n-
    194 * silence warnings from GCC about using `~` on a bool
    \n-
    195 * (when instantiated for T=bool)
    \n-
    196 */
    \n-
    197#if __GNUC__ >= 7
    \n-
    198# pragma GCC diagnostic push
    \n-
    199# pragma GCC diagnostic ignored "-Wbool-operation"
    \n-
    200#endif
    \n-
    201#ifdef __clang__
    \n-
    202# pragma clang diagnostic push
    \n-
    203# pragma clang diagnostic ignored "-Wbool-operation"
    \n-
    204#endif
    \n-
    205 template<class U = T,
    \n-
    206 class = std::void_t<decltype(~std::declval<const U&>())> >
    \n-
    207 decltype(auto) operator~() const { return aligned<align>(~value_); }
    \n-
    208#if __GNUC__ >= 7
    \n-
    209# pragma GCC diagnostic pop
    \n-
    210#endif
    \n-
    211#ifdef __clang__
    \n-
    212# pragma clang diagnostic pop
    \n-
    213#endif
    \n-
    214
    \n-
    215 template<class U = T,
    \n-
    216 class = std::void_t<decltype(!std::declval<const U&>())> >
    \n-
    217 decltype(auto) operator!() const { return aligned<align>(!value_); }
    \n-
    218
    \n-
    219 // assignment operators
    \n-
    \n-
    220#define DUNE_ASSIGN_OP(OP) \\
    \n-
    221 template<class U, std::size_t uAlign, \\
    \n-
    222 class = std::enable_if_t< \\
    \n-
    223 ( uAlign <= align && \\
    \n-
    224 sizeof(std::declval<T&>() OP std::declval<U>()) ) \\
    \n-
    225 > > \\
    \n-
    226 AlignedNumber &operator OP(const AlignedNumber<U, uAlign> &u) \\
    \n-
    227 { \\
    \n-
    228 value_ OP U(u); \\
    \n-
    229 return *this; \\
    \n-
    230 } \\
    \n-
    231 \\
    \n-
    232 template<class U, \\
    \n-
    233 class = std::void_t<decltype(std::declval<T&>() OP \\
    \n-
    234 std::declval<U>())> > \\
    \n-
    235 AlignedNumber &operator OP(const U &u) \\
    \n-
    236 { \\
    \n-
    237 value_ OP u; \\
    \n-
    238 return *this; \\
    \n-
    239 } \\
    \n-
    240 \\
    \n-
    241 static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    \n-
    242
    \n-\n-\n-
    245
    \n-\n-
    247 DUNE_ASSIGN_OP(/=);
    \n-
    248 DUNE_ASSIGN_OP(%=);
    \n-
    249
    \n-\n-
    251 DUNE_ASSIGN_OP(&=);
    \n-
    252 DUNE_ASSIGN_OP(|=);
    \n-
    253
    \n-\n-\n+\n+
    151 public:
    \n+
    152 StreamWrap(std::ostream& _out) : out(_out) { }
    \n+
    153 std::ostream& out;
    \n+\n+
    155 };
    \n+
    \n+
    156
    \n+
    \n+\n+
    159 // !!! should be protected somehow but that won't be easy
    \n+
    160 public:
    \n+\n+
    163
    \n+\n+
    166
    \n+
    168 bool _tied;
    \n+
    169
    \n+
    171 unsigned int _tied_streams;
    \n+
    172 };
    \n+
    \n+
    173
    \n+
    188 template <DebugLevel thislevel = 1,
    \n+
    189 DebugLevel dlevel = 1,
    \n+
    190 DebugLevel alevel = 1,
    \n+
    191 template<DebugLevel, DebugLevel> class activator = greater_or_equal>
    \n+
    \n+\n+
    193 public:
    \n+
    \n+
    199 DebugStream(std::ostream& out = std::cerr) {
    \n+
    200 // start a new list of streams
    \n+
    201 current = new StreamWrap(out);
    \n+
    202 current->next = 0;
    \n+
    203
    \n+
    204 // check if we are above the default activation level
    \n+
    205 _active = activator<thislevel,alevel>::value;
    \n+
    206
    \n+
    207 // we're not tied to another DebugStream
    \n+
    208 _tied = false;
    \n+
    209
    \n+
    210 // no child streams yet
    \n+
    211 _tied_streams = 0;
    \n+
    212 }
    \n+
    \n+
    213
    \n+
    \n+\n+
    220 std::ostream& fallback = std::cerr)
    \n+
    221 {
    \n+
    222 // start a new list of streams
    \n+
    223 current = new StreamWrap(fallback);
    \n+
    224 current->next = 0;
    \n+
    225
    \n+
    226 // check if we are above the default activation level
    \n+
    227 _active = activator<thislevel,alevel>::value;
    \n+
    228 _tied_streams = 0;
    \n+
    229
    \n+
    230 // tie to the provided stream
    \n+
    231 _tied = true;
    \n+
    232 tiedstate = &master;
    \n+
    233 tiedstate->_tied_streams++;
    \n+
    234 }
    \n+
    \n+
    235
    \n+
    \n+\n+
    244 {
    \n+
    245 // untie
    \n+
    246 if (_tied)
    \n+
    247 tiedstate->_tied_streams--;
    \n+
    248 else {
    \n+
    249 // check if somebody still ties to us...
    \n+
    250 if (_tied_streams != 0)
    \n+
    251 {
    \n+
    252 std::cerr << "DebugStream destructor is called while other streams are still tied to it. Terminating!" << std::endl;
    \n+
    253 std::terminate();
    \n+
    254 }
    \n+
    255 }
    \n
    256
    \n-
    257#undef DUNE_ASSIGN_OP
    \n-
    258 };
    \n+
    257 // remove ostream-stack
    \n+
    258 while (current != 0) {
    \n+
    259 StreamWrap *s = current;
    \n+\n+
    261 delete s;
    \n+
    262 }
    \n+
    263 }
    \n+
    \n+
    264
    \n+
    266 template <class T>
    \n+
    \n+
    267 DebugStream& operator<<(const T data) {
    \n+
    268 // remove the following code if stream wasn't compiled active
    \n+
    269 if (activator<thislevel, dlevel>::value) {
    \n+
    270 if (! _tied) {
    \n+
    271 if (_active)
    \n+
    272 current->out << data;
    \n+
    273 } else {
    \n+
    274 if (_active && tiedstate->_active)
    \n+
    275 tiedstate->current->out << data;
    \n+
    276 }
    \n+
    277 }
    \n+
    278
    \n+
    279 return *this;
    \n+
    280 }
    \n+
    \n+
    281
    \n+
    \n+
    289 DebugStream& operator<<(const int data) {
    \n+
    290 // remove the following code if stream wasn't compiled active
    \n+
    291 if (activator<thislevel, dlevel>::value) {
    \n+
    292 if (! _tied) {
    \n+
    293 if (_active)
    \n+
    294 current->out << data;
    \n+
    295 } else {
    \n+
    296 if (_active && tiedstate->_active)
    \n+
    297 tiedstate->current->out << data;
    \n+
    298 }
    \n+
    299 }
    \n+
    300
    \n+
    301 return *this;
    \n+
    302 }
    \n
    \n-
    259
    \n-
    260 // binary operators
    \n-
    \n-
    261#define DUNE_BINARY_OP(OP) \\
    \n-
    262 template<class T, std::size_t tAlign, class U, std::size_t uAlign, \\
    \n-
    263 class = std::void_t<decltype(std::declval<T>() \\
    \n-
    264 OP std::declval<U>())> > \\
    \n-
    265 decltype(auto) \\
    \n-
    266 operator OP(const AlignedNumber<T, tAlign> &t, \\
    \n-
    267 const AlignedNumber<U, uAlign> &u) \\
    \n-
    268 { \\
    \n-
    269 /* can't use std::max(); not constexpr */ \\
    \n-
    270 return aligned<(tAlign > uAlign ? tAlign : uAlign)>(T(t) OP U(u)); \\
    \n-
    271 } \\
    \n-
    272 \\
    \n-
    273 template<class T, class U, std::size_t uAlign, \\
    \n-
    274 class = std::void_t<decltype(std::declval<T>() \\
    \n-
    275 OP std::declval<U>())> > \\
    \n-
    276 decltype(auto) \\
    \n-
    277 operator OP(const T &t, const AlignedNumber<U, uAlign> &u) \\
    \n-
    278 { \\
    \n-
    279 return aligned<uAlign>(t OP U(u)); \\
    \n-
    280 } \\
    \n-
    281 \\
    \n-
    282 template<class T, std::size_t tAlign, class U, \\
    \n-
    283 class = std::void_t<decltype(std::declval<T>() \\
    \n-
    284 OP std::declval<U>())> > \\
    \n-
    285 decltype(auto) \\
    \n-
    286 operator OP(const AlignedNumber<T, tAlign> &t, const U &u) \\
    \n-
    287 { \\
    \n-
    288 return aligned<tAlign>(T(t) OP u); \\
    \n-
    289 } \\
    \n-
    290 \\
    \n-
    291 static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    \n-
    292
    \n-\n-\n-
    295
    \n-\n-\n-\n-
    299
    \n-\n-\n-\n
    303
    \n-\n-\n-
    306
    \n-\n-\n-\n-\n-\n-\n-
    313
    \n-\n-
    315 DUNE_BINARY_OP(||);
    \n-
    316
    \n-
    317#undef DUNE_BINARY_OP
    \n+
    \n+
    305 DebugStream& operator<<(std::ostream& (*f)(std::ostream&)) {
    \n+
    306 if (activator<thislevel, dlevel>::value) {
    \n+
    307 if (! _tied) {
    \n+
    308 if (_active)
    \n+
    309 f(current->out);
    \n+
    310 } else {
    \n+
    311 if (_active && tiedstate->_active)
    \n+
    312 f(tiedstate->current->out);
    \n+
    313 }
    \n+
    314 }
    \n+
    315
    \n+
    316 return *this;
    \n+
    317 }
    \n+
    \n
    318
    \n-
    320 //
    \n-
    321 // Overloads for the functions provided by the standard library
    \n-
    322 //
    \n-
    323#define DUNE_UNARY_FUNC(name) \\
    \n-
    324 template<class T, std::size_t align> \\
    \n-
    325 decltype(auto) name(const AlignedNumber<T, align> &u) \\
    \n-
    326 { \\
    \n-
    327 using std::name; \\
    \n-
    328 return aligned<align>(name(T(u))); \\
    \n-
    329 } \\
    \n-
    330 static_assert(true, "Require semicolon to unconfuse editors")
    \n-
    331
    \n-
    332 //
    \n-
    333 // <cmath> functions
    \n-
    334 //
    \n-
    335
    \n-
    336 // note: only unary functions are provided at the moment. Getting all the
    \n-
    337 // overloads right for functions with more than one argument is tricky.
    \n-
    338 // All <cmath> functions appear in the list below in the order they are
    \n-
    339 // listed in in the standard, but the unimplemented ones are commented
    \n-
    340 // out.
    \n-
    341
    \n-
    342 // note: abs is provided by both <cstdlib> (for integer) and <cmath> (for
    \n-
    343 // floating point). This overload works for both.
    \n-
    344 DUNE_UNARY_FUNC(abs);
    \n-\n-\n-\n-\n-\n-
    350 // atan2
    \n-\n-\n-\n-
    354 // copysign
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    363 // fdim
    \n-\n-
    365 // fma
    \n-
    366 // fmax
    \n-
    367 // fmin
    \n-
    368 // fmod
    \n-
    369 // frexp
    \n-
    370 // hypos
    \n-\n-
    372 // ldexp
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-
    383 // modf
    \n-
    384 DUNE_UNARY_FUNC(nearbyint);
    \n-
    385 // nextafter
    \n-
    386 // nexttoward
    \n-
    387 // pow
    \n-
    388 // remainder
    \n-
    389 // remquo
    \n-\n-\n-
    392 // scalbln
    \n-
    393 // scalbn
    \n-\n-\n-\n-\n-\n-\n-\n-
    401
    \n-\n-\n-\n-\n-\n-
    407
    \n-
    408 // isgreater
    \n-
    409 // isgreaterequal
    \n-
    410 // isless
    \n-
    411 // islessequal
    \n-
    412 // islessgreater
    \n-
    413 // isunordered
    \n-
    414
    \n-
    415 //
    \n-
    416 // <complex> functions
    \n-
    417 //
    \n-
    418
    \n-
    419 // not all functions are implemented, and unlike for <cmath>, no
    \n-
    420 // comprehensive list is provided
    \n-\n-
    422
    \n-
    423#undef DUNE_UNARY_FUNC
    \n-
    424
    \n-
    425 // We need to overload min() and max() since they require types to be
    \n-
    426 // LessThanComparable, which requires `a<b` to be "convertible to bool".
    \n-
    427 // That wording seems to be a leftover from C++03, and today is probably
    \n-
    428 // equivalent to "implicitly convertible". There is also issue 2114
    \n-
    429 // <https://cplusplus.github.io/LWG/issue2114> in the standard (still open
    \n-
    430 // as of 2018-07-06), which strives to require both "implicitly" and
    \n-
    431 // "contextually" convertible -- plus a few other things.
    \n-
    432 //
    \n-
    433 // We do not want our debug type to automatically decay to the underlying
    \n-
    434 // type, so we do not want to make the conversion non-explicit. So the
    \n-
    435 // only option left is to overload min() and max().
    \n+
    \n+\n+
    321 if (activator<thislevel, dlevel>::value) {
    \n+
    322 if (! _tied) {
    \n+
    323 if (_active)
    \n+
    324 current->out.flush();
    \n+
    325 } else {
    \n+
    326 if (_active && tiedstate->_active)
    \n+
    327 tiedstate->current->out.flush();
    \n+
    328 }
    \n+
    329 }
    \n+
    330
    \n+
    331 return *this;
    \n+
    332 }
    \n+
    \n+
    333
    \n+
    \n+
    335 void push(bool b) {
    \n+
    336 // are we at all active?
    \n+
    337 if (activator<thislevel,alevel>::value) {
    \n+
    338 _actstack.push(_active);
    \n+
    339 _active = b;
    \n+
    340 } else {
    \n+
    341 // stay off
    \n+
    342 _actstack.push(false);
    \n+
    343 }
    \n+
    344 }
    \n+
    \n+
    345
    \n+
    \n+
    349 void pop() {
    \n+
    350 if (_actstack.empty())
    \n+
    351 DUNE_THROW(DebugStreamError, "No previous activation setting!");
    \n+
    352
    \n+
    353 _active = _actstack.top();
    \n+
    354 _actstack.pop();
    \n+
    355 }
    \n+
    \n+
    356
    \n+
    \n+
    363 bool active() const {
    \n+
    364 return activator<thislevel, dlevel>::value && _active;
    \n+
    365 }
    \n+
    \n+
    366
    \n+
    \n+
    371 void attach(std::ostream& stream) {
    \n+
    372 if (_tied)
    \n+
    373 DUNE_THROW(DebugStreamError, "Cannot attach to a tied stream!");
    \n+
    374
    \n+
    375 StreamWrap* newcurr = new StreamWrap(stream);
    \n+
    376 newcurr->next = current;
    \n+
    377 current = newcurr;
    \n+
    378 }
    \n+
    \n+
    379
    \n+
    \n+
    383 void detach() {
    \n+
    384 if (current->next == 0)
    \n+
    385 DUNE_THROW(DebugStreamError, "Cannot detach initial stream!");
    \n+
    386 if (_tied)
    \n+
    387 DUNE_THROW(DebugStreamError, "Cannot detach a tied stream!");
    \n+
    388
    \n+
    389 StreamWrap* old = current;
    \n+\n+
    391 delete old;
    \n+
    392 }
    \n+
    \n+
    393
    \n+
    \n+\n+
    398 if (to._tied)
    \n+
    399 DUNE_THROW(DebugStreamError, "Cannot tie to an already tied stream!");
    \n+
    400 if (_tied)
    \n+
    401 DUNE_THROW(DebugStreamError, "Stream already tied: untie first!");
    \n+
    402
    \n+
    403 _tied = true;
    \n+
    404 tiedstate = &to;
    \n+
    405
    \n+
    406 // tell master class
    \n+
    407 tiedstate->_tied_streams++;
    \n+
    408 }
    \n+
    \n+
    409
    \n+
    \n+
    413 void untie() {
    \n+
    414 if(! _tied)
    \n+
    415 DUNE_THROW(DebugStreamError, "Cannot untie, stream is not tied!");
    \n+
    416
    \n+
    417 tiedstate->_tied_streams--;
    \n+
    418 _tied = false;
    \n+
    419 tiedstate = 0;
    \n+
    420 }
    \n+
    \n+
    421
    \n+
    422 private:
    \n+
    424 DebugStreamState* tiedstate;
    \n+
    425
    \n+
    430 std::stack<bool> _actstack;
    \n+
    431 };
    \n+
    \n+
    432
    \n+
    434}
    \n+
    435
    \n
    436
    \n-
    437 template<class T, std::size_t align>
    \n-
    \n-
    438 auto max(const AlignedNumber<T, align> &a,
    \n-\n-
    440 {
    \n-
    441 using std::max;
    \n-
    442 return aligned<align>(max(T(a), T(b)));
    \n-
    443 }
    \n-
    \n-
    444
    \n-
    445 template<class T, std::size_t align>
    \n-
    \n-
    446 auto max(const T &a, const AlignedNumber<T, align> &b)
    \n-
    447 {
    \n-
    448 using std::max;
    \n-
    449 return aligned<align>(max(a, T(b)));
    \n-
    450 }
    \n-
    \n-
    451
    \n-
    452 template<class T, std::size_t align>
    \n-
    \n-
    453 auto max(const AlignedNumber<T, align> &a, const T &b)
    \n-
    454 {
    \n-
    455 using std::max;
    \n-
    456 return aligned<align>(max(T(a), b));
    \n-
    457 }
    \n-
    \n-
    458
    \n-
    459 template<class T, std::size_t align>
    \n-
    \n-
    460 auto min(const AlignedNumber<T, align> &a,
    \n-\n-
    462 {
    \n-
    463 using std::min;
    \n-
    464 return aligned<align>(min(T(a), T(b)));
    \n-
    465 }
    \n-
    \n-
    466
    \n-
    467 template<class T, std::size_t align>
    \n-
    \n-
    468 auto min(const T &a, const AlignedNumber<T, align> &b)
    \n-
    469 {
    \n-
    470 using std::min;
    \n-
    471 return aligned<align>(min(a, T(b)));
    \n-
    472 }
    \n-
    \n-
    473
    \n-
    474 template<class T, std::size_t align>
    \n-
    \n-
    475 auto min(const AlignedNumber<T, align> &a, const T &b)
    \n-
    476 {
    \n-
    477 using std::min;
    \n-
    478 return aligned<align>(min(T(a), b));
    \n-
    479 }
    \n-
    \n-
    480
    \n-
    481 } // namespace AlignedNumberImpl
    \n-
    482
    \n-
    483 // SIMD-like functions from "conditional.hh"
    \n-
    484 template<class T, std::size_t align>
    \n-
    485 AlignedNumber<T, align>
    \n-
    \n-\n-\n-
    488 {
    \n-
    489 return b ? v1 : v2;
    \n-
    490 }
    \n-
    \n-
    491
    \n-
    492 // SIMD-like functions from "rangeutilities.hh"
    \n-
    493 template<class T, std::size_t align>
    \n-
    \n-\n-
    495 {
    \n-
    496 return T(val);
    \n-
    497 }
    \n-
    \n-
    498
    \n-
    499 template<class T, std::size_t align>
    \n-
    \n-\n-
    501 {
    \n-
    502 return T(val);
    \n-
    503 }
    \n-
    \n-
    504
    \n-
    505 template<std::size_t align>
    \n-
    \n-\n-
    507 {
    \n-
    508 return bool(val);
    \n-
    509 }
    \n-
    \n-
    510
    \n-
    511 template<std::size_t align>
    \n-
    \n-\n-
    513 {
    \n-
    514 return bool(val);
    \n-
    515 }
    \n-
    \n-
    516
    \n-
    517 // SIMD-like functionality from "simd/interface.hh"
    \n-
    \n-
    518 namespace Simd {
    \n-
    \n-
    519 namespace Overloads {
    \n-
    520
    \n-
    521 template<class T, std::size_t align>
    \n-\n-
    523
    \n-
    524 template<class U, class T, std::size_t align>
    \n-
    \n-
    525 struct RebindType<U, AlignedNumber<T, align> > {
    \n-\n-
    527 };
    \n-
    \n-
    528
    \n-
    529 template<class T, std::size_t align>
    \n-
    530 struct LaneCount<AlignedNumber<T, align> > : index_constant<1> {};
    \n-
    531
    \n-
    532 template<class T, std::size_t align>
    \n-
    \n-\n-
    534 {
    \n-
    535 assert(l == 0);
    \n-
    536 return v.value();
    \n-
    537 }
    \n-
    \n-
    538
    \n-
    539 template<class T, std::size_t align>
    \n-
    \n-
    540 T lane(ADLTag<5>, std::size_t l, const AlignedNumber<T, align> &v)
    \n-
    541 {
    \n-
    542 assert(l == 0);
    \n-
    543 return v.value();
    \n-
    544 }
    \n-
    \n-
    545
    \n-
    546 template<class T, std::size_t align>
    \n-\n-
    \n-\n-
    549 const AlignedNumber<T, align> &ifTrue,
    \n-
    550 const AlignedNumber<T, align> &ifFalse)
    \n-
    551 {
    \n-
    552 return mask ? ifTrue : ifFalse;
    \n-
    553 }
    \n-
    \n-
    554
    \n-
    555 template<std::size_t align>
    \n-
    \n-\n-
    557 {
    \n-
    558 return bool(mask);
    \n-
    559 }
    \n-
    \n-
    560
    \n-
    561 } // namespace Overloads
    \n-
    \n-
    562
    \n-
    563 } // namespace Simd
    \n-
    \n-
    564
    \n-
    565} // namespace Dune
    \n-
    566
    \n-
    567#endif // DUNE_DEBUGALIGN_HH
    \n-
    #define DUNE_BINARY_OP(OP)
    Definition debugalign.hh:261
    \n-
    #define DUNE_UNARY_FUNC(name)
    \n-
    #define DUNE_ASSIGN_OP(OP)
    Definition debugalign.hh:220
    \n-\n-
    A free function to provide the demangled class name of a given object or type as a string.
    \n-
    Traits for type conversions and type information.
    \n-
    Basic definitions for SIMD Implementations.
    \n-
    Default implementations for SIMD Implementations.
    \n-
    std::integral_constant< std::size_t, i > index_constant
    An index constant with value i.
    Definition indices.hh:29
    \n-
    std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
    Definition bigunsignedint.hh:278
    \n-
    Mask< V > mask(ADLTag< 0, std::is_same< V, Mask< V > >::value >, const V &v)
    implements Simd::mask()
    Definition defaults.hh:153
    \n-
    STL namespace.
    \n+
    437#endif
    \n+
    A few common exception classes.
    \n+
    StreamWrap(std::ostream &_out)
    Definition debugstream.hh:152
    \n+
    DebugStream(std::ostream &out=std::cerr)
    Create a DebugStream and set initial output stream.
    Definition debugstream.hh:199
    \n+
    void untie()
    Untie stream.
    Definition debugstream.hh:413
    \n+
    DebugStream & flush()
    pass on flush to underlying output stream
    Definition debugstream.hh:320
    \n+
    void attach(std::ostream &stream)
    set output to a different stream.
    Definition debugstream.hh:371
    \n+
    void detach()
    detach current output stream and restore to previous stream
    Definition debugstream.hh:383
    \n+
    static constexpr bool value
    Definition debugstream.hh:143
    \n+
    std::ostream & out
    Definition debugstream.hh:153
    \n+
    void pop()
    restore previously set activation flag
    Definition debugstream.hh:349
    \n+
    bool active() const
    reports if this stream will produce output
    Definition debugstream.hh:363
    \n+
    bool _active
    flag to switch output during runtime
    Definition debugstream.hh:165
    \n+
    unsigned int _tied_streams
    how many streams are tied to this state
    Definition debugstream.hh:171
    \n+
    void tie(DebugStreamState &to)
    Tie a stream to this one.
    Definition debugstream.hh:397
    \n+
    void push(bool b)
    set activation flag and store old value
    Definition debugstream.hh:335
    \n+
    unsigned int DebugLevel
    Type for debug levels.
    Definition debugstream.hh:118
    \n+
    bool _tied
    are we tied to another DebugStream?
    Definition debugstream.hh:168
    \n+
    StreamWrap * current
    current output stream and link to possibly pushed old output streams
    Definition debugstream.hh:162
    \n+
    DebugStream & operator<<(const T data)
    Generic types are passed on to current output stream.
    Definition debugstream.hh:267
    \n+
    static constexpr bool value
    Definition debugstream.hh:131
    \n+
    ~DebugStream()
    Destroy stream.
    Definition debugstream.hh:243
    \n+
    DebugStream(DebugStreamState &master, std::ostream &fallback=std::cerr)
    Create a DebugStream and directly tie to another DebugStream.
    Definition debugstream.hh:219
    \n+
    DebugStream & operator<<(const int data)
    explicit specialization so that enums can be printed
    Definition debugstream.hh:289
    \n+
    DebugStream & operator<<(std::ostream &(*f)(std::ostream &))
    pass on manipulators to underlying output stream
    Definition debugstream.hh:305
    \n+
    StreamWrap * next
    Definition debugstream.hh:154
    \n+
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    void violatedAlignment(const char *className, std::size_t expectedAlignment, const void *address)
    called when an alignment violation is detected
    Definition debugalign.cc:36
    \n-
    bool any_true(const AlignedNumber< bool, align > &val)
    Definition debugalign.hh:506
    \n-
    bool all_true(const AlignedNumber< bool, align > &val)
    Definition debugalign.hh:512
    \n-
    std::string className()
    Provide the demangled class name of a type T as a string.
    Definition classname.hh:47
    \n-
    static constexpr auto debugAlignment
    an alignment large enough to trigger alignment errors
    Definition debugalign.hh:97
    \n-
    const T1 cond(bool b, const T1 &v1, const T2 &v2)
    conditional evaluate
    Definition conditional.hh:28
    \n-
    AlignedNumber< T, align > aligned(T value)
    align a value to a certain alignment
    Definition debugalign.hh:114
    \n-
    ViolatedAlignmentHandler & violatedAlignmentHandler()
    access the handler called by violatedAlignment()
    Definition debugalign.cc:30
    \n-
    bool isAligned(const void *p, std::size_t align)
    check whether an address conforms to the given alignment
    Definition debugalign.hh:56
    \n-
    T max_value(const AlignedNumber< T, align > &val)
    Definition debugalign.hh:494
    \n-
    std::function< void(const char *, std::size_t, const void *)> ViolatedAlignmentHandler
    type of the handler called by violatedAlignment()
    Definition debugalign.hh:31
    \n-
    T min_value(const AlignedNumber< T, align > &val)
    Definition debugalign.hh:500
    \n-
    bool anyTrue(ADLTag< 5 >, const AlignedNumber< bool, align > &mask)
    Definition debugalign.hh:556
    \n-
    T & lane(ADLTag< 5 >, std::size_t l, AlignedNumber< T, align > &v)
    Definition debugalign.hh:533
    \n-
    Whether this type acts as a scalar in the context of (hierarchically blocked) containers.
    Definition typetraits.hh:194
    \n-
    CRTP base mixin class to check alignment.
    Definition debugalign.hh:66
    \n-
    aligned wrappers for arithmetic types
    Definition debugalign.hh:128
    \n-\n-\n-
    decltype(auto) operator+() const
    Definition debugalign.hh:187
    \n-\n-
    decltype(auto) operator--(int)
    Definition debugalign.hh:182
    \n-
    DUNE_ASSIGN_OP * DUNE_ASSIGN_OP(/=);DUNE_ASSIGN_OP(%=
    \n-
    decltype(auto) operator++(int)
    Definition debugalign.hh:179
    \n-
    decltype(auto) operator!() const
    Definition debugalign.hh:217
    \n-
    T & value()
    Definition debugalign.hh:145
    \n-
    const T & value() const
    Definition debugalign.hh:144
    \n-
    DUNE_ASSIGN_OP^ DUNE_ASSIGN_OP(&=);DUNE_ASSIGN_OP(|=
    \n-
    friend std::basic_istream< charT, Traits > & operator>>(std::basic_istream< charT, Traits > &str, AlignedNumber &u)
    Definition debugalign.hh:150
    \n-\n-\n-
    decltype(auto) operator~() const
    Definition debugalign.hh:207
    \n-
    AlignedNumber(T value)
    Definition debugalign.hh:133
    \n-
    AlignedNumber(const AlignedNumber< U, uAlign > &o)
    Definition debugalign.hh:137
    \n-
    decltype(auto) operator-() const
    Definition debugalign.hh:191
    \n-\n-
    Tag used to force late-binding lookup in Dune::Simd::Overloads.
    Definition base.hh:182
    \n-
    should have a member type type
    Definition standard.hh:60
    \n-
    should have a member type type
    Definition standard.hh:67
    \n-
    should be derived from a Dune::index_constant
    Definition standard.hh:74
    \n+
    Greater or equal template test.
    Definition debugstream.hh:130
    \n+
    activate if current and mask have common bits switched on.
    Definition debugstream.hh:142
    \n+
    standard exception for the debugstream
    Definition debugstream.hh:148
    \n+
    Definition debugstream.hh:150
    \n+
    Intermediate class to implement tie-operation of DebugStream.
    Definition debugstream.hh:158
    \n+
    Generic class to implement debug output streams.
    Definition debugstream.hh:192
    \n+
    Default exception class for I/O errors.
    Definition exceptions.hh:231
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,701 +1,375 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-debugalign.hh\n+debugstream.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_DEBUGALIGN_HH\n-6#define DUNE_DEBUGALIGN_HH\n-7\n-8#include \n-9#include \n-10#include \n-11#include \n-12#include \n-13#include \n-14#include // abs\n-15#include \n-16#include \n-17#include \n-18#include \n-19#include \n-20\n-21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bl_\ba_\bs_\bs_\bn_\ba_\bm_\be_\b._\bh_\bh>\n-22#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n-23#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bm_\bd_\b/_\bb_\ba_\bs_\be_\b._\bh_\bh>\n-24#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bi_\bm_\bd_\b/_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bs_\b._\bh_\bh>\n-25#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-26\n-27namespace _\bD_\bu_\bn_\be {\n-28\n-_\b3_\b0 using _\bV_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br =\n-31 std::function;\n-32\n-34\n-40 _\bV_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br &_\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br();\n-41\n-43\n-52 void _\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt(const char *_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be, std::size_t expectedAlignment,\n-53 const void *address);\n-54\n-_\b5_\b6 inline bool _\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd(const void *p, std::size_t align)\n-57 {\n-58 void* aligned_p = (void*)p;\n-59 std::size_t space = align*2;\n-60 return p == std::align(align, align, aligned_p, space);\n-61 }\n-62\n-64 template\n-_\b6_\b5 struct alignas(align) _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bB_\ba_\bs_\be\n-66 {\n-_\b7_\b5 static void* operator new(std::size_t count, void* ptr) {\n-76 if(!_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd(ptr, align))\n-77 _\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt(className().c_str(), align, ptr);\n-78 return ::operator new(count*sizeof(Impl), ptr);\n-79 }\n-80\n-_\b8_\b9 static void* operator new[](std::size_t count, void* ptr) {\n-90 if(!_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd(ptr, align))\n-91 _\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt(className().c_str(), align, ptr);\n-92 return ::operator new[](count*sizeof(Impl), ptr);\n-93 }\n-94 };\n-95\n-_\b9_\b7 static constexpr auto _\bd_\be_\bb_\bu_\bg_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt = 2*alignof(std::max_align_t);\n-98\n-_\b9_\b9 namespace AlignedNumberImpl {\n-100\n-101 template\n-102 class _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br;\n-103\n-104 } // namespace AlignedNumberImpl\n-105\n-106 using _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br;\n-107\n-108 template\n-_\b1_\b0_\b9 struct _\bI_\bs_\bN_\bu_\bm_\bb_\be_\br>\n-110 : public std::true_type {};\n-111\n-113 template\n-_\b1_\b1_\b4 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> _\ba_\bl_\bi_\bg_\bn_\be_\bd(T value) { return { std::move(value) }; }\n-115\n-116 // The purpose of this namespace is to move the `` function\n-overloads\n-117 // out of namespace `Dune`. This avoids problems where people called\n-118 // e.g. `sqrt(1.0)` inside the `Dune` namespace, without first doing `using\n-119 // std::sqrt;`. Without any `Dune::sqrt()`, such a use will find\n-120 // `::sqrt()`, but with `Dune::sqrt()` it will find only `Dune::sqrt()`,\n-121 // which does not have an overload for `double`.\n-122 namespace AlignedNumberImpl {\n-123\n-125 template\n-_\b1_\b2_\b6 class _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br\n-127 : public _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bB_\ba_\bs_\be >\n-128 {\n-129 T value_;\n-130\n-131 public:\n-_\b1_\b3_\b2 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br() = default;\n-_\b1_\b3_\b3 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br(T value) : value_(_\bs_\bt_\bd::move(value)) {}\n-134 template= uAlign) &&\n-136 std::is_convertible::value> >\n-_\b1_\b3_\b7 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bU_\b,_\b _\bu_\bA_\bl_\bi_\bg_\bn_\b> &o) : value_(U(o)) {}\n-138\n-139 // accessors\n-140 template::value> >\n-_\b1_\b4_\b2 explicit operator U() const { return value_; }\n-143\n-_\b1_\b4_\b4 const T &_\bv_\ba_\bl_\bu_\be() const { return value_; }\n-_\b1_\b4_\b5 T &_\bv_\ba_\bl_\bu_\be() { return value_; }\n+5\n+6#ifndef DUNE_DEBUGSTREAM_HH\n+7#define DUNE_DEBUGSTREAM_HH\n+8\n+13#include \n+14#include \n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+17\n+18namespace _\bD_\bu_\bn_\be {\n+19\n+_\b1_\b1_\b8 typedef unsigned int _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl;\n+119\n+129 template \n+_\b1_\b3_\b0 struct _\bg_\br_\be_\ba_\bt_\be_\br_\b__\bo_\br_\b__\be_\bq_\bu_\ba_\bl {\n+_\b1_\b3_\b1 constexpr static bool _\bv_\ba_\bl_\bu_\be = (current >= threshold);\n+132 };\n+133\n+134\n+141 template \n+_\b1_\b4_\b2 struct _\bc_\bo_\bm_\bm_\bo_\bn_\b__\bb_\bi_\bt_\bs {\n+_\b1_\b4_\b3 constexpr static bool _\bv_\ba_\bl_\bu_\be = ((current & mask) != 0);\n+144 };\n+145\n 146\n-147 // I/O\n-148 template\n-149 friend std::basic_istream&\n-_\b1_\b5_\b0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(std::basic_istream& str, _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br &u)\n-151 {\n-152 return str >> u.value_;\n-153 }\n-154\n-155 template\n-_\b1_\b5_\b6 friend std::basic_ostream&\n-157 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::basic_ostream& str,\n-158 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br &u)\n-159 {\n-160 return str << u.value_;\n-161 }\n-162\n-163 // The trick with `template >` is\n-164 // needed because at least g++-4.9 seems to evaluates a default argument\n-165 // in `template >` as soon as possible and\n-will\n-166 // error out if `expr(T)` is invalid. E.g. for `expr(T)` =\n-167 // `decltype(--std::declval())`, instantiating `AlignedNumber`\n-168 // will result in an unrecoverable error (`--` cannot be applied to a\n-169 // `bool`).\n-170\n-171 // Increment, decrement\n-172 template())> >\n-_\b1_\b7_\b3 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br &operator++() { ++value_; return *this; }\n-174\n-175 template())> >\n-_\b1_\b7_\b6 _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br &operator--() { --value_; return *this; }\n-177\n-178 template()++)> >\n-_\b1_\b7_\b9 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+(int) { return aligned(value_++); }\n-180\n-181 template()--)> >\n-_\b1_\b8_\b2 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-(int) { return aligned(value_--); }\n-183\n-184 // unary operators\n-185 template())> >\n-_\b1_\b8_\b7 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+() const { return aligned(+value_); }\n-188\n-189 template())> >\n-_\b1_\b9_\b1 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const { return aligned(-value_); }\n-192\n-193 /*\n-194 * silence warnings from GCC about using `~` on a bool\n-195 * (when instantiated for T=bool)\n-196 */\n-197#if __GNUC__ >= 7\n-198# pragma GCC diagnostic push\n-199# pragma GCC diagnostic ignored \"-Wbool-operation\"\n-200#endif\n-201#ifdef __clang__\n-202# pragma clang diagnostic push\n-203# pragma clang diagnostic ignored \"-Wbool-operation\"\n-204#endif\n-205 template())> >\n-_\b2_\b0_\b7 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b~() const { return aligned(~value_); }\n-208#if __GNUC__ >= 7\n-209# pragma GCC diagnostic pop\n-210#endif\n-211#ifdef __clang__\n-212# pragma clang diagnostic pop\n-213#endif\n-214\n-215 template())> >\n-_\b2_\b1_\b7 decltype(auto) _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!() const { return aligned(!value_); }\n-218\n-219 // assignment operators\n-_\b2_\b2_\b0#define DUNE_ASSIGN_OP(OP) \\\n-221 template() OP std::declval()) ) \\\n-225 > > \\\n-226 AlignedNumber &operator OP(const AlignedNumber &u) \\\n-227 { \\\n-228 value_ OP U(u); \\\n-229 return *this; \\\n-230 } \\\n-231 \\\n-232 template() OP \\\n-234 std::declval())> > \\\n-235 AlignedNumber &operator OP(const U &u) \\\n-236 { \\\n-237 value_ OP u; \\\n-238 return *this; \\\n-239 } \\\n-240 \\\n-241 static_assert(true, \"Require semicolon to unconfuse editors\")\n-242\n-_\b2_\b4_\b3 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(+=);\n-_\b2_\b4_\b4 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(-=);\n-245\n-_\b2_\b4_\b6 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(*=);\n-247 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(/=);\n-248 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(%=);\n-249\n-_\b2_\b5_\b0 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(^=);\n-251 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(&=);\n-252 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(|=);\n-253\n-_\b2_\b5_\b4 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(<<=);\n-_\b2_\b5_\b5 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(>>=);\n+_\b1_\b4_\b8 class _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br : public _\bI_\bO_\bE_\br_\br_\bo_\br {};\n+149\n+_\b1_\b5_\b0 class _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp {\n+151 public:\n+_\b1_\b5_\b2 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp(std::ostream& _out) : _\bo_\bu_\bt(_out) { }\n+_\b1_\b5_\b3 std::ostream& _\bo_\bu_\bt;\n+_\b1_\b5_\b4 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp *_\bn_\be_\bx_\bt;\n+155 };\n+156\n+_\b1_\b5_\b8 class _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be {\n+159 // !!! should be protected somehow but that won't be easy\n+160 public:\n+_\b1_\b6_\b2 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp* _\bc_\bu_\br_\br_\be_\bn_\bt;\n+163\n+_\b1_\b6_\b5 bool _\b__\ba_\bc_\bt_\bi_\bv_\be;\n+166\n+_\b1_\b6_\b8 bool _\b__\bt_\bi_\be_\bd;\n+169\n+_\b1_\b7_\b1 unsigned int _\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs;\n+172 };\n+173\n+188 template <_\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl thislevel = 1,\n+189 _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl dlevel = 1,\n+190 _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl alevel = 1,\n+191 template class activator = _\bg_\br_\be_\ba_\bt_\be_\br_\b__\bo_\br_\b__\be_\bq_\bu_\ba_\bl>\n+_\b1_\b9_\b2 class _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm : public _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be {\n+193 public:\n+_\b1_\b9_\b9 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm(std::ostream& out = std::cerr) {\n+200 // start a new list of streams\n+201 _\bc_\bu_\br_\br_\be_\bn_\bt = new _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp(out);\n+202 _\bc_\bu_\br_\br_\be_\bn_\bt->_\bn_\be_\bx_\bt = 0;\n+203\n+204 // check if we are above the default activation level\n+205 _\b__\ba_\bc_\bt_\bi_\bv_\be = activator::value;\n+206\n+207 // we're not tied to another DebugStream\n+208 _\b__\bt_\bi_\be_\bd = false;\n+209\n+210 // no child streams yet\n+211 _\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs = 0;\n+212 }\n+213\n+_\b2_\b1_\b9 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm (_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be& master,\n+220 std::ostream& fallback = std::cerr)\n+221 {\n+222 // start a new list of streams\n+223 _\bc_\bu_\br_\br_\be_\bn_\bt = new _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp(fallback);\n+224 _\bc_\bu_\br_\br_\be_\bn_\bt->_\bn_\be_\bx_\bt = 0;\n+225\n+226 // check if we are above the default activation level\n+227 _\b__\ba_\bc_\bt_\bi_\bv_\be = activator::value;\n+228 _\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs = 0;\n+229\n+230 // tie to the provided stream\n+231 _\b__\bt_\bi_\be_\bd = true;\n+232 tiedstate = &master;\n+233 tiedstate->_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs++;\n+234 }\n+235\n+_\b2_\b4_\b3 _\b~_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm()\n+244 {\n+245 // untie\n+246 if (_\b__\bt_\bi_\be_\bd)\n+247 tiedstate->_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs--;\n+248 else {\n+249 // check if somebody still ties to us...\n+250 if (_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs != 0)\n+251 {\n+252 std::cerr << \"DebugStream destructor is called while other streams are\n+still tied to it. Terminating!\" << std::endl;\n+253 std::terminate();\n+254 }\n+255 }\n 256\n-257#undef DUNE_ASSIGN_OP\n-258 };\n-259\n-260 // binary operators\n-_\b2_\b6_\b1#define DUNE_BINARY_OP(OP) \\\n-262 template() \\\n-264 OP std::declval())> > \\\n-265 decltype(auto) \\\n-266 operator OP(const AlignedNumber &t, \\\n-267 const AlignedNumber &u) \\\n-268 { \\\n-269 /* can't use std::max(); not constexpr */ \\\n-270 return aligned<(tAlign > uAlign ? tAlign : uAlign)>(T(t) OP U(u)); \\\n-271 } \\\n-272 \\\n-273 template() \\\n-275 OP std::declval())> > \\\n-276 decltype(auto) \\\n-277 operator OP(const T &t, const AlignedNumber &u) \\\n-278 { \\\n-279 return aligned(t OP U(u)); \\\n-280 } \\\n-281 \\\n-282 template() \\\n-284 OP std::declval())> > \\\n-285 decltype(auto) \\\n-286 operator OP(const AlignedNumber &t, const U &u) \\\n-287 { \\\n-288 return aligned(T(t) OP u); \\\n-289 } \\\n-290 \\\n-291 static_assert(true, \"Require semicolon to unconfuse editors\")\n-292\n-_\b2_\b9_\b3 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(+);\n-_\b2_\b9_\b4 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(-);\n-295\n-_\b2_\b9_\b6 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(*);\n-297 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(/);\n-298 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(%);\n-299\n-_\b3_\b0_\b0 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(^);\n-301 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(&);\n-302 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(|);\n+257 // remove ostream-stack\n+258 while (_\bc_\bu_\br_\br_\be_\bn_\bt != 0) {\n+259 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp *s = _\bc_\bu_\br_\br_\be_\bn_\bt;\n+260 _\bc_\bu_\br_\br_\be_\bn_\bt = _\bc_\bu_\br_\br_\be_\bn_\bt->_\bn_\be_\bx_\bt;\n+261 delete s;\n+262 }\n+263 }\n+264\n+266 template \n+_\b2_\b6_\b7 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(const T data) {\n+268 // remove the following code if stream wasn't compiled active\n+269 if (activator::value) {\n+270 if (! _\b__\bt_\bi_\be_\bd) {\n+271 if (_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+272 _\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt << data;\n+273 } else {\n+274 if (_\b__\ba_\bc_\bt_\bi_\bv_\be && tiedstate->_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+275 tiedstate->_\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt << data;\n+276 }\n+277 }\n+278\n+279 return *this;\n+280 }\n+281\n+_\b2_\b8_\b9 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(const int data) {\n+290 // remove the following code if stream wasn't compiled active\n+291 if (activator::value) {\n+292 if (! _\b__\bt_\bi_\be_\bd) {\n+293 if (_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+294 _\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt << data;\n+295 } else {\n+296 if (_\b__\ba_\bc_\bt_\bi_\bv_\be && tiedstate->_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+297 tiedstate->_\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt << data;\n+298 }\n+299 }\n+300\n+301 return *this;\n+302 }\n 303\n-_\b3_\b0_\b4 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(<<);\n-_\b3_\b0_\b5 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(>>);\n-306\n-_\b3_\b0_\b7 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(==);\n-_\b3_\b0_\b8 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(!=);\n-309 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(<);\n-310 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(>);\n-_\b3_\b1_\b1 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(<=);\n-_\b3_\b1_\b2 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(>=);\n-313\n-_\b3_\b1_\b4 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(&&);\n-315 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(||);\n-316\n-317#undef DUNE_BINARY_OP\n+_\b3_\b0_\b5 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream& (*f)(std::ostream&)) {\n+306 if (activator::value) {\n+307 if (! _\b__\bt_\bi_\be_\bd) {\n+308 if (_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+309 f(_\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt);\n+310 } else {\n+311 if (_\b__\ba_\bc_\bt_\bi_\bv_\be && tiedstate->_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+312 f(tiedstate->_\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt);\n+313 }\n+314 }\n+315\n+316 return *this;\n+317 }\n 318\n-320 //\n-321 // Overloads for the functions provided by the standard library\n-322 //\n-323#define DUNE_UNARY_FUNC(name) \\\n-324 template \\\n-325 decltype(auto) name(const AlignedNumber &u) \\\n-326 { \\\n-327 using std::name; \\\n-328 return aligned(name(T(u))); \\\n-329 } \\\n-330 static_assert(true, \"Require semicolon to unconfuse editors\")\n-331\n-332 //\n-333 // functions\n-334 //\n-335\n-336 // note: only unary functions are provided at the moment. Getting all the\n-337 // overloads right for functions with more than one argument is tricky.\n-338 // All functions appear in the list below in the order they are\n-339 // listed in in the standard, but the unimplemented ones are commented\n-340 // out.\n-341\n-342 // note: abs is provided by both (for integer) and (for\n-343 // floating point). This overload works for both.\n-344 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(abs);\n-_\b3_\b4_\b5 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(acos);\n-_\b3_\b4_\b6 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(acosh);\n-_\b3_\b4_\b7 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(asin);\n-_\b3_\b4_\b8 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(asinh);\n-_\b3_\b4_\b9 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(atan);\n-350 // atan2\n-_\b3_\b5_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(atanh);\n-_\b3_\b5_\b2 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cbrt);\n-_\b3_\b5_\b3 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(ceil);\n-354 // copysign\n-_\b3_\b5_\b5 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cos);\n-_\b3_\b5_\b6 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cosh);\n-_\b3_\b5_\b7 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(erf);\n-_\b3_\b5_\b8 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(erfc);\n-_\b3_\b5_\b9 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(exp);\n-_\b3_\b6_\b0 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(exp2);\n-_\b3_\b6_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(expm1);\n-_\b3_\b6_\b2 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(fabs);\n-363 // fdim\n-_\b3_\b6_\b4 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(floor);\n-365 // fma\n-366 // fmax\n-367 // fmin\n-368 // fmod\n-369 // frexp\n-370 // hypos\n-_\b3_\b7_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(ilogb);\n-372 // ldexp\n-_\b3_\b7_\b3 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(lgamma);\n-_\b3_\b7_\b4 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(llrint);\n-_\b3_\b7_\b5 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(llround);\n-_\b3_\b7_\b6 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log);\n-_\b3_\b7_\b7 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log10);\n-_\b3_\b7_\b8 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log1p);\n-_\b3_\b7_\b9 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log2);\n-_\b3_\b8_\b0 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(logb);\n-_\b3_\b8_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(lrint);\n-_\b3_\b8_\b2 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(lround);\n-383 // modf\n-_\b3_\b8_\b4 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(nearbyint);\n-385 // nextafter\n-386 // nexttoward\n-387 // pow\n-388 // remainder\n-389 // remquo\n-_\b3_\b9_\b0 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(rint);\n-_\b3_\b9_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(round);\n-392 // scalbln\n-393 // scalbn\n-_\b3_\b9_\b4 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sin);\n-_\b3_\b9_\b5 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sinh);\n-_\b3_\b9_\b6 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sqrt);\n-_\b3_\b9_\b7 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tan);\n-_\b3_\b9_\b8 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tanh);\n-_\b3_\b9_\b9 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tgamma);\n-_\b4_\b0_\b0 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(trunc);\n-401\n-_\b4_\b0_\b2 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(isfinite);\n-_\b4_\b0_\b3 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(isinf);\n-_\b4_\b0_\b4 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(isnan);\n-_\b4_\b0_\b5 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(isnormal);\n-_\b4_\b0_\b6 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(signbit);\n-407\n-408 // isgreater\n-409 // isgreaterequal\n-410 // isless\n-411 // islessequal\n-412 // islessgreater\n-413 // isunordered\n-414\n-415 //\n-416 // functions\n-417 //\n-418\n-419 // not all functions are implemented, and unlike for , no\n-420 // comprehensive list is provided\n-_\b4_\b2_\b1 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(real);\n-422\n-423#undef DUNE_UNARY_FUNC\n-424\n-425 // We need to overload min() and max() since they require types to be\n-426 // LessThanComparable, which requires `a in the standard (still open\n-430 // as of 2018-07-06), which strives to require both \"implicitly\" and\n-431 // \"contextually\" convertible -- plus a few other things.\n-432 //\n-433 // We do not want our debug type to automatically decay to the underlying\n-434 // type, so we do not want to make the conversion non-explicit. So the\n-435 // only option left is to overload min() and max().\n+_\b3_\b2_\b0 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm& _\bf_\bl_\bu_\bs_\bh() {\n+321 if (activator::value) {\n+322 if (! _\b__\bt_\bi_\be_\bd) {\n+323 if (_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+324 _\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt.flush();\n+325 } else {\n+326 if (_\b__\ba_\bc_\bt_\bi_\bv_\be && tiedstate->_\b__\ba_\bc_\bt_\bi_\bv_\be)\n+327 tiedstate->_\bc_\bu_\br_\br_\be_\bn_\bt->_\bo_\bu_\bt.flush();\n+328 }\n+329 }\n+330\n+331 return *this;\n+332 }\n+333\n+_\b3_\b3_\b5 void _\bp_\bu_\bs_\bh(bool b) {\n+336 // are we at all active?\n+337 if (activator::value) {\n+338 _actstack.push(_\b__\ba_\bc_\bt_\bi_\bv_\be);\n+339 _\b__\ba_\bc_\bt_\bi_\bv_\be = b;\n+340 } else {\n+341 // stay off\n+342 _actstack.push(false);\n+343 }\n+344 }\n+345\n+_\b3_\b4_\b9 void _\bp_\bo_\bp() {\n+350 if (_actstack.empty())\n+351 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"No previous activation setting!\");\n+352\n+353 _\b__\ba_\bc_\bt_\bi_\bv_\be = _actstack.top();\n+354 _actstack.pop();\n+355 }\n+356\n+_\b3_\b6_\b3 bool _\ba_\bc_\bt_\bi_\bv_\be() const {\n+364 return activator::value && _\b__\ba_\bc_\bt_\bi_\bv_\be;\n+365 }\n+366\n+_\b3_\b7_\b1 void _\ba_\bt_\bt_\ba_\bc_\bh(std::ostream& stream) {\n+372 if (_\b__\bt_\bi_\be_\bd)\n+373 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Cannot attach to a tied stream!\");\n+374\n+375 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp* newcurr = new _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp(stream);\n+376 newcurr->_\bn_\be_\bx_\bt = _\bc_\bu_\br_\br_\be_\bn_\bt;\n+377 _\bc_\bu_\br_\br_\be_\bn_\bt = newcurr;\n+378 }\n+379\n+_\b3_\b8_\b3 void _\bd_\be_\bt_\ba_\bc_\bh() {\n+384 if (_\bc_\bu_\br_\br_\be_\bn_\bt->_\bn_\be_\bx_\bt == 0)\n+385 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Cannot detach initial stream!\");\n+386 if (_\b__\bt_\bi_\be_\bd)\n+387 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Cannot detach a tied stream!\");\n+388\n+389 _\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp* old = _\bc_\bu_\br_\br_\be_\bn_\bt;\n+390 _\bc_\bu_\br_\br_\be_\bn_\bt = _\bc_\bu_\br_\br_\be_\bn_\bt->_\bn_\be_\bx_\bt;\n+391 delete old;\n+392 }\n+393\n+_\b3_\b9_\b7 void _\bt_\bi_\be(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be& to) {\n+398 if (to._\b__\bt_\bi_\be_\bd)\n+399 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Cannot tie to an already tied stream!\");\n+400 if (_\b__\bt_\bi_\be_\bd)\n+401 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Stream already tied: untie first!\");\n+402\n+403 _\b__\bt_\bi_\be_\bd = true;\n+404 tiedstate = &to;\n+405\n+406 // tell master class\n+407 tiedstate->_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs++;\n+408 }\n+409\n+_\b4_\b1_\b3 void _\bu_\bn_\bt_\bi_\be() {\n+414 if(! _\b__\bt_\bi_\be_\bd)\n+415 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br, \"Cannot untie, stream is not tied!\");\n+416\n+417 tiedstate->_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs--;\n+418 _\b__\bt_\bi_\be_\bd = false;\n+419 tiedstate = 0;\n+420 }\n+421\n+422 private:\n+424 _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be* tiedstate;\n+425\n+430 std::stack _actstack;\n+431 };\n+432\n+434}\n+435\n 436\n-437 template\n-_\b4_\b3_\b8 auto max(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &a,\n-439 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &b)\n-440 {\n-441 using std::max;\n-442 return aligned(max(T(a), T(b)));\n-443 }\n-444\n-445 template\n-_\b4_\b4_\b6 auto max(const T &a, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &b)\n-447 {\n-448 using std::max;\n-449 return aligned(max(a, T(b)));\n-450 }\n-451\n-452 template\n-_\b4_\b5_\b3 auto max(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &a, const T &b)\n-454 {\n-455 using std::max;\n-456 return aligned(max(T(a), b));\n-457 }\n-458\n-459 template\n-_\b4_\b6_\b0 auto min(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &a,\n-461 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &b)\n-462 {\n-463 using std::min;\n-464 return aligned(min(T(a), T(b)));\n-465 }\n-466\n-467 template\n-_\b4_\b6_\b8 auto min(const T &a, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &b)\n-469 {\n-470 using std::min;\n-471 return aligned(min(a, T(b)));\n-472 }\n-473\n-474 template\n-_\b4_\b7_\b5 auto min(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &a, const T &b)\n-476 {\n-477 using std::min;\n-478 return aligned(min(T(a), b));\n-479 }\n-480\n-481 } // namespace AlignedNumberImpl\n-482\n-483 // SIMD-like functions from \"conditional.hh\"\n-484 template\n-485 AlignedNumber\n-_\b4_\b8_\b6 _\bc_\bo_\bn_\bd(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bb_\bo_\bo_\bl_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &b,\n-487 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &v1, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &v2)\n-488 {\n-489 return b ? v1 : v2;\n-490 }\n-491\n-492 // SIMD-like functions from \"rangeutilities.hh\"\n-493 template\n-_\b4_\b9_\b4 T _\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b>& val)\n-495 {\n-496 return T(val);\n-497 }\n-498\n-499 template\n-_\b5_\b0_\b0 T _\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b>& val)\n-501 {\n-502 return T(val);\n-503 }\n-504\n-505 template\n-_\b5_\b0_\b6 bool _\ba_\bn_\by_\b__\bt_\br_\bu_\be(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bb_\bo_\bo_\bl_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b>& val)\n-507 {\n-508 return bool(val);\n-509 }\n-510\n-511 template\n-_\b5_\b1_\b2 bool _\ba_\bl_\bl_\b__\bt_\br_\bu_\be(const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bb_\bo_\bo_\bl_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b>& val)\n-513 {\n-514 return bool(val);\n-515 }\n-516\n-517 // SIMD-like functionality from \"simd/interface.hh\"\n-_\b5_\b1_\b8 namespace Simd {\n-_\b5_\b1_\b9 namespace Overloads {\n-520\n-521 template\n-_\b5_\b2_\b2 struct _\bS_\bc_\ba_\bl_\ba_\br_\bT_\by_\bp_\be_\b<_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> > { using _\bt_\by_\bp_\be = T; };\n-523\n-524 template\n-_\b5_\b2_\b5 struct _\bR_\be_\bb_\bi_\bn_\bd_\bT_\by_\bp_\be > {\n-_\b5_\b2_\b6 using _\bt_\by_\bp_\be = _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bU_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b>;\n-527 };\n-528\n-529 template\n-_\b5_\b3_\b0 struct _\bL_\ba_\bn_\be_\bC_\bo_\bu_\bn_\bt<_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br > : _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt<1> {};\n-531\n-532 template\n-_\b5_\b3_\b3 T& _\bl_\ba_\bn_\be(_\bA_\bD_\bL_\bT_\ba_\bg_\b<_\b5_\b>, std::size_t l, _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &v)\n-534 {\n-535 assert(l == 0);\n-536 return v._\bv_\ba_\bl_\bu_\be();\n-537 }\n-538\n-539 template\n-_\b5_\b4_\b0 T _\bl_\ba_\bn_\be(_\bA_\bD_\bL_\bT_\ba_\bg_\b<_\b5_\b>, std::size_t l, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &v)\n-541 {\n-542 assert(l == 0);\n-543 return v._\bv_\ba_\bl_\bu_\be();\n-544 }\n-545\n-546 template\n-547 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &\n-_\b5_\b4_\b8 _\bc_\bo_\bn_\bd(_\bA_\bD_\bL_\bT_\ba_\bg_\b<_\b5_\b>, _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bb_\bo_\bo_\bl_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> mask,\n-549 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &ifTrue,\n-550 const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &ifFalse)\n-551 {\n-552 return _\bm_\ba_\bs_\bk ? ifTrue : ifFalse;\n-553 }\n-554\n-555 template\n-_\b5_\b5_\b6 bool _\ba_\bn_\by_\bT_\br_\bu_\be(_\bA_\bD_\bL_\bT_\ba_\bg_\b<_\b5_\b>, const _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\bb_\bo_\bo_\bl_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b> &mask)\n-557 {\n-558 return bool(_\bm_\ba_\bs_\bk);\n-559 }\n-560\n-561 } // namespace Overloads\n-562\n-563 } // namespace Simd\n-564\n-565} // namespace Dune\n-566\n-567#endif // DUNE_DEBUGALIGN_HH\n-_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP\n-#define DUNE_BINARY_OP(OP)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:261\n-_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n-#define DUNE_UNARY_FUNC(name)\n-_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-#define DUNE_ASSIGN_OP(OP)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:220\n-_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh\n-_\bc_\bl_\ba_\bs_\bs_\bn_\ba_\bm_\be_\b._\bh_\bh\n-A free function to provide the demangled class name of a given object or type\n-as a string.\n-_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Traits for type conversions and type information.\n-_\bb_\ba_\bs_\be_\b._\bh_\bh\n-Basic definitions for SIMD Implementations.\n-_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bs_\b._\bh_\bh\n-Default implementations for SIMD Implementations.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-std::integral_constant< std::size_t, i > index_constant\n-An index constant with value i.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:278\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bm_\ba_\bs_\bk\n-Mask< V > mask(ADLTag< 0, std::is_same< V, Mask< V > >::value >, const V &v)\n-implements Simd::mask()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn defaults.hh:153\n-_\bs_\bt_\bd\n-STL namespace.\n+437#endif\n+_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n+A few common exception classes.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp\n+StreamWrap(std::ostream &_out)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:152\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm\n+DebugStream(std::ostream &out=std::cerr)\n+Create a DebugStream and set initial output stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:199\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bu_\bn_\bt_\bi_\be\n+void untie()\n+Untie stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:413\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bf_\bl_\bu_\bs_\bh\n+DebugStream & flush()\n+pass on flush to underlying output stream\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:320\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\ba_\bt_\bt_\ba_\bc_\bh\n+void attach(std::ostream &stream)\n+set output to a different stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:371\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bd_\be_\bt_\ba_\bc_\bh\n+void detach()\n+detach current output stream and restore to previous stream\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:383\n+_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bm_\bm_\bo_\bn_\b__\bb_\bi_\bt_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static constexpr bool value\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:143\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp_\b:_\b:_\bo_\bu_\bt\n+std::ostream & out\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:153\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bp_\bo_\bp\n+void pop()\n+restore previously set activation flag\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:349\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+bool active() const\n+reports if this stream will produce output\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:363\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be_\b:_\b:_\b__\ba_\bc_\bt_\bi_\bv_\be\n+bool _active\n+flag to switch output during runtime\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be_\b:_\b:_\b__\bt_\bi_\be_\bd_\b__\bs_\bt_\br_\be_\ba_\bm_\bs\n+unsigned int _tied_streams\n+how many streams are tied to this state\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:171\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bt_\bi_\be\n+void tie(DebugStreamState &to)\n+Tie a stream to this one.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:397\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bp_\bu_\bs_\bh\n+void push(bool b)\n+set activation flag and store old value\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:335\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\n+unsigned int DebugLevel\n+Type for debug levels.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be_\b:_\b:_\b__\bt_\bi_\be_\bd\n+bool _tied\n+are we tied to another DebugStream?\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:168\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bc_\bu_\br_\br_\be_\bn_\bt\n+StreamWrap * current\n+current output stream and link to possibly pushed old output streams\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:162\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+DebugStream & operator<<(const T data)\n+Generic types are passed on to current output stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:267\n+_\bD_\bu_\bn_\be_\b:_\b:_\bg_\br_\be_\ba_\bt_\be_\br_\b__\bo_\br_\b__\be_\bq_\bu_\ba_\bl_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static constexpr bool value\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:131\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\b~_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm\n+~DebugStream()\n+Destroy stream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:243\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm\n+DebugStream(DebugStreamState &master, std::ostream &fallback=std::cerr)\n+Create a DebugStream and directly tie to another DebugStream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:219\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+DebugStream & operator<<(const int data)\n+explicit specialization so that enums can be printed\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:289\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+DebugStream & operator<<(std::ostream &(*f)(std::ostream &))\n+pass on manipulators to underlying output stream\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:305\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp_\b:_\b:_\bn_\be_\bx_\bt\n+StreamWrap * next\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:154\n+_\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW\n+#define DUNE_THROW(E, m)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:218\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-void violatedAlignment(const char *className, std::size_t expectedAlignment,\n-const void *address)\n-called when an alignment violation is detected\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.cc:36\n-_\bD_\bu_\bn_\be_\b:_\b:_\ba_\bn_\by_\b__\bt_\br_\bu_\be\n-bool any_true(const AlignedNumber< bool, align > &val)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:506\n-_\bD_\bu_\bn_\be_\b:_\b:_\ba_\bl_\bl_\b__\bt_\br_\bu_\be\n-bool all_true(const AlignedNumber< bool, align > &val)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:512\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be\n-std::string className()\n-Provide the demangled class name of a type T as a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn classname.hh:47\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\be_\bb_\bu_\bg_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-static constexpr auto debugAlignment\n-an alignment large enough to trigger alignment errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bd\n-const T1 cond(bool b, const T1 &v1, const T2 &v2)\n-conditional evaluate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn conditional.hh:28\n-_\bD_\bu_\bn_\be_\b:_\b:_\ba_\bl_\bi_\bg_\bn_\be_\bd\n-AlignedNumber< T, align > aligned(T value)\n-align a value to a certain alignment\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:114\n-_\bD_\bu_\bn_\be_\b:_\b:_\bv_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br\n-ViolatedAlignmentHandler & violatedAlignmentHandler()\n-access the handler called by violatedAlignment()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.cc:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bs_\bA_\bl_\bi_\bg_\bn_\be_\bd\n-bool isAligned(const void *p, std::size_t align)\n-check whether an address conforms to the given alignment\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be\n-T max_value(const AlignedNumber< T, align > &val)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:494\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bi_\bo_\bl_\ba_\bt_\be_\bd_\bA_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt_\bH_\ba_\bn_\bd_\bl_\be_\br\n-std::function< void(const char *, std::size_t, const void *)>\n-ViolatedAlignmentHandler\n-type of the handler called by violatedAlignment()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:31\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be\n-T min_value(const AlignedNumber< T, align > &val)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:500\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\ba_\bn_\by_\bT_\br_\bu_\be\n-bool anyTrue(ADLTag< 5 >, const AlignedNumber< bool, align > &mask)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:556\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bl_\ba_\bn_\be\n-T & lane(ADLTag< 5 >, std::size_t l, AlignedNumber< T, align > &v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:533\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bN_\bu_\bm_\bb_\be_\br\n-Whether this type acts as a scalar in the context of (hierarchically blocked)\n-containers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typetraits.hh:194\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bB_\ba_\bs_\be\n-CRTP base mixin class to check alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:66\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br\n-aligned wrappers for arithmetic types\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP(<<=)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP(-=)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-decltype(auto) operator+() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:187\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP(+=)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-decltype(auto) operator--(int)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP * DUNE_ASSIGN_OP(/=);DUNE_ASSIGN_OP(%=\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-decltype(auto) operator++(int)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:179\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!\n-decltype(auto) operator!() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:217\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-T & value()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:145\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-const T & value() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP^ DUNE_ASSIGN_OP(&=);DUNE_ASSIGN_OP(|=\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n-friend std::basic_istream< charT, Traits > & operator>>(std::basic_istream<\n-charT, Traits > &str, AlignedNumber &u)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n-DUNE_ASSIGN_OP(> >=)\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br\n-AlignedNumber()=default\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b~\n-decltype(auto) operator~() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:207\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br\n-AlignedNumber(T value)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:133\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br\n-AlignedNumber(const AlignedNumber< U, uAlign > &o)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:137\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-decltype(auto) operator-() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\by_\bp_\be_\b<_\b _\bA_\bl_\bi_\bg_\bn_\be_\bd_\bN_\bu_\bm_\bb_\be_\br_\b<_\b _\bT_\b,_\b _\ba_\bl_\bi_\bg_\bn_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-T type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:522\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bA_\bD_\bL_\bT_\ba_\bg\n-Tag used to force late-binding lookup in Dune::Simd::Overloads.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn base.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\by_\bp_\be\n-should have a member type type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn standard.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bR_\be_\bb_\bi_\bn_\bd_\bT_\by_\bp_\be\n-should have a member type type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn standard.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bL_\ba_\bn_\be_\bC_\bo_\bu_\bn_\bt\n-should be derived from a Dune::index_constant\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn standard.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bg_\br_\be_\ba_\bt_\be_\br_\b__\bo_\br_\b__\be_\bq_\bu_\ba_\bl\n+Greater or equal template test.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:130\n+_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bm_\bm_\bo_\bn_\b__\bb_\bi_\bt_\bs\n+activate if current and mask have common bits switched on.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bE_\br_\br_\bo_\br\n+standard exception for the debugstream\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:148\n+_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\bW_\br_\ba_\bp\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:150\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\bS_\bt_\ba_\bt_\be\n+Intermediate class to implement tie-operation of DebugStream.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm\n+Generic class to implement debug output streams.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bO_\bE_\br_\br_\bo_\br\n+Default exception class for I/O errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:231\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00017.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00017.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: matvectraits.hh File Reference\n+dune-common: ios_state.hh File Reference\n \n \n \n \n \n \n \n@@ -72,36 +72,39 @@\n
  • dune
  • common
  • \n \n \n
    \n \n-
    matvectraits.hh File Reference
    \n+
    ios_state.hh File Reference
    \n
    \n
    \n \n-

    Documentation of the traits classes you need to write for each implementation of DenseVector or DenseMatrix. \n+

    Utility class for storing and resetting stream attributes. \n More...

    \n-\n+
    #include <ios>
    \n+
    \n

    Go to the source code of this file.

    \n \n \n-\n+\n+\n \n

    \n Classes

    struct  Dune::DenseMatVecTraits< T >
    class  Dune::ios_base_all_saver
     Utility class for storing and resetting stream attributes. More...
     
    \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n

    Detailed Description

    \n-

    Documentation of the traits classes you need to write for each implementation of DenseVector or DenseMatrix.

    \n+

    Utility class for storing and resetting stream attributes.

    \n+
    Author
    Markus Blatt
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,26 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-matvectraits.hh File Reference\n-Documentation of the traits classes you need to write for each implementation\n-of DenseVector or DenseMatrix. _\bM_\bo_\br_\be_\b._\b._\b.\n+ios_state.hh File Reference\n+_\bC_\bo_\bm_\bm_\bo_\bn\n+Utility class for storing and resetting stream attributes. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b _\b>\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br\n+\u00a0 Utility class for storing and resetting stream attributes. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Documentation of the traits classes you need to write for each implementation\n-of DenseVector or DenseMatrix.\n+Utility class for storing and resetting stream attributes.\n+ Author\n+ Markus Blatt\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: matvectraits.hh Source File\n+dune-common: ios_state.hh Source File\n \n \n \n \n \n \n \n@@ -74,37 +74,55 @@\n \n
    \n \n
    \n
    \n
    \n-
    matvectraits.hh
    \n+
    ios_state.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_MATVECTRAITS_HH
    \n-
    6#define DUNE_MATVECTRAITS_HH
    \n+
    5#ifndef DUNE_COMMON_IOS_STATE_HH
    \n+
    6#define DUNE_COMMON_IOS_STATE_HH
    \n
    7
    \n-
    12namespace Dune {
    \n-
    13
    \n-
    22
    \n-
    24
    \n-
    26
    \n-
    30 template<class T>
    \n-\n-
    32
    \n-
    33} // end namespace Dune
    \n-
    34
    \n-
    35#endif // DUNE_FTRAITS_HH
    \n+
    8#include <ios>
    \n+
    9
    \n+
    10namespace Dune {
    \n+
    \n+\n+
    34 {
    \n+
    35 public:
    \n+
    37 typedef std::ios_base state_type;
    \n+
    38
    \n+\n+
    49
    \n+\n+
    54
    \n+
    61 void restore();
    \n+
    62
    \n+
    63 private:
    \n+
    65 state_type& ios;
    \n+
    67 state_type::fmtflags oldflags;
    \n+
    69 std::streamsize oldprec;
    \n+
    71 std::streamsize oldwidth;
    \n+
    72 };
    \n+
    \n+
    73
    \n+
    75}
    \n+
    76
    \n+
    77#endif // DUNE_COMMON_IOS_STATE_HH
    \n+
    ~ios_base_all_saver()
    Destructor that restores the flags stored by the constructor.
    Definition ios_state.cc:20
    \n+
    void restore()
    Restore flags now.
    Definition ios_state.cc:25
    \n+
    std::ios_base state_type
    Export type of object we save the state for.
    Definition ios_state.hh:37
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Definition matvectraits.hh:31
    \n+
    Utility class for storing and resetting stream attributes.
    Definition ios_state.hh:34
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,60 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-matvectraits.hh\n+ios_state.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_MATVECTRAITS_HH\n-6#define DUNE_MATVECTRAITS_HH\n+5#ifndef DUNE_COMMON_IOS_STATE_HH\n+6#define DUNE_COMMON_IOS_STATE_HH\n 7\n-12namespace _\bD_\bu_\bn_\be {\n-13\n-22\n-24\n-26\n-30 template\n-_\b3_\b1 struct _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs {};\n-32\n-33} // end namespace Dune\n-34\n-35#endif // DUNE_FTRAITS_HH\n+8#include \n+9\n+10namespace _\bD_\bu_\bn_\be {\n+_\b3_\b3 class _\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br\n+34 {\n+35 public:\n+_\b3_\b7 typedef std::ios_base _\bs_\bt_\ba_\bt_\be_\b__\bt_\by_\bp_\be;\n+38\n+48 _\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br(_\bs_\bt_\ba_\bt_\be_\b__\bt_\by_\bp_\be& ios_);\n+49\n+53 _\b~_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br();\n+54\n+61 void _\br_\be_\bs_\bt_\bo_\br_\be();\n+62\n+63 private:\n+65 _\bs_\bt_\ba_\bt_\be_\b__\bt_\by_\bp_\be& ios;\n+67 state_type::fmtflags oldflags;\n+69 std::streamsize oldprec;\n+71 std::streamsize oldwidth;\n+72 };\n+73\n+75}\n+76\n+77#endif // DUNE_COMMON_IOS_STATE_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br_\b:_\b:_\b~_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br\n+~ios_base_all_saver()\n+Destructor that restores the flags stored by the constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ios_state.cc:20\n+_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br_\b:_\b:_\br_\be_\bs_\bt_\bo_\br_\be\n+void restore()\n+Restore flags now.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ios_state.cc:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br_\b:_\b:_\bs_\bt_\ba_\bt_\be_\b__\bt_\by_\bp_\be\n+std::ios_base state_type\n+Export type of object we save the state for.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ios_state.hh:37\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn matvectraits.hh:31\n+_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bo_\bs_\b__\bb_\ba_\bs_\be_\b__\ba_\bl_\bl_\b__\bs_\ba_\bv_\be_\br\n+Utility class for storing and resetting stream attributes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ios_state.hh:34\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00020.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00020.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: dotproduct.hh File Reference\n+dune-common: interfaces.hh File Reference\n \n \n \n \n \n \n \n@@ -71,54 +71,39 @@\n \n \n \n
    \n \n-
    dotproduct.hh File Reference
    \n+Namespaces
    \n+
    interfaces.hh File Reference
    \n \n
    \n \n-

    Provides the functions dot(a,b) := \"$a^H and dotT(a,b) := \"$a^T. \n+

    Provides interfaces for detection of specific behavior. \n More...

    \n-
    #include "ftraits.hh"
    \n-#include "typetraits.hh"
    \n-
    \n+\n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n+\n+\n \n

    \n Classes

    struct  Dune::IsVector< T, class >
     
    struct  Dune::IsVector< T, std::void_t< typename T::field_type > >
    struct  Dune::Cloneable
     An interface class for cloneable objects. More...
     
    \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Functions

    template<class A , class B >
    auto Dune::dot (const A &a, const B &b) -> typename std::enable_if< IsNumber< A >::value &&!IsVector< A >::value &&!std::is_same< typename FieldTraits< A >::field_type, typename FieldTraits< A >::real_type > ::value, decltype(conj(a) *b)>::type
     computes the dot product for fundamental data types according to Petsc's VectDot function: dot(a,b) := std::conj(a)*b
     
    template<class A , class B >
    auto Dune::dotT (const A &a, const B &b) -> decltype(a *b)
     Computes an indefinite vector dot product for fundamental data types according to Petsc's VectTDot function: dotT(a,b) := a*b.
     
    \n

    Detailed Description

    \n-

    Provides the functions dot(a,b) := \"$a^H and dotT(a,b) := \"$a^T.

    \n-

    The provided dot products dot,dotT are used to compute (indefinite) dot products for fundamental types as well as DUNE vector types, such as DenseVector, FieldVector, ISTLVector. Note that the definition of dot(a,b) conjugates the first argument. This agrees with the behaviour of Matlab and Petsc, but not with BLAS.

    Author
    J\u00f6 Fahlke, Matthias Wohlmuth
    \n+

    Provides interfaces for detection of specific behavior.

    \n+
    Author
    Robert Kloefkorn
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,24 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-dotproduct.hh File Reference\n-Provides the functions dot(a,b) := [$a^H \\cdot b $]and dotT(a,b) := [$a^T \\cdot\n-b $]. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \"_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n-#include \"_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+interfaces.hh File Reference\n+Provides interfaces for detection of specific behavior. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bc_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bv_\bo_\bi_\bd_\b__\bt_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b _\b>_\b _\b>\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be\n+\u00a0 An interface class for cloneable objects. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt (const A &a, const B &b) -> typename std::enable_if< _\bI_\bs_\bN_\bu_\bm_\bb_\be_\br<\n- A >::value &&!_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br< A >::value &&!std::is_same< typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs<\n- A >::field_type, typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs< A >::real_type > ::value, decltype\n- (conj(a) *b)>::type\n-\u00a0 computes the dot product for fundamental data types according to Petsc's\n- VectDot function: dot(a,b) := std::conj(a)*b\n-\u00a0\n-template\n-auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt_\bT (const A &a, const B &b) -> decltype(a *b)\n-\u00a0 Computes an indefinite vector dot product for fundamental data types\n- according to Petsc's VectTDot function: dotT(a,b) := a*b.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Provides the functions dot(a,b) := [$a^H \\cdot b $]and dotT(a,b) := [$a^T \\cdot\n-b $].\n-The provided dot products dot,dotT are used to compute (indefinite) dot\n-products for fundamental types as well as DUNE vector types, such as\n-DenseVector, FieldVector, ISTLVector. Note that the definition of dot(a,b)\n-conjugates the first argument. This agrees with the behaviour of Matlab and\n-Petsc, but not with BLAS.\n+Provides interfaces for detection of specific behavior.\n Author\n- J\u00c3\u00b6 Fahlke, Matthias Wohlmuth\n+ Robert Kloefkorn\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: dotproduct.hh Source File\n+dune-common: interfaces.hh Source File\n \n \n \n \n \n \n \n@@ -74,82 +74,42 @@\n \n
    \n \n
    \n
    \n
    \n-
    dotproduct.hh
    \n+
    interfaces.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_DOTPRODUCT_HH
    \n-
    6#define DUNE_DOTPRODUCT_HH
    \n+
    5#ifndef DUNE_INTERFACES_HH
    \n+
    6#define DUNE_INTERFACES_HH
    \n
    7
    \n-
    8#include "ftraits.hh"
    \n-
    9#include "typetraits.hh"
    \n-
    10
    \n-
    11namespace Dune {
    \n-
    26 template<class T, class = void>
    \n-
    27 struct IsVector : std::false_type {};
    \n-
    28
    \n-
    29 template<class T>
    \n-
    \n-
    30 struct IsVector<T, std::void_t<typename T::field_type> >
    \n-
    31 : std::true_type {};
    \n-
    \n-
    32
    \n-
    40 template<class A, class B>
    \n-
    41 auto
    \n-
    \n-
    42 dot(const A & a, const B & b) -> typename std::enable_if<IsNumber<A>::value && !IsVector<A>::value && !std::is_same<typename FieldTraits<A>::field_type,typename FieldTraits<A>::real_type> ::value, decltype(conj(a)*b)>::type
    \n-
    43 {
    \n-
    44 return conj(a)*b;
    \n-
    45 }
    \n-
    \n-
    46
    \n-
    56 // fundamental type with A being a real type
    \n-
    57 template<class A, class B>
    \n-
    58 auto
    \n-
    59 dot(const A & a, const B & b) -> typename std::enable_if<IsNumber<A>::value && !IsVector<A>::value && std::is_same<typename FieldTraits<A>::field_type,typename FieldTraits<A>::real_type>::value, decltype(a*b)>::type
    \n-
    60 {
    \n-
    61 return a*b;
    \n-
    62 }
    \n-
    63
    \n-
    73 template<typename A, typename B>
    \n-
    74 auto
    \n-
    75 dot(const A & a, const B & b) -> typename std::enable_if<IsVector<A>::value, decltype(a.dot(b))>::type
    \n-
    76 {
    \n-
    77 return a.dot(b);
    \n-
    78 }
    \n-
    79
    \n-
    87 template<class A, class B>
    \n-
    88 auto
    \n-
    \n-
    89 dotT(const A & a, const B & b) -> decltype(a*b)
    \n-
    90 {
    \n-
    91 return a*b;
    \n-
    92 }
    \n-
    \n-
    93
    \n-
    95} // end namespace DUNE
    \n-
    96
    \n-
    97#endif // DUNE_DOTPRODUCT_HH
    \n-
    Type traits to determine the type of reals (when working with complex numbers)
    \n-
    Traits for type conversions and type information.
    \n-
    auto dotT(const A &a, const B &b) -> decltype(a *b)
    Computes an indefinite vector dot product for fundamental data types according to Petsc's VectTDot fu...
    Definition dotproduct.hh:89
    \n-
    auto dot(const A &a, const B &b) -> typename std::enable_if< IsNumber< A >::value &&!IsVector< A >::value &&!std::is_same< typename FieldTraits< A >::field_type, typename FieldTraits< A >::real_type > ::value, decltype(conj(a) *b)>::type
    computes the dot product for fundamental data types according to Petsc's VectDot function: dot(a,...
    Definition dotproduct.hh:42
    \n-
    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
    \n-
    STL namespace.
    \n+
    13namespace Dune {
    \n+
    14
    \n+
    \n+
    16 struct Cloneable {
    \n+
    17
    \n+
    23 virtual Cloneable* clone() const = 0;
    \n+
    24
    \n+
    26 virtual ~Cloneable() = default;
    \n+
    27
    \n+
    28 };
    \n+
    \n+
    29
    \n+
    30} // end namespace Dune
    \n+
    31#endif
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Definition dotproduct.hh:27
    \n-
    T real_type
    export the type representing the real type of the field
    Definition ftraits.hh:30
    \n+
    An interface class for cloneable objects.
    Definition interfaces.hh:16
    \n+
    virtual ~Cloneable()=default
    Destructor.
    \n+
    virtual Cloneable * clone() const =0
    Clones the object clone needs to be redefined by an implementation class, with the return type covari...
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,99 +1,43 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-dotproduct.hh\n+interfaces.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_DOTPRODUCT_HH\n-6#define DUNE_DOTPRODUCT_HH\n+5#ifndef DUNE_INTERFACES_HH\n+6#define DUNE_INTERFACES_HH\n 7\n-8#include \"_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n-9#include \"_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\"\n-10\n-11namespace _\bD_\bu_\bn_\be {\n-26 template\n-_\b2_\b7 struct _\bI_\bs_\bV_\be_\bc_\bt_\bo_\br : std::false_type {};\n-28\n-29 template\n-_\b3_\b0 struct _\bI_\bs_\bV_\be_\bc_\bt_\bo_\br >\n-31 : std::true_type {};\n-32\n-40 template\n-41 auto\n-_\b4_\b2 _\bd_\bo_\bt(const A & a, const B & b) -> typename std::enable_if::value\n-&& !_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\b<_\bA_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be && !std::is_same::\n-field_type,typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be> ::value, decltype(conj(a)*b)>::\n-type\n-43 {\n-44 return conj(a)*b;\n-45 }\n-46\n-56 // fundamental type with A being a real type\n-57 template\n-58 auto\n-59 _\bd_\bo_\bt(const A & a, const B & b) -> typename std::enable_if::value\n-&& !IsVector::value && std::is_same::\n-field_type,typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be>::value, decltype(a*b)>::type\n-60 {\n-61 return a*b;\n-62 }\n-63\n-73 template\n-74 auto\n-75 _\bd_\bo_\bt(const A & a, const B & b) -> typename std::enable_if::value,\n-decltype(a.dot(b))>::type\n-76 {\n-77 return a.dot(b);\n-78 }\n-79\n-87 template\n-88 auto\n-_\b8_\b9 _\bd_\bo_\bt_\bT(const A & a, const B & b) -> decltype(a*b)\n-90 {\n-91 return a*b;\n-92 }\n-93\n-95} // end namespace DUNE\n-96\n-97#endif // DUNE_DOTPRODUCT_HH\n-_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Type traits to determine the type of reals (when working with complex numbers)\n-_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Traits for type conversions and type information.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt_\bT\n-auto dotT(const A &a, const B &b) -> decltype(a *b)\n-Computes an indefinite vector dot product for fundamental data types according\n-to Petsc's VectTDot fu...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dotproduct.hh:89\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bt\n-auto dot(const A &a, const B &b) -> typename std::enable_if< IsNumber< A >::\n-value &&!IsVector< A >::value &&!std::is_same< typename FieldTraits< A >::\n-field_type, typename FieldTraits< A >::real_type > ::value, decltype(conj(a)\n-*b)>::type\n-computes the dot product for fundamental data types according to Petsc's\n-VectDot function: dot(a,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dotproduct.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bv_\bo_\bi_\bd_\b__\bt\n-typename Impl::voider< Types... >::type void_t\n-Is void for all valid input types. The workhorse for C++11 SFINAE-techniques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typetraits.hh:40\n-_\bs_\bt_\bd\n-STL namespace.\n+13namespace _\bD_\bu_\bn_\be {\n+14\n+_\b1_\b6 struct _\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be {\n+17\n+_\b2_\b3 virtual _\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be* _\bc_\bl_\bo_\bn_\be() const = 0;\n+24\n+_\b2_\b6 virtual _\b~_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be() = default;\n+27\n+28 };\n+29\n+30} // end namespace Dune\n+31#endif\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dotproduct.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n-T real_type\n-export the type representing the real type of the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:30\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be\n+An interface class for cloneable objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn interfaces.hh:16\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be_\b:_\b:_\b~_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be\n+virtual ~Cloneable()=default\n+Destructor.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bl_\bo_\bn_\be_\ba_\bb_\bl_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual Cloneable * clone() const =0\n+Clones the object clone needs to be redefined by an implementation class, with\n+the return type covari...\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00023.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00023.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: fmatrix.hh File Reference\n+dune-common: assertandreturn.hh File Reference\n \n \n \n \n \n \n \n@@ -70,106 +70,28 @@\n \n \n
    \n \n- \n+Macros
    \n+
    assertandreturn.hh File Reference
    \n \n
    \n-\n-

    Implements a matrix constructed from a given type representing a field and compile-time given number of rows and columns. \n-More...

    \n-
    #include <cmath>
    \n-#include <cstddef>
    \n-#include <iostream>
    \n-#include <algorithm>
    \n-#include <initializer_list>
    \n-#include <dune/common/boundschecking.hh>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/common/fvector.hh>
    \n-#include <dune/common/densematrix.hh>
    \n-#include <dune/common/precision.hh>
    \n-#include <dune/common/promotiontraits.hh>
    \n-#include <dune/common/typetraits.hh>
    \n-#include <dune/common/matrixconcepts.hh>
    \n-#include "fmatrixev.hh"
    \n+
    #include <cassert>
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    struct  Dune::DenseMatVecTraits< FieldMatrix< K, ROWS, COLS > >
     
    struct  Dune::FieldTraits< FieldMatrix< K, ROWS, COLS > >
     
    class  Dune::FieldMatrix< K, ROWS, COLS >
     A dense n x m matrix. More...
     
    \n-\n-\n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::FMatrixHelp
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n-Functions

    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix (const FieldMatrix< K, 1, 1 > &matrix, FieldMatrix< K, 1, 1 > &inverse)
     invert scalar without changing the original matrix
     
    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix_retTransposed (const FieldMatrix< K, 1, 1 > &matrix, FieldMatrix< K, 1, 1 > &inverse)
     invert scalar without changing the original matrix
     
    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix (const FieldMatrix< K, 2, 2 > &matrix, FieldMatrix< K, 2, 2 > &inverse)
     invert 2x2 Matrix without changing the original matrix
     
    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix_retTransposed (const FieldMatrix< K, 2, 2 > &matrix, FieldMatrix< K, 2, 2 > &inverse)
     
    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix (const FieldMatrix< K, 3, 3 > &matrix, FieldMatrix< K, 3, 3 > &inverse)
     invert 3x3 Matrix without changing the original matrix
     
    template<typename K >
    static K Dune::FMatrixHelp::invertMatrix_retTransposed (const FieldMatrix< K, 3, 3 > &matrix, FieldMatrix< K, 3, 3 > &inverse)
     invert 3x3 Matrix without changing the original matrix
     
    template<class K , int m, int n, int p>
    static void Dune::FMatrixHelp::multMatrix (const FieldMatrix< K, m, n > &A, const FieldMatrix< K, n, p > &B, FieldMatrix< K, m, p > &ret)
     calculates ret = A * B
     
    template<typename K , int rows, int cols>
    static void Dune::FMatrixHelp::multTransposedMatrix (const FieldMatrix< K, rows, cols > &matrix, FieldMatrix< K, cols, cols > &ret)
     calculates ret= A_t*A
     
    template<typename K , int rows, int cols>
    static void Dune::FMatrixHelp::multAssignTransposed (const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, rows > &x, FieldVector< K, cols > &ret)
     calculates ret = matrix^T * x
     
    template<typename K , int rows, int cols>
    static FieldVector< K, rows > Dune::FMatrixHelp::mult (const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, cols > &x)
     calculates ret = matrix * x
     
    template<typename K , int rows, int cols>
    static FieldVector< K, cols > Dune::FMatrixHelp::multTransposed (const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, rows > &x)
     calculates ret = matrix^T * x
     

    \n+Macros

    #define DUNE_ASSERT_AND_RETURN(C, X)   (!(C) ? throw [&](){assert(!#C);return 0;}() : 0), X
     Asserts a condition and return on success in constexpr context.
     
    \n-

    Detailed Description

    \n-

    Implements a matrix constructed from a given type representing a field and compile-time given number of rows and columns.

    \n-
    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,117 +1,17 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-fmatrix.hh File Reference\n-_\bC_\bo_\bm_\bm_\bo_\bn \u00bb _\bD_\be_\bn_\bs_\be_\b _\bM_\ba_\bt_\br_\bi_\bx_\b _\ba_\bn_\bd_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\bT_\be_\bm_\bp_\bl_\ba_\bt_\be_\b _\bL_\bi_\bb_\br_\ba_\br_\by\n-Implements a matrix constructed from a given type representing a field and\n-compile-time given number of rows and columns. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\br_\bi_\bx_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-#include \"_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\"\n+_\bM_\ba_\bc_\br_\bo_\bs\n+assertandreturn.hh File Reference\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bA_\bN_\bD_\b__\bR_\bE_\bT_\bU_\bR_\bN(C, X)\u00a0\u00a0\u00a0(!(C) ? throw [&](){assert(!#C);return\n+ 0;}() : 0), X\n+\u00a0 Asserts a condition and return on success in constexpr context.\n \u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>\n-\u00a0 A dense n x m matrix. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0 _\bD_\bu_\bn_\be namespace.\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 1, 1 > &matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n- 1, 1 > &inverse)\n-\u00a0 invert scalar without changing the original\n- matrix\n-\u00a0\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n- (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 1, 1 > &matrix,\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 1, 1 > &inverse)\n-\u00a0 invert scalar without changing the original\n- matrix\n-\u00a0\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 2, 2 > &matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n- 2, 2 > &inverse)\n-\u00a0 invert 2x2 Matrix without changing the original\n- matrix\n-\u00a0\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n- (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 2, 2 > &matrix,\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 2, 2 > &inverse)\n-\u00a0\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 3, 3 > &matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n- 3, 3 > &inverse)\n-\u00a0 invert 3x3 Matrix without changing the original\n- matrix\n-\u00a0\n-template\n- static K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n- (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 3, 3 > &matrix,\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, 3, 3 > &inverse)\n-\u00a0 invert 3x3 Matrix without changing the original\n- matrix\n-\u00a0\n-template\n- static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bM_\ba_\bt_\br_\bi_\bx (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, m, n > &A, const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n- n, p > &B, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, m, p > &ret)\n-\u00a0 calculates ret = A * B\n-\u00a0\n-template\n- static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\bM_\ba_\bt_\br_\bi_\bx (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, rows, cols > &matrix,\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, cols, cols > &ret)\n-\u00a0 calculates ret= A_t*A\n-\u00a0\n-template\n- static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bA_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, rows, cols > &matrix, const\n- _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, rows > &x, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, cols\n- > &ret)\n-\u00a0 calculates ret = matrix^T * x\n-\u00a0\n-template\n-static _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, rows >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n- rows, cols > &matrix, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, cols\n- > &x)\n-\u00a0 calculates ret = matrix * x\n-\u00a0\n-template\n-static _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, cols >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd (const\n- _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, rows, cols > &matrix, const\n- _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, rows > &x)\n-\u00a0 calculates ret = matrix^T * x\n-\u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implements a matrix constructed from a given type representing a field and\n-compile-time given number of rows and columns.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: fmatrix.hh Source File\n+dune-common: assertandreturn.hh Source File\n \n \n \n \n \n \n \n@@ -74,896 +74,42 @@\n \n
    \n \n
    \n \n
    \n-
    fmatrix.hh
    \n+
    assertandreturn.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_FMATRIX_HH
    \n-
    6#define DUNE_FMATRIX_HH
    \n+
    5#ifndef DUNE_COMMON_ASSERTANDRETURN_HH
    \n+
    6#define DUNE_COMMON_ASSERTANDRETURN_HH
    \n
    7
    \n-
    8#include <cmath>
    \n-
    9#include <cstddef>
    \n-
    10#include <iostream>
    \n-
    11#include <algorithm>
    \n-
    12#include <initializer_list>
    \n+
    8#ifndef DUNE_DISABLE_DEPRECATION_WARNING_ASSERT_AND_RETURN
    \n+
    9#warning "The file assertandreturn.hh is deprecated. Since c++14 constexpr functions allow more \\
    \n+
    10than a single return statement and thus this utility is useless. Will be removed after \\
    \n+
    11Dune 2.10 release."
    \n+
    12#endif // DUNE_DISABLE_DEPRECATION_WARNING_ASSERT_AND_RETURN
    \n
    13
    \n-\n-\n-\n-\n-\n-\n-\n-\n-
    22
    \n-
    23namespace Dune
    \n-
    24{
    \n-
    25
    \n-
    26 namespace Impl
    \n-
    27 {
    \n-
    28
    \n-
    29 template<class M>
    \n-
    30 class ColumnVectorView
    \n-
    31 {
    \n-
    32 public:
    \n+
    14#include <cassert>
    \n+
    15
    \n+
    17
    \n+
    26#ifdef NDEBUG
    \n+
    27 #define DUNE_ASSERT_AND_RETURN(C,X) X
    \n+
    28#else
    \n+
    29 #define DUNE_ASSERT_AND_RETURN(C,X) (!(C) ? throw [&](){assert(!#C);return 0;}() : 0), X
    \n+
    30#endif
    \n+
    31
    \n+
    32
    \n
    33
    \n-
    34 using value_type = typename M::value_type;
    \n-
    35 using size_type = typename M::size_type;
    \n-
    36
    \n-
    37 constexpr ColumnVectorView(M& matrix, size_type col) :
    \n-
    38 matrix_(matrix),
    \n-
    39 col_(col)
    \n-
    40 {}
    \n-
    41
    \n-
    42 constexpr size_type N () const {
    \n-
    43 return matrix_.N();
    \n-
    44 }
    \n-
    45
    \n-
    46 template<class M_ = M,
    \n-
    47 std::enable_if_t<std::is_same_v<M_,M> and not std::is_const_v<M_>, int> = 0>
    \n-
    48 constexpr value_type& operator[] (size_type row) {
    \n-
    49 return matrix_[row][col_];
    \n-
    50 }
    \n-
    51
    \n-
    52 constexpr const value_type& operator[] (size_type row) const {
    \n-
    53 return matrix_[row][col_];
    \n-
    54 }
    \n-
    55
    \n-
    56 protected:
    \n-
    57 M& matrix_;
    \n-
    58 const size_type col_;
    \n-
    59 };
    \n-
    60
    \n-
    61 }
    \n-
    62
    \n-
    63 template<typename M>
    \n-
    64 struct FieldTraits< Impl::ColumnVectorView<M> >
    \n-
    65 {
    \n-\n-
    67 using real_type = typename FieldTraits<M>::real_type;
    \n-
    68 };
    \n-
    69
    \n-
    81 template< class K, int ROWS, int COLS = ROWS > class FieldMatrix;
    \n-
    82
    \n-
    83
    \n-
    84 template< class K, int ROWS, int COLS >
    \n-
    \n-
    85 struct DenseMatVecTraits< FieldMatrix<K,ROWS,COLS> >
    \n-
    86 {
    \n-\n-
    88
    \n-
    89 // each row is implemented by a field vector
    \n-\n-
    91
    \n-\n-\n-
    94
    \n-
    95 typedef std::array<row_type,ROWS> container_type;
    \n-
    96 typedef K value_type;
    \n-
    97 typedef typename container_type::size_type size_type;
    \n-
    98 };
    \n-
    \n-
    99
    \n-
    100 template< class K, int ROWS, int COLS >
    \n-
    \n-
    101 struct FieldTraits< FieldMatrix<K,ROWS,COLS> >
    \n-
    102 {
    \n-\n-\n-
    105 };
    \n-
    \n-
    106
    \n-
    115 template<class K, int ROWS, int COLS>
    \n-
    \n-
    116 class FieldMatrix : public DenseMatrix< FieldMatrix<K,ROWS,COLS> >
    \n-
    117 {
    \n-
    118 std::array< FieldVector<K,COLS>, ROWS > _data;
    \n-\n-
    120 public:
    \n-
    121
    \n-
    123 constexpr static int rows = ROWS;
    \n-
    125 constexpr static int cols = COLS;
    \n-
    126
    \n-
    127 typedef typename Base::size_type size_type;
    \n-
    128 typedef typename Base::row_type row_type;
    \n-
    129
    \n-\n-\n-
    132
    \n-
    133 //===== constructors
    \n-
    136 constexpr FieldMatrix() = default;
    \n-
    137
    \n-
    \n-
    140 constexpr FieldMatrix(std::initializer_list<Dune::FieldVector<K, cols> > const &l) {
    \n-
    141 assert(l.size() == rows); // Actually, this is not needed any more!
    \n-
    142 for(std::size_t i=0; i<std::min(static_cast<std::size_t>(ROWS), l.size()); ++i)
    \n-
    143 _data[i] = std::data(l)[i];
    \n-
    144 }
    \n-
    \n-
    145
    \n-
    146 template <class T,
    \n-
    147 typename = std::enable_if_t<HasDenseMatrixAssigner<FieldMatrix, T>::value>>
    \n-
    \n-
    148 FieldMatrix(T const& rhs)
    \n-
    149 {
    \n-
    150 *this = rhs;
    \n-
    151 }
    \n-
    \n-
    152
    \n-
    153 using Base::operator=;
    \n-
    154
    \n-\n-
    157
    \n-
    159 template<typename T>
    \n-
    \n-\n-
    161 {
    \n-
    162 _data = x._data;
    \n-
    163 return *this;
    \n-
    164 }
    \n-
    \n-
    165
    \n-
    167 template <typename T, int rows, int cols>
    \n-\n-
    169
    \n-
    \n-\n-
    172 {
    \n-\n-
    174 for( int i = 0; i < ROWS; ++i )
    \n-
    175 for( int j = 0; j < COLS; ++j )
    \n-
    176 AT[j][i] = (*this)[i][j];
    \n-
    177 return AT;
    \n-
    178 }
    \n-
    \n-
    179
    \n-
    181 template <class OtherScalar>
    \n-
    \n-
    182 friend auto operator+ ( const FieldMatrix& matrixA,
    \n-\n-
    184 {
    \n-\n-
    186
    \n-
    187 for (size_type i = 0; i < ROWS; ++i)
    \n-
    188 for (size_type j = 0; j < COLS; ++j)
    \n-
    189 result[i][j] = matrixA[i][j] + matrixB[i][j];
    \n-
    190
    \n-
    191 return result;
    \n-
    192 }
    \n-
    \n-
    193
    \n-
    195 template <class OtherScalar>
    \n-
    \n-
    196 friend auto operator- ( const FieldMatrix& matrixA,
    \n-\n-
    198 {
    \n-\n-
    200
    \n-
    201 for (size_type i = 0; i < ROWS; ++i)
    \n-
    202 for (size_type j = 0; j < COLS; ++j)
    \n-
    203 result[i][j] = matrixA[i][j] - matrixB[i][j];
    \n-
    204
    \n-
    205 return result;
    \n-
    206 }
    \n-
    \n-
    207
    \n-
    209 template <class Scalar,
    \n-
    210 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    \n-
    211 friend auto operator* ( const FieldMatrix& matrix, Scalar scalar)
    \n-
    212 {
    \n-\n-
    214
    \n-
    215 for (size_type i = 0; i < ROWS; ++i)
    \n-
    216 for (size_type j = 0; j < COLS; ++j)
    \n-
    217 result[i][j] = matrix[i][j] * scalar;
    \n-
    218
    \n-
    219 return result;
    \n-
    220 }
    \n-
    \n-
    221
    \n-
    223 template <class Scalar,
    \n-
    224 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    \n-
    225 friend auto operator* ( Scalar scalar, const FieldMatrix& matrix)
    \n-
    226 {
    \n-\n-
    228
    \n-
    229 for (size_type i = 0; i < ROWS; ++i)
    \n-
    230 for (size_type j = 0; j < COLS; ++j)
    \n-
    231 result[i][j] = scalar * matrix[i][j];
    \n-
    232
    \n-
    233 return result;
    \n-
    234 }
    \n-
    \n-
    235
    \n-
    237 template <class Scalar,
    \n-
    238 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    \n-
    239 friend auto operator/ ( const FieldMatrix& matrix, Scalar scalar)
    \n-
    240 {
    \n-\n-
    242
    \n-
    243 for (size_type i = 0; i < ROWS; ++i)
    \n-
    244 for (size_type j = 0; j < COLS; ++j)
    \n-
    245 result[i][j] = matrix[i][j] / scalar;
    \n-
    246
    \n-
    247 return result;
    \n-
    248 }
    \n-
    \n-
    249
    \n-
    252 template <class OtherScalar, int otherCols>
    \n-
    \n-
    253 friend auto operator* ( const FieldMatrix& matrixA,
    \n-\n-
    255 {
    \n-\n-
    257
    \n-
    258 for (size_type i = 0; i < matrixA.mat_rows(); ++i)
    \n-
    259 for (size_type j = 0; j < matrixB.mat_cols(); ++j)
    \n-
    260 {
    \n-
    261 result[i][j] = 0;
    \n-
    262 for (size_type k = 0; k < matrixA.mat_cols(); ++k)
    \n-
    263 result[i][j] += matrixA[i][k] * matrixB[k][j];
    \n-
    264 }
    \n-
    265
    \n-
    266 return result;
    \n-
    267 }
    \n-
    \n-
    268
    \n-
    275 template <class OtherMatrix, std::enable_if_t<
    \n-
    276 Impl::IsStaticSizeMatrix_v<OtherMatrix>
    \n-
    277 and not Impl::IsFieldMatrix_v<OtherMatrix>
    \n-
    278 , int> = 0>
    \n-
    \n-
    279 friend auto operator* ( const FieldMatrix& matrixA,
    \n-
    280 const OtherMatrix& matrixB)
    \n-
    281 {
    \n-\n-\n-
    284 for (std::size_t j=0; j<rows; ++j)
    \n-
    285 matrixB.mtv(matrixA[j], result[j]);
    \n-
    286 return result;
    \n-
    287 }
    \n-
    \n-
    288
    \n-
    295 template <class OtherMatrix, std::enable_if_t<
    \n-
    296 Impl::IsStaticSizeMatrix_v<OtherMatrix>
    \n-
    297 and not Impl::IsFieldMatrix_v<OtherMatrix>
    \n-
    298 , int> = 0>
    \n-
    \n-
    299 friend auto operator* ( const OtherMatrix& matrixA,
    \n-
    300 const FieldMatrix& matrixB)
    \n-
    301 {
    \n-\n-\n-
    304 for (std::size_t j=0; j<cols; ++j)
    \n-
    305 {
    \n-
    306 auto B_j = Impl::ColumnVectorView(matrixB, j);
    \n-
    307 auto result_j = Impl::ColumnVectorView(result, j);
    \n-
    308 matrixA.mv(B_j, result_j);
    \n-
    309 }
    \n-
    310 return result;
    \n-
    311 }
    \n-
    \n-
    312
    \n-
    314 template<int l>
    \n-
    \n-\n-
    316 {
    \n-\n-
    318
    \n-
    319 for (size_type i=0; i<l; i++) {
    \n-
    320 for (size_type j=0; j<cols; j++) {
    \n-
    321 C[i][j] = 0;
    \n-
    322 for (size_type k=0; k<rows; k++)
    \n-
    323 C[i][j] += M[i][k]*(*this)[k][j];
    \n-
    324 }
    \n-
    325 }
    \n-
    326 return C;
    \n-
    327 }
    \n-
    \n-
    328
    \n-\n-
    330
    \n-
    332 template <int r, int c>
    \n-
    \n-\n-
    334 {
    \n-
    335 static_assert(r == c, "Cannot rightmultiply with non-square matrix");
    \n-
    336 static_assert(r == cols, "Size mismatch");
    \n-\n-
    338
    \n-
    339 for (size_type i=0; i<rows; i++)
    \n-
    340 for (size_type j=0; j<cols; j++) {
    \n-
    341 (*this)[i][j] = 0;
    \n-
    342 for (size_type k=0; k<cols; k++)
    \n-
    343 (*this)[i][j] += C[i][k]*M[k][j];
    \n-
    344 }
    \n-
    345 return *this;
    \n-
    346 }
    \n-
    \n-
    347
    \n-
    349 template<int l>
    \n-
    \n-\n-
    351 {
    \n-\n-
    353
    \n-
    354 for (size_type i=0; i<rows; i++) {
    \n-
    355 for (size_type j=0; j<l; j++) {
    \n-
    356 C[i][j] = 0;
    \n-
    357 for (size_type k=0; k<cols; k++)
    \n-
    358 C[i][j] += (*this)[i][k]*M[k][j];
    \n-
    359 }
    \n-
    360 }
    \n-
    361 return C;
    \n-
    362 }
    \n-
    \n-
    363
    \n-
    364 // make this thing a matrix
    \n-
    365 static constexpr size_type mat_rows() { return ROWS; }
    \n-
    366 static constexpr size_type mat_cols() { return COLS; }
    \n-
    367
    \n-
    \n-\n-
    369 {
    \n-
    370 DUNE_ASSERT_BOUNDS(i < ROWS);
    \n-
    371 return _data[i];
    \n-
    372 }
    \n-
    \n-
    373
    \n-
    \n-\n-
    375 {
    \n-
    376 DUNE_ASSERT_BOUNDS(i < ROWS);
    \n-
    377 return _data[i];
    \n-
    378 }
    \n-
    \n-
    379 };
    \n-
    \n-
    380
    \n-
    381#ifndef DOXYGEN // hide specialization
    \n-
    384 template<class K>
    \n-
    385 class FieldMatrix<K,1,1> : public DenseMatrix< FieldMatrix<K,1,1> >
    \n-
    386 {
    \n-
    387 FieldVector<K,1> _data;
    \n-
    388 typedef DenseMatrix< FieldMatrix<K,1,1> > Base;
    \n-
    389 public:
    \n-
    390 // standard constructor and everything is sufficient ...
    \n-
    391
    \n-
    392 //===== type definitions and constants
    \n-
    393
    \n-
    395 typedef typename Base::size_type size_type;
    \n-
    396
    \n-
    399 constexpr static int blocklevel = 1;
    \n-
    400
    \n-
    401 typedef typename Base::row_type row_type;
    \n-
    402
    \n-
    403 typedef typename Base::row_reference row_reference;
    \n-\n-
    405
    \n-
    408 constexpr static int rows = 1;
    \n-
    411 constexpr static int cols = 1;
    \n-
    412
    \n-
    413 //===== constructors
    \n-
    416 constexpr FieldMatrix() = default;
    \n-
    417
    \n-
    420 FieldMatrix(std::initializer_list<Dune::FieldVector<K, 1>> const &l)
    \n-
    421 {
    \n-
    422 std::copy_n(l.begin(), std::min(static_cast< std::size_t >( 1 ), l.size()), &_data);
    \n-
    423 }
    \n-
    424
    \n-
    425 template <class T,
    \n-
    426 typename = std::enable_if_t<HasDenseMatrixAssigner<FieldMatrix, T>::value>>
    \n-
    427 FieldMatrix(T const& rhs)
    \n-
    428 {
    \n-
    429 *this = rhs;
    \n-
    430 }
    \n-
    431
    \n-
    432 using Base::operator=;
    \n-
    433
    \n-
    435 FieldMatrix<K, 1, 1> transposed() const
    \n-
    436 {
    \n-
    437 return *this;
    \n-
    438 }
    \n-
    439
    \n-
    441 template <class OtherScalar>
    \n-
    442 friend auto operator+ ( const FieldMatrix& matrixA,
    \n-
    443 const FieldMatrix<OtherScalar,1,1>& matrixB)
    \n-
    444 {
    \n-
    445 return FieldMatrix<typename PromotionTraits<K,OtherScalar>::PromotedType,1,1>{matrixA[0][0] + matrixB[0][0]};
    \n-
    446 }
    \n-
    447
    \n-
    449 template <class Scalar,
    \n-
    450 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    451 friend auto operator+ ( const FieldMatrix& matrix,
    \n-
    452 const Scalar& scalar)
    \n-
    453 {
    \n-
    454 return FieldMatrix<typename PromotionTraits<K,Scalar>::PromotedType,1,1>{matrix[0][0] + scalar};
    \n-
    455 }
    \n-
    456
    \n-
    458 template <class Scalar,
    \n-
    459 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    460 friend auto operator+ ( const Scalar& scalar,
    \n-
    461 const FieldMatrix& matrix)
    \n-
    462 {
    \n-
    463 return FieldMatrix<typename PromotionTraits<Scalar,K>::PromotedType,1,1>{scalar + matrix[0][0]};
    \n-
    464 }
    \n-
    465
    \n-
    467 template <class OtherScalar>
    \n-
    468 friend auto operator- ( const FieldMatrix& matrixA,
    \n-
    469 const FieldMatrix<OtherScalar,1,1>& matrixB)
    \n-
    470 {
    \n-
    471 return FieldMatrix<typename PromotionTraits<K,OtherScalar>::PromotedType,1,1>{matrixA[0][0] - matrixB[0][0]};
    \n-
    472 }
    \n-
    473
    \n-
    475 template <class Scalar,
    \n-
    476 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    477 friend auto operator- ( const FieldMatrix& matrix,
    \n-
    478 const Scalar& scalar)
    \n-
    479 {
    \n-
    480 return FieldMatrix<typename PromotionTraits<K,Scalar>::PromotedType,1,1>{matrix[0][0] - scalar};
    \n-
    481 }
    \n-
    482
    \n-
    484 template <class Scalar,
    \n-
    485 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    486 friend auto operator- ( const Scalar& scalar,
    \n-
    487 const FieldMatrix& matrix)
    \n-
    488 {
    \n-
    489 return FieldMatrix<typename PromotionTraits<Scalar,K>::PromotedType,1,1>{scalar - matrix[0][0]};
    \n-
    490 }
    \n-
    491
    \n-
    493 template <class Scalar,
    \n-
    494 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    495 friend auto operator* ( const FieldMatrix& matrix, Scalar scalar)
    \n-
    496 {
    \n-
    497 return FieldMatrix<typename PromotionTraits<K,Scalar>::PromotedType,1,1> {matrix[0][0] * scalar};
    \n-
    498 }
    \n-
    499
    \n-
    501 template <class Scalar,
    \n-
    502 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    503 friend auto operator* ( Scalar scalar, const FieldMatrix& matrix)
    \n-
    504 {
    \n-
    505 return FieldMatrix<typename PromotionTraits<K,Scalar>::PromotedType,1,1> {scalar * matrix[0][0]};
    \n-
    506 }
    \n-
    507
    \n-
    509 template <class Scalar,
    \n-
    510 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n-
    511 friend auto operator/ ( const FieldMatrix& matrix, Scalar scalar)
    \n-
    512 {
    \n-
    513 return FieldMatrix<typename PromotionTraits<K,Scalar>::PromotedType,1,1> {matrix[0][0] / scalar};
    \n-
    514 }
    \n-
    515
    \n-
    516 //===== solve
    \n-
    517
    \n-
    520 template <class OtherScalar, int otherCols>
    \n-
    521 friend auto operator* ( const FieldMatrix& matrixA,
    \n-
    522 const FieldMatrix<OtherScalar, 1, otherCols>& matrixB)
    \n-
    523 {
    \n-
    524 FieldMatrix<typename PromotionTraits<K,OtherScalar>::PromotedType,1,otherCols> result;
    \n-
    525
    \n-
    526 for (size_type j = 0; j < matrixB.mat_cols(); ++j)
    \n-
    527 result[0][j] = matrixA[0][0] * matrixB[0][j];
    \n-
    528
    \n-
    529 return result;
    \n-
    530 }
    \n-
    531
    \n-
    538 template <class OtherMatrix, std::enable_if_t<
    \n-
    539 Impl::IsStaticSizeMatrix_v<OtherMatrix>
    \n-
    540 and not Impl::IsFieldMatrix_v<OtherMatrix>
    \n-
    541 and (OtherMatrix::rows==1)
    \n-
    542 , int> = 0>
    \n-
    543 friend auto operator* ( const FieldMatrix& matrixA,
    \n-
    544 const OtherMatrix& matrixB)
    \n-
    545 {
    \n-\n-\n-
    548 for (std::size_t j=0; j<rows; ++j)
    \n-
    549 matrixB.mtv(matrixA[j], result[j]);
    \n-
    550 return result;
    \n-
    551 }
    \n-
    552
    \n-
    559 template <class OtherMatrix, std::enable_if_t<
    \n-
    560 Impl::IsStaticSizeMatrix_v<OtherMatrix>
    \n-
    561 and not Impl::IsFieldMatrix_v<OtherMatrix>
    \n-
    562 and (OtherMatrix::cols==1)
    \n-
    563 , int> = 0>
    \n-
    564 friend auto operator* ( const OtherMatrix& matrixA,
    \n-
    565 const FieldMatrix& matrixB)
    \n-
    566 {
    \n-\n-\n-
    569 for (std::size_t j=0; j<cols; ++j)
    \n-
    570 {
    \n-
    571 auto B_j = Impl::ColumnVectorView(matrixB, j);
    \n-
    572 auto result_j = Impl::ColumnVectorView(result, j);
    \n-
    573 matrixA.mv(B_j, result_j);
    \n-
    574 }
    \n-
    575 return result;
    \n-
    576 }
    \n-
    577
    \n-
    579 template<int l>
    \n-
    580 FieldMatrix<K,l,1> leftmultiplyany (const FieldMatrix<K,l,1>& M) const
    \n-
    581 {
    \n-
    582 FieldMatrix<K,l,1> C;
    \n-
    583 for (size_type j=0; j<l; j++)
    \n-
    584 C[j][0] = M[j][0]*(*this)[0][0];
    \n-
    585 return C;
    \n-
    586 }
    \n-
    587
    \n-\n-
    590 {
    \n-
    591 _data[0] *= M[0][0];
    \n-
    592 return *this;
    \n-
    593 }
    \n-
    594
    \n-
    596 template<int l>
    \n-
    597 FieldMatrix<K,1,l> rightmultiplyany (const FieldMatrix<K,1,l>& M) const
    \n-
    598 {
    \n-
    599 FieldMatrix<K,1,l> C;
    \n-
    600
    \n-
    601 for (size_type j=0; j<l; j++)
    \n-
    602 C[0][j] = M[0][j]*_data[0];
    \n-
    603 return C;
    \n-
    604 }
    \n-
    605
    \n-
    606 // make this thing a matrix
    \n-
    607 static constexpr size_type mat_rows() { return 1; }
    \n-
    608 static constexpr size_type mat_cols() { return 1; }
    \n-
    609
    \n-
    610 row_reference mat_access ([[maybe_unused]] size_type i)
    \n-
    611 {
    \n-
    612 DUNE_ASSERT_BOUNDS(i == 0);
    \n-
    613 return _data;
    \n-
    614 }
    \n-
    615
    \n-
    616 const_row_reference mat_access ([[maybe_unused]] size_type i) const
    \n-
    617 {
    \n-
    618 DUNE_ASSERT_BOUNDS(i == 0);
    \n-
    619 return _data;
    \n-
    620 }
    \n-
    621
    \n-
    623 FieldMatrix& operator+= (const K& k)
    \n-
    624 {
    \n-
    625 _data[0] += k;
    \n-
    626 return (*this);
    \n-
    627 }
    \n-
    628
    \n-
    630 FieldMatrix& operator-= (const K& k)
    \n-
    631 {
    \n-
    632 _data[0] -= k;
    \n-
    633 return (*this);
    \n-
    634 }
    \n-
    635
    \n-
    637 FieldMatrix& operator*= (const K& k)
    \n-
    638 {
    \n-
    639 _data[0] *= k;
    \n-
    640 return (*this);
    \n-
    641 }
    \n-
    642
    \n-
    644 FieldMatrix& operator/= (const K& k)
    \n-
    645 {
    \n-
    646 _data[0] /= k;
    \n-
    647 return (*this);
    \n-
    648 }
    \n-
    649
    \n-
    650 //===== conversion operator
    \n-
    651
    \n-
    652 operator const K& () const { return _data[0]; }
    \n-
    653
    \n-
    654 };
    \n-
    655
    \n-
    657 template<typename K>
    \n-
    658 std::ostream& operator<< (std::ostream& s, const FieldMatrix<K,1,1>& a)
    \n-
    659 {
    \n-
    660 s << a[0][0];
    \n-
    661 return s;
    \n-
    662 }
    \n-
    663
    \n-
    664#endif // DOXYGEN
    \n-
    665
    \n-
    \n-
    666 namespace FMatrixHelp {
    \n-
    667
    \n-
    669 template <typename K>
    \n-
    \n-
    670 static inline K invertMatrix (const FieldMatrix<K,1,1> &matrix, FieldMatrix<K,1,1> &inverse)
    \n-
    671 {
    \n-
    672 using real_type = typename FieldTraits<K>::real_type;
    \n-
    673 inverse[0][0] = real_type(1.0)/matrix[0][0];
    \n-
    674 return matrix[0][0];
    \n-
    675 }
    \n-
    \n-
    676
    \n-
    678 template <typename K>
    \n-
    \n-
    679 static inline K invertMatrix_retTransposed (const FieldMatrix<K,1,1> &matrix, FieldMatrix<K,1,1> &inverse)
    \n-
    680 {
    \n-
    681 return invertMatrix(matrix,inverse);
    \n-
    682 }
    \n-
    \n-
    683
    \n-
    684
    \n-
    686 template <typename K>
    \n-
    \n-
    687 static inline K invertMatrix (const FieldMatrix<K,2,2> &matrix, FieldMatrix<K,2,2> &inverse)
    \n-
    688 {
    \n-
    689 using real_type = typename FieldTraits<K>::real_type;
    \n-
    690 // code generated by maple
    \n-
    691 K det = (matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]);
    \n-
    692 K det_1 = real_type(1.0)/det;
    \n-
    693 inverse[0][0] = matrix[1][1] * det_1;
    \n-
    694 inverse[0][1] = - matrix[0][1] * det_1;
    \n-
    695 inverse[1][0] = - matrix[1][0] * det_1;
    \n-
    696 inverse[1][1] = matrix[0][0] * det_1;
    \n-
    697 return det;
    \n-
    698 }
    \n-
    \n-
    699
    \n-
    702 template <typename K>
    \n-
    \n-
    703 static inline K invertMatrix_retTransposed (const FieldMatrix<K,2,2> &matrix, FieldMatrix<K,2,2> &inverse)
    \n-
    704 {
    \n-
    705 using real_type = typename FieldTraits<K>::real_type;
    \n-
    706 // code generated by maple
    \n-
    707 K det = (matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]);
    \n-
    708 K det_1 = real_type(1.0)/det;
    \n-
    709 inverse[0][0] = matrix[1][1] * det_1;
    \n-
    710 inverse[1][0] = - matrix[0][1] * det_1;
    \n-
    711 inverse[0][1] = - matrix[1][0] * det_1;
    \n-
    712 inverse[1][1] = matrix[0][0] * det_1;
    \n-
    713 return det;
    \n-
    714 }
    \n-
    \n-
    715
    \n-
    717 template <typename K>
    \n-
    \n-
    718 static inline K invertMatrix (const FieldMatrix<K,3,3> &matrix, FieldMatrix<K,3,3> &inverse)
    \n-
    719 {
    \n-
    720 using real_type = typename FieldTraits<K>::real_type;
    \n-
    721 // code generated by maple
    \n-
    722 K t4 = matrix[0][0] * matrix[1][1];
    \n-
    723 K t6 = matrix[0][0] * matrix[1][2];
    \n-
    724 K t8 = matrix[0][1] * matrix[1][0];
    \n-
    725 K t10 = matrix[0][2] * matrix[1][0];
    \n-
    726 K t12 = matrix[0][1] * matrix[2][0];
    \n-
    727 K t14 = matrix[0][2] * matrix[2][0];
    \n-
    728
    \n-
    729 K det = (t4*matrix[2][2]-t6*matrix[2][1]-t8*matrix[2][2]+
    \n-
    730 t10*matrix[2][1]+t12*matrix[1][2]-t14*matrix[1][1]);
    \n-
    731 K t17 = real_type(1.0)/det;
    \n-
    732
    \n-
    733 inverse[0][0] = (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1])*t17;
    \n-
    734 inverse[0][1] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2][1])*t17;
    \n-
    735 inverse[0][2] = (matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1][1])*t17;
    \n-
    736 inverse[1][0] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0])*t17;
    \n-
    737 inverse[1][1] = (matrix[0][0] * matrix[2][2] - t14) * t17;
    \n-
    738 inverse[1][2] = -(t6-t10) * t17;
    \n-
    739 inverse[2][0] = (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0]) * t17;
    \n-
    740 inverse[2][1] = -(matrix[0][0] * matrix[2][1] - t12) * t17;
    \n-
    741 inverse[2][2] = (t4-t8) * t17;
    \n-
    742
    \n-
    743 return det;
    \n-
    744 }
    \n-
    \n-
    745
    \n-
    747 template <typename K>
    \n-
    \n-
    748 static inline K invertMatrix_retTransposed (const FieldMatrix<K,3,3> &matrix, FieldMatrix<K,3,3> &inverse)
    \n-
    749 {
    \n-
    750 using real_type = typename FieldTraits<K>::real_type;
    \n-
    751 // code generated by maple
    \n-
    752 K t4 = matrix[0][0] * matrix[1][1];
    \n-
    753 K t6 = matrix[0][0] * matrix[1][2];
    \n-
    754 K t8 = matrix[0][1] * matrix[1][0];
    \n-
    755 K t10 = matrix[0][2] * matrix[1][0];
    \n-
    756 K t12 = matrix[0][1] * matrix[2][0];
    \n-
    757 K t14 = matrix[0][2] * matrix[2][0];
    \n-
    758
    \n-
    759 K det = (t4*matrix[2][2]-t6*matrix[2][1]-t8*matrix[2][2]+
    \n-
    760 t10*matrix[2][1]+t12*matrix[1][2]-t14*matrix[1][1]);
    \n-
    761 K t17 = real_type(1.0)/det;
    \n-
    762
    \n-
    763 inverse[0][0] = (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1])*t17;
    \n-
    764 inverse[1][0] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2][1])*t17;
    \n-
    765 inverse[2][0] = (matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1][1])*t17;
    \n-
    766 inverse[0][1] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0])*t17;
    \n-
    767 inverse[1][1] = (matrix[0][0] * matrix[2][2] - t14) * t17;
    \n-
    768 inverse[2][1] = -(t6-t10) * t17;
    \n-
    769 inverse[0][2] = (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0]) * t17;
    \n-
    770 inverse[1][2] = -(matrix[0][0] * matrix[2][1] - t12) * t17;
    \n-
    771 inverse[2][2] = (t4-t8) * t17;
    \n-
    772
    \n-
    773 return det;
    \n-
    774 }
    \n-
    \n-
    775
    \n-
    777 template< class K, int m, int n, int p >
    \n-
    \n-
    778 static inline void multMatrix ( const FieldMatrix< K, m, n > &A,
    \n-
    779 const FieldMatrix< K, n, p > &B,
    \n-\n-
    781 {
    \n-
    782 typedef typename FieldMatrix< K, m, p > :: size_type size_type;
    \n-
    783
    \n-
    784 for( size_type i = 0; i < m; ++i )
    \n-
    785 {
    \n-
    786 for( size_type j = 0; j < p; ++j )
    \n-
    787 {
    \n-
    788 ret[ i ][ j ] = K( 0 );
    \n-
    789 for( size_type k = 0; k < n; ++k )
    \n-
    790 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];
    \n-
    791 }
    \n-
    792 }
    \n-
    793 }
    \n-
    \n-
    794
    \n-
    796 template <typename K, int rows, int cols>
    \n-
    \n-\n-
    798 {
    \n-
    799 typedef typename FieldMatrix<K,rows,cols>::size_type size_type;
    \n-
    800
    \n-
    801 for(size_type i=0; i<cols; i++)
    \n-
    802 for(size_type j=0; j<cols; j++)
    \n-
    803 {
    \n-
    804 ret[i][j]=0.0;
    \n-
    805 for(size_type k=0; k<rows; k++)
    \n-
    806 ret[i][j]+=matrix[k][i]*matrix[k][j];
    \n-
    807 }
    \n-
    808 }
    \n-
    \n-
    809
    \n-\n-
    811
    \n-
    813 template <typename K, int rows, int cols>
    \n-
    \n-\n-
    815 {
    \n-
    816 typedef typename FieldMatrix<K,rows,cols>::size_type size_type;
    \n-
    817
    \n-
    818 for(size_type i=0; i<cols; ++i)
    \n-
    819 {
    \n-
    820 ret[i] = 0.0;
    \n-
    821 for(size_type j=0; j<rows; ++j)
    \n-
    822 ret[i] += matrix[j][i]*x[j];
    \n-
    823 }
    \n-
    824 }
    \n-
    \n-
    825
    \n-
    827 template <typename K, int rows, int cols>
    \n-
    \n-\n-
    829 {
    \n-\n-
    831 multAssign(matrix,x,ret);
    \n-
    832 return ret;
    \n-
    833 }
    \n-
    \n-
    834
    \n-
    836 template <typename K, int rows, int cols>
    \n-
    \n-\n-
    838 {
    \n-\n-
    840 multAssignTransposed( matrix, x, ret );
    \n-
    841 return ret;
    \n-
    842 }
    \n-
    \n-
    843
    \n-
    844 } // end namespace FMatrixHelp
    \n-
    \n-
    845
    \n-
    848} // end namespace
    \n-
    849
    \n-
    850#include "fmatrixev.hh"
    \n-
    851#endif
    \n-\n-
    Macro for wrapping boundary checks.
    \n-
    Implements a matrix constructed from a given type representing a field and a compile-time given numbe...
    \n-
    Various precision settings for calculations with FieldMatrix and FieldVector.
    \n-
    Traits for type conversions and type information.
    \n-
    Implements a vector constructed from a given type representing a field and a compile-time given size.
    \n-
    Eigenvalue computations for the FieldMatrix class.
    \n-
    A few common exception classes.
    \n-
    Compute type of the result of an arithmetic operation involving two different number types.
    \n-
    #define DUNE_ASSERT_BOUNDS(cond)
    If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
    Definition boundschecking.hh:30
    \n-
    std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
    Definition bigunsignedint.hh:278
    \n-
    typename Overloads::ScalarType< std::decay_t< V > >::type Scalar
    Element type of some SIMD type.
    Definition simd/interface.hh:235
    \n-
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    static void multAssign(const DenseMatrix< MAT > &matrix, const DenseVector< V1 > &x, DenseVector< V2 > &ret)
    calculates ret = matrix * x
    Definition densematrix.hh:1169
    \n-
    static FieldVector< K, cols > multTransposed(const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, rows > &x)
    calculates ret = matrix^T * x
    Definition fmatrix.hh:837
    \n-
    static K invertMatrix_retTransposed(const FieldMatrix< K, 1, 1 > &matrix, FieldMatrix< K, 1, 1 > &inverse)
    invert scalar without changing the original matrix
    Definition fmatrix.hh:679
    \n-
    static void multMatrix(const FieldMatrix< K, m, n > &A, const FieldMatrix< K, n, p > &B, FieldMatrix< K, m, p > &ret)
    calculates ret = A * B
    Definition fmatrix.hh:778
    \n-
    static K invertMatrix(const FieldMatrix< K, 1, 1 > &matrix, FieldMatrix< K, 1, 1 > &inverse)
    invert scalar without changing the original matrix
    Definition fmatrix.hh:670
    \n-
    static FieldVector< K, rows > mult(const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, cols > &x)
    calculates ret = matrix * x
    Definition fmatrix.hh:828
    \n-
    static void multTransposedMatrix(const FieldMatrix< K, rows, cols > &matrix, FieldMatrix< K, cols, cols > &ret)
    calculates ret= A_t*A
    Definition fmatrix.hh:797
    \n-
    static void multAssignTransposed(const FieldMatrix< K, rows, cols > &matrix, const FieldVector< K, rows > &x, FieldVector< K, cols > &ret)
    calculates ret = matrix^T * x
    Definition fmatrix.hh:814
    \n-
    A dense n x m matrix.
    Definition densematrix.hh:140
    \n-
    void mtv(const X &x, Y &y) const
    y = A^T x
    Definition densematrix.hh:387
    \n-
    constexpr size_type M() const
    number of columns
    Definition densematrix.hh:703
    \n-
    FieldMatrix< K, ROWS, COLS > & rightmultiply(const DenseMatrix< M2 > &M)
    Multiplies M from the right to this matrix.
    Definition densematrix.hh:645
    \n-
    derived_type & operator/=(const field_type &k)
    vector space division by scalar
    Definition densematrix.hh:329
    \n-
    derived_type & operator*=(const field_type &k)
    vector space multiplication with scalar
    Definition densematrix.hh:321
    \n-
    derived_type & operator-=(const DenseMatrix< Other > &x)
    vector space subtraction
    Definition densematrix.hh:312
    \n-
    static constexpr int blocklevel
    The number of block levels we contain. This is the leaf, that is, 1.
    Definition densematrix.hh:178
    \n-
    Traits::row_type row_type
    The type used to represent a row (must fulfill the Dune::DenseVector interface)
    Definition densematrix.hh:169
    \n-
    Traits::size_type size_type
    The type used for the index access and size operation.
    Definition densematrix.hh:166
    \n-
    Traits::const_row_reference const_row_reference
    The type used to represent a reference to a constant row (usually const row_type &)
    Definition densematrix.hh:175
    \n-
    Traits::row_reference row_reference
    The type used to represent a reference to a row (usually row_type &)
    Definition densematrix.hh:172
    \n-
    derived_type & operator+=(const DenseMatrix< Other > &x)
    vector space addition
    Definition densematrix.hh:289
    \n-
    A dense n x m matrix.
    Definition fmatrix.hh:117
    \n-
    static constexpr size_type mat_cols()
    Definition fmatrix.hh:366
    \n-
    constexpr FieldMatrix()=default
    Default constructor.
    \n-
    Base::const_row_reference const_row_reference
    Definition fmatrix.hh:131
    \n-
    FieldMatrix & operator=(const FieldMatrix< T, ROWS, COLS > &x)
    copy assignment from FieldMatrix over a different field
    Definition fmatrix.hh:160
    \n-
    FieldMatrix< K, rows, l > rightmultiplyany(const FieldMatrix< K, cols, l > &M) const
    Multiplies M from the right to this matrix, this matrix is not modified.
    Definition fmatrix.hh:350
    \n-
    Base::row_type row_type
    Definition fmatrix.hh:128
    \n-
    Base::size_type size_type
    Definition fmatrix.hh:127
    \n-
    FieldMatrix< K, l, cols > leftmultiplyany(const FieldMatrix< K, l, rows > &M) const
    Multiplies M from the left to this matrix, this matrix is not modified.
    Definition fmatrix.hh:315
    \n-
    FieldMatrix & rightmultiply(const FieldMatrix< K, r, c > &M)
    Multiplies M from the right to this matrix.
    Definition fmatrix.hh:333
    \n-
    FieldMatrix(T const &rhs)
    Definition fmatrix.hh:148
    \n-
    friend auto operator*(const FieldMatrix &matrix, Scalar scalar)
    vector space multiplication with scalar
    Definition fmatrix.hh:211
    \n-
    FieldMatrix & operator=(FieldMatrix< T, rows, cols > const &)=delete
    no copy assignment from FieldMatrix of different size
    \n-
    Base::row_reference row_reference
    Definition fmatrix.hh:130
    \n-
    constexpr FieldMatrix(std::initializer_list< Dune::FieldVector< K, cols > > const &l)
    Constructor initializing the matrix from a list of vector.
    Definition fmatrix.hh:140
    \n-
    row_reference mat_access(size_type i)
    Definition fmatrix.hh:368
    \n-
    static constexpr int rows
    The number of rows.
    Definition fmatrix.hh:123
    \n-
    FieldMatrix< K, COLS, ROWS > transposed() const
    Return transposed of the matrix as FieldMatrix.
    Definition fmatrix.hh:171
    \n-
    static constexpr size_type mat_rows()
    Definition fmatrix.hh:365
    \n-
    static constexpr int cols
    The number of columns.
    Definition fmatrix.hh:125
    \n-
    friend auto operator/(const FieldMatrix &matrix, Scalar scalar)
    vector space division by scalar
    Definition fmatrix.hh:239
    \n-
    friend auto operator+(const FieldMatrix &matrixA, const FieldMatrix< OtherScalar, ROWS, COLS > &matrixB)
    vector space addition \u2013 two-argument version
    Definition fmatrix.hh:182
    \n-
    FieldMatrix & operator=(const FieldMatrix &)=default
    copy assignment operator
    \n-
    friend auto operator-(const FieldMatrix &matrixA, const FieldMatrix< OtherScalar, ROWS, COLS > &matrixB)
    vector space subtraction \u2013 two-argument version
    Definition fmatrix.hh:196
    \n-
    const_row_reference mat_access(size_type i) const
    Definition fmatrix.hh:374
    \n-
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n-
    std::array< row_type, ROWS > container_type
    Definition fmatrix.hh:95
    \n-
    FieldMatrix< K, ROWS, COLS > derived_type
    Definition fmatrix.hh:87
    \n-\n-
    const row_type & const_row_reference
    Definition fmatrix.hh:93
    \n-
    FieldVector< K, COLS > row_type
    Definition fmatrix.hh:90
    \n-
    container_type::size_type size_type
    Definition fmatrix.hh:97
    \n-
    row_type & row_reference
    Definition fmatrix.hh:92
    \n-
    FieldTraits< K >::field_type field_type
    Definition fmatrix.hh:103
    \n-
    FieldTraits< K >::real_type real_type
    Definition fmatrix.hh:104
    \n-
    Definition ftraits.hh:26
    \n-
    T field_type
    export the type representing the field
    Definition ftraits.hh:28
    \n-
    T real_type
    export the type representing the real type of the field
    Definition ftraits.hh:30
    \n-
    Definition matvectraits.hh:31
    \n-
    decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType
    Definition promotiontraits.hh:28
    \n+
    34#endif // DUNE_COMMON_ASSERTANDRETURN_HH
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1061 +1,39 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-fmatrix.hh\n+assertandreturn.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_FMATRIX_HH\n-6#define DUNE_FMATRIX_HH\n+5#ifndef DUNE_COMMON_ASSERTANDRETURN_HH\n+6#define DUNE_COMMON_ASSERTANDRETURN_HH\n 7\n-8#include \n-9#include \n-10#include \n-11#include \n-12#include \n+8#ifndef DUNE_DISABLE_DEPRECATION_WARNING_ASSERT_AND_RETURN\n+9#warning \"The file assertandreturn.hh is deprecated. Since c++14 constexpr\n+functions allow more \\\n+10than a single return statement and thus this utility is useless. Will be\n+removed after \\\n+11Dune 2.10 release.\"\n+12#endif // DUNE_DISABLE_DEPRECATION_WARNING_ASSERT_AND_RETURN\n 13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-16#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n-17#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-20#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\br_\bi_\bx_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh>\n-22\n-23namespace _\bD_\bu_\bn_\be\n-24{\n-25\n-26 namespace Impl\n-27 {\n-28\n-29 template\n-30 class ColumnVectorView\n-31 {\n-32 public:\n+14#include \n+15\n+17\n+26#ifdef NDEBUG\n+27 #define DUNE_ASSERT_AND_RETURN(C,X) X\n+28#else\n+_\b2_\b9 #define DUNE_ASSERT_AND_RETURN(C,X) (!(C) ? throw [&](){assert(!#C);return\n+0;}() : 0), X\n+30#endif\n+31\n+32\n 33\n-34 using value_type = typename M::value_type;\n-35 using size_type = typename M::size_type;\n-36\n-37 constexpr ColumnVectorView(M& matrix, size_type col) :\n-38 matrix_(matrix),\n-39 col_(col)\n-40 {}\n-41\n-42 constexpr size_type N () const {\n-43 return matrix_.N();\n-44 }\n-45\n-46 template and not std::is_const_v, int> = 0>\n-48 constexpr value_type& operator[] (size_type row) {\n-49 return matrix_[row][col_];\n-50 }\n-51\n-52 constexpr const value_type& operator[] (size_type row) const {\n-53 return matrix_[row][col_];\n-54 }\n-55\n-56 protected:\n-57 M& matrix_;\n-58 const size_type col_;\n-59 };\n-60\n-61 }\n-62\n-63 template\n-64 struct FieldTraits< Impl::ColumnVectorView >\n-65 {\n-66 using _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bM_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n-67 using _\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bM_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-68 };\n-69\n-81 template< class K, int ROWS, int COLS = ROWS > class FieldMatrix;\n-82\n-83\n-84 template< class K, int ROWS, int COLS >\n-_\b8_\b5 struct _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs< _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx >\n-86 {\n-_\b8_\b7 typedef _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bR_\bO_\bW_\bS_\b,_\bC_\bO_\bL_\bS_\b> _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be;\n-88\n-89 // each row is implemented by a field vector\n-_\b9_\b0 typedef _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bC_\bO_\bL_\bS_\b> _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-91\n-_\b9_\b2 typedef _\br_\bo_\bw_\b__\bt_\by_\bp_\be &_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b9_\b3 typedef const _\br_\bo_\bw_\b__\bt_\by_\bp_\be &_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-94\n-_\b9_\b5 typedef std::array _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\bt_\by_\bp_\be;\n-_\b9_\b6 typedef K _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b9_\b7 typedef typename container_type::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-98 };\n-99\n-100 template< class K, int ROWS, int COLS >\n-_\b1_\b0_\b1 struct _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs< _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx >\n-102 {\n-_\b1_\b0_\b3 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n-_\b1_\b0_\b4 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-105 };\n-106\n-115 template\n-_\b1_\b1_\b6 class _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx : public _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx< FieldMatrix >\n-117 {\n-118 std::array< FieldVector, ROWS > _data;\n-119 typedef _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bR_\bO_\bW_\bS_\b,_\bC_\bO_\bL_\bS_\b> > _\bB_\ba_\bs_\be;\n-120 public:\n-121\n-_\b1_\b2_\b3 constexpr static int _\br_\bo_\bw_\bs = ROWS;\n-_\b1_\b2_\b5 constexpr static int _\bc_\bo_\bl_\bs = COLS;\n-126\n-_\b1_\b2_\b7 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-_\b1_\b2_\b8 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-129\n-_\b1_\b3_\b0 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b1_\b3_\b1 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-132\n-133 //===== constructors\n-_\b1_\b3_\b6 constexpr _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx() = default;\n-137\n-_\b1_\b4_\b0 constexpr _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx(std::initializer_list<_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b _\bc_\bo_\bl_\bs_\b> >\n-const &l) {\n-141 assert(l.size() == _\br_\bo_\bw_\bs); // Actually, this is not needed any more!\n-142 for(std::size_t i=0; i(ROWS), l.size());\n-++i)\n-143 _data[i] = std::data(l)[i];\n-144 }\n-145\n-146 template ::value>>\n-_\b1_\b4_\b8 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx(T const& rhs)\n-149 {\n-150 *this = rhs;\n-151 }\n-152\n-153 using Base::operator=;\n-154\n-_\b1_\b5_\b6 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx&) = default;\n-157\n-159 template\n-_\b1_\b6_\b0 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bT_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b>& x)\n-161 {\n-162 _data = x._data;\n-163 return *this;\n-164 }\n-165\n-167 template \n-_\b1_\b6_\b8 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bT_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b> const&) = delete;\n-169\n-_\b1_\b7_\b1 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b _\bC_\bO_\bL_\bS_\b,_\b _\bR_\bO_\bW_\bS_\b> _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd() const\n-172 {\n-173 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b _\bC_\bO_\bL_\bS_\b,_\b _\bR_\bO_\bW_\bS_\b> AT;\n-174 for( int i = 0; i < ROWS; ++i )\n-175 for( int j = 0; j < COLS; ++j )\n-176 AT[j][i] = (*this)[i][j];\n-177 return AT;\n-178 }\n-179\n-181 template \n-_\b1_\b8_\b2 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-183 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b,_\bR_\bO_\bW_\bS_\b,_\bC_\bO_\bL_\bS_\b>& matrixB)\n-184 {\n-185 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:\n-_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,COLS> result;\n-186\n-187 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < ROWS; ++i)\n-188 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < COLS; ++j)\n-189 result[i][j] = matrixA[i][j] + matrixB[i][j];\n-190\n-191 return result;\n-192 }\n-193\n-195 template \n-_\b1_\b9_\b6 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-197 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b,_\bR_\bO_\bW_\bS_\b,_\bC_\bO_\bL_\bS_\b>& matrixB)\n-198 {\n-199 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:\n-_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,COLS> result;\n-200\n-201 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < ROWS; ++i)\n-202 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < COLS; ++j)\n-203 result[i][j] = matrixA[i][j] - matrixB[i][j];\n-204\n-205 return result;\n-206 }\n-207\n-209 template ::value, int> = 0>\n-_\b2_\b1_\b1 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix, Scalar scalar)\n-212 {\n-213 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,COLS>\n-result;\n-214\n-215 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < ROWS; ++i)\n-216 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < COLS; ++j)\n-217 result[i][j] = matrix[i][j] * scalar;\n-218\n-219 return result;\n-220 }\n-221\n-223 template ::value, int> = 0>\n-_\b2_\b2_\b5 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( Scalar scalar, const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix)\n-226 {\n-227 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,COLS>\n-result;\n-228\n-229 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < ROWS; ++i)\n-230 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < COLS; ++j)\n-231 result[i][j] = scalar * matrix[i][j];\n-232\n-233 return result;\n-234 }\n-235\n-237 template ::value, int> = 0>\n-_\b2_\b3_\b9 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix, Scalar scalar)\n-240 {\n-241 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,COLS>\n-result;\n-242\n-243 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < ROWS; ++i)\n-244 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < COLS; ++j)\n-245 result[i][j] = matrix[i][j] / scalar;\n-246\n-247 return result;\n-248 }\n-249\n-252 template \n-_\b2_\b5_\b3 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-254 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b,_\b _\bC_\bO_\bL_\bS_\b,_\b _\bo_\bt_\bh_\be_\br_\bC_\bo_\bl_\bs_\b>& matrixB)\n-255 {\n-256 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\bO_\bt_\bh_\be_\br_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:\n-_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be,ROWS,otherCols> result;\n-257\n-258 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < matrixA._\bm_\ba_\bt_\b__\br_\bo_\bw_\bs(); ++i)\n-259 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < matrixB._\bm_\ba_\bt_\b__\bc_\bo_\bl_\bs(); ++j)\n-260 {\n-261 result[i][j] = 0;\n-262 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be k = 0; k < matrixA._\bm_\ba_\bt_\b__\bc_\bo_\bl_\bs(); ++k)\n-263 result[i][j] += matrixA[i][k] * matrixB[k][j];\n-264 }\n-265\n-266 return result;\n-267 }\n-268\n-275 template \n-277 and not Impl::IsFieldMatrix_v\n-278 , int> = 0>\n-_\b2_\b7_\b9 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-280 const OtherMatrix& matrixB)\n-281 {\n-282 using Field = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:\n-_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n-283 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bF_\bi_\be_\bl_\bd_\b,_\b _\br_\bo_\bw_\bs_\b _\b,_\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs_\b> result;\n-284 for (std::size_t j=0; j<_\br_\bo_\bw_\bs; ++j)\n-285 matrixB._\bm_\bt_\bv(matrixA[j], result[j]);\n-286 return result;\n-287 }\n-288\n-295 template \n-297 and not Impl::IsFieldMatrix_v\n-298 , int> = 0>\n-_\b2_\b9_\b9 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const OtherMatrix& matrixA,\n-300 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixB)\n-301 {\n-302 using Field = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:\n-_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n-303 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bF_\bi_\be_\bl_\bd_\b,_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs_\b,_\b _\bc_\bo_\bl_\bs_\b> result;\n-304 for (std::size_t j=0; j<_\bc_\bo_\bl_\bs; ++j)\n-305 {\n-306 auto B_j = Impl::ColumnVectorView(matrixB, j);\n-307 auto result_j = Impl::ColumnVectorView(result, j);\n-308 matrixA.mv(B_j, result_j);\n-309 }\n-310 return result;\n-311 }\n-312\n-314 template\n-_\b3_\b1_\b5 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bl_\b,_\bc_\bo_\bl_\bs_\b> _\bl_\be_\bf_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bl_\b,_\br_\bo_\bw_\bs_\b>& _\bM)\n-const\n-316 {\n-317 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bl_\b,_\bc_\bo_\bl_\bs_\b> C;\n-318\n-319 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i\n-_\b3_\b3_\b3 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& _\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\b,_\bc_\b>& _\bM)\n-334 {\n-335 static_assert(r == c, \"Cannot rightmultiply with non-square matrix\");\n-336 static_assert(r == _\bc_\bo_\bl_\bs, \"Size mismatch\");\n-337 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b> C(*this);\n-338\n-339 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\br_\bo_\bw_\bs; i++)\n-340 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j=0; j<_\bc_\bo_\bl_\bs; j++) {\n-341 (*this)[i][j] = 0;\n-342 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be k=0; k<_\bc_\bo_\bl_\bs; k++)\n-343 (*this)[i][j] += C[i][k]*_\bM[k][j];\n-344 }\n-345 return *this;\n-346 }\n-347\n-349 template\n-_\b3_\b5_\b0 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bl_\b> _\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b,_\bl_\b>& _\bM)\n-const\n-351 {\n-352 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bl_\b> C;\n-353\n-354 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i<_\br_\bo_\bw_\bs; i++) {\n-355 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j=0; j\n-385 class FieldMatrix : public DenseMatrix< FieldMatrix >\n-386 {\n-387 FieldVector _data;\n-388 typedef DenseMatrix< FieldMatrix > Base;\n-389 public:\n-390 // standard constructor and everything is sufficient ...\n-391\n-392 //===== type definitions and constants\n-393\n-395 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-396\n-399 constexpr static int _\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl = 1;\n-400\n-401 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be _\br_\bo_\bw_\b__\bt_\by_\bp_\be;\n-402\n-403 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-404 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-405\n-408 constexpr static int _\br_\bo_\bw_\bs = 1;\n-411 constexpr static int _\bc_\bo_\bl_\bs = 1;\n-412\n-413 //===== constructors\n-416 constexpr _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx() = default;\n-417\n-420 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx(std::initializer_list<_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b _\b1_\b>> const &l)\n-421 {\n-422 std::copy_n(l.begin(), std::min(static_cast< std::size_t >( 1 ), l.size()),\n-&_data);\n-423 }\n-424\n-425 template ::value>>\n-427 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx(T const& rhs)\n-428 {\n-429 *this = rhs;\n-430 }\n-431\n-432 using Base::operator=;\n-433\n-435 FieldMatrix _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd() const\n-436 {\n-437 return *this;\n-438 }\n-439\n-441 template \n-442 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-443 const FieldMatrix& matrixB)\n-444 {\n-445 return FieldMatrix::\n-PromotedType,1,1>{matrixA[0][0] + matrixB[0][0]};\n-446 }\n-447\n-449 template ::value, int> = 0>\n-451 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix,\n-452 const Scalar& scalar)\n-453 {\n-454 return FieldMatrix::PromotedType,1,1>\n-{matrix[0][0] + scalar};\n-455 }\n-456\n-458 template ::value, int> = 0>\n-460 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b ( const Scalar& scalar,\n-461 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix)\n-462 {\n-463 return FieldMatrix::PromotedType,1,1>\n-{scalar + matrix[0][0]};\n-464 }\n-465\n-467 template \n-468 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-469 const FieldMatrix& matrixB)\n-470 {\n-471 return FieldMatrix::\n-PromotedType,1,1>{matrixA[0][0] - matrixB[0][0]};\n-472 }\n-473\n-475 template ::value, int> = 0>\n-477 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix,\n-478 const Scalar& scalar)\n-479 {\n-480 return FieldMatrix::PromotedType,1,1>\n-{matrix[0][0] - scalar};\n-481 }\n-482\n-484 template ::value, int> = 0>\n-486 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b ( const Scalar& scalar,\n-487 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix)\n-488 {\n-489 return FieldMatrix::PromotedType,1,1>\n-{scalar - matrix[0][0]};\n-490 }\n-491\n-493 template ::value, int> = 0>\n-495 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix, Scalar scalar)\n-496 {\n-497 return FieldMatrix::PromotedType,1,1>\n-{matrix[0][0] * scalar};\n-498 }\n-499\n-501 template ::value, int> = 0>\n-503 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( Scalar scalar, const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix)\n-504 {\n-505 return FieldMatrix::PromotedType,1,1>\n-{scalar * matrix[0][0]};\n-506 }\n-507\n-509 template ::value, int> = 0>\n-511 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrix, Scalar scalar)\n-512 {\n-513 return FieldMatrix::PromotedType,1,1>\n-{matrix[0][0] / scalar};\n-514 }\n-515\n-516 //===== solve\n-517\n-520 template \n-521 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-522 const FieldMatrix& matrixB)\n-523 {\n-524 FieldMatrix::\n-PromotedType,1,otherCols> result;\n-525\n-526 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j = 0; j < matrixB.mat_cols(); ++j)\n-527 result[0][j] = matrixA[0][0] * matrixB[0][j];\n-528\n-529 return result;\n-530 }\n-531\n-538 template \n-540 and not Impl::IsFieldMatrix_v\n-541 and (OtherMatrix::rows==1)\n-542 , int> = 0>\n-543 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixA,\n-544 const OtherMatrix& matrixB)\n-545 {\n-546 using Field = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:\n-_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n-547 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bF_\bi_\be_\bl_\bd_\b,_\b _\br_\bo_\bw_\bs_\b _\b,_\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs_\b> result;\n-548 for (std::size_t j=0; j<_\br_\bo_\bw_\bs; ++j)\n-549 matrixB.mtv(matrixA[j], result[j]);\n-550 return result;\n-551 }\n-552\n-559 template \n-561 and not Impl::IsFieldMatrix_v\n-562 and (OtherMatrix::cols==1)\n-563 , int> = 0>\n-564 friend auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b ( const OtherMatrix& matrixA,\n-565 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx& matrixB)\n-566 {\n-567 using Field = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:\n-_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n-568 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bF_\bi_\be_\bl_\bd_\b,_\b _\bO_\bt_\bh_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs_\b,_\b _\bc_\bo_\bl_\bs_\b> result;\n-569 for (std::size_t j=0; j<_\bc_\bo_\bl_\bs; ++j)\n-570 {\n-571 auto B_j = Impl::ColumnVectorView(matrixB, j);\n-572 auto result_j = Impl::ColumnVectorView(result, j);\n-573 matrixA.mv(B_j, result_j);\n-574 }\n-575 return result;\n-576 }\n-577\n-579 template\n-580 FieldMatrix _\bl_\be_\bf_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by (const FieldMatrix& _\bM) const\n-581 {\n-582 FieldMatrix C;\n-583 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j=0; j\n-597 FieldMatrix _\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by (const FieldMatrix& _\bM) const\n-598 {\n-599 FieldMatrix C;\n-600\n-601 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j=0; j\n-658 std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b (std::ostream& s, const FieldMatrix& a)\n-659 {\n-660 s << a[0][0];\n-661 return s;\n-662 }\n-663\n-664#endif // DOXYGEN\n-665\n-_\b6_\b6_\b6 namespace FMatrixHelp {\n-667\n-669 template \n-_\b6_\b7_\b0 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b1_\b,_\b1_\b> &matrix,\n-_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b1_\b,_\b1_\b> &inverse)\n-671 {\n-672 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-673 inverse[0][0] = real_type(1.0)/matrix[0][0];\n-674 return matrix[0][0];\n-675 }\n-676\n-678 template \n-_\b6_\b7_\b9 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b1_\b,_\b1_\b>\n-&matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b1_\b,_\b1_\b> &inverse)\n-680 {\n-681 return _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx(matrix,inverse);\n-682 }\n-683\n-684\n-686 template \n-_\b6_\b8_\b7 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b2_\b,_\b2_\b> &matrix,\n-_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b2_\b,_\b2_\b> &inverse)\n-688 {\n-689 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-690 // code generated by maple\n-691 K det = (matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]);\n-692 K det_1 = real_type(1.0)/det;\n-693 inverse[0][0] = matrix[1][1] * det_1;\n-694 inverse[0][1] = - matrix[0][1] * det_1;\n-695 inverse[1][0] = - matrix[1][0] * det_1;\n-696 inverse[1][1] = matrix[0][0] * det_1;\n-697 return det;\n-698 }\n-699\n-702 template \n-_\b7_\b0_\b3 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b2_\b,_\b2_\b>\n-&matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b2_\b,_\b2_\b> &inverse)\n-704 {\n-705 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-706 // code generated by maple\n-707 K det = (matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]);\n-708 K det_1 = real_type(1.0)/det;\n-709 inverse[0][0] = matrix[1][1] * det_1;\n-710 inverse[1][0] = - matrix[0][1] * det_1;\n-711 inverse[0][1] = - matrix[1][0] * det_1;\n-712 inverse[1][1] = matrix[0][0] * det_1;\n-713 return det;\n-714 }\n-715\n-717 template \n-_\b7_\b1_\b8 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b3_\b,_\b3_\b> &matrix,\n-_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b3_\b,_\b3_\b> &inverse)\n-719 {\n-720 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-721 // code generated by maple\n-722 K t4 = matrix[0][0] * matrix[1][1];\n-723 K t6 = matrix[0][0] * matrix[1][2];\n-724 K t8 = matrix[0][1] * matrix[1][0];\n-725 K t10 = matrix[0][2] * matrix[1][0];\n-726 K t12 = matrix[0][1] * matrix[2][0];\n-727 K t14 = matrix[0][2] * matrix[2][0];\n-728\n-729 K det = (t4*matrix[2][2]-t6*matrix[2][1]-t8*matrix[2][2]+\n-730 t10*matrix[2][1]+t12*matrix[1][2]-t14*matrix[1][1]);\n-731 K t17 = real_type(1.0)/det;\n-732\n-733 inverse[0][0] = (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2]\n-[1])*t17;\n-734 inverse[0][1] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2]\n-[1])*t17;\n-735 inverse[0][2] = (matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1]\n-[1])*t17;\n-736 inverse[1][0] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2]\n-[0])*t17;\n-737 inverse[1][1] = (matrix[0][0] * matrix[2][2] - t14) * t17;\n-738 inverse[1][2] = -(t6-t10) * t17;\n-739 inverse[2][0] = (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0])\n-* t17;\n-740 inverse[2][1] = -(matrix[0][0] * matrix[2][1] - t12) * t17;\n-741 inverse[2][2] = (t4-t8) * t17;\n-742\n-743 return det;\n-744 }\n-745\n-747 template \n-_\b7_\b4_\b8 static inline K _\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b3_\b,_\b3_\b>\n-&matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\b3_\b,_\b3_\b> &inverse)\n-749 {\n-750 using real_type = typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n-751 // code generated by maple\n-752 K t4 = matrix[0][0] * matrix[1][1];\n-753 K t6 = matrix[0][0] * matrix[1][2];\n-754 K t8 = matrix[0][1] * matrix[1][0];\n-755 K t10 = matrix[0][2] * matrix[1][0];\n-756 K t12 = matrix[0][1] * matrix[2][0];\n-757 K t14 = matrix[0][2] * matrix[2][0];\n-758\n-759 K det = (t4*matrix[2][2]-t6*matrix[2][1]-t8*matrix[2][2]+\n-760 t10*matrix[2][1]+t12*matrix[1][2]-t14*matrix[1][1]);\n-761 K t17 = real_type(1.0)/det;\n-762\n-763 inverse[0][0] = (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2]\n-[1])*t17;\n-764 inverse[1][0] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2]\n-[1])*t17;\n-765 inverse[2][0] = (matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1]\n-[1])*t17;\n-766 inverse[0][1] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2]\n-[0])*t17;\n-767 inverse[1][1] = (matrix[0][0] * matrix[2][2] - t14) * t17;\n-768 inverse[2][1] = -(t6-t10) * t17;\n-769 inverse[0][2] = (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0])\n-* t17;\n-770 inverse[1][2] = -(matrix[0][0] * matrix[2][1] - t12) * t17;\n-771 inverse[2][2] = (t4-t8) * t17;\n-772\n-773 return det;\n-774 }\n-775\n-777 template< class K, int m, int n, int p >\n-_\b7_\b7_\b8 static inline void _\bm_\bu_\bl_\bt_\bM_\ba_\bt_\br_\bi_\bx ( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bm_\b,_\b _\bn_\b _\b> &A,\n-779 const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bn_\b,_\b _\bp_\b _\b> &B,\n-780 _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bm_\b,_\b _\bp_\b _\b> &ret )\n-781 {\n-782 typedef typename _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bm_\b,_\b _\bp_\b _\b> :: size_type size_type;\n-783\n-784 for( size_type i = 0; i < m; ++i )\n-785 {\n-786 for( size_type j = 0; j < p; ++j )\n-787 {\n-788 ret[ i ][ j ] = K( 0 );\n-789 for( size_type k = 0; k < n; ++k )\n-790 ret[ i ][ j ] += A[ i ][ k ] * B[ k ][ j ];\n-791 }\n-792 }\n-793 }\n-794\n-796 template \n-_\b7_\b9_\b7 static inline void _\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\bM_\ba_\bt_\br_\bi_\bx(const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b>\n-&matrix, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b,_\bc_\bo_\bl_\bs_\b>& ret)\n-798 {\n-799 typedef typename _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_type;\n-800\n-801 for(size_type i=0; i\n-_\b8_\b1_\b4 static inline void _\bm_\bu_\bl_\bt_\bA_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b>\n-&matrix, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b> & x, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b> & ret)\n-815 {\n-816 typedef typename _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be size_type;\n-817\n-818 for(size_type i=0; i\n-_\b8_\b2_\b8 static inline _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b> _\bm_\bu_\bl_\bt(const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b>\n-&matrix, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b> & x)\n-829 {\n-830 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b> ret;\n-831 multAssign(matrix,x,ret);\n-832 return ret;\n-833 }\n-834\n-836 template \n-_\b8_\b3_\b7 static inline _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b> _\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd(const\n-_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b,_\bc_\bo_\bl_\bs_\b> &matrix, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\br_\bo_\bw_\bs_\b> & x)\n-838 {\n-839 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bc_\bo_\bl_\bs_\b> ret;\n-840 _\bm_\bu_\bl_\bt_\bA_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd( matrix, x, ret );\n-841 return ret;\n-842 }\n-843\n-844 } // end namespace FMatrixHelp\n-845\n-848} // end namespace\n-849\n-850#include \"_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\"\n-851#endif\n-_\bm_\ba_\bt_\br_\bi_\bx_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh_\bh\n-_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\n-Macro for wrapping boundary checks.\n-_\bd_\be_\bn_\bs_\be_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\n-Implements a matrix constructed from a given type representing a field and a\n-compile-time given numbe...\n-_\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b._\bh_\bh\n-Various precision settings for calculations with FieldMatrix and FieldVector.\n-_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Traits for type conversions and type information.\n-_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh\n-Implements a vector constructed from a given type representing a field and a\n-compile-time given size.\n-_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\n-Eigenvalue computations for the FieldMatrix class.\n-_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n-A few common exception classes.\n-_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Compute type of the result of an arithmetic operation involving two different\n-number types.\n-_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS\n-#define DUNE_ASSERT_BOUNDS(cond)\n-If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do\n-nothing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundschecking.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:278\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bi_\bm_\bd_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br\n-typename Overloads::ScalarType< std::decay_t< V > >::type Scalar\n-Element type of some SIMD type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simd/interface.hh:235\n-_\bD_\bu_\bn_\be\n-Dune namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bA_\bs_\bs_\bi_\bg_\bn\n-static void multAssign(const DenseMatrix< MAT > &matrix, const DenseVector< V1\n-> &x, DenseVector< V2 > &ret)\n-calculates ret = matrix * x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:1169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-static FieldVector< K, cols > multTransposed(const FieldMatrix< K, rows, cols >\n-&matrix, const FieldVector< K, rows > &x)\n-calculates ret = matrix^T * x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:837\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx_\b__\br_\be_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-static K invertMatrix_retTransposed(const FieldMatrix< K, 1, 1 > &matrix,\n-FieldMatrix< K, 1, 1 > &inverse)\n-invert scalar without changing the original matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:679\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bM_\ba_\bt_\br_\bi_\bx\n-static void multMatrix(const FieldMatrix< K, m, n > &A, const FieldMatrix< K,\n-n, p > &B, FieldMatrix< K, m, p > &ret)\n-calculates ret = A * B\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:778\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt_\bM_\ba_\bt_\br_\bi_\bx\n-static K invertMatrix(const FieldMatrix< K, 1, 1 > &matrix, FieldMatrix< K, 1,\n-1 > &inverse)\n-invert scalar without changing the original matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:670\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt\n-static FieldVector< K, rows > mult(const FieldMatrix< K, rows, cols > &matrix,\n-const FieldVector< K, cols > &x)\n-calculates ret = matrix * x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:828\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-static void multTransposedMatrix(const FieldMatrix< K, rows, cols > &matrix,\n-FieldMatrix< K, cols, cols > &ret)\n-calculates ret= A_t*A\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:797\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\bm_\bu_\bl_\bt_\bA_\bs_\bs_\bi_\bg_\bn_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-static void multAssignTransposed(const FieldMatrix< K, rows, cols > &matrix,\n-const FieldVector< K, rows > &x, FieldVector< K, cols > &ret)\n-calculates ret = matrix^T * x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:814\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx\n-A dense n x m matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\bt_\bv\n-void mtv(const X &x, Y &y) const\n-y = A^T x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:387\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bM\n-constexpr size_type M() const\n-number of columns\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:703\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by\n-FieldMatrix< K, ROWS, COLS > & rightmultiply(const DenseMatrix< M2 > &M)\n-Multiplies M from the right to this matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:645\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b=\n-derived_type & operator/=(const field_type &k)\n-vector space division by scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:329\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b=\n-derived_type & operator*=(const field_type &k)\n-vector space multiplication with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:321\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=\n-derived_type & operator-=(const DenseMatrix< Other > &x)\n-vector space subtraction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:312\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bl_\be_\bv_\be_\bl\n-static constexpr int blocklevel\n-The number of block levels we contain. This is the leaf, that is, 1.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:178\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be\n-Traits::row_type row_type\n-The type used to represent a row (must fulfill the Dune::DenseVector interface)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-Traits::size_type size_type\n-The type used for the index access and size operation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:166\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Traits::const_row_reference const_row_reference\n-The type used to represent a reference to a constant row (usually const\n-row_type &)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:175\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Traits::row_reference row_reference\n-The type used to represent a reference to a row (usually row_type &)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:172\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-derived_type & operator+=(const DenseMatrix< Other > &x)\n-vector space addition\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:289\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-A dense n x m matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\b__\bc_\bo_\bl_\bs\n-static constexpr size_type mat_cols()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:366\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-constexpr FieldMatrix()=default\n-Default constructor.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Base::const_row_reference const_row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:131\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-FieldMatrix & operator=(const FieldMatrix< T, ROWS, COLS > &x)\n-copy assignment from FieldMatrix over a different field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:160\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by\n-FieldMatrix< K, rows, l > rightmultiplyany(const FieldMatrix< K, cols, l > &M)\n-const\n-Multiplies M from the right to this matrix, this matrix is not modified.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:350\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be\n-Base::row_type row_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:128\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-Base::size_type size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:127\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bl_\be_\bf_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\ba_\bn_\by\n-FieldMatrix< K, l, cols > leftmultiplyany(const FieldMatrix< K, l, rows > &M)\n-const\n-Multiplies M from the left to this matrix, this matrix is not modified.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:315\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bi_\bg_\bh_\bt_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by\n-FieldMatrix & rightmultiply(const FieldMatrix< K, r, c > &M)\n-Multiplies M from the right to this matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:333\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-FieldMatrix(T const &rhs)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:148\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-friend auto operator*(const FieldMatrix &matrix, Scalar scalar)\n-vector space multiplication with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:211\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-FieldMatrix & operator=(FieldMatrix< T, rows, cols > const &)=delete\n-no copy assignment from FieldMatrix of different size\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Base::row_reference row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx\n-constexpr FieldMatrix(std::initializer_list< Dune::FieldVector< K, cols > >\n-const &l)\n-Constructor initializing the matrix from a list of vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:140\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\b__\ba_\bc_\bc_\be_\bs_\bs\n-row_reference mat_access(size_type i)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:368\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-static constexpr int rows\n-The number of rows.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:123\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bd\n-FieldMatrix< K, COLS, ROWS > transposed() const\n-Return transposed of the matrix as FieldMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\b__\br_\bo_\bw_\bs\n-static constexpr size_type mat_rows()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:365\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-static constexpr int cols\n-The number of columns.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:125\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n-friend auto operator/(const FieldMatrix &matrix, Scalar scalar)\n-vector space division by scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:239\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-friend auto operator+(const FieldMatrix &matrixA, const FieldMatrix<\n-OtherScalar, ROWS, COLS > &matrixB)\n-vector space addition \u00e2\u0080\u0093 two-argument version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-FieldMatrix & operator=(const FieldMatrix &)=default\n-copy assignment operator\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-friend auto operator-(const FieldMatrix &matrixA, const FieldMatrix<\n-OtherScalar, ROWS, COLS > &matrixB)\n-vector space subtraction \u00e2\u0080\u0093 two-argument version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\b__\ba_\bc_\bc_\be_\bs_\bs\n-const_row_reference mat_access(size_type i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:374\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n-vector space out of a tensor product of fields.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:91\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\bt_\by_\bp_\be\n-std::array< row_type, ROWS > container_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:95\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n-FieldMatrix< K, ROWS, COLS > derived_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-K value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:96\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const row_type & const_row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:93\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\bo_\bw_\b__\bt_\by_\bp_\be\n-FieldVector< K, COLS > row_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-container_type::size_type size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\bo_\bw_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-row_type & row_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-FieldTraits< K >::field_type field_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bK_\b,_\b _\bR_\bO_\bW_\bS_\b,_\b _\bC_\bO_\bL_\bS_\b _\b>_\b _\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n-FieldTraits< K >::real_type real_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fmatrix.hh:104\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:26\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n-T field_type\n-export the type representing the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:28\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n-T real_type\n-export the type representing the real type of the field\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn matvectraits.hh:31\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be\n-decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn promotiontraits.hh:28\n+34#endif // DUNE_COMMON_ASSERTANDRETURN_HH\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00026.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00026.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: conditional.hh File Reference\n+dune-common: indexediterator.hh File Reference\n \n \n \n \n \n \n \n@@ -70,34 +70,35 @@\n
    \n \n
    \n \n
    \n \n-
    conditional.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    indexediterator.hh File Reference
    \n \n
    \n-\n+
    #include <iterator>
    \n+#include <type_traits>
    \n+
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::IndexedIterator< Iter >
     An iterator mixin that adds an index() method returning an enumeration index for the traversal. More...
     
    \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n-\n-\n-\n-\n-\n

    \n-Functions

    template<typename T1 , typename T2 >
    const T1 Dune::cond (bool b, const T1 &v1, const T2 &v2)
     conditional evaluate
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,22 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-conditional.hh File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+indexediterator.hh File Reference\n+#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bI_\bt_\be_\br_\b _\b>\n+\u00a0 An iterator mixin that adds an _\bi_\bn_\bd_\be_\bx_\b(_\b) method returning an enumeration\n+ index for the traversal. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-const T1\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bd (bool b, const T1 &v1, const T2 &v2)\n-\u00a0 conditional evaluate\n-\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: conditional.hh Source File\n+dune-common: indexediterator.hh Source File\n \n \n \n \n \n \n \n@@ -74,38 +74,143 @@\n \n
    \n \n
    \n \n
    \n-
    conditional.hh
    \n+
    indexediterator.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n-
    2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    3#ifndef DUNE_COMMON_CONDITIONAL_HH
    \n-
    4#define DUNE_COMMON_CONDITIONAL_HH
    \n-
    5
    \n-
    6namespace Dune
    \n-
    7{
    \n-
    8
    \n-
    27 template<typename T1, typename T2>
    \n-
    \n-
    28 const T1 cond(bool b, const T1 & v1, const T2 & v2)
    \n-
    29 {
    \n-
    30 return (b ? v1 : v2);
    \n-
    31 }
    \n-
    \n-
    32
    \n-
    33} // end namespace Dune
    \n-
    34
    \n-
    35#endif // DUNE_COMMON_CONDITIONAL_HH
    \n+Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+
    2// vi: set et ts=4 sw=2 sts=2:
    \n+
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n+
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n+
    5#ifndef DUNE_COMMON_INDEXEDITERATOR_HH
    \n+
    6#define DUNE_COMMON_INDEXEDITERATOR_HH
    \n+
    7
    \n+
    8#include <iterator>
    \n+
    9#include <type_traits>
    \n+
    10
    \n+
    11namespace Dune
    \n+
    12{
    \n+
    26 template <class Iter>
    \n+
    \n+\n+
    28 : public Iter
    \n+
    29 {
    \n+
    30 using Traits = std::iterator_traits<Iter>;
    \n+
    31 static_assert(std::is_copy_constructible_v<Iter>);
    \n+
    32 static_assert(std::is_base_of_v<std::forward_iterator_tag, typename Traits::iterator_category>);
    \n+
    33
    \n+
    34 public:
    \n+
    36 using size_type = typename Traits::difference_type;
    \n+
    37
    \n+
    39 template <class I = Iter,
    \n+
    40 std::enable_if_t<std::is_default_constructible_v<I>, bool> = true>
    \n+
    \n+
    41 constexpr IndexedIterator ()
    \n+
    42 noexcept(std::is_nothrow_default_constructible_v<Iter>)
    \n+
    43 {}
    \n+
    \n+
    44
    \n+
    \n+
    47 constexpr IndexedIterator (Iter it, size_type index = 0)
    \n+
    48 noexcept(std::is_nothrow_copy_constructible_v<Iter>)
    \n+
    49 : Iter(it)
    \n+
    50 , index_(index)
    \n+
    51 {}
    \n+
    \n+
    52
    \n+
    \n+
    54 [[nodiscard]] constexpr size_type index () const noexcept
    \n+
    55 {
    \n+
    56 return index_;
    \n+
    57 }
    \n+
    \n+
    58
    \n+
    \n+\n+
    61 {
    \n+
    62 Iter::operator++();
    \n+
    63 ++index_;
    \n+
    64 return *this;
    \n+
    65 }
    \n+
    \n+
    66
    \n+
    \n+\n+
    69 {
    \n+
    70 IndexedIterator tmp(*this);
    \n+
    71 this->operator++();
    \n+
    72 return tmp;
    \n+
    73 }
    \n+
    \n+
    74
    \n+
    76 template <class I = Iter,
    \n+
    77 decltype(--std::declval<I&>(), bool{}) = true>
    \n+
    \n+
    78 constexpr IndexedIterator& operator-- ()
    \n+
    79 {
    \n+
    80 Iter::operator--();
    \n+
    81 --index_;
    \n+
    82 return *this;
    \n+
    83 }
    \n+
    \n+
    84
    \n+
    86 template <class I = Iter,
    \n+
    87 decltype(std::declval<I&>()--, bool{}) = true>
    \n+
    \n+
    88 constexpr IndexedIterator operator-- (int)
    \n+
    89 {
    \n+
    90 IndexedIterator tmp(*this);
    \n+
    91 this->operator--();
    \n+
    92 return tmp;
    \n+
    93 }
    \n+
    \n+
    94
    \n+
    96 template <class I = Iter,
    \n+
    97 decltype(std::declval<I&>()+=1, bool{}) = true>
    \n+
    \n+
    98 constexpr IndexedIterator& operator+= (typename Iter::difference_type n)
    \n+
    99 {
    \n+
    100 Iter::operator+=(n);
    \n+
    101 index_ += n;
    \n+
    102 return *this;
    \n+
    103 }
    \n+
    \n+
    104
    \n+
    106 template <class I = Iter,
    \n+
    107 decltype(std::declval<I&>()-=1, bool{}) = true>
    \n+
    \n+
    108 constexpr IndexedIterator& operator-= (typename Iter::difference_type n)
    \n+
    109 {
    \n+
    110 Iter::operator-=(n);
    \n+
    111 index_ -= n;
    \n+
    112 return *this;
    \n+
    113 }
    \n+
    \n+
    114
    \n+
    115 private:
    \n+
    116 size_type index_ = 0;
    \n+
    117 };
    \n+
    \n+
    118
    \n+
    119} // end namespace Dune
    \n+
    120
    \n+
    121#endif // DUNE_COMMON_INDEXEDITERATOR_HH
    \n+
    STL namespace.
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    const T1 cond(bool b, const T1 &v1, const T2 &v2)
    conditional evaluate
    Definition conditional.hh:28
    \n+
    An iterator mixin that adds an index() method returning an enumeration index for the traversal.
    Definition indexediterator.hh:29
    \n+
    constexpr IndexedIterator & operator++()
    Increment the iterator and the index.
    Definition indexediterator.hh:60
    \n+
    constexpr IndexedIterator & operator--()
    Decrement the iterator and the index.
    Definition indexediterator.hh:78
    \n+
    constexpr size_type index() const noexcept
    Return the enumeration index.
    Definition indexediterator.hh:54
    \n+
    constexpr IndexedIterator() noexcept(std::is_nothrow_default_constructible_v< Iter >)
    Default constructor default-constructs the Iter base type and the index by 0.
    Definition indexediterator.hh:41
    \n+
    constexpr IndexedIterator(Iter it, size_type index=0) noexcept(std::is_nothrow_copy_constructible_v< Iter >)
    Definition indexediterator.hh:47
    \n+
    typename Traits::difference_type size_type
    Type used for storing the traversal index.
    Definition indexediterator.hh:36
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,143 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-conditional.hh\n+indexediterator.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n+1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+2// vi: set et ts=4 sw=2 sts=2:\n+3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n-2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-3#ifndef DUNE_COMMON_CONDITIONAL_HH\n-4#define DUNE_COMMON_CONDITIONAL_HH\n-5\n-6namespace _\bD_\bu_\bn_\be\n-7{\n-8\n-27 template\n-_\b2_\b8 const T1 _\bc_\bo_\bn_\bd(bool b, const T1 & v1, const T2 & v2)\n+4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n+5#ifndef DUNE_COMMON_INDEXEDITERATOR_HH\n+6#define DUNE_COMMON_INDEXEDITERATOR_HH\n+7\n+8#include \n+9#include \n+10\n+11namespace _\bD_\bu_\bn_\be\n+12{\n+26 template \n+_\b2_\b7 class _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+28 : public Iter\n 29 {\n-30 return (b ? v1 : v2);\n-31 }\n-32\n-33} // end namespace Dune\n-34\n-35#endif // DUNE_COMMON_CONDITIONAL_HH\n+30 using Traits = std::iterator_traits;\n+31 static_assert(std::is_copy_constructible_v);\n+32 static_assert(std::is_base_of_v);\n+33\n+34 public:\n+_\b3_\b6 using _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be = typename Traits::difference_type;\n+37\n+39 template , bool> = true>\n+_\b4_\b1 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br ()\n+42 noexcept(_\bs_\bt_\bd::is_nothrow_default_constructible_v)\n+43 {}\n+44\n+_\b4_\b7 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br (Iter it, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bi_\bn_\bd_\be_\bx = 0)\n+48 noexcept(_\bs_\bt_\bd::is_nothrow_copy_constructible_v)\n+49 : Iter(it)\n+50 , index_(_\bi_\bn_\bd_\be_\bx)\n+51 {}\n+52\n+_\b5_\b4 [[nodiscard]] constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bi_\bn_\bd_\be_\bx () const noexcept\n+55 {\n+56 return index_;\n+57 }\n+58\n+_\b6_\b0 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+_\b ()\n+61 {\n+62 Iter::operator++();\n+63 ++index_;\n+64 return *this;\n+65 }\n+66\n+_\b6_\b8 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+_\b (int)\n+69 {\n+70 _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(*this);\n+71 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+();\n+72 return tmp;\n+73 }\n+74\n+76 template (), bool{}) = true>\n+_\b7_\b8 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& operator-- ()\n+79 {\n+80 Iter::operator--();\n+81 --index_;\n+82 return *this;\n+83 }\n+84\n+86 template ()--, bool{}) = true>\n+_\b8_\b8 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br operator-- (int)\n+89 {\n+90 _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(*this);\n+91 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-();\n+92 return tmp;\n+93 }\n+94\n+96 template ()+=1, bool{}) = true>\n+_\b9_\b8 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& operator+= (typename Iter::difference_type n)\n+99 {\n+100 Iter::operator+=(n);\n+101 index_ += n;\n+102 return *this;\n+103 }\n+104\n+106 template ()-=1, bool{}) = true>\n+_\b1_\b0_\b8 constexpr _\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& operator-= (typename Iter::difference_type n)\n+109 {\n+110 Iter::operator-=(n);\n+111 index_ -= n;\n+112 return *this;\n+113 }\n+114\n+115 private:\n+116 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be index_ = 0;\n+117 };\n+118\n+119} // end namespace Dune\n+120\n+121#endif // DUNE_COMMON_INDEXEDITERATOR_HH\n+_\bs_\bt_\bd\n+STL namespace.\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bd\n-const T1 cond(bool b, const T1 &v1, const T2 &v2)\n-conditional evaluate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn conditional.hh:28\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+An iterator mixin that adds an index() method returning an enumeration index\n+for the traversal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:29\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n+constexpr IndexedIterator & operator++()\n+Increment the iterator and the index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n+constexpr IndexedIterator & operator--()\n+Decrement the iterator and the index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:78\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+constexpr size_type index() const noexcept\n+Return the enumeration index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:54\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+constexpr IndexedIterator() noexcept(std::is_nothrow_default_constructible_v<\n+Iter >)\n+Default constructor default-constructs the Iter base type and the index by 0.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n+constexpr IndexedIterator(Iter it, size_type index=0) noexcept(std::\n+is_nothrow_copy_constructible_v< Iter >)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+typename Traits::difference_type size_type\n+Type used for storing the traversal index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indexediterator.hh:36\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00029.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00029.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: tuplevector.hh File Reference\n+dune-common: deprecated.hh File Reference\n \n \n \n \n \n \n \n@@ -70,61 +70,35 @@\n
    \n \n
    \n
    \n
    \n \n-
    tuplevector.hh File Reference
    \n+Macros
    \n+
    deprecated.hh File Reference
    \n \n
    \n \n-

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

    Definition of the DUNE_NO_DEPRECATED_* macros. \n More...

    \n-
    #include <tuple>
    \n-#include <utility>
    \n-#include <dune/common/indices.hh>
    \n-#include <dune/common/typetraits.hh>
    \n-#include <dune/common/std/type_traits.hh>
    \n-
    \n+\n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-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...
     
    \n-\n-\n-\n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  std
     STL namespace.
     
    \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

    \n-Functions

    template<class... T>
    constexpr auto Dune::makeTupleVector (T &&... t)
     

    \n+Macros

    #define DUNE_NO_DEPRECATED_BEGIN   ...
     Ignore deprecation warnings (start)
     
    #define DUNE_NO_DEPRECATED_END   ...
     Ignore deprecation warnings (end)
     
    \n

    Detailed Description

    \n-

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

    \n-
    Author
    Carsten Gr\u00e4ser
    \n+

    Definition of the DUNE_NO_DEPRECATED_* macros.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,21 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-tuplevector.hh File Reference\n-Provides the TupleVector class that augments std::tuple by operator[]. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\bd_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bM_\ba_\bc_\br_\bo_\bs\n+deprecated.hh File Reference\n+Definition of the DUNE_NO_DEPRECATED_* macros. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 A class augmenting std::tuple by element access via operator[].\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bN_\bO_\b__\bD_\bE_\bP_\bR_\bE_\bC_\bA_\bT_\bE_\bD_\b__\bB_\bE_\bG_\bI_\bN\u00a0\u00a0\u00a0...\n+\u00a0 Ignore deprecation warnings (start)\n \u00a0\n-struct \u00a0 _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b__\be_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bi_\b,_\b _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0 Make std::tuple_element work for TupleVector. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b__\bs_\bi_\bz_\be_\b<_\b _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0 Make std::tuple_size work for TupleVector. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0 _\bD_\bu_\bn_\be namespace.\n-\u00a0\n-namespace \u00a0 _\bs_\bt_\bd\n-\u00a0 STL namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bk_\be_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br (T &&... t)\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bN_\bO_\b__\bD_\bE_\bP_\bR_\bE_\bC_\bA_\bT_\bE_\bD_\b__\bE_\bN_\bD\u00a0\u00a0\u00a0...\n+\u00a0 Ignore deprecation warnings (end)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Provides the TupleVector class that augments std::tuple by operator[].\n- Author\n- Carsten Gr\u00c3\u00a4ser\n+Definition of the DUNE_NO_DEPRECATED_* macros.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: tuplevector.hh Source File\n+dune-common: deprecated.hh Source File\n \n \n \n \n \n \n \n@@ -74,141 +74,52 @@\n \n
    \n \n
    \n
    \n
    \n-
    tuplevector.hh
    \n+
    deprecated.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_COMMON_TUPLEVECTOR_HH
    \n-
    6#define DUNE_COMMON_TUPLEVECTOR_HH
    \n+
    5#ifndef DUNE_DEPRECATED_HH
    \n+
    6#define DUNE_DEPRECATED_HH
    \n
    7
    \n-
    8#include <tuple>
    \n-
    9#include <utility>
    \n-
    10
    \n-\n-\n-\n-
    14
    \n-
    15
    \n-
    16
    \n-
    23namespace Dune
    \n-
    24{
    \n-
    25
    \n-
    26
    \n-
    27
    \n-
    33template<class... T>
    \n-
    \n-
    34class TupleVector : public std::tuple<T...>
    \n-
    35{
    \n-
    36 using Base = std::tuple<T...>;
    \n-
    37
    \n-
    38 template<class... TT>
    \n-
    39 using TupleConstructorDetector = decltype(Base(std::declval<TT&&>()...));
    \n-
    40
    \n-
    41 template<class... TT>
    \n-
    42 using hasTupleConstructor = Dune::Std::is_detected<TupleConstructorDetector, TT...>;
    \n-
    43
    \n-
    44
    \n-
    45public:
    \n-
    46
    \n-
    53 template<class... TT,
    \n-
    54 std::enable_if_t<hasTupleConstructor<TT...>::value, int> = 0>
    \n-
    \n-
    55 constexpr TupleVector(TT&&... tt) :
    \n-
    56 Base(std::forward<TT>(tt)...)
    \n-
    57 {}
    \n-
    \n-
    58
    \n-
    \n-
    61 constexpr TupleVector()
    \n-
    62 {}
    \n-
    \n+
    14#ifdef DOXYGEN
    \n+
    32#define DUNE_NO_DEPRECATED_BEGIN ...
    \n+
    38#define DUNE_NO_DEPRECATED_END ...
    \n+
    39#else
    \n+
    40# if defined __clang__
    \n+
    41# define DUNE_NO_DEPRECATED_BEGIN \\
    \n+
    42 _Pragma("clang diagnostic push") \\
    \n+
    43 _Pragma("clang diagnostic ignored \\"-Wdeprecated-declarations\\"")
    \n+
    44# define DUNE_NO_DEPRECATED_END _Pragma("clang diagnostic pop")
    \n+
    45# elif defined __INTEL_COMPILER
    \n+
    46# define DUNE_NO_DEPRECATED_BEGIN \\
    \n+
    47 _Pragma("warning push") \\
    \n+
    48 _Pragma("warning(disable:1478)") \\
    \n+
    49 _Pragma("warning(disable:1786)")
    \n+
    50# define DUNE_NO_DEPRECATED_END _Pragma("warning pop")
    \n+
    51# elif defined __GNUC__
    \n+
    52# define DUNE_NO_DEPRECATED_BEGIN \\
    \n+
    53 _Pragma("GCC diagnostic push") \\
    \n+
    54 _Pragma("GCC diagnostic ignored \\"-Wdeprecated-declarations\\"")
    \n+
    55# define DUNE_NO_DEPRECATED_END _Pragma("GCC diagnostic pop")
    \n+
    56# else
    \n+
    57# define DUNE_NO_DEPRECATED_BEGIN /* Noop. */
    \n+
    58# define DUNE_NO_DEPRECATED_END /* Noop. */
    \n+
    59# endif
    \n+
    60#endif
    \n+
    61
    \n
    63
    \n-
    66 template<std::size_t i,
    \n-
    67 std::enable_if_t<(i < sizeof...(T)), int> = 0>
    \n-
    \n-
    68 constexpr decltype(auto) operator[](const Dune::index_constant<i>&) const
    \n-
    69 {
    \n-
    70 return std::get<i>(*this);
    \n-
    71 }
    \n-
    \n-
    72
    \n-
    75 template<std::size_t i,
    \n-
    76 std::enable_if_t<(i < sizeof...(T)), int> = 0>
    \n-
    \n-
    77 decltype(auto) operator[](const Dune::index_constant<i>&)
    \n-
    78 {
    \n-
    79 return std::get<i>(*this);
    \n-
    80 }
    \n-
    \n-
    81
    \n-
    \n-
    83 static constexpr std::size_t size()
    \n-
    84 {
    \n-
    85 return std::tuple_size<Base>::value;
    \n-
    86 }
    \n-
    \n-
    87};
    \n-
    \n-
    88
    \n-
    89
    \n-
    90
    \n-
    91template<class... T>
    \n-
    \n-
    92constexpr auto makeTupleVector(T&&... t)
    \n-
    93{
    \n-
    94 // The std::decay_t<T> is is a slight simplification,
    \n-
    95 // because std::reference_wrapper needs special care.
    \n-
    96 return TupleVector<std::decay_t<T>...>(std::forward<T>(t)...);
    \n-
    97}
    \n-
    \n-
    98
    \n-
    99
    \n-
    100
    \n-
    101} // namespace Dune
    \n-
    102
    \n-
    103namespace std
    \n-
    104{
    \n-
    109 template <size_t i, typename... Args>
    \n-
    \n-
    110 struct tuple_element<i,Dune::TupleVector<Args...> >
    \n-
    111 {
    \n-
    112 using type = typename std::tuple_element<i, std::tuple<Args...> >::type;
    \n-
    113 };
    \n-
    \n-
    114
    \n-
    119 template <typename... Args>
    \n-
    \n-
    120 struct tuple_size<Dune::TupleVector<Args...> >
    \n-
    121 : std::integral_constant<std::size_t, sizeof...(Args)>
    \n-
    122 {};
    \n-
    \n-
    123}
    \n-
    124
    \n-
    125#endif // DUNE_COMMON_TUPLEVECTOR_HH
    \n-\n-\n-
    Traits for type conversions and type information.
    \n-
    std::integral_constant< std::size_t, i > index_constant
    An index constant with value i.
    Definition indices.hh:29
    \n-
    typename detected_or< nonesuch, Op, Args... >::value_t is_detected
    Detects whether Op<Args...> is valid.
    Definition type_traits.hh:145
    \n-
    STL namespace.
    \n-
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    constexpr auto makeTupleVector(T &&... t)
    Definition tuplevector.hh:92
    \n-
    A class augmenting std::tuple by element access via operator[].
    Definition tuplevector.hh:35
    \n-
    static constexpr std::size_t size()
    Number of elements of the tuple.
    Definition tuplevector.hh:83
    \n-
    constexpr TupleVector(TT &&... tt)
    Construct from a set of arguments.
    Definition tuplevector.hh:55
    \n-
    constexpr TupleVector()
    Default constructor.
    Definition tuplevector.hh:61
    \n-
    typename std::tuple_element< i, std::tuple< Args... > >::type type
    Definition tuplevector.hh:112
    \n+
    64#endif
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,143 +1,46 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-tuplevector.hh\n+deprecated.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_COMMON_TUPLEVECTOR_HH\n-6#define DUNE_COMMON_TUPLEVECTOR_HH\n+5#ifndef DUNE_DEPRECATED_HH\n+6#define DUNE_DEPRECATED_HH\n 7\n-8#include \n-9#include \n-10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-13#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\bd_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-14\n-15\n-16\n-23namespace _\bD_\bu_\bn_\be\n-24{\n-25\n-26\n-27\n-33template\n-_\b3_\b4class _\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br : public std::tuple\n-35{\n-36 using Base = std::tuple;\n-37\n-38 template\n-39 using TupleConstructorDetector = decltype(Base(std::declval()...));\n-40\n-41 template\n-42 using hasTupleConstructor = _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\bd_\b:_\b:_\bi_\bs_\b__\bd_\be_\bt_\be_\bc_\bt_\be_\bd;\n-43\n-44\n-45public:\n-46\n-53 template::value, int> = 0>\n-_\b5_\b5 constexpr _\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br(TT&&... tt) :\n-56 Base(_\bs_\bt_\bd::forward(tt)...)\n-57 {}\n-58\n-_\b6_\b1 constexpr _\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br()\n-62 {}\n+14#ifdef DOXYGEN\n+_\b3_\b2#define DUNE_NO_DEPRECATED_BEGIN ...\n+_\b3_\b8#define DUNE_NO_DEPRECATED_END ...\n+39#else\n+40# if defined __clang__\n+41# define DUNE_NO_DEPRECATED_BEGIN \\\n+42 _Pragma(\"clang diagnostic push\") \\\n+43 _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n+44# define DUNE_NO_DEPRECATED_END _Pragma(\"clang diagnostic pop\")\n+45# elif defined __INTEL_COMPILER\n+46# define DUNE_NO_DEPRECATED_BEGIN \\\n+47 _Pragma(\"warning push\") \\\n+48 _Pragma(\"warning(disable:1478)\") \\\n+49 _Pragma(\"warning(disable:1786)\")\n+50# define DUNE_NO_DEPRECATED_END _Pragma(\"warning pop\")\n+51# elif defined __GNUC__\n+52# define DUNE_NO_DEPRECATED_BEGIN \\\n+53 _Pragma(\"GCC diagnostic push\") \\\n+54 _Pragma(\"GCC diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n+55# define DUNE_NO_DEPRECATED_END _Pragma(\"GCC diagnostic pop\")\n+56# else\n+57# define DUNE_NO_DEPRECATED_BEGIN /* Noop. */\n+58# define DUNE_NO_DEPRECATED_END /* Noop. */\n+59# endif\n+60#endif\n+61\n 63\n-66 template = 0>\n-_\b6_\b8 constexpr decltype(auto) operator[](const _\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\bi_\b>&) const\n-69 {\n-70 return std::get(*this);\n-71 }\n-72\n-75 template = 0>\n-_\b7_\b7 decltype(auto) operator[](const _\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\bi_\b>&)\n-78 {\n-79 return std::get(*this);\n-80 }\n-81\n-_\b8_\b3 static constexpr std::size_t _\bs_\bi_\bz_\be()\n-84 {\n-85 return std::tuple_size::value;\n-86 }\n-87};\n-88\n-89\n-90\n-91template\n-_\b9_\b2constexpr auto _\bm_\ba_\bk_\be_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br(T&&... t)\n-93{\n-94 // The std::decay_t is is a slight simplification,\n-95 // because std::reference_wrapper needs special care.\n-96 return _\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bd_\be_\bc_\ba_\by_\b__\bt_\b<_\bT_\b>...>(std::forward(t)...);\n-97}\n-98\n-99\n-100\n-101} // namespace Dune\n-102\n-103namespace _\bs_\bt_\bd\n-104{\n-109 template \n-_\b1_\b1_\b0 struct tuple_element >\n-111 {\n-_\b1_\b1_\b2 using _\bt_\by_\bp_\be = typename std::tuple_element >::type;\n-113 };\n-114\n-119 template \n-_\b1_\b2_\b0 struct tuple_size<_\bD_\bu_\bn_\be::TupleVector >\n-121 : std::integral_constant\n-122 {};\n-123}\n-124\n-125#endif // DUNE_COMMON_TUPLEVECTOR_HH\n-_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-Traits for type conversions and type information.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-std::integral_constant< std::size_t, i > index_constant\n-An index constant with value i.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\bd_\b:_\b:_\bi_\bs_\b__\bd_\be_\bt_\be_\bc_\bt_\be_\bd\n-typename detected_or< nonesuch, Op, Args... >::value_t is_detected\n-Detects whether Op is valid.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:145\n-_\bs_\bt_\bd\n-STL namespace.\n-_\bD_\bu_\bn_\be\n-Dune namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bk_\be_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br\n-constexpr auto makeTupleVector(T &&... t)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:92\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br\n-A class augmenting std::tuple by element access via operator[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:35\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr std::size_t size()\n-Number of elements of the tuple.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:83\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br\n-constexpr TupleVector(TT &&... tt)\n-Construct from a set of arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br\n-constexpr TupleVector()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:61\n-_\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b__\be_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bi_\b,_\b _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-typename std::tuple_element< i, std::tuple< Args... > >::type type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn tuplevector.hh:112\n+64#endif\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00032.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00032.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: parametertree.cc File Reference\n+dune-common: math.hh File Reference\n \n \n \n \n \n \n \n@@ -69,27 +69,198 @@\n \n
    \n \n
    \n \n
    \n-
    parametertree.cc File Reference
    \n+ \n+
    math.hh File Reference
    \n
    \n
    \n-
    #include <cstdlib>
    \n-#include <iostream>
    \n-#include <ostream>
    \n-#include <string>
    \n-#include <sstream>
    \n-#include <fstream>
    \n-#include <set>
    \n-#include <algorithm>
    \n-#include <dune/common/exceptions.hh>
    \n-#include <dune/common/parametertree.hh>
    \n-
    \n+\n+

    Some useful basic math stuff. \n+More...

    \n+
    #include <cmath>
    \n+#include <complex>
    \n+#include <limits>
    \n+#include <type_traits>
    \n+#include <dune/common/typeutilities.hh>
    \n+
    \n+

    Go to the source code of this file.

    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    struct  Dune::StandardMathematicalConstants< T >
     Standard implementation of MathematicalConstants. More...
     
    struct  Dune::MathematicalConstants< Field >
     Provides commonly used mathematical constants. More...
     
    struct  Dune::Factorial< m >
     
    struct  Dune::Factorial< 0 >
     end of recursion of factorial via specialization More...
     
    struct  Dune::MathOverloads::ADLTag
     Tag to make sure the functions in this namespace can be found by ADL. More...
     
    struct  Dune::MathImpl::isUnorderedImpl
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::MathOverloads
     namespace for customization of math functions with Dune-Semantics
     
    namespace  Dune::MathImpl
     
    \n+\n+\n+\n+\n+\n+

    \n+Macros

    #define DUNE_COMMON_MATH_ISFUNCTION(function, stdfunction)
     
    #define DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR(function)
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Functions

    template<class Base , class Exponent >
    constexpr Base Dune::power (Base m, Exponent p)
     Power method for integer exponents.
     
    template<class T >
    static constexpr T Dune::factorial (const T &n) noexcept
     calculate the factorial of n as a constexpr
     
    template<class T , T n>
    static constexpr auto Dune::factorial (std::integral_constant< T, n >) noexcept
     calculate the factorial of n as a constexpr
     
    template<class T >
    static constexpr T Dune::binomial (const T &n, const T &k) noexcept
     calculate the binomial coefficient n over k as a constexpr
     
    template<class T , T n, T k>
    static constexpr auto Dune::binomial (std::integral_constant< T, n >, std::integral_constant< T, k >) noexcept
     calculate the binomial coefficient n over k as a constexpr
     
    template<class T , T n>
    static constexpr auto Dune::binomial (std::integral_constant< T, n >, std::integral_constant< T, n >) noexcept
     
    template<class K >
    Dune::conjugateComplex (const K &x)
     compute conjugate complex of x
     
    template<class T >
    int Dune::sign (const T &val)
     Return the sign of the value.
     
     Dune::MathOverloads::DUNE_COMMON_MATH_ISFUNCTION (isNaN, isnan)
     
     Dune::MathOverloads::DUNE_COMMON_MATH_ISFUNCTION (isInf, isinf)
     
     Dune::MathOverloads::DUNE_COMMON_MATH_ISFUNCTION (isFinite, isfinite)
     
    template<class T >
    auto Dune::MathOverloads::isUnordered (const T &t1, const T &t2, PriorityTag< 1 >, ADLTag) -> decltype(isUnordered(t1, t2))
     
    template<class T >
    auto Dune::MathOverloads::isUnordered (const T &t1, const T &t2, PriorityTag< 0 >, ADLTag)
     
     Dune::MathImpl::DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR (isNaN)
     
     Dune::MathImpl::DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR (isInf)
     
     Dune::MathImpl::DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR (isFinite)
     
    template<class T , class = std::enable_if_t<Impl::isComplexLike<T>::value>>
    auto Dune::MathOverloads::isNaN (const T &t, PriorityTag< 2 >, ADLTag)
     
    template<class T , class = std::enable_if_t<Impl::isComplexLike<T>::value>>
    auto Dune::MathOverloads::isInf (const T &t, PriorityTag< 2 >, ADLTag)
     
    template<class T , class = std::enable_if_t<Impl::isComplexLike<T>::value>>
    auto Dune::MathOverloads::isFinite (const T &t, PriorityTag< 2 >, ADLTag)
     
    \n+

    Detailed Description

    \n+

    Some useful basic math stuff.

    \n+

    Macro Definition Documentation

    \n+\n+

    ◆ DUNE_COMMON_MATH_ISFUNCTION

    \n+\n+
    \n+
    \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
    #define DUNE_COMMON_MATH_ISFUNCTION( function,
     stdfunction 
    )
    \n+
    \n+Value:
    template<class T> \\
    \n+
    auto function(const T &t, PriorityTag<1>, ADLTag) \\
    \n+
    -> decltype(function(t)) { \\
    \n+
    return function(t); \\
    \n+
    } \\
    \n+
    template<class T> \\
    \n+
    auto function(const T &t, PriorityTag<0>, ADLTag) { \\
    \n+
    using std::stdfunction; \\
    \n+
    return stdfunction(t); \\
    \n+
    } \\
    \n+
    static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    \n+
    \n+
    \n+\n+

    ◆ DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR

    \n+\n+
    \n+
    \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
    #define DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR( function)
    \n+
    \n+Value:
    struct function##Impl { \\
    \n+
    template<class T> \\
    \n+
    constexpr auto operator()(const T &t) const { \\
    \n+
    return function(t, PriorityTag<10>{}, MathOverloads::ADLTag{}); \\
    \n+
    } \\
    \n+
    }; \\
    \n+
    static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    \n+
    \n+
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,19 +1,154 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-parametertree.cc File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bt_\br_\be_\be_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+math.hh File Reference\n+Some useful basic math stuff. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\ba_\bn_\bd_\ba_\br_\bd_\bM_\ba_\bt_\bh_\be_\bm_\ba_\bt_\bi_\bc_\ba_\bl_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bs_\b<_\b _\bT_\b _\b>\n+\u00a0 Standard implementation of _\bM_\ba_\bt_\bh_\be_\bm_\ba_\bt_\bi_\bc_\ba_\bl_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\be_\bm_\ba_\bt_\bi_\bc_\ba_\bl_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\b _\b>\n+\u00a0 Provides commonly used mathematical constants. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl_\b<_\b _\bm_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl_\b<_\b _\b0_\b _\b>\n+\u00a0 end of recursion of factorial via specialization _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bA_\bD_\bL_\bT_\ba_\bg\n+\u00a0 Tag to make sure the functions in this namespace can be found by ADL.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bI_\bm_\bp_\bl_\b:_\b:_\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd_\bI_\bm_\bp_\bl\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bD_\bu_\bn_\be\n+\u00a0 _\bD_\bu_\bn_\be namespace.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs\n+\u00a0 namespace for customization of math functions with Dune-Semantics\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bI_\bm_\bp_\bl\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN(function, stdfunction)\n+\u00a0\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN_\b__\bF_\bU_\bN_\bC_\bT_\bO_\bR(function)\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ constexpr Base\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bp_\bo_\bw_\be_\br (Base m, Exponent p)\n+\u00a0 Power method for integer exponents.\n+\u00a0\n+template\n+ static constexpr T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl (const T &n) noexcept\n+\u00a0 calculate the factorial of n as a constexpr\n+\u00a0\n+template\n+static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\ba_\bl (std::integral_constant< T, n >)\n+ noexcept\n+\u00a0 calculate the factorial of n as a constexpr\n+\u00a0\n+template\n+ static constexpr T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl (const T &n, const T &k) noexcept\n+\u00a0 calculate the binomial coefficient n over k as a\n+ constexpr\n+\u00a0\n+template\n+static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl (std::integral_constant< T, n >, std::\n+ integral_constant< T, k >) noexcept\n+\u00a0 calculate the binomial coefficient n over k as a\n+ constexpr\n+\u00a0\n+template\n+static constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bb_\bi_\bn_\bo_\bm_\bi_\ba_\bl (std::integral_constant< T, n >, std::\n+ integral_constant< T, n >) noexcept\n+\u00a0\n+template\n+ K\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bC_\bo_\bm_\bp_\bl_\be_\bx (const K &x)\n+\u00a0 compute conjugate complex of x\n+\u00a0\n+template\n+ int\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bs_\bi_\bg_\bn (const T &val)\n+\u00a0 Return the sign of the value.\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN (_\bi_\bs_\bN_\ba_\bN,\n+ isnan)\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN (_\bi_\bs_\bI_\bn_\bf,\n+ isinf)\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN\n+ (_\bi_\bs_\bF_\bi_\bn_\bi_\bt_\be, isfinite)\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd (const T &t1, const T\n+ &t2, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 1 >, _\bA_\bD_\bL_\bT_\ba_\bg) -> decltype(isUnordered\n+ (t1, t2))\n+\u00a0\n+template\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd (const T &t1, const T\n+ &t2, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 0 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN_\b__\bF_\bU_\bN_\bC_\bT_\bO_\bR\n+ (isNaN)\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN_\b__\bF_\bU_\bN_\bC_\bT_\bO_\bR\n+ (isInf)\n+\u00a0\n+ \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bI_\bm_\bp_\bl_\b:_\b:_\bD_\bU_\bN_\bE_\b__\bC_\bO_\bM_\bM_\bO_\bN_\b__\bM_\bA_\bT_\bH_\b__\bI_\bS_\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN_\b__\bF_\bU_\bN_\bC_\bT_\bO_\bR\n+ (isFinite)\n+\u00a0\n+template::value>>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bN_\ba_\bN (const T &t, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 2\n+ >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0\n+template::value>>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bI_\bn_\bf (const T &t, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 2\n+ >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0\n+template::value>>\n+ auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bF_\bi_\bn_\bi_\bt_\be (const T &t, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg<\n+ 2 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Some useful basic math stuff.\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_C\bCO\bOM\bMM\bMO\bON\bN_\b_M\bMA\bAT\bTH\bH_\b_I\bIS\bSF\bFU\bUN\bNC\bCT\bTI\bIO\bON\bN *\b**\b**\b**\b**\b*\n+#define DUNE_COMMON_MATH_ISFUNCTION ( \u00a0 function,\n+ \u00a0 stdfunction\u00a0\n+ )\n+V\bVa\bal\blu\bue\be:\b:\n+template \\\n+auto function(const T &t, PriorityTag<1>, ADLTag) \\\n+-> decltype(function(t)) { \\\n+return function(t); \\\n+} \\\n+template \\\n+auto function(const T &t, PriorityTag<0>, ADLTag) { \\\n+using std::stdfunction; \\\n+return stdfunction(t); \\\n+} \\\n+static_assert(true, \"Require semicolon to unconfuse editors\")\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_C\bCO\bOM\bMM\bMO\bON\bN_\b_M\bMA\bAT\bTH\bH_\b_I\bIS\bSF\bFU\bUN\bNC\bCT\bTI\bIO\bON\bN_\b_F\bFU\bUN\bNC\bCT\bTO\bOR\bR *\b**\b**\b**\b**\b*\n+#define DUNE_COMMON_MATH_ISFUNCTION_FUNCTOR ( \u00a0 function )\n+V\bVa\bal\blu\bue\be:\b:\n+struct function##Impl { \\\n+template \\\n+constexpr auto operator()(const T &t) const { \\\n+return function(t, PriorityTag<10>{}, MathOverloads::ADLTag{}); \\\n+} \\\n+}; \\\n+static_assert(true, \"Require semicolon to unconfuse editors\")\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00035.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00035.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: poolallocator.hh File Reference\n+dune-common: visibility.hh File Reference\n \n \n \n \n \n \n \n@@ -70,86 +70,70 @@\n
    \n \n
    \n \n
    \n \n-
    poolallocator.hh File Reference
    \n+Macros
    \n+
    visibility.hh File Reference
    \n \n
    \n \n-

    An stl-compliant pool allocator. \n+

    Definition of macros controlling symbol visibility at the ABI level. \n More...

    \n-
    #include <numeric>
    \n-#include <typeinfo>
    \n-#include <iostream>
    \n-#include <cassert>
    \n-#include <new>
    \n-
    \n+\n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::Pool< T, s >
     A memory pool of objects. More...
     
    class  Dune::PoolAllocator< T, s >
     An allocator managing a pool of objects for reuse. More...
     
    struct  Dune::PoolAllocator< T, s >::rebind< U >
     Rebind the allocator to another type. More...
     
    class  Dune::PoolAllocator< void, s >
     
    struct  Dune::PoolAllocator< void, s >::rebind< U >
     
    \n-\n-\n-\n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  std
     STL namespace.
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

    \n-Functions

    template<typename T1 , std::size_t t1, typename T2 , std::size_t t2>
    bool Dune::operator== (const PoolAllocator< T1, t1 > &, const PoolAllocator< T2, t2 > &)
     
    template<typename T1 , std::size_t t1, typename T2 , std::size_t t2>
    bool Dune::operator!= (const PoolAllocator< T1, t1 > &, const PoolAllocator< T2, t2 > &)
     
    template<typename T , std::size_t t1, std::size_t t2>
    bool Dune::operator== (const PoolAllocator< T, t1 > &p1, const PoolAllocator< T, t2 > &p2)
     
    template<typename T , std::size_t t1, std::size_t t2>
    bool Dune::operator!= (const PoolAllocator< T, t1 > &p1, const PoolAllocator< T, t2 > &p2)
     
    template<typename T , std::size_t t1, std::size_t t2>
    bool Dune::operator== (const PoolAllocator< void, t1 > &, const PoolAllocator< T, t2 > &)
     
    template<typename T , std::size_t t1, std::size_t t2>
    bool Dune::operator!= (const PoolAllocator< void, t1 > &, const PoolAllocator< T, t2 > &)
     
    template<std::size_t t1, std::size_t t2>
    bool Dune::operator== (const PoolAllocator< void, t1 > &p1, const PoolAllocator< void, t2 > &p2)
     
    template<std::size_t t1, std::size_t t2>
    bool Dune::operator!= (const PoolAllocator< void, t1 > &p1, const PoolAllocator< void, t2 > &p2)
     

    \n+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.
     
    \n

    Detailed Description

    \n-

    An stl-compliant pool allocator.

    \n-

    This file implements the classes Pool and PoolAllocator providing memory allocation for objects in chunks.

    Author
    Markus Blatt
    \n-
    \n+

    Definition of macros controlling symbol visibility at the ABI level.

    \n+

    Macro Definition Documentation

    \n+\n+

    ◆ DUNE_EXPORT

    \n+\n+
    \n+
    \n+ \n+ \n+ \n+ \n+
    #define DUNE_EXPORT   implementation_defined
    \n+
    \n+\n+

    Export a symbol as part of the public ABI.

    \n+

    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.

    \n+\n+
    \n+
    \n+\n+

    ◆ DUNE_PRIVATE

    \n+\n+
    \n+
    \n+ \n+ \n+ \n+ \n+
    #define DUNE_PRIVATE   implementation_defined
    \n+
    \n+\n+

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

    \n+

    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!

    \n+\n+
    \n+
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,77 +1,35 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-poolallocator.hh File Reference\n-An stl-compliant pool allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bM_\ba_\bc_\br_\bo_\bs\n+visibility.hh File Reference\n+Definition of macros controlling symbol visibility at the ABI level. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b<_\b _\bT_\b,_\b _\bs_\b _\b>\n-\u00a0 A memory pool of objects. _\bM_\bo_\br_\be_\b._\b._\b.\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bE_\bX_\bP_\bO_\bR_\bT\u00a0\u00a0\u00a0implementation_defined\n+\u00a0 Export a symbol as part of the public ABI.\n \u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bs_\b _\b>\n-\u00a0 An allocator managing a pool of objects for reuse. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bs_\b _\b>_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd_\b<_\b _\bU_\b _\b>\n-\u00a0 Rebind the allocator to another type. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd_\b<_\b _\bU_\b _\b>\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0 _\bD_\bu_\bn_\be namespace.\n-\u00a0\n-namespace \u00a0 _\bs_\bt_\bd\n-\u00a0 STL namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T1, t1 > &, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T2, t2 > &)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T1, t1 > &, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T2, t2 > &)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T, t1 > &p1, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T, t2 > &p2)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T, t1 > &p1, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T, t2 > &p2)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t1 > &, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T, t2 > &)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t1 > &, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br<\n- T, t2 > &)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t1 > &p1, const\n- _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t2 > &p2)\n-\u00a0\n-template\n-bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t1 > &p1, const\n- _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< void, t2 > &p2)\n+#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bP_\bR_\bI_\bV_\bA_\bT_\bE\u00a0\u00a0\u00a0implementation_defined\n+\u00a0 Mark a symbol as being for internal use within the current DSO only.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An stl-compliant pool allocator.\n-This file implements the classes Pool and PoolAllocator providing memory\n-allocation for objects in chunks.\n- Author\n- Markus Blatt\n+Definition of macros controlling symbol visibility at the ABI level.\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_E\bEX\bXP\bPO\bOR\bRT\bT *\b**\b**\b**\b**\b*\n+#define DUNE_EXPORT\u00a0\u00a0\u00a0implementation_defined\n+Export a symbol as part of the public ABI.\n+Mark a class, function or static variable as visible outside the current DSO.\n+For now, this is mostly important for templated global variables and functions\n+that contain static variables.\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_P\bPR\bRI\bIV\bVA\bAT\bTE\bE *\b**\b**\b**\b**\b*\n+#define DUNE_PRIVATE\u00a0\u00a0\u00a0implementation_defined\n+Mark a symbol as being for internal use within the current DSO only.\n+Mark a class, function or static variable as inaccessible from outside the\n+current DSO. Doing so will decrease the size of the symbol table, but you have\n+to be sure that the symbol will never have to be accessed from another library\n+or the main executable!\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: poolallocator.hh Source File\n+dune-common: visibility.hh Source File\n \n \n \n \n \n \n \n@@ -74,519 +74,48 @@\n \n
    \n \n
    \n \n
    \n-
    poolallocator.hh
    \n+
    visibility.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_COMMON_POOLALLOCATOR_HH
    \n-
    6#define DUNE_COMMON_POOLALLOCATOR_HH
    \n+
    5#ifndef DUNE_COMMON_VISIBILITY_HH
    \n+
    6#define DUNE_COMMON_VISIBILITY_HH
    \n
    7
    \n-
    12#include <numeric>
    \n-
    13#include <typeinfo>
    \n-
    14#include <iostream>
    \n-
    15#include <cassert>
    \n-
    16#include <new>
    \n-
    17
    \n-
    18#ifndef DOXYGEN
    \n-
    19// forward declarations.
    \n-
    20// we need to know the test function to declare it friend
    \n-
    21template<std::size_t size, typename T>
    \n-
    22struct testPoolMain;
    \n-
    23#endif
    \n-
    24
    \n-
    25namespace Dune
    \n-
    26{
    \n-
    27
    \n-
    28 template<typename T, std::size_t s>
    \n-
    29 class Pool;
    \n-
    30
    \n-
    31 template<typename T, std::size_t s>
    \n-
    32 class PoolAllocator;
    \n-
    33
    \n-
    34}
    \n-
    35
    \n-
    36namespace std
    \n-
    37{
    \n-
    38 /*
    \n-
    39 template<class T, std::size_t S>
    \n-
    40 inline ostream& operator<<(ostream& os, Dune::Pool<T,S>& pool)
    \n-
    41 {
    \n-
    42 os<<"pool="<<&pool<<" allocated_="<<pool.allocated_;
    \n-
    43 return os;
    \n-
    44 }
    \n-
    45
    \n-
    46 template<class T, std::size_t S>
    \n-
    47 inline ostream& operator<<(ostream& os, Dune::PoolAllocator<T,S>& pool)
    \n-
    48 {
    \n-
    49 os<<pool.memoryPool_<<std::endl;
    \n-
    50 return os;
    \n-
    51 }
    \n-
    52 */
    \n-
    53}
    \n-
    54
    \n-
    55
    \n-
    56namespace Dune
    \n-
    57{
    \n-
    88 template<class T, std::size_t s>
    \n-
    \n-
    89 class Pool
    \n-
    90 {
    \n-
    91 // make the test function friend
    \n-
    92 friend struct ::testPoolMain<s,T>;
    \n-
    93
    \n-
    94 //friend std::ostream& std::operator<<<>(std::ostream&,Pool<T,s>&);
    \n-
    95 template< class, std::size_t > friend class PoolAllocator;
    \n-
    96
    \n-
    97 private:
    \n-
    98
    \n-
    100 struct Reference
    \n-
    101 {
    \n-
    102 Reference *next_;
    \n-
    103 };
    \n-
    104
    \n-
    105 public:
    \n-
    106
    \n-
    108 typedef T MemberType;
    \n-
    109
    \n-
    113 constexpr static int unionSize = (sizeof(MemberType) < sizeof(Reference)) ?
    \n-
    114 sizeof(Reference) : sizeof(MemberType);
    \n-
    115
    \n-
    120 constexpr static int size = (sizeof(MemberType) <= s && sizeof(Reference) <= s) ?
    \n-
    121 s : unionSize;
    \n-
    122
    \n-
    127 constexpr static int alignment = std::lcm(alignof(MemberType), alignof(Reference));
    \n-
    128
    \n-
    135 constexpr static int alignedSize = (unionSize % alignment == 0) ?
    \n-
    136 unionSize :
    \n-
    137 ((unionSize / alignment + 1) * alignment);
    \n-
    138
    \n-
    144 constexpr static int chunkSize = (size % alignment == 0) ?
    \n-
    145 size : ((size / alignment + 1)* alignment);
    \n-
    146
    \n-
    150 constexpr static int elements = (chunkSize / alignedSize);
    \n-
    151
    \n-
    152 private:
    \n-
    154 struct Chunk
    \n-
    155 {
    \n-
    156
    \n-
    157 //friend int testPool<s,T>();
    \n-
    158
    \n-
    160 alignas(alignment) char chunk_[chunkSize];
    \n-
    161
    \n-
    163 Chunk *next_;
    \n-
    164 };
    \n-
    165
    \n-
    166 public:
    \n-
    \n-
    168 inline Pool();
    \n-
    \n-
    170 inline ~Pool();
    \n-
    \n-
    175 inline void* allocate();
    \n-
    \n-
    180 inline void free(void* o);
    \n-
    181
    \n-
    \n-
    185 inline void print(std::ostream& os);
    \n-
    186
    \n-
    187 private:
    \n-
    188
    \n-
    189 // Prevent Copying!
    \n-
    190 Pool(const Pool<MemberType,s>&);
    \n-
    191
    \n-
    192 void operator=(const Pool<MemberType,s>& pool) const;
    \n-
    194 inline void grow();
    \n-
    196 Reference *head_;
    \n-
    198 Chunk *chunks_;
    \n-
    199 /* @brief The number of currently allocated elements. */
    \n-
    200 //size_t allocated_;
    \n-
    201
    \n-
    202 };
    \n-
    203
    \n-
    221 template<class T, std::size_t s>
    \n-
    \n-\n-
    223 {
    \n-
    224 //friend std::ostream& std::operator<<<>(std::ostream&,PoolAllocator<T,s>&);
    \n-
    225
    \n-
    226 public:
    \n-
    230 typedef T value_type;
    \n-
    231
    \n-
    236 constexpr static int size = s * sizeof(value_type);
    \n-
    237
    \n-
    241 typedef T* pointer;
    \n-
    242
    \n-
    246 typedef const T* const_pointer;
    \n-
    247
    \n-
    251 typedef T& reference;
    \n-
    252
    \n-
    256 typedef const T& const_reference;
    \n-
    257
    \n-
    261 typedef std::size_t size_type;
    \n-
    262
    \n-
    266 typedef std::ptrdiff_t difference_type;
    \n-
    267
    \n-
    271 inline PoolAllocator();
    \n-
    272
    \n-
    276 template<typename U, std::size_t u>
    \n-
    \n-\n-
    278 {
    \n-
    279 // we allow copying but never copy the pool
    \n-
    280 // to have a clear ownership of allocated pointers.
    \n-
    281 }
    \n-
    \n-
    282
    \n-
    \n-\n-
    285 {
    \n-
    286 // we allow copying but never copy the pool
    \n-
    287 // to have a clear ownership of allocated pointers.
    \n-
    288 // For this behaviour we have to implement
    \n-
    289 // the copy constructor, because the default
    \n-
    290 // one would copy the pool and deallocation
    \n-
    291 // of it would break.
    \n-
    292 }
    \n-
    \n-
    299 inline pointer allocate(std::size_t n, const_pointer hint=0);
    \n-
    300
    \n-
    308 inline void deallocate(pointer p, std::size_t n);
    \n-
    309
    \n-
    315 inline void construct(pointer p, const_reference value);
    \n-
    316
    \n-
    321 inline void destroy(pointer p);
    \n-
    322
    \n-
    326 inline pointer address(reference x) const { return &x; }
    \n-
    327
    \n-
    328
    \n-
    332 inline const_pointer address(const_reference x) const { return &x; }
    \n-
    333
    \n-
    337 inline int max_size() const noexcept { return 1; }
    \n-
    338
    \n-
    342 template<class U>
    \n-
    \n-
    343 struct rebind
    \n-
    344 {
    \n-\n-
    346 };
    \n-
    \n-
    347
    \n-\n-
    350
    \n-
    351 private:
    \n-
    355 PoolType memoryPool_;
    \n-
    356 };
    \n-
    \n-
    357
    \n-
    358 // specialization for void
    \n-
    359 template <std::size_t s>
    \n-
    \n-
    360 class PoolAllocator<void,s>
    \n-
    361 {
    \n-
    362 public:
    \n-
    363 typedef void* pointer;
    \n-
    364 typedef const void* const_pointer;
    \n-
    365 // reference to void members are impossible.
    \n-
    366 typedef void value_type;
    \n-
    \n-
    367 template <class U> struct rebind
    \n-
    368 {
    \n-\n-
    370 };
    \n-
    \n-
    371 };
    \n-
    \n-
    372
    \n-
    373
    \n-
    374 template<typename T1, std::size_t t1, typename T2, std::size_t t2>
    \n-
    \n-\n-
    376 {
    \n-
    377 return false;
    \n-
    378 }
    \n-
    \n-
    379
    \n-
    380
    \n-
    381 template<typename T1, std::size_t t1, typename T2, std::size_t t2>
    \n-
    \n-\n-
    383 {
    \n-
    384 return true;
    \n-
    385 }
    \n-
    \n-
    386
    \n-
    387 template<typename T, std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    389 {
    \n-
    390 return &p1==&p2;
    \n-
    391 }
    \n-
    \n-
    392
    \n-
    393
    \n-
    394 template<typename T, std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    396 {
    \n-
    397 return &p1 != &p2;
    \n-
    398 }
    \n-
    \n-
    399
    \n-
    400 template<typename T, std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    402 {
    \n-
    403 return false;
    \n-
    404 }
    \n-
    \n-
    405
    \n-
    406
    \n-
    407 template<typename T, std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    409 {
    \n-
    410 return true;
    \n-
    411 }
    \n-
    \n-
    412
    \n-
    413 template<std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    415 {
    \n-
    416 return &p1==&p2;
    \n-
    417 }
    \n-
    \n-
    418
    \n-
    419 template<std::size_t t1, std::size_t t2>
    \n-
    \n-\n-
    421 {
    \n-
    422 return &p1!=&p2;
    \n-
    423 }
    \n-
    \n-
    424
    \n-
    425 template<class T, std::size_t S>
    \n-
    \n-\n-
    427 : head_(0), chunks_(0) //, allocated_(0)
    \n-
    428 {
    \n-
    429 static_assert(sizeof(T)<=unionSize, "Library Error: type T is too big");
    \n-
    430 static_assert(sizeof(Reference)<=unionSize, "Library Error: type of reference is too big");
    \n-
    431 static_assert(unionSize<=alignedSize, "Library Error: alignedSize too small");
    \n-
    432 static_assert(sizeof(T)<=chunkSize, "Library Error: chunkSize must be able to hold at least one value");
    \n-
    433 static_assert(sizeof(Reference)<=chunkSize, "Library Error: chunkSize must be able to hold at least one reference");
    \n-
    434 static_assert(chunkSize % alignment == 0, "Library Error: compiler cannot calculate!");
    \n-
    435 static_assert(elements>=1, "Library Error: we need to hold at least one element!");
    \n-
    436 static_assert(elements*alignedSize<=chunkSize, "Library Error: aligned elements must fit into chuck!");
    \n-
    437 }
    \n-
    \n-
    438
    \n-
    439 template<class T, std::size_t S>
    \n-
    \n-\n-
    441 {
    \n-
    442 /*
    \n-
    443 if(allocated_!=0)
    \n-
    444 std::cerr<<"There are still "<<allocated_<<" allocated elements by the Pool<"<<typeid(T).name()<<","<<S<<"> "
    \n-
    445 <<static_cast<void*>(this)<<"! This is a memory leak and might result in segfaults"
    \n-
    446 <<std::endl;
    \n-
    447 */
    \n-
    448 // delete the allocated chunks.
    \n-
    449 Chunk *current=chunks_;
    \n-
    450
    \n-
    451 while(current!=0)
    \n-
    452 {
    \n-
    453 Chunk *tmp = current;
    \n-
    454 current = current->next_;
    \n-
    455 delete tmp;
    \n-
    456 }
    \n-
    457 }
    \n-
    \n-
    458
    \n-
    459 template<class T, std::size_t S>
    \n-
    \n-
    460 inline void Pool<T,S>::print(std::ostream& os)
    \n-
    461 {
    \n-
    462 Chunk* current=chunks_;
    \n-
    463 while(current) {
    \n-
    464 os<<current<<" ";
    \n-
    465 current=current->next_;
    \n-
    466 }
    \n-
    467 os<<current<<" ";
    \n-
    468 }
    \n-
    \n-
    \n-
    469
    \n-
    470 template<class T, std::size_t S>
    \n-
    471 inline void Pool<T,S>::grow()
    \n-
    472 {
    \n-
    473 Chunk *newChunk = new Chunk;
    \n-
    474 newChunk->next_ = chunks_;
    \n-
    475 chunks_ = newChunk;
    \n-
    476
    \n-
    477 char* start = chunks_->chunk_;
    \n-
    478 char* last = &start[elements*alignedSize];
    \n-
    479 Reference* ref = new (start) (Reference);
    \n-
    480
    \n-
    481 // grow is only called if head==0,
    \n-
    482 assert(!head_);
    \n-
    483
    \n-
    484 head_ = ref;
    \n-
    485
    \n-
    486 for(char* element=start+alignedSize; element<last; element=element+alignedSize) {
    \n-
    487 Reference* next = new (element) (Reference);
    \n-
    488 ref->next_ = next;
    \n-
    489 ref = next;
    \n-
    490 }
    \n-
    491 ref->next_=0;
    \n-
    492 }
    \n-
    493
    \n-
    494 template<class T, std::size_t S>
    \n-
    \n-
    495 inline void Pool<T,S>::free(void* b)
    \n-
    496 {
    \n-
    497 if(b) {
    \n-
    498#ifndef NDEBUG
    \n-
    499 Chunk* current=chunks_;
    \n-
    500 while(current) {
    \n-
    501 if(static_cast<void*>(current->chunk_)<=b &&
    \n-
    502 static_cast<void*>(current->chunk_+chunkSize)>b)
    \n-
    503 break;
    \n-
    504 current=current->next_;
    \n-
    505 }
    \n-
    506 if(!current)
    \n-
    507 throw std::bad_alloc();
    \n-
    508#endif
    \n-
    509 Reference* freed = static_cast<Reference*>(b);
    \n-
    510 freed->next_ = head_;
    \n-
    511 head_ = freed;
    \n-
    512 //--allocated_;
    \n-
    513 }
    \n-
    514 else
    \n-
    515 {
    \n-
    516 std::cerr<< "Tried to free null pointer! "<<b<<std::endl;
    \n-
    517 throw std::bad_alloc();
    \n-
    518 }
    \n-
    519 }
    \n-
    \n-
    \n-
    520
    \n-
    521 template<class T, std::size_t S>
    \n-
    \n-
    522 inline void* Pool<T,S>::allocate()
    \n-
    523 {
    \n-
    524 if(!head_)
    \n-
    525 grow();
    \n-
    526
    \n-
    527 Reference* p = head_;
    \n-
    528 head_ = p->next_;
    \n-
    529 //++allocated_;
    \n-
    530 return p;
    \n-
    531 }
    \n-
    \n-
    \n-
    532
    \n-
    533 template<class T, std::size_t s>
    \n-
    \n-\n-
    535 { }
    \n-
    \n-
    536
    \n-
    537 template<class T, std::size_t s>
    \n-
    538 inline typename PoolAllocator<T,s>::pointer
    \n-
    \n-\n-
    540 {
    \n-
    541 if(n==1)
    \n-
    542 return static_cast<T*>(memoryPool_.allocate());
    \n-
    543 else
    \n-
    544 throw std::bad_alloc();
    \n-
    545 }
    \n-
    \n-
    546
    \n-
    547 template<class T, std::size_t s>
    \n-
    \n-
    548 inline void PoolAllocator<T,s>::deallocate(pointer p, std::size_t n)
    \n-
    549 {
    \n-
    550 for(size_t i=0; i<n; i++)
    \n-
    551 memoryPool_.free(p++);
    \n-
    552 }
    \n-
    \n-
    553
    \n-
    554 template<class T, std::size_t s>
    \n-
    \n-\n-
    556 {
    \n-
    557 ::new (static_cast<void*>(p))T(value);
    \n-
    558 }
    \n-
    \n-
    559
    \n-
    560 template<class T, std::size_t s>
    \n-
    561 inline void PoolAllocator<T,s>::destroy(pointer p)
    \n-
    562 {
    \n-
    563 p->~T();
    \n-
    564 }
    \n-
    565
    \n-
    567}
    \n-
    568#endif
    \n-
    \n-
    \n-
    \n-
    void construct(pointer p, const_reference value)
    Construct an object.
    Definition poolallocator.hh:555
    \n-
    void free(void *o)
    Free an object.
    Definition poolallocator.hh:495
    \n-
    ~Pool()
    Destructor.
    Definition poolallocator.hh:440
    \n-
    void * allocate()
    Get a new or recycled object.
    Definition poolallocator.hh:522
    \n-
    void print(std::ostream &os)
    Print elements in pool for debugging.
    Definition poolallocator.hh:460
    \n-
    pointer allocate(std::size_t n, const_pointer hint=0)
    Allocates objects.
    Definition poolallocator.hh:539
    \n-
    Pool()
    Constructor.
    Definition poolallocator.hh:426
    \n-
    void deallocate(pointer p, std::size_t n)
    Free objects.
    Definition poolallocator.hh:548
    \n-
    void destroy(pointer p)
    Destroy an object without freeing memory.
    Definition poolallocator.hh:561
    \n-
    PoolAllocator()
    Constructor.
    Definition poolallocator.hh:534
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator==(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for equality.
    Definition iteratorfacades.hh:238
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator!=(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for inequality.
    Definition iteratorfacades.hh:260
    \n-
    STL namespace.
    \n-
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Get the 'const' version of a reference to a mutable object.
    Definition genericiterator.hh:87
    \n-
    A memory pool of objects.
    Definition poolallocator.hh:90
    \n-
    static constexpr int alignment
    The alignment that suits both the MemberType and the Reference (i.e. their least common multiple).
    Definition poolallocator.hh:127
    \n-
    static constexpr int alignedSize
    The aligned size of the type.
    Definition poolallocator.hh:135
    \n-
    static constexpr int chunkSize
    The size of each chunk memory chunk.
    Definition poolallocator.hh:144
    \n-
    static constexpr int size
    Size requirement. At least one object has to stored.
    Definition poolallocator.hh:120
    \n-
    static constexpr int unionSize
    The size of a union of Reference and MemberType.
    Definition poolallocator.hh:113
    \n-
    T MemberType
    The type of object we allocate memory for.
    Definition poolallocator.hh:108
    \n-
    static constexpr int elements
    The number of element each chunk can hold.
    Definition poolallocator.hh:150
    \n-
    An allocator managing a pool of objects for reuse.
    Definition poolallocator.hh:223
    \n-
    Pool< T, size > PoolType
    The type of the memory pool we use.
    Definition poolallocator.hh:349
    \n-
    const_pointer address(const_reference x) const
    Convert a reference to a pointer.
    Definition poolallocator.hh:332
    \n-
    const T & const_reference
    The constant reference type.
    Definition poolallocator.hh:256
    \n-
    std::size_t size_type
    The size type.
    Definition poolallocator.hh:261
    \n-
    T value_type
    Type of the values we construct and allocate.
    Definition poolallocator.hh:230
    \n-
    T & reference
    The reference type.
    Definition poolallocator.hh:251
    \n-
    PoolAllocator(const PoolAllocator &)
    Copy constructor that does not copy the memory pool.
    Definition poolallocator.hh:284
    \n-
    const T * const_pointer
    The constant pointer type.
    Definition poolallocator.hh:246
    \n-
    pointer address(reference x) const
    Convert a reference to a pointer.
    Definition poolallocator.hh:326
    \n-
    T * pointer
    The pointer type.
    Definition poolallocator.hh:241
    \n-
    PoolAllocator(const PoolAllocator< U, u > &)
    Copy Constructor that does not copy the memory pool.
    Definition poolallocator.hh:277
    \n-
    std::ptrdiff_t difference_type
    The difference_type.
    Definition poolallocator.hh:266
    \n-
    int max_size() const noexcept
    Not correctly implemented, yet!
    Definition poolallocator.hh:337
    \n-
    static constexpr int size
    The number of objects to fit into one memory chunk allocated.
    Definition poolallocator.hh:236
    \n-
    Rebind the allocator to another type.
    Definition poolallocator.hh:344
    \n-
    PoolAllocator< U, s > other
    Definition poolallocator.hh:345
    \n-
    void value_type
    Definition poolallocator.hh:366
    \n-
    void * pointer
    Definition poolallocator.hh:363
    \n-
    const void * const_pointer
    Definition poolallocator.hh:364
    \n-
    PoolAllocator< U, s > other
    Definition poolallocator.hh:369
    \n+
    12#ifdef DOXYGEN
    \n+
    13
    \n+
    15
    \n+
    20#define DUNE_EXPORT implementation_defined
    \n+
    21
    \n+
    23
    \n+
    28#define DUNE_PRIVATE implementation_defined
    \n+
    29
    \n+
    30#else // DOXYGEN
    \n+
    31
    \n+
    32#if __GNUC__ >= 4
    \n+
    33// GCC and Clang both define __GNUC__ to 4 and they both support the visibility
    \n+
    34// attribute
    \n+
    35#define DUNE_EXPORT __attribute__((visibility("default")))
    \n+
    36#define DUNE_PRIVATE __attribute__((visibility("hidden")))
    \n+
    37#else
    \n+
    38// We don't know about the active compiler, so just turn the visibility macros to no-ops.
    \n+
    39#define DUNE_EXPORT
    \n+
    40#define DUNE_PRIVATE
    \n+
    41#endif
    \n+
    42
    \n+
    43#endif // DOXYGEN
    \n+
    44
    \n+
    45#endif // DUNE_COMMON_VISIBILITY
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,597 +1,44 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-poolallocator.hh\n+visibility.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_COMMON_POOLALLOCATOR_HH\n-6#define DUNE_COMMON_POOLALLOCATOR_HH\n+5#ifndef DUNE_COMMON_VISIBILITY_HH\n+6#define DUNE_COMMON_VISIBILITY_HH\n 7\n-12#include \n-13#include \n-14#include \n-15#include \n-16#include \n-17\n-18#ifndef DOXYGEN\n-19// forward declarations.\n-20// we need to know the test function to declare it friend\n-21template\n-22struct testPoolMain;\n-23#endif\n-24\n-25namespace _\bD_\bu_\bn_\be\n-26{\n-27\n-28 template\n-29 class Pool;\n-30\n-31 template\n-32 class PoolAllocator;\n-33\n-34}\n-35\n-36namespace _\bs_\bt_\bd\n-37{\n-38 /*\n-39 template\n-40 inline ostream& operator<<(ostream& os, Dune::Pool& pool)\n-41 {\n-42 os<<\"pool=\"<<&pool<<\" allocated_=\"<\n-47 inline ostream& operator<<(ostream& os, Dune::PoolAllocator& pool)\n-48 {\n-49 os<\n-_\b8_\b9 class _\bP_\bo_\bo_\bl\n-90 {\n-91 // make the test function friend\n-92 friend struct ::testPoolMain;\n-93\n-94 //friend std::ostream& std::operator<<<>(std::ostream&,Pool&);\n-_\b9_\b5 template< class, std::size_t > friend class _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br;\n-96\n-97 private:\n-98\n-100 struct Reference\n-101 {\n-102 Reference *next_;\n-103 };\n-104\n-105 public:\n-106\n-_\b1_\b0_\b8 typedef T _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be;\n-109\n-_\b1_\b1_\b3 constexpr static int _\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be = (sizeof(_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be) < sizeof(Reference)) ?\n-114 sizeof(Reference) : sizeof(_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be);\n-115\n-_\b1_\b2_\b0 constexpr static int _\bs_\bi_\bz_\be = (sizeof(_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be) <= s && sizeof(Reference)\n-<= s) ?\n-121 s : _\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be;\n-122\n-_\b1_\b2_\b7 constexpr static int _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt = std::lcm(alignof(_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be), alignof\n-(Reference));\n-128\n-_\b1_\b3_\b5 constexpr static int _\ba_\bl_\bi_\bg_\bn_\be_\bd_\bS_\bi_\bz_\be = (_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be % _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt == 0) ?\n-136 _\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be :\n-137 ((_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be / _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt + 1) * _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt);\n-138\n-_\b1_\b4_\b4 constexpr static int _\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be = (_\bs_\bi_\bz_\be % _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt == 0) ?\n-145 _\bs_\bi_\bz_\be : ((_\bs_\bi_\bz_\be / _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt + 1)* _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt);\n-146\n-_\b1_\b5_\b0 constexpr static int _\be_\bl_\be_\bm_\be_\bn_\bt_\bs = (_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be / _\ba_\bl_\bi_\bg_\bn_\be_\bd_\bS_\bi_\bz_\be);\n-151\n-152 private:\n-154 struct Chunk\n-155 {\n-156\n-157 //friend int testPool();\n-158\n-160 alignas(_\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt) char chunk_[_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be];\n-161\n-163 Chunk *next_;\n-164 };\n-165\n-166 public:\n-_\b1_\b6_\b8 inline _\bP_\bo_\bo_\bl();\n-_\b1_\b7_\b0 inline _\b~_\bP_\bo_\bo_\bl();\n-_\b1_\b7_\b5 inline void* _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be();\n-_\b1_\b8_\b0 inline void _\bf_\br_\be_\be(void* o);\n-181\n-_\b1_\b8_\b5 inline void _\bp_\br_\bi_\bn_\bt(std::ostream& os);\n-186\n-187 private:\n-188\n-189 // Prevent Copying!\n-190 _\bP_\bo_\bo_\bl(const _\bP_\bo_\bo_\bl_\b<_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be_\b,_\bs_\b>&);\n-191\n-192 void operator=(const _\bP_\bo_\bo_\bl_\b<_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be_\b,_\bs_\b>& pool) const;\n-194 inline void grow();\n-196 Reference *head_;\n-198 Chunk *chunks_;\n-199 /* @brief The number of currently allocated elements. */\n-200 //size_t allocated_;\n-201\n-202 };\n-203\n-221 template\n-_\b2_\b2_\b2 class _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-223 {\n-224 //friend std::ostream& std::operator<<<>(std::\n-ostream&,PoolAllocator&);\n-225\n-226 public:\n-_\b2_\b3_\b0 typedef T _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-231\n-_\b2_\b3_\b6 constexpr static int _\bs_\bi_\bz_\be = s * sizeof(_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be);\n-237\n-_\b2_\b4_\b1 typedef T* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-242\n-_\b2_\b4_\b6 typedef const T* _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br;\n-247\n-_\b2_\b5_\b1 typedef T& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-252\n-_\b2_\b5_\b6 typedef const T& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-257\n-_\b2_\b6_\b1 typedef std::size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-262\n-_\b2_\b6_\b6 typedef std::ptrdiff_t _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n-267\n-271 inline _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br();\n-272\n-276 template\n-_\b2_\b7_\b7 inline _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bU_\b,_\bu_\b>&)\n-278 {\n-279 // we allow copying but never copy the pool\n-280 // to have a clear ownership of allocated pointers.\n-281 }\n-282\n-_\b2_\b8_\b4 _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br&)\n-285 {\n-286 // we allow copying but never copy the pool\n-287 // to have a clear ownership of allocated pointers.\n-288 // For this behaviour we have to implement\n-289 // the copy constructor, because the default\n-290 // one would copy the pool and deallocation\n-291 // of it would break.\n-292 }\n-299 inline _\bp_\bo_\bi_\bn_\bt_\be_\br _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(std::size_t n, _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br hint=0);\n-300\n-308 inline void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bp_\bo_\bi_\bn_\bt_\be_\br p, std::size_t n);\n-309\n-315 inline void _\bc_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt(_\bp_\bo_\bi_\bn_\bt_\be_\br p, _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be value);\n-316\n-321 inline void _\bd_\be_\bs_\bt_\br_\bo_\by(_\bp_\bo_\bi_\bn_\bt_\be_\br p);\n-322\n-_\b3_\b2_\b6 inline _\bp_\bo_\bi_\bn_\bt_\be_\br _\ba_\bd_\bd_\br_\be_\bs_\bs(_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be x) const { return &x; }\n-327\n-328\n-_\b3_\b3_\b2 inline _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br _\ba_\bd_\bd_\br_\be_\bs_\bs(_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be x) const { return &x; }\n-333\n-_\b3_\b3_\b7 inline int _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() const noexcept { return 1; }\n-338\n-342 template\n-_\b3_\b4_\b3 struct _\br_\be_\bb_\bi_\bn_\bd\n-344 {\n-_\b3_\b4_\b5 typedef _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bU_\b,_\bs_\b> _\bo_\bt_\bh_\be_\br;\n-346 };\n-347\n-_\b3_\b4_\b9 typedef _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bs_\bi_\bz_\be_\b> _\bP_\bo_\bo_\bl_\bT_\by_\bp_\be;\n-350\n-351 private:\n-355 _\bP_\bo_\bo_\bl_\bT_\by_\bp_\be memoryPool_;\n-356 };\n-357\n-358 // specialization for void\n-359 template \n-_\b3_\b6_\b0 class _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-361 {\n-362 public:\n-_\b3_\b6_\b3 typedef void* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-_\b3_\b6_\b4 typedef const void* _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br;\n-365 // reference to void members are impossible.\n-_\b3_\b6_\b6 typedef void _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b3_\b6_\b7 template struct rebind\n-368 {\n-_\b3_\b6_\b9 typedef _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bU_\b,_\bs_\b> _\bo_\bt_\bh_\be_\br;\n-370 };\n-371 };\n-372\n-373\n-374 template\n-_\b3_\b7_\b5 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b1_\b,_\bt_\b1_\b>&, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b2_\b,_\bt_\b2_\b>&)\n-376 {\n-377 return false;\n-378 }\n-379\n-380\n-381 template\n-_\b3_\b8_\b2 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b1_\b,_\bt_\b1_\b>&, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b2_\b,_\bt_\b2_\b>&)\n-383 {\n-384 return true;\n-385 }\n-386\n-387 template\n-_\b3_\b8_\b8 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b1_\b>& p1, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b2_\b>&\n-p2)\n-389 {\n-390 return &p1==&p2;\n-391 }\n-392\n-393\n-394 template\n-_\b3_\b9_\b5 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b1_\b>& p1, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b2_\b>&\n-p2)\n-396 {\n-397 return &p1 != &p2;\n-398 }\n-399\n-400 template\n-_\b4_\b0_\b1 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b1_\b>&, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b2_\b>&)\n-402 {\n-403 return false;\n-404 }\n-405\n-406\n-407 template\n-_\b4_\b0_\b8 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b1_\b>&, const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bt_\b2_\b>&)\n-409 {\n-410 return true;\n-411 }\n-412\n-413 template\n-_\b4_\b1_\b4 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b1_\b>& p1, const\n-_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b2_\b>& p2)\n-415 {\n-416 return &p1==&p2;\n-417 }\n-418\n-419 template\n-_\b4_\b2_\b0 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b1_\b>& p1, const\n-_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bv_\bo_\bi_\bd_\b,_\bt_\b2_\b>& p2)\n-421 {\n-422 return &p1!=&p2;\n-423 }\n-424\n-425 template\n-_\b4_\b2_\b6 inline _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\bP_\bo_\bo_\bl()\n-427 : head_(0), chunks_(0) //, allocated_(0)\n-428 {\n-429 static_assert(sizeof(T)<=_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be, \"Library Error: type T is too big\");\n-430 static_assert(sizeof(Reference)<=_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be, \"Library Error: type of\n-reference is too big\");\n-431 static_assert(_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be<=_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bS_\bi_\bz_\be, \"Library Error: alignedSize too\n-small\");\n-432 static_assert(sizeof(T)<=_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be, \"Library Error: chunkSize must be able\n-to hold at least one value\");\n-433 static_assert(sizeof(Reference)<=_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be, \"Library Error: chunkSize must\n-be able to hold at least one reference\");\n-434 static_assert(_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be % _\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt == 0, \"Library Error: compiler cannot\n-calculate!\");\n-435 static_assert(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs>=1, \"Library Error: we need to hold at least one\n-element!\");\n-436 static_assert(_\be_\bl_\be_\bm_\be_\bn_\bt_\bs*_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bS_\bi_\bz_\be<=_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be, \"Library Error: aligned\n-elements must fit into chuck!\");\n-437 }\n-438\n-439 template\n-_\b4_\b4_\b0 inline _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\b~_\bP_\bo_\bo_\bl()\n-441 {\n-442 /*\n-443 if(allocated_!=0)\n-444 std::cerr<<\"There are still \"< \"\n-445 <(this)<<\"! This is a memory leak and might result in\n-segfaults\"\n-446 <next_;\n-455 delete tmp;\n-456 }\n-457 }\n-458\n-459 template\n-_\b4_\b6_\b0 inline void _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(std::ostream& os)\n-461 {\n-462 Chunk* current=chunks_;\n-463 while(current) {\n-464 os<next_;\n-466 }\n-467 os<\n-471 inline void _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\bg_\br_\bo_\bw()\n-472 {\n-473 Chunk *newChunk = new Chunk;\n-474 newChunk->next_ = chunks_;\n-475 chunks_ = newChunk;\n-476\n-477 char* start = chunks_->chunk_;\n-478 char* last = &start[elements*alignedSize];\n-479 Reference* ref = new (start) (Reference);\n-480\n-481 // grow is only called if head==0,\n-482 assert(!head_);\n-483\n-484 head_ = ref;\n-485\n-486 for(char* element=start+alignedSize; elementnext_ = next;\n-489 ref = next;\n-490 }\n-491 ref->next_=0;\n-492 }\n-493\n-494 template\n-_\b4_\b9_\b5 inline void _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\bf_\br_\be_\be(void* b)\n-496 {\n-497 if(b) {\n-498#ifndef NDEBUG\n-499 Chunk* current=chunks_;\n-500 while(current) {\n-501 if(static_cast(current->chunk_)<=b &&\n-502 static_cast(current->chunk_+chunkSize)>b)\n-503 break;\n-504 current=current->next_;\n-505 }\n-506 if(!current)\n-507 throw std::bad_alloc();\n-508#endif\n-509 Reference* freed = static_cast(b);\n-510 freed->next_ = head_;\n-511 head_ = freed;\n-512 //--allocated_;\n-513 }\n-514 else\n-515 {\n-516 std::cerr<< \"Tried to free null pointer! \"<\n-_\b5_\b2_\b2 inline void* _\bP_\bo_\bo_\bl_\b<_\bT_\b,_\bS_\b>_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be()\n-523 {\n-524 if(!head_)\n-525 grow();\n-526\n-527 Reference* p = head_;\n-528 head_ = p->next_;\n-529 //++allocated_;\n-530 return p;\n-531 }\n-532\n-533 template\n-_\b5_\b3_\b4 inline _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br()\n-535 { }\n-536\n-537 template\n-538 inline typename _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-_\b5_\b3_\b9 _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(std::size_t n, _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br)\n-540 {\n-541 if(n==1)\n-542 return static_cast(memoryPool_.allocate());\n-543 else\n-544 throw std::bad_alloc();\n-545 }\n-546\n-547 template\n-_\b5_\b4_\b8 inline void _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bp_\bo_\bi_\bn_\bt_\be_\br p, std::size_t n)\n-549 {\n-550 for(size_t i=0; i\n-_\b5_\b5_\b5 inline void _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt(_\bp_\bo_\bi_\bn_\bt_\be_\br p, _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be value)\n-556 {\n-557 ::new (static_cast(p))T(value);\n-558 }\n-559\n-560 template\n-_\b5_\b6_\b1 inline void _\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bs_\b>_\b:_\b:_\bd_\be_\bs_\bt_\br_\bo_\by(pointer p)\n-562 {\n-563 p->~T();\n-564 }\n-565\n-567}\n-568#endif\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt\n-void construct(pointer p, const_reference value)\n-Construct an object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:555\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bf_\br_\be_\be\n-void free(void *o)\n-Free an object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:495\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\b~_\bP_\bo_\bo_\bl\n-~Pool()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:440\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-void * allocate()\n-Get a new or recycled object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:522\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(std::ostream &os)\n-Print elements in pool for debugging.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:460\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-pointer allocate(std::size_t n, const_pointer hint=0)\n-Allocates objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:539\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bP_\bo_\bo_\bl\n-Pool()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:426\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-void deallocate(pointer p, std::size_t n)\n-Free objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:548\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bs_\bt_\br_\bo_\by\n-void destroy(pointer p)\n-Destroy an object without freeing memory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:561\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-PoolAllocator()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:534\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator==(const\n-ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n-V2, R2, D > &rhs)\n-Checks for equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:238\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator!=(const\n-ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n-V2, R2, D > &rhs)\n-Checks for inequality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:260\n-_\bs_\bt_\bd\n-STL namespace.\n-_\bD_\bu_\bn_\be\n-Dune namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Get the 'const' version of a reference to a mutable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl\n-A memory pool of objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:90\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\ba_\bl_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-static constexpr int alignment\n-The alignment that suits both the MemberType and the Reference (i.e. their\n-least common multiple).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:127\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\ba_\bl_\bi_\bg_\bn_\be_\bd_\bS_\bi_\bz_\be\n-static constexpr int alignedSize\n-The aligned size of the type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:135\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bc_\bh_\bu_\bn_\bk_\bS_\bi_\bz_\be\n-static constexpr int chunkSize\n-The size of each chunk memory chunk.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:144\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr int size\n-Size requirement. At least one object has to stored.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:120\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bu_\bn_\bi_\bo_\bn_\bS_\bi_\bz_\be\n-static constexpr int unionSize\n-The size of a union of Reference and MemberType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:113\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be\n-T MemberType\n-The type of object we allocate memory for.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\b:_\b:_\be_\bl_\be_\bm_\be_\bn_\bt_\bs\n-static constexpr int elements\n-The number of element each chunk can hold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-An allocator managing a pool of objects for reuse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:223\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bo_\bl_\bT_\by_\bp_\be\n-Pool< T, size > PoolType\n-The type of the memory pool we use.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:349\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd_\br_\be_\bs_\bs\n-const_pointer address(const_reference x) const\n-Convert a reference to a pointer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:332\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const T & const_reference\n-The constant reference type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:256\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::size_t size_type\n-The size type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-T value_type\n-Type of the values we construct and allocate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:230\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-T & reference\n-The reference type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:251\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-PoolAllocator(const PoolAllocator &)\n-Copy constructor that does not copy the memory pool.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:284\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br\n-const T * const_pointer\n-The constant pointer type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:246\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd_\br_\be_\bs_\bs\n-pointer address(reference x) const\n-Convert a reference to a pointer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:326\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-T * pointer\n-The pointer type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-PoolAllocator(const PoolAllocator< U, u > &)\n-Copy Constructor that does not copy the memory pool.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:277\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-std::ptrdiff_t difference_type\n-The difference_type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n-int max_size() const noexcept\n-Not correctly implemented, yet!\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:337\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-static constexpr int size\n-The number of objects to fit into one memory chunk allocated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd\n-Rebind the allocator to another type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:344\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd_\b:_\b:_\bo_\bt_\bh_\be_\br\n-PoolAllocator< U, s > other\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:345\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-void value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:366\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-void * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:363\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br\n-const void * const_pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:364\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bo_\bl_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bv_\bo_\bi_\bd_\b,_\b _\bs_\b _\b>_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd_\b:_\b:_\bo_\bt_\bh_\be_\br\n-PoolAllocator< U, s > other\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn poolallocator.hh:369\n+12#ifdef DOXYGEN\n+13\n+15\n+_\b2_\b0#define DUNE_EXPORT implementation_defined\n+21\n+23\n+_\b2_\b8#define DUNE_PRIVATE implementation_defined\n+29\n+30#else // DOXYGEN\n+31\n+32#if __GNUC__ >= 4\n+33// GCC and Clang both define __GNUC__ to 4 and they both support the\n+visibility\n+34// attribute\n+35#define DUNE_EXPORT __attribute__((visibility(\"default\")))\n+36#define DUNE_PRIVATE __attribute__((visibility(\"hidden\")))\n+37#else\n+38// We don't know about the active compiler, so just turn the visibility\n+macros to no-ops.\n+39#define DUNE_EXPORT\n+40#define DUNE_PRIVATE\n+41#endif\n+42\n+43#endif // DOXYGEN\n+44\n+45#endif // DUNE_COMMON_VISIBILITY\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00038.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00038.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: bitsetvector.hh File Reference\n+dune-common: lru.hh File Reference\n \n \n \n \n \n \n \n@@ -72,58 +72,43 @@\n
  • dune
  • common
  • \n \n \n
    \n \n-
    bitsetvector.hh File Reference
    \n+
    lru.hh File Reference
    \n
    \n
    \n \n-

    Efficient implementation of a dynamic array of static arrays of booleans. \n+

    LRU Cache Container, using an STL like interface. \n More...

    \n-
    #include <vector>
    \n-#include <bitset>
    \n-#include <iostream>
    \n-#include <algorithm>
    \n-#include <dune/common/boundschecking.hh>
    \n-#include <dune/common/genericiterator.hh>
    \n-#include <dune/common/exceptions.hh>
    \n+
    #include <list>
    \n+#include <utility>
    \n+#include <map>
    \n+#include <memory>
    \n+#include <dune/common/exceptions.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

    \n 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...
    class  Dune::lru< Key, Tp, Traits >
     LRU Cache Container. More...
     
    \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n

    Detailed Description

    \n-

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

    \n+

    LRU Cache Container, using an STL like interface.

    \n+
    Author
    Christian Engwer
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,29 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-bitsetvector.hh File Reference\n-Efficient implementation of a dynamic array of static arrays of booleans.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh>\n+lru.hh File Reference\n+LRU Cache Container, using an STL like interface. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n #include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>\n-\u00a0 A proxy class that acts as a const reference to a single bitset in a\n- _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>\n-\u00a0 A proxy class that acts as a mutable reference to a single bitset in a\n- _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>\n- _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc\n- _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b _\b>\n-\u00a0 A dynamic array of blocks of booleans. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b<_\b _\bK_\be_\by_\b,_\b _\bT_\bp_\b,_\b _\bT_\br_\ba_\bi_\bt_\bs_\b _\b>\n+\u00a0 LRU Cache Container. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Efficient implementation of a dynamic array of static arrays of booleans.\n+LRU Cache Container, using an STL like interface.\n+ Author\n+ Christian Engwer\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00038_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00038_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: bitsetvector.hh Source File\n+dune-common: lru.hh Source File\n \n \n \n \n \n \n \n@@ -74,759 +74,238 @@\n \n
    \n \n
    \n
    \n
    \n-
    bitsetvector.hh
    \n+
    lru.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_BLOCK_BITFIELD_HH
    \n-
    6#define DUNE_BLOCK_BITFIELD_HH
    \n+
    5#ifndef DUNE_COMMON_LRU_HH
    \n+
    6#define DUNE_COMMON_LRU_HH
    \n
    7
    \n-
    12#include <vector>
    \n-
    13#include <bitset>
    \n-
    14#include <iostream>
    \n-
    15#include <algorithm>
    \n-
    16
    \n-\n-\n-\n-
    20
    \n-
    21namespace Dune {
    \n-
    22
    \n-
    23 template <int block_size, class Alloc> class BitSetVector;
    \n-
    24 template <int block_size, class Alloc> class BitSetVectorReference;
    \n-
    25
    \n-
    36 template <int block_size, class Alloc>
    \n-
    \n-\n-
    38 {
    \n-
    39 protected:
    \n-
    40
    \n-\n-
    42 friend class Dune::BitSetVector<block_size, Alloc>;
    \n-
    43
    \n-
    \n-
    44 BitSetVectorConstReference(const BitSetVector& blockBitField_, int block_number_) :
    \n-
    45 blockBitField(blockBitField_),
    \n-
    46 block_number(block_number_)
    \n-
    47 {
    \n-
    48 DUNE_ASSERT_BOUNDS(blockBitField_.size() > static_cast<size_t>(block_number_));
    \n-
    49 }
    \n-
    \n-
    50
    \n-\n-
    53
    \n-
    54 public:
    \n-
    55
    \n-
    56 typedef std::bitset<block_size> bitset;
    \n-
    57
    \n-
    58 // bitset interface typedefs
    \n-
    59 typedef typename std::vector<bool, Alloc>::const_reference reference;
    \n-
    60 typedef typename std::vector<bool, Alloc>::const_reference const_reference;
    \n-
    61 typedef size_t size_type;
    \n-
    62
    \n-
    \n-\n-
    65 {
    \n-
    66 bitset b = *this;
    \n-
    67 b <<= n;
    \n-
    68 return b;
    \n-
    69 }
    \n-
    \n-
    70
    \n-
    \n-\n-
    73 {
    \n-
    74 bitset b = *this;
    \n-
    75 b >>= n;
    \n-
    76 return b;
    \n+
    8#include <list>
    \n+
    9#include <utility>
    \n+
    10#include <map>
    \n+
    11#include <memory>
    \n+
    12
    \n+\n+
    14
    \n+
    20namespace Dune {
    \n+
    21
    \n+
    22 namespace {
    \n+
    23
    \n+
    24 /*
    \n+
    25 hide the default traits in an empty namespace
    \n+
    26 */
    \n+
    27 template <typename Key, typename Tp,
    \n+
    28 typename Alloc = std::allocator<Tp> >
    \n+
    29 struct _lru_default_traits
    \n+
    30 {
    \n+
    31 typedef Key key_type;
    \n+
    32 typedef Alloc allocator;
    \n+
    33 typedef std::list< std::pair<Key, Tp> > list_type;
    \n+
    34 typedef typename list_type::iterator iterator;
    \n+
    35 typedef typename std::less<key_type> cmp;
    \n+
    36 typedef std::map< key_type, iterator, cmp,
    \n+
    37 typename std::allocator_traits<allocator>::template rebind_alloc<std::pair<const key_type, iterator> > > map_type;
    \n+
    38 };
    \n+
    39
    \n+
    40 } // end empty namespace
    \n+
    41
    \n+
    49 template <typename Key, typename Tp,
    \n+
    50 typename Traits = _lru_default_traits<Key, Tp> >
    \n+
    \n+
    51 class lru
    \n+
    52 {
    \n+
    53 typedef typename Traits::list_type list_type;
    \n+
    54 typedef typename Traits::map_type map_type;
    \n+
    55 typedef typename Traits::allocator allocator;
    \n+
    56 typedef typename map_type::iterator map_iterator;
    \n+
    57 typedef typename map_type::const_iterator const_map_iterator;
    \n+
    58
    \n+
    59 public:
    \n+
    60 typedef typename Traits::key_type key_type;
    \n+
    61 typedef typename allocator::value_type value_type;
    \n+
    62 using pointer = typename allocator::value_type*;
    \n+
    63 using const_pointer = typename allocator::value_type const*;
    \n+
    64 using const_reference = typename allocator::value_type const&;
    \n+
    65 using reference = typename allocator::value_type&;
    \n+
    66 typedef typename allocator::size_type size_type;
    \n+
    67 typedef typename list_type::iterator iterator;
    \n+
    68 typedef typename list_type::const_iterator const_iterator;
    \n+
    69
    \n+
    \n+\n+
    75 {
    \n+
    76 return _data.front().second;
    \n
    77 }
    \n
    \n
    78
    \n-
    \n-\n-
    81 {
    \n-
    82 bitset b = *this;
    \n-
    83 b.flip();
    \n-
    84 return b;
    \n-
    85 }
    \n-
    \n-
    86
    \n-
    \n-\n-
    89 {
    \n-
    90 return block_size;
    \n-
    91 }
    \n-
    \n-
    92
    \n-
    \n-\n-
    95 {
    \n-
    96 size_type n = 0;
    \n-
    97 for(size_type i=0; i<block_size; ++i)
    \n-
    98 n += getBit(i);
    \n-
    99 return n;
    \n-
    100 }
    \n-
    \n-
    101
    \n-
    \n-
    103 bool any() const
    \n-
    104 {
    \n-
    105 return count();
    \n-
    106 }
    \n-
    \n-
    107
    \n-
    \n-
    109 bool none() const
    \n-
    110 {
    \n-
    111 return ! any();
    \n-
    112 }
    \n-
    \n-
    113
    \n-
    \n-
    115 bool all() const
    \n-
    116 {
    \n-
    117 for(size_type i=0; i<block_size; ++i)
    \n-
    118 if(not test(i))
    \n-
    119 return false;
    \n-
    120 return true;
    \n-
    121 }
    \n-
    \n-
    122
    \n-
    \n-
    124 bool test(size_type n) const
    \n-
    125 {
    \n-
    126 return getBit(n);
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    \n-\n-
    131 {
    \n-
    132 return getBit(i);
    \n-
    133 }
    \n-
    \n-
    134
    \n-
    \n-
    136 operator bitset() const
    \n-
    137 {
    \n-
    138 return blockBitField.getRepr(block_number);
    \n-
    139 }
    \n-
    \n-
    140
    \n-
    \n-
    142 bool operator== (const bitset& bs) const
    \n-
    143 {
    \n-
    144 return equals(bs);
    \n-
    145 }
    \n-
    \n-
    146
    \n-
    \n-\n-
    149 {
    \n-
    150 return equals(bs);
    \n-
    151 }
    \n-
    \n-
    152
    \n-
    \n-
    154 bool operator!= (const bitset& bs) const
    \n-
    155 {
    \n-
    156 return ! equals(bs);
    \n-
    157 }
    \n-
    \n-
    158
    \n-
    \n-\n-
    161 {
    \n-
    162 return ! equals(bs);
    \n-
    163 }
    \n-
    \n-
    164
    \n-
    \n-
    171 friend std::ostream& operator<< (std::ostream& s, const BitSetVectorConstReference& v)
    \n-
    172 {
    \n-
    173 s << "(";
    \n-
    174 for(int i=0; i<block_size; ++i)
    \n-
    175 s << v[i];
    \n-
    176 s << ")";
    \n-
    177 return s;
    \n+
    \n+\n+
    84 {
    \n+
    85 return _data.front().second;
    \n+
    86 }
    \n+
    \n+
    87
    \n+
    \n+\n+
    93 {
    \n+
    94 return _data.back().second;
    \n+
    95 }
    \n+
    \n+
    96
    \n+
    \n+
    101 const_reference back ([[maybe_unused]] int i) const
    \n+
    102 {
    \n+
    103 return _data.back().second;
    \n+
    104 }
    \n+
    \n+
    105
    \n+
    106
    \n+
    \n+\n+
    111 {
    \n+
    112 key_type k = _data.front().first;
    \n+
    113 _data.pop_front();
    \n+
    114 _index.erase(k);
    \n+
    115 }
    \n+
    \n+
    \n+
    119 void pop_back()
    \n+
    120 {
    \n+
    121 key_type k = _data.back().first;
    \n+
    122 _data.pop_back();
    \n+
    123 _index.erase(k);
    \n+
    124 }
    \n+
    \n+
    125
    \n+
    \n+
    131 iterator find (const key_type & key)
    \n+
    132 {
    \n+
    133 const map_iterator it = _index.find(key);
    \n+
    134 if (it == _index.end()) return _data.end();
    \n+
    135 return it->second;
    \n+
    136 }
    \n+
    \n+
    137
    \n+
    \n+
    143 const_iterator find (const key_type & key) const
    \n+
    144 {
    \n+
    145 const map_iterator it = _index.find(key);
    \n+
    146 if (it == _index.end()) return _data.end();
    \n+
    147 return it->second;
    \n+
    148 }
    \n+
    \n+
    149
    \n+
    \n+\n+
    162 {
    \n+
    163 std::pair<key_type, value_type> x(key, data);
    \n+
    164 /* insert item as mru */
    \n+
    165 iterator it = _data.insert(_data.begin(), x);
    \n+
    166 /* store index */
    \n+
    167 _index.insert(std::make_pair(key,it));
    \n+
    168
    \n+
    169 return it->second;
    \n+
    170 }
    \n+
    \n+
    171
    \n+
    \n+\n+
    176 {
    \n+
    177 return touch (key);
    \n
    178 }
    \n
    \n
    179
    \n-
    180 protected:
    \n-\n-\n-
    183
    \n-
    \n-\n-
    185 {
    \n-
    186 return blockBitField.getBit(block_number,i);
    \n-
    187 }
    \n-
    \n-
    188
    \n-
    189 template<class BS>
    \n-
    \n-
    190 bool equals(const BS & bs) const
    \n-
    191 {
    \n-
    192 bool eq = true;
    \n-
    193 for(int i=0; i<block_size; ++i)
    \n-
    194 eq &= (getBit(i) == bs[i]);
    \n-
    195 return eq;
    \n-
    196 }
    \n-
    \n-
    197
    \n-
    198 private:
    \n-
    203 void operator & () = delete;
    \n-
    204
    \n-
    205 friend class BitSetVectorReference<block_size, Alloc>;
    \n-
    206 };
    \n-
    \n-
    207
    \n-
    220 template <int block_size, class Alloc>
    \n-
    \n-
    221 class BitSetVectorReference : public BitSetVectorConstReference<block_size,Alloc>
    \n-
    222 {
    \n-
    223 protected:
    \n-
    224
    \n-\n-
    226 friend class Dune::BitSetVector<block_size, Alloc>;
    \n-
    227
    \n-\n+
    \n+\n+
    186 {
    \n+
    187 /* query _index for iterator */
    \n+
    188 map_iterator it = _index.find(key);
    \n+
    189 if (it == _index.end())
    \n+\n+
    191 "Failed to touch key " << key << ", it is not in the lru container");
    \n+
    192 /* update _data
    \n+
    193 move it to the front
    \n+
    194 */
    \n+
    195 _data.splice(_data.begin(), _data, it->second);
    \n+
    196 return it->second->second;
    \n+
    197 }
    \n+
    \n+
    198
    \n+
    \n+\n+
    203 {
    \n+
    204 return _data.size();
    \n+
    205 }
    \n+
    \n+
    206
    \n+
    \n+
    213 void resize(size_type new_size)
    \n+
    214 {
    \n+
    215 assert(new_size <= size());
    \n+
    216
    \n+
    217 while (new_size < size())
    \n+
    218 pop_back();
    \n+
    219 }
    \n+
    \n+
    220
    \n+
    \n+
    224 void clear()
    \n+
    225 {
    \n+
    226 _data.clear();
    \n+
    227 _index.clear();
    \n+
    228 }
    \n+
    \n
    229
    \n-
    \n-
    230 BitSetVectorReference(BitSetVector& blockBitField_, int block_number_) :
    \n-
    231 BitSetVectorConstReference(blockBitField_, block_number_),
    \n-
    232 blockBitField(blockBitField_)
    \n-
    233 {}
    \n-
    \n-
    234
    \n-
    235 public:
    \n-
    236 typedef std::bitset<block_size> bitset;
    \n+
    230 private:
    \n+
    231 list_type _data;
    \n+
    232 map_type _index;
    \n+
    233
    \n+
    234 };
    \n+
    \n+
    235
    \n+
    236} // namespace Dune
    \n
    237
    \n-
    241 typedef typename std::vector<bool, Alloc>::reference reference;
    \n-
    243 typedef typename std::vector<bool, Alloc>::const_reference const_reference;
    \n-
    245
    \n-
    247 typedef size_t size_type;
    \n-
    248
    \n-
    \n-\n-
    251 {
    \n-
    252 for(int i=0; i<block_size; ++i)
    \n-
    253 getBit(i) = b;
    \n-
    254 return (*this);
    \n-
    255 }
    \n-
    \n-
    256
    \n-
    \n-\n-
    259 {
    \n-
    260 for(int i=0; i<block_size; ++i)
    \n-
    261 getBit(i) = b.test(i);
    \n-
    262 return (*this);
    \n-
    263 }
    \n-
    \n-
    264
    \n-
    \n-\n-
    267 {
    \n-
    268 for(int i=0; i<block_size; ++i)
    \n-
    269 getBit(i) = b.test(i);
    \n-
    270 return (*this);
    \n-
    271 }
    \n-
    \n-
    272
    \n-
    \n-\n-
    275 {
    \n-
    276 for(int i=0; i<block_size; ++i)
    \n-
    277 getBit(i) = b.test(i);
    \n-
    278 return (*this);
    \n-
    279 }
    \n-
    \n-
    280
    \n-
    \n-\n-
    283 {
    \n-
    284 for (size_type i=0; i<block_size; i++)
    \n-
    285 getBit(i) = (test(i) & x.test(i));
    \n-
    286 return *this;
    \n-
    287 }
    \n-
    \n-
    288
    \n-
    \n-\n-
    291 {
    \n-
    292 for (size_type i=0; i<block_size; i++)
    \n-
    293 getBit(i) = (test(i) & x.test(i));
    \n-
    294 return *this;
    \n-
    295 }
    \n-
    \n-
    296
    \n-
    \n-\n-
    299 {
    \n-
    300 for (size_type i=0; i<block_size; i++)
    \n-
    301 getBit(i) = (test(i) | x.test(i));
    \n-
    302 return *this;
    \n-
    303 }
    \n-
    \n-
    304
    \n-
    \n-\n-
    307 {
    \n-
    308 for (size_type i=0; i<block_size; i++)
    \n-
    309 getBit(i) = (test(i) | x.test(i));
    \n-
    310 return *this;
    \n-
    311 }
    \n-
    \n-
    312
    \n-
    \n-\n-
    315 {
    \n-
    316 for (size_type i=0; i<block_size; i++)
    \n-
    317 getBit(i) = (test(i) ^ x.test(i));
    \n-
    318 return *this;
    \n-
    319 }
    \n-
    \n-
    320
    \n-
    \n-\n-
    323 {
    \n-
    324 for (size_type i=0; i<block_size; i++)
    \n-
    325 getBit(i) = (test(i) ^ x.test(i));
    \n-
    326 return *this;
    \n-
    327 }
    \n-
    \n-
    328
    \n-
    \n-\n-
    331 {
    \n-
    332 for (size_type i=0; i<block_size-n; i++)
    \n-
    333 getBit(i) = test(i+n);
    \n-
    334 return *this;
    \n-
    335 }
    \n-
    \n-
    336
    \n-
    \n-\n-
    339 {
    \n-
    340 for (size_type i=0; i<block_size-n; i++)
    \n-
    341 getBit(i+n) = test(i);
    \n-
    342 return *this;
    \n-
    343 }
    \n-
    \n-
    344
    \n-
    \n-\n-
    347 {
    \n-
    348 for (size_type i=0; i<block_size; i++)
    \n-
    349 set(i);
    \n-
    350 return *this;
    \n-
    351 }
    \n-
    \n-
    352
    \n-
    \n-\n-
    355 {
    \n-
    356 for (size_type i=0; i<block_size; i++)
    \n-
    357 flip(i);
    \n-
    358 return *this;
    \n-
    359 }
    \n-
    \n-
    360
    \n-
    \n-\n-
    363 {
    \n-
    364 *this = false;
    \n-
    365 return *this;
    \n-
    366 }
    \n-
    \n-
    367
    \n-
    \n-\n-
    370 {
    \n-
    371 getBit(n) = val;
    \n-
    372 return *this;
    \n-
    373 }
    \n-
    \n-
    374
    \n-
    \n-\n-
    377 {
    \n-
    378 set(n, false);
    \n-
    379 return *this;
    \n-
    380 }
    \n-
    \n-
    381
    \n-
    \n-\n-
    384 {
    \n-
    385 getBit(n).flip();
    \n-
    386 return *this;
    \n-
    387 }
    \n-
    \n-
    388
    \n-\n-
    390 using BitSetVectorConstReference::operator[];
    \n-
    391
    \n-
    \n-\n-
    394 {
    \n-
    395 return getBit(i);
    \n-
    396 }
    \n-
    \n-
    397
    \n-
    398 protected:
    \n-\n-
    400
    \n-\n-
    402
    \n-
    \n-\n-
    404 {
    \n-
    405 return blockBitField.getBit(this->block_number,i);
    \n-
    406 }
    \n-
    \n-
    407 };
    \n-
    \n-
    408
    \n-
    412 template<int block_size, class Alloc>
    \n-
    \n-
    413 struct const_reference< BitSetVectorReference<block_size,Alloc> >
    \n-
    414 {
    \n-\n-
    416 };
    \n-
    \n-
    417
    \n-
    418 template<int block_size, class Alloc>
    \n-
    \n-
    419 struct const_reference< BitSetVectorConstReference<block_size,Alloc> >
    \n-
    420 {
    \n-\n-
    422 };
    \n-
    \n-
    423
    \n-
    424 template<int block_size, class Alloc>
    \n-
    \n-
    425 struct mutable_reference< BitSetVectorReference<block_size,Alloc> >
    \n-
    426 {
    \n-\n-
    428 };
    \n-
    \n-
    429
    \n-
    430 template<int block_size, class Alloc>
    \n-
    \n-\n-
    432 {
    \n-\n-
    434 };
    \n-
    \n-
    435
    \n-
    439 template <int block_size, class Allocator=std::allocator<bool> >
    \n-
    \n-
    440 class BitSetVector : private std::vector<bool, Allocator>
    \n-
    441 {
    \n-
    443 typedef std::vector<bool, Allocator> BlocklessBaseClass;
    \n-
    444
    \n-
    445 public:
    \n-
    448
    \n-
    450 typedef std::bitset<block_size> value_type;
    \n-
    451
    \n-\n-
    454
    \n-\n-
    457
    \n-\n-
    460
    \n-\n-
    463
    \n-
    465 typedef typename std::vector<bool, Allocator>::size_type size_type;
    \n-
    466
    \n-
    468 typedef Allocator allocator_type;
    \n-
    470
    \n-\n-\n-
    476
    \n-
    \n-\n-
    479 return iterator(*this, 0);
    \n-
    480 }
    \n-
    \n-
    481
    \n-
    \n-\n-
    484 return const_iterator(*this, 0);
    \n-
    485 }
    \n-
    \n-
    486
    \n-
    \n-\n-
    489 return iterator(*this, size());
    \n-
    490 }
    \n-
    \n-
    491
    \n-
    \n-\n-
    494 return const_iterator(*this, size());
    \n-
    495 }
    \n-
    \n-
    496
    \n-
    \n-\n-
    499 BlocklessBaseClass()
    \n-
    500 {}
    \n-
    \n-
    501
    \n-
    \n-
    503 BitSetVector(const BlocklessBaseClass& blocklessBitField) :
    \n-
    504 BlocklessBaseClass(blocklessBitField)
    \n-
    505 {
    \n-
    506 if (blocklessBitField.size()%block_size != 0)
    \n-
    507 DUNE_THROW(RangeError, "Vector size is not a multiple of the block size!");
    \n-
    508 }
    \n-
    \n-
    509
    \n-
    \n-
    513 explicit BitSetVector(int n) :
    \n-
    514 BlocklessBaseClass(n*block_size)
    \n-
    515 {}
    \n-
    \n-
    516
    \n-
    \n-
    518 BitSetVector(int n, bool v) :
    \n-
    519 BlocklessBaseClass(n*block_size,v)
    \n-
    520 {}
    \n-
    \n-
    521
    \n-
    \n-
    523 void clear()
    \n-
    524 {
    \n-
    525 BlocklessBaseClass::clear();
    \n-
    526 }
    \n-
    \n-
    527
    \n-
    \n-
    529 void resize(int n, bool v = bool())
    \n-
    530 {
    \n-
    531 BlocklessBaseClass::resize(n*block_size, v);
    \n-
    532 }
    \n-
    \n-
    533
    \n-
    \n-\n-
    536 {
    \n-
    537 return BlocklessBaseClass::size()/block_size;
    \n-
    538 }
    \n-
    \n-
    539
    \n-
    \n-
    541 void setAll() {
    \n-
    542 this->assign(BlocklessBaseClass::size(), true);
    \n-
    543 }
    \n-
    \n-
    544
    \n-
    \n-
    546 void unsetAll() {
    \n-
    547 this->assign(BlocklessBaseClass::size(), false);
    \n-
    548 }
    \n-
    \n-
    549
    \n-
    \n-\n-
    552 {
    \n-
    553 return reference(*this, i);
    \n-
    554 }
    \n-
    \n-
    555
    \n-
    \n-\n-
    558 {
    \n-
    559 return const_reference(*this, i);
    \n-
    560 }
    \n-
    \n-
    561
    \n-
    \n-\n-
    564 {
    \n-
    565 return reference(*this, size()-1);
    \n-
    566 }
    \n-
    \n-
    567
    \n-
    \n-\n-
    570 {
    \n-
    571 return const_reference(*this, size()-1);
    \n-
    572 }
    \n-
    \n-
    573
    \n-
    \n-\n-
    576 {
    \n-
    577 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(), true);
    \n-
    578 }
    \n-
    \n-
    579
    \n-
    \n-\n-
    582 {
    \n-
    583 size_type n = 0;
    \n-
    584 size_type blocks = size();
    \n-
    585 for(size_type i=0; i<blocks; ++i)
    \n-
    586 n += getBit(i,j);
    \n-
    587 return n;
    \n-
    588 }
    \n-
    \n-
    589
    \n-
    \n-
    591 friend std::ostream& operator<< (std::ostream& s, const BitSetVector& v)
    \n-
    592 {
    \n-
    593 for (size_t i=0; i<v.size(); i++)
    \n-
    594 s << v[i] << " ";
    \n-
    595 return s;
    \n-
    596 }
    \n-
    \n-
    597
    \n-
    598 private:
    \n-
    599
    \n-
    601 value_type getRepr(int i) const
    \n-
    602 {
    \n-
    603 value_type bits;
    \n-
    604 for(int j=0; j<block_size; ++j)
    \n-
    605 bits.set(j, getBit(i,j));
    \n-
    606 return bits;
    \n-
    607 }
    \n-
    608
    \n-
    609 typename std::vector<bool>::reference getBit(size_type i, size_type j) {
    \n-
    610 DUNE_ASSERT_BOUNDS(j < block_size);
    \n-\n-
    612 return BlocklessBaseClass::operator[](i*block_size+j);
    \n-
    613 }
    \n-
    614
    \n-
    615 typename std::vector<bool>::const_reference getBit(size_type i, size_type j) const {
    \n-
    616 DUNE_ASSERT_BOUNDS(j < block_size);
    \n-\n-
    618 return BlocklessBaseClass::operator[](i*block_size+j);
    \n-
    619 }
    \n-
    620
    \n-
    621 friend class BitSetVectorReference<block_size,Allocator>;
    \n-
    622 friend class BitSetVectorConstReference<block_size,Allocator>;
    \n-
    623 };
    \n-
    \n-
    624
    \n-
    625} // namespace Dune
    \n-
    626
    \n-
    627#endif
    \n-
    Macro for wrapping boundary checks.
    \n-
    Implements a generic iterator class for writing stl conformant iterators.
    \n-
    A few common exception classes.
    \n-
    #define DUNE_ASSERT_BOUNDS(cond)
    If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
    Definition boundschecking.hh:30
    \n+
    238#endif // DUNE_COMMON_LRU_HH
    \n+
    A few common exception classes.
    \n
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    void assign(T &dst, const T &src, bool mask)
    masked Simd assignment (scalar version)
    Definition simd.hh:447
    \n-
    A dynamic array of blocks of booleans.
    Definition bitsetvector.hh:441
    \n-
    const_reference operator[](int i) const
    Return const reference to i-th block.
    Definition bitsetvector.hh:557
    \n-
    iterator begin()
    Returns a iterator pointing to the beginning of the vector.
    Definition bitsetvector.hh:478
    \n-
    BitSetVectorConstReference< block_size, Allocator > * const_pointer
    Const pointer to a small block of bits.
    Definition bitsetvector.hh:462
    \n-
    const_iterator end() const
    Returns a const_iterator pointing to the end of the vector.
    Definition bitsetvector.hh:493
    \n-
    BitSetVectorReference< block_size, Allocator > reference
    Reference to a small block of bits.
    Definition bitsetvector.hh:453
    \n-
    size_type countmasked(int j) const
    Returns the number of set bits, while each block is masked with 1<<i.
    Definition bitsetvector.hh:581
    \n-
    BitSetVectorConstReference< block_size, Allocator > const_reference
    Const reference to a small block of bits.
    Definition bitsetvector.hh:456
    \n-
    iterator end()
    Returns an iterator pointing to the end of the vector.
    Definition bitsetvector.hh:488
    \n-
    size_type count() const
    Returns the number of bits that are set.
    Definition bitsetvector.hh:575
    \n-
    BitSetVector()
    Default constructor.
    Definition bitsetvector.hh:498
    \n-
    void setAll()
    Sets all entries to true
    Definition bitsetvector.hh:541
    \n-
    Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade > const_iterator
    Definition bitsetvector.hh:474
    \n-
    std::bitset< block_size > value_type
    Type of the values stored by the container.
    Definition bitsetvector.hh:450
    \n-
    reference back()
    Return reference to last block.
    Definition bitsetvector.hh:563
    \n-
    BitSetVector(const BlocklessBaseClass &blocklessBitField)
    Construction from an unblocked bitfield.
    Definition bitsetvector.hh:503
    \n-
    friend std::ostream & operator<<(std::ostream &s, const BitSetVector &v)
    Send bitfield to an output stream.
    Definition bitsetvector.hh:591
    \n-
    const_reference back() const
    Return const reference to last block.
    Definition bitsetvector.hh:569
    \n-
    void clear()
    Erases all of the elements.
    Definition bitsetvector.hh:523
    \n-
    BitSetVectorReference< block_size, Allocator > * pointer
    Pointer to a small block of bits.
    Definition bitsetvector.hh:459
    \n-
    reference operator[](int i)
    Return reference to i-th block.
    Definition bitsetvector.hh:551
    \n-
    size_type size() const
    Return the number of blocks.
    Definition bitsetvector.hh:535
    \n-
    std::vector< bool, Allocator >::size_type size_type
    size type
    Definition bitsetvector.hh:465
    \n-
    BitSetVector(int n, bool v)
    Constructor which initializes the field with true or false.
    Definition bitsetvector.hh:518
    \n-
    const_iterator begin() const
    Returns a const_iterator pointing to the beginning of the vector.
    Definition bitsetvector.hh:483
    \n-
    Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type, reference, std::ptrdiff_t, ForwardIteratorFacade > iterator
    Definition bitsetvector.hh:473
    \n-
    void resize(int n, bool v=bool())
    Resize field.
    Definition bitsetvector.hh:529
    \n-
    Allocator allocator_type
    The type of the allocator.
    Definition bitsetvector.hh:468
    \n-
    BitSetVector(int n)
    Definition bitsetvector.hh:513
    \n-
    void unsetAll()
    Sets all entries to false
    Definition bitsetvector.hh:546
    \n-
    A proxy class that acts as a mutable reference to a single bitset in a BitSetVector.
    Definition bitsetvector.hh:222
    \n-
    bool test(size_type n) const
    Returns true if bit n is set.
    Definition bitsetvector.hh:124
    \n-
    BitSetVectorReference & operator=(const BitSetVectorConstReference &b)
    Assignment from BitSetVectorConstReference.
    Definition bitsetvector.hh:266
    \n-
    reference operator[](size_type i)
    Return reference to the i-th bit.
    Definition bitsetvector.hh:393
    \n-
    BitSetVectorReference & reset(size_type n)
    Clears bit n.
    Definition bitsetvector.hh:376
    \n-
    BitSetVectorReference & operator<<=(size_type n)
    Left shift.
    Definition bitsetvector.hh:330
    \n-
    Dune::BitSetVector< block_size, Alloc > BitSetVector
    Definition bitsetvector.hh:225
    \n-
    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
    \n-
    BitSetVectorReference & operator=(const BitSetVectorReference &b)
    Assignment from BitSetVectorReference.
    Definition bitsetvector.hh:274
    \n-
    reference getBit(size_type i)
    Definition bitsetvector.hh:403
    \n-
    BitSetVectorReference & operator&=(const BitSetVectorConstReference &x)
    Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)
    Definition bitsetvector.hh:290
    \n-
    BitSetVectorReference(BitSetVector &blockBitField_, int block_number_)
    Definition bitsetvector.hh:230
    \n-
    size_t size_type
    size_type typedef (an unsigned integral type)
    Definition bitsetvector.hh:247
    \n-
    BitSetVectorReference & operator=(const bitset &b)
    Assignment from bitset.
    Definition bitsetvector.hh:258
    \n-
    Dune::BitSetVectorConstReference< block_size, Alloc > BitSetVectorConstReference
    Definition bitsetvector.hh:228
    \n-
    BitSetVectorReference & reset()
    Clears every bit.
    Definition bitsetvector.hh:362
    \n-
    BitSetVector & blockBitField
    Definition bitsetvector.hh:399
    \n-
    BitSetVectorReference & operator|=(const BitSetVectorConstReference &x)
    Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)
    Definition bitsetvector.hh:306
    \n-
    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
    \n-
    std::bitset< block_size > bitset
    Definition bitsetvector.hh:236
    \n-
    BitSetVectorReference & operator^=(const bitset &x)
    Bitwise exclusive or (for bitset).
    Definition bitsetvector.hh:314
    \n-
    std::vector< bool, Alloc >::reference reference
    Definition bitsetvector.hh:241
    \n-
    BitSetVectorReference & operator|=(const bitset &x)
    Bitwise inclusive or (for bitset)
    Definition bitsetvector.hh:298
    \n-
    BitSetVectorReference & operator>>=(size_type n)
    Right shift.
    Definition bitsetvector.hh:338
    \n-
    BitSetVectorReference & operator^=(const BitSetVectorConstReference &x)
    Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)
    Definition bitsetvector.hh:322
    \n-
    BitSetVectorReference & flip(size_type n)
    Flips bit n.
    Definition bitsetvector.hh:383
    \n-
    BitSetVectorReference & flip()
    Flips the value of every bit.
    Definition bitsetvector.hh:354
    \n-
    BitSetVectorReference & set()
    Sets every bit.
    Definition bitsetvector.hh:346
    \n-
    BitSetVectorReference & operator&=(const bitset &x)
    Bitwise and (for bitset).
    Definition bitsetvector.hh:282
    \n-
    BitSetVectorReference & operator=(bool b)
    Assignment from bool, sets each bit in the bitset to b.
    Definition bitsetvector.hh:250
    \n-
    A proxy class that acts as a const reference to a single bitset in a BitSetVector.
    Definition bitsetvector.hh:38
    \n-
    bool operator==(const bitset &bs) const
    Equality of reference and std::bitset.
    Definition bitsetvector.hh:142
    \n-
    bool test(size_type n) const
    Returns true if bit n is set.
    Definition bitsetvector.hh:124
    \n-
    const_reference operator[](size_type i) const
    Return reference to the i-th bit.
    Definition bitsetvector.hh:130
    \n-
    bitset operator<<(size_type n) const
    Returns a copy of *this shifted left by n bits.
    Definition bitsetvector.hh:64
    \n-
    BitSetVectorConstReference(const BitSetVector &blockBitField_, int block_number_)
    Definition bitsetvector.hh:44
    \n-
    const BitSetVector & blockBitField
    Definition bitsetvector.hh:181
    \n-
    bitset operator>>(size_type n) const
    Returns a copy of *this shifted right by n bits.
    Definition bitsetvector.hh:72
    \n-
    const_reference getBit(size_type i) const
    Definition bitsetvector.hh:184
    \n-
    bool operator!=(const bitset &bs) const
    Inequality of reference and std::bitset.
    Definition bitsetvector.hh:154
    \n-
    bool equals(const BS &bs) const
    Definition bitsetvector.hh:190
    \n-
    Dune::BitSetVector< block_size, Alloc > BitSetVector
    Definition bitsetvector.hh:41
    \n-
    std::bitset< block_size > bitset
    Definition bitsetvector.hh:56
    \n-
    bool all() const
    Returns true if all bits are set.
    Definition bitsetvector.hh:115
    \n-
    size_t size_type
    Definition bitsetvector.hh:61
    \n-
    bitset operator~() const
    Returns a copy of *this with all of its bits flipped.
    Definition bitsetvector.hh:80
    \n-
    std::vector< bool, Alloc >::const_reference reference
    Definition bitsetvector.hh:59
    \n-
    size_type size() const
    Returns block_size.
    Definition bitsetvector.hh:88
    \n-
    size_type count() const
    Returns the number of bits that are set.
    Definition bitsetvector.hh:94
    \n-
    bool none() const
    Returns true if no bits are set.
    Definition bitsetvector.hh:109
    \n-
    bool any() const
    Returns true if any bits are set.
    Definition bitsetvector.hh:103
    \n-
    int block_number
    Definition bitsetvector.hh:182
    \n-
    std::vector< bool, Alloc >::const_reference const_reference
    Definition bitsetvector.hh:60
    \n-
    BitSetVectorConstReference & operator=(const BitSetVectorConstReference &b)=delete
    disable assignment operator
    \n-
    friend std::ostream & operator<<(std::ostream &s, const BitSetVectorConstReference &v)
    Definition bitsetvector.hh:171
    \n-
    BitSetVectorConstReference< block_size, Alloc > type
    Definition bitsetvector.hh:415
    \n-
    BitSetVectorConstReference< block_size, Alloc > type
    Definition bitsetvector.hh:421
    \n-
    BitSetVectorReference< block_size, Alloc > type
    Definition bitsetvector.hh:427
    \n-
    BitSetVectorReference< block_size, Alloc > type
    Definition bitsetvector.hh:433
    \n
    Default exception class for range errors.
    Definition exceptions.hh:254
    \n-
    Get the 'const' version of a reference to a mutable object.
    Definition genericiterator.hh:87
    \n-
    get the 'mutable' version of a reference to a const object
    Definition genericiterator.hh:116
    \n-
    Generic class for stl-conforming iterators for container classes with operator[].
    Definition genericiterator.hh:153
    \n-
    Base class for stl conformant forward iterators.
    Definition iteratorfacades.hh:142
    \n+
    LRU Cache Container.
    Definition lru.hh:52
    \n+
    void pop_back()
    Removes the last element.
    Definition lru.hh:119
    \n+
    iterator find(const key_type &key)
    Finds the element whose key is k.
    Definition lru.hh:131
    \n+
    reference insert(const key_type &key)
    mark data associated with key as most recent
    Definition lru.hh:175
    \n+
    list_type::const_iterator const_iterator
    Definition lru.hh:68
    \n+
    void resize(size_type new_size)
    ensure a maximum size of the container
    Definition lru.hh:213
    \n+
    allocator::size_type size_type
    Definition lru.hh:66
    \n+
    list_type::iterator iterator
    Definition lru.hh:67
    \n+
    allocator::value_type value_type
    Definition lru.hh:61
    \n+
    const_reference front() const
    Definition lru.hh:83
    \n+
    typename allocator::value_type const * const_pointer
    Definition lru.hh:63
    \n+
    size_type size() const
    Retrieve number of entries in the container.
    Definition lru.hh:202
    \n+
    typename allocator::value_type & reference
    Definition lru.hh:65
    \n+
    reference back()
    Definition lru.hh:92
    \n+
    void pop_front()
    Removes the first element.
    Definition lru.hh:110
    \n+
    reference front()
    Definition lru.hh:74
    \n+
    void clear()
    Definition lru.hh:224
    \n+
    reference touch(const key_type &key)
    mark data associated with key as most recent
    Definition lru.hh:185
    \n+
    reference insert(const key_type &key, const_reference data)
    Insert a value into the container.
    Definition lru.hh:161
    \n+
    typename allocator::value_type * pointer
    Definition lru.hh:62
    \n+
    const_iterator find(const key_type &key) const
    Finds the element whose key is k.
    Definition lru.hh:143
    \n+
    typename allocator::value_type const & const_reference
    Definition lru.hh:64
    \n+
    Traits::key_type key_type
    Definition lru.hh:60
    \n+
    const_reference back(int i) const
    Definition lru.hh:101
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,903 +1,267 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-bitsetvector.hh\n+lru.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_BLOCK_BITFIELD_HH\n-6#define DUNE_BLOCK_BITFIELD_HH\n+5#ifndef DUNE_COMMON_LRU_HH\n+6#define DUNE_COMMON_LRU_HH\n 7\n-12#include \n-13#include \n-14#include \n-15#include \n-16\n-17#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n-18#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh>\n-19#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n-20\n-21namespace _\bD_\bu_\bn_\be {\n-22\n-23 template class BitSetVector;\n-24 template class BitSetVectorReference;\n-25\n-36 template \n-_\b3_\b7 class _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-38 {\n-39 protected:\n-40\n-_\b4_\b1 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b> _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br;\n-42 friend class _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br;\n-43\n-_\b4_\b4 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(const _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br& blockBitField_, int\n-block_number_) :\n-45 _\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd(blockBitField_),\n-46 _\bb_\bl_\bo_\bc_\bk_\b__\bn_\bu_\bm_\bb_\be_\br(block_number_)\n-47 {\n-48 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(blockBitField_._\bs_\bi_\bz_\be() > static_cast\n-(block_number_));\n-49 }\n-50\n-_\b5_\b2 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be & b)\n-= delete;\n-53\n-54 public:\n-55\n-_\b5_\b6 typedef std::bitset _\bb_\bi_\bt_\bs_\be_\bt;\n-57\n-58 // bitset interface typedefs\n-_\b5_\b9 typedef typename std::vector::const_reference _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b0 typedef typename std::vector::const_reference _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b6_\b1 typedef size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-62\n-_\b6_\b4 _\bb_\bi_\bt_\bs_\be_\bt _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) const\n-65 {\n-66 _\bb_\bi_\bt_\bs_\be_\bt b = *this;\n-67 b <<= n;\n-68 return b;\n-69 }\n-70\n-_\b7_\b2 _\bb_\bi_\bt_\bs_\be_\bt _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n) const\n-73 {\n-74 _\bb_\bi_\bt_\bs_\be_\bt b = *this;\n-75 b >>= n;\n-76 return b;\n+8#include \n+9#include \n+10#include \n+11#include \n+12\n+13#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+14\n+20namespace _\bD_\bu_\bn_\be {\n+21\n+22 namespace {\n+23\n+24 /*\n+25 hide the default traits in an empty namespace\n+26 */\n+27 template >\n+29 struct _lru_default_traits\n+30 {\n+31 typedef Key key_type;\n+32 typedef Alloc allocator;\n+33 typedef std::list< std::pair > list_type;\n+34 typedef typename list_type::iterator iterator;\n+35 typedef typename std::less cmp;\n+36 typedef std::map< key_type, iterator, cmp,\n+37 typename std::allocator_traits::template rebind_alloc > > map_type;\n+38 };\n+39\n+40 } // end empty namespace\n+41\n+49 template >\n+_\b5_\b1 class _\bl_\br_\bu\n+52 {\n+53 typedef typename Traits::list_type list_type;\n+54 typedef typename Traits::map_type map_type;\n+55 typedef typename Traits::allocator allocator;\n+56 typedef typename map_type::iterator map_iterator;\n+57 typedef typename map_type::const_iterator const_map_iterator;\n+58\n+59 public:\n+_\b6_\b0 typedef typename Traits::key_type _\bk_\be_\by_\b__\bt_\by_\bp_\be;\n+_\b6_\b1 typedef typename allocator::value_type _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b2 using _\bp_\bo_\bi_\bn_\bt_\be_\br = typename allocator::value_type*;\n+_\b6_\b3 using _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br = typename allocator::value_type const*;\n+_\b6_\b4 using _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = typename allocator::value_type const&;\n+_\b6_\b5 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = typename allocator::value_type&;\n+_\b6_\b6 typedef typename allocator::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+_\b6_\b7 typedef typename list_type::iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b6_\b8 typedef typename list_type::const_iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+69\n+_\b7_\b4 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bf_\br_\bo_\bn_\bt()\n+75 {\n+76 return _data.front().second;\n 77 }\n 78\n-_\b8_\b0 _\bb_\bi_\bt_\bs_\be_\bt _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b~() const\n-81 {\n-82 _\bb_\bi_\bt_\bs_\be_\bt b = *this;\n-83 b.flip();\n-84 return b;\n-85 }\n-86\n-_\b8_\b8 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-89 {\n-90 return block_size;\n-91 }\n-92\n-_\b9_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bu_\bn_\bt() const\n-95 {\n-96 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n = 0;\n-97 for(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; isecond;\n+136 }\n+137\n+_\b1_\b4_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd (const _\bk_\be_\by_\b__\bt_\by_\bp_\be & key) const\n+144 {\n+145 const map_iterator it = _index.find(key);\n+146 if (it == _index.end()) return _data.end();\n+147 return it->second;\n+148 }\n+149\n+_\b1_\b6_\b1 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bi_\bn_\bs_\be_\br_\bt (const _\bk_\be_\by_\b__\bt_\by_\bp_\be & key, _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be data)\n+162 {\n+163 std::pair x(key, data);\n+164 /* insert item as mru */\n+165 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br it = _data.insert(_data.begin(), x);\n+166 /* store index */\n+167 _index.insert(std::make_pair(key,it));\n+168\n+169 return it->second;\n+170 }\n+171\n+_\b1_\b7_\b5 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bi_\bn_\bs_\be_\br_\bt (const _\bk_\be_\by_\b__\bt_\by_\bp_\be & key)\n+176 {\n+177 return _\bt_\bo_\bu_\bc_\bh (key);\n 178 }\n 179\n-180 protected:\n-_\b1_\b8_\b1 const _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br& _\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd;\n-_\b1_\b8_\b2 int _\bb_\bl_\bo_\bc_\bk_\b__\bn_\bu_\bm_\bb_\be_\br;\n-183\n-_\b1_\b8_\b4 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bg_\be_\bt_\bB_\bi_\bt(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n-185 {\n-186 return _\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd.getBit(_\bb_\bl_\bo_\bc_\bk_\b__\bn_\bu_\bm_\bb_\be_\br,i);\n-187 }\n-188\n-189 template\n-_\b1_\b9_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const BS & bs) const\n-191 {\n-192 bool eq = true;\n-193 for(int i=0; i;\n-206 };\n-207\n-220 template \n-_\b2_\b2_\b1 class _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be : public\n-_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-222 {\n-223 protected:\n-224\n-_\b2_\b2_\b5 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b> _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br;\n-226 friend class _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br;\n-227\n-_\b2_\b2_\b8 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\b>\n-_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+_\b1_\b8_\b5 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bt_\bo_\bu_\bc_\bh (const _\bk_\be_\by_\b__\bt_\by_\bp_\be & key)\n+186 {\n+187 /* query _index for iterator */\n+188 map_iterator it = _index.find(key);\n+189 if (it == _index.end())\n+190 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be_\bE_\br_\br_\bo_\br,\n+191 \"Failed to touch key \" << key << \", it is not in the lru container\");\n+192 /* update _data\n+193 move it to the front\n+194 */\n+195 _data.splice(_data.begin(), _data, it->second);\n+196 return it->second->second;\n+197 }\n+198\n+_\b2_\b0_\b2 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n+203 {\n+204 return _data.size();\n+205 }\n+206\n+_\b2_\b1_\b3 void _\br_\be_\bs_\bi_\bz_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be new_size)\n+214 {\n+215 assert(new_size <= _\bs_\bi_\bz_\be());\n+216\n+217 while (new_size < _\bs_\bi_\bz_\be())\n+218 _\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk();\n+219 }\n+220\n+_\b2_\b2_\b4 void _\bc_\bl_\be_\ba_\br()\n+225 {\n+226 _data.clear();\n+227 _index.clear();\n+228 }\n 229\n-_\b2_\b3_\b0 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br& blockBitField_, int block_number_) :\n-231 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be(blockBitField_, block_number_),\n-232 _\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd(blockBitField_)\n-233 {}\n-234\n-235 public:\n-_\b2_\b3_\b6 typedef std::bitset _\bb_\bi_\bt_\bs_\be_\bt;\n+230 private:\n+231 list_type _data;\n+232 map_type _index;\n+233\n+234 };\n+235\n+236} // namespace Dune\n 237\n-_\b2_\b4_\b1 typedef typename std::vector::reference _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b2_\b4_\b3 typedef typename std::vector::const_reference _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-245\n-_\b2_\b4_\b7 typedef size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-248\n-_\b2_\b5_\b0 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(bool b)\n-251 {\n-252 for(int i=0; i_\b>_\b=(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n)\n-339 {\n-340 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i_\bb_\bl_\bo_\bc_\bk_\b__\bn_\bu_\bm_\bb_\be_\br,i);\n-406 }\n-407 };\n-408\n-412 template\n-_\b4_\b1_\b3 struct _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be >\n-414 {\n-_\b4_\b1_\b5 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\b> _\bt_\by_\bp_\be;\n-416 };\n-417\n-418 template\n-_\b4_\b1_\b9 struct _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be >\n-420 {\n-_\b4_\b2_\b1 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\b> _\bt_\by_\bp_\be;\n-422 };\n-423\n-424 template\n-_\b4_\b2_\b5 struct _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be >\n-426 {\n-_\b4_\b2_\b7 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\b> _\bt_\by_\bp_\be;\n-428 };\n-429\n-430 template\n-_\b4_\b3_\b1 struct _\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be< _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be >\n-432 {\n-_\b4_\b3_\b3 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\b> _\bt_\by_\bp_\be;\n-434 };\n-435\n-439 template >\n-_\b4_\b4_\b0 class _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br : private std::vector\n-441 {\n-443 typedef std::vector BlocklessBaseClass;\n-444\n-445 public:\n-448\n-_\b4_\b5_\b0 typedef std::bitset _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-451\n-_\b4_\b5_\b3 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b> _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-454\n-_\b4_\b5_\b6 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b> _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-457\n-_\b4_\b5_\b9 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b>* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-460\n-_\b4_\b6_\b2 typedef _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b>* _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br;\n-463\n-_\b4_\b6_\b5 typedef typename std::vector::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-466\n-_\b4_\b6_\b8 typedef Allocator _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\by_\bp_\be;\n-470\n-_\b4_\b7_\b3 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b>,\n-_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be, std::ptrdiff_t, _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be> _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b4_\b7_\b4 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b>,\n-const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be, std::ptrdiff_t, _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be>\n-_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-476\n-_\b4_\b7_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn(){\n-479 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-480 }\n-481\n-_\b4_\b8_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const {\n-484 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, 0);\n-485 }\n-486\n-_\b4_\b8_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd(){\n-489 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-490 }\n-491\n-_\b4_\b9_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const {\n-494 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(*this, _\bs_\bi_\bz_\be());\n-495 }\n-496\n-_\b4_\b9_\b8 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br() :\n-499 BlocklessBaseClass()\n-500 {}\n-501\n-_\b5_\b0_\b3 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br(const BlocklessBaseClass& blocklessBitField) :\n-504 BlocklessBaseClass(blocklessBitField)\n-505 {\n-506 if (blocklessBitField.size()%block_size != 0)\n-507 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bR_\ba_\bn_\bg_\be_\bE_\br_\br_\bo_\br, \"Vector size is not a multiple of the block size!\");\n-508 }\n-509\n-_\b5_\b1_\b3 explicit _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br(int n) :\n-514 BlocklessBaseClass(n*block_size)\n-515 {}\n-516\n-_\b5_\b1_\b8 _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br(int n, bool v) :\n-519 BlocklessBaseClass(n*block_size,v)\n-520 {}\n-521\n-_\b5_\b2_\b3 void _\bc_\bl_\be_\ba_\br()\n-524 {\n-525 BlocklessBaseClass::clear();\n-526 }\n-527\n-_\b5_\b2_\b9 void _\br_\be_\bs_\bi_\bz_\be(int n, bool v = bool())\n-530 {\n-531 BlocklessBaseClass::resize(n*block_size, v);\n-532 }\n-533\n-_\b5_\b3_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be() const\n-536 {\n-537 return BlocklessBaseClass::size()/block_size;\n-538 }\n-539\n-_\b5_\b4_\b1 void _\bs_\be_\bt_\bA_\bl_\bl() {\n-542 this->_\ba_\bs_\bs_\bi_\bg_\bn(BlocklessBaseClass::size(), true);\n-543 }\n-544\n-_\b5_\b4_\b6 void _\bu_\bn_\bs_\be_\bt_\bA_\bl_\bl() {\n-547 this->_\ba_\bs_\bs_\bi_\bg_\bn(BlocklessBaseClass::size(), false);\n-548 }\n-549\n-_\b5_\b5_\b1 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int i)\n-552 {\n-553 return _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be(*this, i);\n-554 }\n-555\n-_\b5_\b5_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](int i) const\n-558 {\n-559 return _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be(*this, i);\n-560 }\n-561\n-_\b5_\b6_\b3 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk()\n-564 {\n-565 return _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be(*this, _\bs_\bi_\bz_\be()-1);\n-566 }\n-567\n-_\b5_\b6_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bb_\ba_\bc_\bk() const\n-570 {\n-571 return _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be(*this, _\bs_\bi_\bz_\be()-1);\n-572 }\n-573\n-_\b5_\b7_\b5 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bu_\bn_\bt() const\n-576 {\n-577 return std::count(BlocklessBaseClass::begin(), BlocklessBaseClass::end(),\n-true);\n-578 }\n-579\n-_\b5_\b8_\b1 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bc_\bo_\bu_\bn_\bt_\bm_\ba_\bs_\bk_\be_\bd(int j) const\n-582 {\n-583 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n = 0;\n-584 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be blocks = _\bs_\bi_\bz_\be();\n-585 for(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i=0; i::reference getBit(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be j) {\n-610 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(j < block_size);\n-611 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i < _\bs_\bi_\bz_\be());\n-612 return BlocklessBaseClass::operator[](i*block_size+j);\n-613 }\n-614\n-_\b6_\b1_\b5 typename std::vector::const_reference getBit(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i, _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-j) const {\n-616 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(j < block_size);\n-617 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i < _\bs_\bi_\bz_\be());\n-618 return BlocklessBaseClass::operator[](i*block_size+j);\n-619 }\n-620\n-621 friend class _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-622 friend class _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-623 };\n-624\n-625} // namespace Dune\n-626\n-627#endif\n-_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\n-Macro for wrapping boundary checks.\n-_\bg_\be_\bn_\be_\br_\bi_\bc_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b._\bh_\bh\n-Implements a generic iterator class for writing stl conformant iterators.\n+238#endif // DUNE_COMMON_LRU_HH\n _\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n A few common exception classes.\n-_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS\n-#define DUNE_ASSERT_BOUNDS(cond)\n-If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do\n-nothing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundschecking.hh:30\n _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW\n #define DUNE_THROW(E, m)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:218\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn\n-void assign(T &dst, const T &src, bool mask)\n-masked Simd assignment (scalar version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn simd.hh:447\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-A dynamic array of blocks of booleans.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:441\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const_reference operator[](int i) const\n-Return const reference to i-th block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:557\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Returns a iterator pointing to the beginning of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:478\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br\n-BitSetVectorConstReference< block_size, Allocator > * const_pointer\n-Const pointer to a small block of bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:462\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Returns a const_iterator pointing to the end of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:493\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-BitSetVectorReference< block_size, Allocator > reference\n-Reference to a small block of bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:453\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bu_\bn_\bt_\bm_\ba_\bs_\bk_\be_\bd\n-size_type countmasked(int j) const\n-Returns the number of set bits, while each block is masked with 1< const_reference\n-Const reference to a small block of bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:456\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-Returns an iterator pointing to the end of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:488\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bu_\bn_\bt\n-size_type count() const\n-Returns the number of bits that are set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:575\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-BitSetVector()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:498\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\be_\bt_\bA_\bl_\bl\n-void setAll()\n-Sets all entries to true\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:541\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Dune::GenericIterator< const BitSetVector< block_size, Allocator >, const\n-value_type, const_reference, std::ptrdiff_t, ForwardIteratorFacade >\n-const_iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:474\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-std::bitset< block_size > value_type\n-Type of the values stored by the container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:450\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n-reference back()\n-Return reference to last block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:563\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-BitSetVector(const BlocklessBaseClass &blocklessBitField)\n-Construction from an unblocked bitfield.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:503\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &s, const BitSetVector &v)\n-Send bitfield to an output stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:591\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n-const_reference back() const\n-Return const reference to last block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:569\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-Erases all of the elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:523\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-BitSetVectorReference< block_size, Allocator > * pointer\n-Pointer to a small block of bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:459\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-reference operator[](int i)\n-Return reference to i-th block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:551\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Return the number of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:535\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-std::vector< bool, Allocator >::size_type size_type\n-size type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:465\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-BitSetVector(int n, bool v)\n-Constructor which initializes the field with true or false.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:518\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Returns a const_iterator pointing to the beginning of the vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:483\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Dune::GenericIterator< BitSetVector< block_size, Allocator >, value_type,\n-reference, std::ptrdiff_t, ForwardIteratorFacade > iterator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:473\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-void resize(int n, bool v=bool())\n-Resize field.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:529\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\by_\bp_\be\n-Allocator allocator_type\n-The type of the allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:468\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-BitSetVector(int n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:513\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bs_\be_\bt_\bA_\bl_\bl\n-void unsetAll()\n-Sets all entries to false\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:546\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-A proxy class that acts as a mutable reference to a single bitset in a\n-BitSetVector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:222\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bt_\be_\bs_\bt\n-bool test(size_type n) const\n-Returns true if bit n is set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BitSetVectorReference & operator=(const BitSetVectorConstReference &b)\n-Assignment from BitSetVectorConstReference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:266\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-reference operator[](size_type i)\n-Return reference to the i-th bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:393\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\br_\be_\bs_\be_\bt\n-BitSetVectorReference & reset(size_type n)\n-Clears bit n.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:376\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<_\b=\n-BitSetVectorReference & operator<<=(size_type n)\n-Left shift.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:330\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-Dune::BitSetVector< block_size, Alloc > BitSetVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:225\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-std::vector< bool, Alloc >::const_reference const_reference\n-A proxy class that acts as a const reference to a single bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:243\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BitSetVectorReference & operator=(const BitSetVectorReference &b)\n-Assignment from BitSetVectorReference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:274\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bg_\be_\bt_\bB_\bi_\bt\n-reference getBit(size_type i)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:403\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&_\b=\n-BitSetVectorReference & operator&=(const BitSetVectorConstReference &x)\n-Bitwise and (for BitSetVectorConstReference and BitSetVectorReference)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:290\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-BitSetVectorReference(BitSetVector &blockBitField_, int block_number_)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:230\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-size_t size_type\n-size_type typedef (an unsigned integral type)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:247\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BitSetVectorReference & operator=(const bitset &b)\n-Assignment from bitset.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:258\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Dune::BitSetVectorConstReference< block_size, Alloc >\n-BitSetVectorConstReference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:228\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\br_\be_\bs_\be_\bt\n-BitSetVectorReference & reset()\n-Clears every bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:362\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd\n-BitSetVector & blockBitField\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:399\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|_\b=\n-BitSetVectorReference & operator|=(const BitSetVectorConstReference &x)\n-Bitwise inclusive or (for BitSetVectorConstReference and BitSetVectorReference)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:306\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bs_\be_\bt\n-BitSetVectorReference & set(size_type n, int val=1)\n-Sets bit n if val is nonzero, and clears bit n if val is zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:369\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bb_\bi_\bt_\bs_\be_\bt\n-std::bitset< block_size > bitset\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^_\b=\n-BitSetVectorReference & operator^=(const bitset &x)\n-Bitwise exclusive or (for bitset).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:314\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-std::vector< bool, Alloc >::reference reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:241\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|_\b=\n-BitSetVectorReference & operator|=(const bitset &x)\n-Bitwise inclusive or (for bitset)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:298\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>_\b=\n-BitSetVectorReference & operator>>=(size_type n)\n-Right shift.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:338\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^_\b=\n-BitSetVectorReference & operator^=(const BitSetVectorConstReference &x)\n-Bitwise exclusive or (for BitSetVectorConstReference and BitSetVectorReference)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:322\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bf_\bl_\bi_\bp\n-BitSetVectorReference & flip(size_type n)\n-Flips bit n.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:383\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bf_\bl_\bi_\bp\n-BitSetVectorReference & flip()\n-Flips the value of every bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:354\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bs_\be_\bt\n-BitSetVectorReference & set()\n-Sets every bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:346\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&_\b=\n-BitSetVectorReference & operator&=(const bitset &x)\n-Bitwise and (for bitset).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BitSetVectorReference & operator=(bool b)\n-Assignment from bool, sets each bit in the bitset to b.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:250\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-A proxy class that acts as a const reference to a single bitset in a\n-BitSetVector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const bitset &bs) const\n-Equality of reference and std::bitset.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bt_\be_\bs_\bt\n-bool test(size_type n) const\n-Returns true if bit n is set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const_reference operator[](size_type i) const\n-Return reference to the i-th bit.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:130\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-bitset operator<<(size_type n) const\n-Returns a copy of *this shifted left by n bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-BitSetVectorConstReference(const BitSetVector &blockBitField_, int\n-block_number_)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:44\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bB_\bi_\bt_\bF_\bi_\be_\bl_\bd\n-const BitSetVector & blockBitField\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n-bitset operator>>(size_type n) const\n-Returns a copy of *this shifted right by n bits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:72\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bg_\be_\bt_\bB_\bi_\bt\n-const_reference getBit(size_type i) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:184\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const bitset &bs) const\n-Inequality of reference and std::bitset.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:154\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const BS &bs) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:190\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br\n-Dune::BitSetVector< block_size, Alloc > BitSetVector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bb_\bi_\bt_\bs_\be_\bt\n-std::bitset< block_size > bitset\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:56\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\ba_\bl_\bl\n-bool all() const\n-Returns true if all bits are set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:115\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-size_t size_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b~\n-bitset operator~() const\n-Returns a copy of *this with all of its bits flipped.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-std::vector< bool, Alloc >::const_reference reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bs_\bi_\bz_\be\n-size_type size() const\n-Returns block_size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bc_\bo_\bu_\bn_\bt\n-size_type count() const\n-Returns the number of bits that are set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bn_\bo_\bn_\be\n-bool none() const\n-Returns true if no bits are set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\ba_\bn_\by\n-bool any() const\n-Returns true if any bits are set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b__\bn_\bu_\bm_\bb_\be_\br\n-int block_number\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:182\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-std::vector< bool, Alloc >::const_reference const_reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:60\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BitSetVectorConstReference & operator=(const BitSetVectorConstReference\n-&b)=delete\n-disable assignment operator\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &s, const\n-BitSetVectorConstReference &v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-BitSetVectorConstReference< block_size, Alloc > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:415\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-BitSetVectorConstReference< block_size, Alloc > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:421\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>_\b:_\b:_\bt_\by_\bp_\be\n-BitSetVectorReference< block_size, Alloc > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:427\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bB_\bi_\bt_\bS_\be_\bt_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bn_\bs_\bt_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\b<_\b _\bb_\bl_\bo_\bc_\bk_\b__\bs_\bi_\bz_\be_\b,_\b _\bA_\bl_\bl_\bo_\bc_\b _\b>_\b _\b>_\b:_\b:\n-_\bt_\by_\bp_\be\n-BitSetVectorReference< block_size, Alloc > type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bitsetvector.hh:433\n _\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be_\bE_\br_\br_\bo_\br\n Default exception class for range errors.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:254\n-_\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-Get the 'const' version of a reference to a mutable object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bu_\bt_\ba_\bb_\bl_\be_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-get the 'mutable' version of a reference to a const object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:116\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-Generic class for stl-conforming iterators for container classes with operator\n-[].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn genericiterator.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Base class for stl conformant forward iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:142\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu\n+LRU Cache Container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:52\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bp_\bo_\bp_\b__\bb_\ba_\bc_\bk\n+void pop_back()\n+Removes the last element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:119\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bf_\bi_\bn_\bd\n+iterator find(const key_type &key)\n+Finds the element whose key is k.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:131\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+reference insert(const key_type &key)\n+mark data associated with key as most recent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:175\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+list_type::const_iterator const_iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:68\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+void resize(size_type new_size)\n+ensure a maximum size of the container\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:213\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+allocator::size_type size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:66\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+list_type::iterator iterator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+allocator::value_type value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+const_reference front() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:83\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br\n+typename allocator::value_type const * const_pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+Retrieve number of entries in the container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:202\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+typename allocator::value_type & reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:65\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bb_\ba_\bc_\bk\n+reference back()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:92\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bp_\bo_\bp_\b__\bf_\br_\bo_\bn_\bt\n+void pop_front()\n+Removes the first element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+reference front()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:74\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:224\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bt_\bo_\bu_\bc_\bh\n+reference touch(const key_type &key)\n+mark data associated with key as most recent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:185\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+reference insert(const key_type &key, const_reference data)\n+Insert a value into the container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:161\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n+typename allocator::value_type * pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bf_\bi_\bn_\bd\n+const_iterator find(const key_type &key) const\n+Finds the element whose key is k.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:143\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+typename allocator::value_type const & const_reference\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:64\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bk_\be_\by_\b__\bt_\by_\bp_\be\n+Traits::key_type key_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:60\n+_\bD_\bu_\bn_\be_\b:_\b:_\bl_\br_\bu_\b:_\b:_\bb_\ba_\bc_\bk\n+const_reference back(int i) const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lru.hh:101\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00041.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00041.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: indices.hh File Reference\n+dune-common: referencehelper.hh File Reference\n \n \n \n \n \n \n \n@@ -74,127 +74,55 @@\n
    \n
    \n \n-
    indices.hh File Reference
    \n+
    referencehelper.hh File Reference
    \n
    \n
    \n-
    #include <cstddef>
    \n-#include <stdexcept>
    \n-#include <type_traits>
    \n-#include <utility>
    \n+
    #include <type_traits>
    \n+#include <functional>
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n \n-\n-\n-\n-\n-\n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::Indices
     Namespace with predefined compile time indices for the range [0,19].
     
    namespace  Dune::Indices::Literals
     
    \n \n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Typedefs

    template<std::size_t i>
    using Dune::index_constant = std::integral_constant< std::size_t, i >
     An index constant with value i.
     
    template<class T >
    using Dune::ResolveRef_t = std::remove_reference_t< decltype(Dune::resolveRef(std::declval< T & >()))>
     Type trait to resolve std::reference_wrapper.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<class F , class I , I... i>
    decltype(auto) constexpr Dune::unpackIntegerSequence (F &&f, std::integer_sequence< I, i... > sequence)
     Unpack an std::integer_sequence<I,i...> to std::integral_constant<I,i>...
     
    template<char... digits>
    constexpr auto Dune::Indices::Literals::operator""_ic ()
     Literal to create an index compile-time constant.
     
    template<char... digits>
    constexpr auto Dune::Indices::Literals::operator""_uc ()
     Literal to create an unsigned integer compile-time constant.
     
    template<char... digits>
    constexpr auto Dune::Indices::Literals::operator""_sc ()
     Literal to create a signed integer compile-time constant.
     
    template<class T , T value>
    constexpr auto Dune::Indices::Literals::operator- (std::integral_constant< T, value >)
     Negation operator for integral constants.
     
    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.
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

    \n Variables

    constexpr index_constant< 0 > Dune::Indices::_0 = {}
     Compile time index with value 0.
     
    constexpr index_constant< 1 > Dune::Indices::_1 = {}
     Compile time index with value 1.
     
    constexpr index_constant< 2 > Dune::Indices::_2 = {}
     Compile time index with value 2.
     
    constexpr index_constant< 3 > Dune::Indices::_3 = {}
     Compile time index with value 3.
     
    constexpr index_constant< 4 > Dune::Indices::_4 = {}
     Compile time index with value 4.
     
    constexpr index_constant< 5 > Dune::Indices::_5 = {}
     Compile time index with value 5.
     
    constexpr index_constant< 6 > Dune::Indices::_6 = {}
     Compile time index with value 6.
     
    constexpr index_constant< 7 > Dune::Indices::_7 = {}
     Compile time index with value 7.
     
    constexpr index_constant< 8 > Dune::Indices::_8 = {}
     Compile time index with value 8.
     
    constexpr index_constant< 9 > Dune::Indices::_9 = {}
     Compile time index with value 9.
     
    constexpr index_constant< 10 > Dune::Indices::_10 = {}
     Compile time index with value 10.
     
    constexpr index_constant< 11 > Dune::Indices::_11 = {}
     Compile time index with value 11.
     
    constexpr index_constant< 12 > Dune::Indices::_12 = {}
     Compile time index with value 12.
     
    constexpr index_constant< 13 > Dune::Indices::_13 = {}
     Compile time index with value 13.
     
    constexpr index_constant< 14 > Dune::Indices::_14 = {}
     Compile time index with value 14.
     
    constexpr index_constant< 15 > Dune::Indices::_15 = {}
     Compile time index with value 15.
     
    constexpr index_constant< 16 > Dune::Indices::_16 = {}
     Compile time index with value 16.
     
    constexpr index_constant< 17 > Dune::Indices::_17 = {}
     Compile time index with value 17.
     
    constexpr index_constant< 18 > Dune::Indices::_18 = {}
     Compile time index with value 18.
     
    constexpr index_constant< 19 > Dune::Indices::_19 = {}
     Compile time index with value 19.
     
    template<class T >
    constexpr bool Dune::IsReferenceWrapper_v = Impl::IsReferenceWrapper<T>::value
     Helper to detect if given type is a std::reference_wrapper.
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,117 +1,40 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-indices.hh File Reference\n-#include \n-#include \n+referencehelper.hh File Reference\n #include \n-#include \n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-\u00a0 Namespace with predefined compile time indices for the range\n- [0,19].\n-\u00a0\n-namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs\n-\u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt = std::integral_constant< std::size_t, i >\n-\u00a0 An index constant with value i.\n+template\n+using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt = std::remove_reference_t< decltype(_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf\n+ (std::declval< T & >()))>\n+\u00a0 Type trait to resolve std::reference_wrapper.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-decltype(auto) constexpr\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bu_\bn_\bp_\ba_\bc_\bk_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be (F &&f, std::\n- integer_sequence< I, i... > sequence)\n-\u00a0 Unpack an std::integer_sequence to std::\n- integral_constant...\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b\"_\b\"_\b__\bi_\bc ()\n-\u00a0 Literal to create an index compile-time constant.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b\"_\b\"_\b__\bu_\bc ()\n-\u00a0 Literal to create an unsigned integer compile-time\n- constant.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b\"_\b\"_\b__\bs_\bc ()\n-\u00a0 Literal to create a signed integer compile-time\n- constant.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b- (std::\n- integral_constant< T, value >)\n-\u00a0 Negation operator for integral constants.\n+template\n+constexpr T &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf (T &gf) noexcept\n+\u00a0 Helper function to resolve std::reference_wrapper.\n+\u00a0\n+template\n+ const auto &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf (T &&gf)=delete\n+\u00a0\n+template\n+constexpr T &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf (std::reference_wrapper< T > gf) noexcept\n+\u00a0 Helper function to resolve std::reference_wrapper.\n \u00a0\n V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 0 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b0 = {}\n-\u00a0 Compile time index with value 0.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 1 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1 = {}\n-\u00a0 Compile time index with value 1.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 2 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b2 = {}\n-\u00a0 Compile time index with value 2.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 3 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b3 = {}\n-\u00a0 Compile time index with value 3.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 4 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b4 = {}\n-\u00a0 Compile time index with value 4.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 5 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b5 = {}\n-\u00a0 Compile time index with value 5.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 6 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b6 = {}\n-\u00a0 Compile time index with value 6.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 7 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b7 = {}\n-\u00a0 Compile time index with value 7.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 8 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b8 = {}\n-\u00a0 Compile time index with value 8.\n-\u00a0\n- constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 9 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b9 = {}\n-\u00a0 Compile time index with value 9.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 10 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b0 = {}\n-\u00a0 Compile time index with value 10.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 11 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b1 = {}\n-\u00a0 Compile time index with value 11.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 12 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b2 = {}\n-\u00a0 Compile time index with value 12.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 13 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b3 = {}\n-\u00a0 Compile time index with value 13.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 14 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b4 = {}\n-\u00a0 Compile time index with value 14.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 15 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b5 = {}\n-\u00a0 Compile time index with value 15.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 16 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b6 = {}\n-\u00a0 Compile time index with value 16.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 17 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b7 = {}\n-\u00a0 Compile time index with value 17.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 18 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b8 = {}\n-\u00a0 Compile time index with value 18.\n-\u00a0\n-constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt< 19 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b9 = {}\n-\u00a0 Compile time index with value 19.\n+template\n+constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Impl::IsReferenceWrapper::value\n+\u00a0 Helper to detect if given type is a std::reference_wrapper.\n \u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: indices.hh Source File\n+dune-common: referencehelper.hh Source File\n \n \n \n \n \n \n \n@@ -74,191 +74,92 @@\n \n
    \n \n
    \n
    \n
    \n-
    indices.hh
    \n+
    referencehelper.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5
    \n-
    6#ifndef DUNE_COMMON_INDICES_HH
    \n-
    7#define DUNE_COMMON_INDICES_HH
    \n-
    8
    \n-
    9#include <cstddef>
    \n-
    10#include <stdexcept>
    \n-
    11#include <type_traits>
    \n-
    12#include <utility>
    \n-
    13
    \n-
    14namespace Dune
    \n-
    15{
    \n-
    28 template<std::size_t i>
    \n-
    29 using index_constant = std::integral_constant<std::size_t, i>;
    \n-
    30
    \n-
    31
    \n-
    32
    \n-
    \n-
    49 namespace Indices
    \n-
    50 {
    \n-
    52 inline constexpr index_constant< 0> _0 = {};
    \n-
    53
    \n-
    55 inline constexpr index_constant< 1> _1 = {};
    \n-
    56
    \n-
    58 inline constexpr index_constant< 2> _2 = {};
    \n-
    59
    \n-
    61 inline constexpr index_constant< 3> _3 = {};
    \n+
    5#ifndef DUNE_COMMON_REFERENCE_HELPER_HH
    \n+
    6#define DUNE_COMMON_REFERENCE_HELPER_HH
    \n+
    7
    \n+
    8#include <type_traits>
    \n+
    9#include <functional>
    \n+
    10
    \n+
    11
    \n+
    12
    \n+
    13namespace Dune {
    \n+
    14
    \n+
    15namespace Impl {
    \n+
    16
    \n+
    17 template<class T>
    \n+
    18 class IsReferenceWrapper : public std::false_type {};
    \n+
    19
    \n+
    20 template<class T>
    \n+
    21 class IsReferenceWrapper<std::reference_wrapper<T>> : public std::true_type {};
    \n+
    22
    \n+
    23 template<class T>
    \n+
    24 class IsReferenceWrapper<const std::reference_wrapper<T>> : public std::true_type {};
    \n+
    25
    \n+
    26} // namespace Dune::Impl
    \n+
    27
    \n+
    28
    \n+
    34template<class T>
    \n+
    35constexpr bool IsReferenceWrapper_v = Impl::IsReferenceWrapper<T>::value;
    \n+
    36
    \n+
    37
    \n+
    46template<class T>
    \n+
    \n+
    47constexpr T& resolveRef(T& gf) noexcept
    \n+
    48{
    \n+
    49 return gf;
    \n+
    50}
    \n+
    \n+
    51
    \n+
    52
    \n+
    53// There's no overload for non std::reference_wrapper r-values,
    \n+
    54// because this may lead to undefined behavior whenever the
    \n+
    55// return value is stored.
    \n+
    56// Notice that deleting the overload is not necessary, but
    \n+
    57// helps to document that it is missing on purpose. It also
    \n+
    58// leads to nicer error messages.
    \n+
    59template<class T>
    \n+
    60const auto& resolveRef(T&& gf) = delete;
    \n+
    61
    \n
    62
    \n-
    64 inline constexpr index_constant< 4> _4 = {};
    \n-
    65
    \n-
    67 inline constexpr index_constant< 5> _5 = {};
    \n-
    68
    \n-
    70 inline constexpr index_constant< 6> _6 = {};
    \n-
    71
    \n-
    73 inline constexpr index_constant< 7> _7 = {};
    \n-
    74
    \n-
    76 inline constexpr index_constant< 8> _8 = {};
    \n-
    77
    \n-
    79 inline constexpr index_constant< 9> _9 = {};
    \n-
    80
    \n-
    82 inline constexpr index_constant<10> _10 = {};
    \n-
    83
    \n-
    85 inline constexpr index_constant<11> _11 = {};
    \n+
    81template<class T>
    \n+
    \n+
    82constexpr T& resolveRef(std::reference_wrapper<T> gf) noexcept
    \n+
    83{
    \n+
    84 return gf.get();
    \n+
    85}
    \n+
    \n
    86
    \n-
    88 inline constexpr index_constant<12> _12 = {};
    \n-
    89
    \n-
    91 inline constexpr index_constant<13> _13 = {};
    \n-
    92
    \n-
    94 inline constexpr index_constant<14> _14 = {};
    \n-
    95
    \n-
    97 inline constexpr index_constant<15> _15 = {};
    \n-
    98
    \n-
    100 inline constexpr index_constant<16> _16 = {};
    \n+
    87
    \n+
    88
    \n+
    99template<class T>
    \n+
    100using ResolveRef_t = std::remove_reference_t<decltype(Dune::resolveRef(std::declval<T&>()))>;
    \n
    101
    \n-
    103 inline constexpr index_constant<17> _17 = {};
    \n+
    102
    \n+
    103} // namespace Dune
    \n
    104
    \n-
    106 inline constexpr index_constant<18> _18 = {};
    \n-
    107
    \n-
    109 inline constexpr index_constant<19> _19 = {};
    \n-
    110
    \n-
    111 } // namespace Indices
    \n-
    \n-
    112
    \n-
    123 template<class F, class I, I... i>
    \n-
    \n-
    124 decltype(auto) constexpr unpackIntegerSequence(F&& f, std::integer_sequence<I, i...> sequence)
    \n-
    125 {
    \n-
    126 return f(std::integral_constant<I, i>()...);
    \n-
    127 }
    \n-
    \n-
    128
    \n-
    129
    \n-
    \n-
    130 namespace Indices { inline namespace Literals
    \n-
    131 {
    \n-
    132 namespace Impl
    \n-
    133 {
    \n-
    134 // convert a single character into an unsigned integer
    \n-
    135 constexpr unsigned char2digit (const char c)
    \n-
    136 {
    \n-
    137 if (c >= '0' && c <= '9')
    \n-
    138 return unsigned(c) - unsigned('0');
    \n-
    139 else {
    \n-
    140 throw std::invalid_argument("Character is not a digit.");
    \n-
    141 return 0u;
    \n-
    142 }
    \n-
    143 }
    \n-
    144
    \n-
    145 // convert a sequence of character digits into an unsigned integer
    \n-
    146 template <class T, char... digits>
    \n-
    147 constexpr T chars2number ()
    \n-
    148 {
    \n-
    149 const char arr[] = {digits...};
    \n-
    150 T result = 0;
    \n-
    151 T power = 1;
    \n-
    152 const T base = 10;
    \n-
    153
    \n-
    154 const int N = sizeof...(digits);
    \n-
    155 for (int i = 0; i < N; ++i) {
    \n-
    156 char c = arr[N - 1 - i];
    \n-
    157 result+= char2digit(c) * power;
    \n-
    158 power *= base;
    \n-
    159 }
    \n-
    160
    \n-
    161 return result;
    \n-
    162 }
    \n-
    163
    \n-
    164 } //namespace Impl
    \n-
    165
    \n-
    172 template <char... digits>
    \n-
    \n-
    173 constexpr auto operator"" _ic()
    \n-
    174 {
    \n-
    175 return std::integral_constant<std::size_t, Impl::chars2number<std::size_t,digits...>()>{};
    \n-
    176 }
    \n-
    \n-
    177
    \n-
    184 template <char... digits>
    \n-
    \n-
    185 constexpr auto operator"" _uc()
    \n-
    186 {
    \n-
    187 return std::integral_constant<unsigned, Impl::chars2number<unsigned,digits...>()>{};
    \n-
    188 }
    \n-
    \n-
    189
    \n-
    196 template <char... digits>
    \n-
    \n-
    197 constexpr auto operator"" _sc()
    \n-
    198 {
    \n-
    199 return std::integral_constant<int, Impl::chars2number<int,digits...>()>{};
    \n-
    200 }
    \n-
    \n-
    201
    \n-
    208 template <class T, T value>
    \n-
    \n-
    209 constexpr auto operator- (std::integral_constant<T,value>)
    \n-
    210 {
    \n-
    211 return std::integral_constant<std::make_signed_t<T>, -value>{};
    \n-
    212 }
    \n-
    \n-
    213
    \n-
    214 }} //namespace Indices::Literals
    \n-
    \n-
    215} //namespace Dune
    \n-
    216
    \n-
    217#endif // DUNE_COMMON_INDICES_HH
    \n-
    constexpr index_constant< 16 > _16
    Compile time index with value 16.
    Definition indices.hh:100
    \n-
    constexpr index_constant< 15 > _15
    Compile time index with value 15.
    Definition indices.hh:97
    \n-
    constexpr index_constant< 8 > _8
    Compile time index with value 8.
    Definition indices.hh:76
    \n-
    constexpr index_constant< 7 > _7
    Compile time index with value 7.
    Definition indices.hh:73
    \n-
    constexpr index_constant< 0 > _0
    Compile time index with value 0.
    Definition indices.hh:52
    \n-
    constexpr index_constant< 9 > _9
    Compile time index with value 9.
    Definition indices.hh:79
    \n-
    constexpr index_constant< 14 > _14
    Compile time index with value 14.
    Definition indices.hh:94
    \n-
    constexpr index_constant< 1 > _1
    Compile time index with value 1.
    Definition indices.hh:55
    \n-
    constexpr index_constant< 3 > _3
    Compile time index with value 3.
    Definition indices.hh:61
    \n-
    constexpr index_constant< 12 > _12
    Compile time index with value 12.
    Definition indices.hh:88
    \n-
    decltype(auto) constexpr unpackIntegerSequence(F &&f, std::integer_sequence< I, i... > sequence)
    Unpack an std::integer_sequence<I,i...> to std::integral_constant<I,i>...
    Definition indices.hh:124
    \n-
    constexpr auto operator-(std::integral_constant< T, value >)
    Negation operator for integral constants.
    Definition indices.hh:209
    \n-
    constexpr index_constant< 11 > _11
    Compile time index with value 11.
    Definition indices.hh:85
    \n-
    constexpr index_constant< 18 > _18
    Compile time index with value 18.
    Definition indices.hh:106
    \n-
    constexpr index_constant< 13 > _13
    Compile time index with value 13.
    Definition indices.hh:91
    \n-
    constexpr index_constant< 5 > _5
    Compile time index with value 5.
    Definition indices.hh:67
    \n-
    constexpr index_constant< 17 > _17
    Compile time index with value 17.
    Definition indices.hh:103
    \n-
    constexpr index_constant< 10 > _10
    Compile time index with value 10.
    Definition indices.hh:82
    \n-
    constexpr index_constant< 2 > _2
    Compile time index with value 2.
    Definition indices.hh:58
    \n-
    std::integral_constant< std::size_t, i > index_constant
    An index constant with value i.
    Definition indices.hh:29
    \n-
    constexpr index_constant< 19 > _19
    Compile time index with value 19.
    Definition indices.hh:109
    \n-
    constexpr index_constant< 6 > _6
    Compile time index with value 6.
    Definition indices.hh:70
    \n-
    constexpr index_constant< 4 > _4
    Compile time index with value 4.
    Definition indices.hh:64
    \n+
    105
    \n+
    106
    \n+
    107#endif // DUNE_COMMON_REFERENCE_HELPER_HH
    \n+
    constexpr bool IsReferenceWrapper_v
    Helper to detect if given type is a std::reference_wrapper.
    Definition referencehelper.hh:35
    \n+
    constexpr T & resolveRef(T &gf) noexcept
    Helper function to resolve std::reference_wrapper.
    Definition referencehelper.hh:47
    \n+
    STL namespace.
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    constexpr Base power(Base m, Exponent p)
    Power method for integer exponents.
    Definition math.hh:75
    \n+
    std::remove_reference_t< decltype(Dune::resolveRef(std::declval< T & >()))> ResolveRef_t
    Type trait to resolve std::reference_wrapper.
    Definition referencehelper.hh:100
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,249 +1,98 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-indices.hh\n+referencehelper.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_COMMON_INDICES_HH\n-7#define DUNE_COMMON_INDICES_HH\n-8\n-9#include \n-10#include \n-11#include \n-12#include \n-13\n-14namespace _\bD_\bu_\bn_\be\n-15{\n-28 template\n-_\b2_\b9 using _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt = std::integral_constant;\n-30\n-31\n-32\n-_\b4_\b9 namespace Indices\n-50 {\n-_\b5_\b2 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b0_\b> _\b__\b0 = {};\n-53\n-_\b5_\b5 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b1_\b> _\b__\b1 = {};\n-56\n-_\b5_\b8 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b2_\b> _\b__\b2 = {};\n-59\n-_\b6_\b1 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b3_\b> _\b__\b3 = {};\n+5#ifndef DUNE_COMMON_REFERENCE_HELPER_HH\n+6#define DUNE_COMMON_REFERENCE_HELPER_HH\n+7\n+8#include \n+9#include \n+10\n+11\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14\n+15namespace Impl {\n+16\n+17 template\n+18 class IsReferenceWrapper : public std::false_type {};\n+19\n+20 template\n+21 class IsReferenceWrapper<_\bs_\bt_\bd::reference_wrapper> : public std::true_type\n+{};\n+22\n+23 template\n+24 class IsReferenceWrapper> : public std::\n+true_type {};\n+25\n+26} // namespace Dune::Impl\n+27\n+28\n+34template\n+_\b3_\b5constexpr bool _\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv = Impl::IsReferenceWrapper::value;\n+36\n+37\n+46template\n+_\b4_\b7constexpr T& _\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(T& gf) noexcept\n+48{\n+49 return gf;\n+50}\n+51\n+52\n+53// There's no overload for non std::reference_wrapper r-values,\n+54// because this may lead to undefined behavior whenever the\n+55// return value is stored.\n+56// Notice that deleting the overload is not necessary, but\n+57// helps to document that it is missing on purpose. It also\n+58// leads to nicer error messages.\n+59template\n+_\b6_\b0const auto& _\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(T&& gf) = delete;\n+61\n 62\n-_\b6_\b4 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b4_\b> _\b__\b4 = {};\n-65\n-_\b6_\b7 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b5_\b> _\b__\b5 = {};\n-68\n-_\b7_\b0 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b6_\b> _\b__\b6 = {};\n-71\n-_\b7_\b3 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b7_\b> _\b__\b7 = {};\n-74\n-_\b7_\b6 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b8_\b> _\b__\b8 = {};\n-77\n-_\b7_\b9 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b _\b9_\b> _\b__\b9 = {};\n-80\n-_\b8_\b2 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b0_\b> _\b__\b1_\b0 = {};\n-83\n-_\b8_\b5 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b1_\b> _\b__\b1_\b1 = {};\n+81template\n+_\b8_\b2constexpr T& _\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf(std::reference_wrapper gf) noexcept\n+83{\n+84 return gf.get();\n+85}\n 86\n-_\b8_\b8 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b2_\b> _\b__\b1_\b2 = {};\n-89\n-_\b9_\b1 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b3_\b> _\b__\b1_\b3 = {};\n-92\n-_\b9_\b4 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b4_\b> _\b__\b1_\b4 = {};\n-95\n-_\b9_\b7 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b5_\b> _\b__\b1_\b5 = {};\n-98\n-_\b1_\b0_\b0 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b6_\b> _\b__\b1_\b6 = {};\n+87\n+88\n+99template\n+_\b1_\b0_\b0using _\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt = std::remove_reference_t()))>;\n 101\n-_\b1_\b0_\b3 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b7_\b> _\b__\b1_\b7 = {};\n+102\n+103} // namespace Dune\n 104\n-_\b1_\b0_\b6 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b8_\b> _\b__\b1_\b8 = {};\n-107\n-_\b1_\b0_\b9 inline constexpr _\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\b<_\b1_\b9_\b> _\b__\b1_\b9 = {};\n-110\n-111 } // namespace Indices\n-112\n-123 template\n-_\b1_\b2_\b4 decltype(auto) constexpr _\bu_\bn_\bp_\ba_\bc_\bk_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be(F&& f, std::\n-integer_sequence sequence)\n-125 {\n-126 return f(std::integral_constant()...);\n-127 }\n-128\n-129\n-_\b1_\b3_\b0 namespace Indices { inline namespace Literals\n-131 {\n-132 namespace Impl\n-133 {\n-134 // convert a single character into an unsigned integer\n-135 constexpr unsigned char2digit (const char c)\n-136 {\n-137 if (c >= '0' && c <= '9')\n-138 return unsigned(c) - unsigned('0');\n-139 else {\n-140 throw std::invalid_argument(\"Character is not a digit.\");\n-141 return 0u;\n-142 }\n-143 }\n-144\n-145 // convert a sequence of character digits into an unsigned integer\n-146 template \n-147 constexpr T chars2number ()\n-148 {\n-149 const char arr[] = {digits...};\n-150 T result = 0;\n-151 T _\bp_\bo_\bw_\be_\br = 1;\n-152 const T base = 10;\n-153\n-154 const int N = sizeof...(digits);\n-155 for (int i = 0; i < N; ++i) {\n-156 char c = arr[N - 1 - i];\n-157 result+= char2digit(c) * _\bp_\bo_\bw_\be_\br;\n-158 _\bp_\bo_\bw_\be_\br *= base;\n-159 }\n-160\n-161 return result;\n-162 }\n-163\n-164 } //namespace Impl\n-165\n-172 template \n-_\b1_\b7_\b3 constexpr auto operator\"\" _ic()\n-174 {\n-175 return std::integral_constant()>{};\n-176 }\n-177\n-184 template \n-_\b1_\b8_\b5 constexpr auto operator\"\" _uc()\n-186 {\n-187 return std::integral_constant()>{};\n-188 }\n-189\n-196 template \n-_\b1_\b9_\b7 constexpr auto operator\"\" _sc()\n-198 {\n-199 return std::integral_constant()>{};\n-200 }\n-201\n-208 template \n-_\b2_\b0_\b9 constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b (std::integral_constant)\n-210 {\n-211 return std::integral_constant, -value>{};\n-212 }\n-213\n-214 }} //namespace Indices::Literals\n-215} //namespace Dune\n-216\n-217#endif // DUNE_COMMON_INDICES_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b6\n-constexpr index_constant< 16 > _16\n-Compile time index with value 16.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:100\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b5\n-constexpr index_constant< 15 > _15\n-Compile time index with value 15.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:97\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b8\n-constexpr index_constant< 8 > _8\n-Compile time index with value 8.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b7\n-constexpr index_constant< 7 > _7\n-Compile time index with value 7.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:73\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b0\n-constexpr index_constant< 0 > _0\n-Compile time index with value 0.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b9\n-constexpr index_constant< 9 > _9\n-Compile time index with value 9.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:79\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b4\n-constexpr index_constant< 14 > _14\n-Compile time index with value 14.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:94\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1\n-constexpr index_constant< 1 > _1\n-Compile time index with value 1.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b3\n-constexpr index_constant< 3 > _3\n-Compile time index with value 3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:61\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b2\n-constexpr index_constant< 12 > _12\n-Compile time index with value 12.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:88\n-_\bD_\bu_\bn_\be_\b:_\b:_\bu_\bn_\bp_\ba_\bc_\bk_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be\n-decltype(auto) constexpr unpackIntegerSequence(F &&f, std::integer_sequence< I,\n-i... > sequence)\n-Unpack an std::integer_sequence to std::integral_constant...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:124\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\bL_\bi_\bt_\be_\br_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-constexpr auto operator-(std::integral_constant< T, value >)\n-Negation operator for integral constants.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:209\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b1\n-constexpr index_constant< 11 > _11\n-Compile time index with value 11.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:85\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b8\n-constexpr index_constant< 18 > _18\n-Compile time index with value 18.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:106\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b3\n-constexpr index_constant< 13 > _13\n-Compile time index with value 13.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:91\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b5\n-constexpr index_constant< 5 > _5\n-Compile time index with value 5.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:67\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b7\n-constexpr index_constant< 17 > _17\n-Compile time index with value 17.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b0\n-constexpr index_constant< 10 > _10\n-Compile time index with value 10.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b2\n-constexpr index_constant< 2 > _2\n-Compile time index with value 2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:58\n-_\bD_\bu_\bn_\be_\b:_\b:_\bi_\bn_\bd_\be_\bx_\b__\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-std::integral_constant< std::size_t, i > index_constant\n-An index constant with value i.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b1_\b9\n-constexpr index_constant< 19 > _19\n-Compile time index with value 19.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:109\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b6\n-constexpr index_constant< 6 > _6\n-Compile time index with value 6.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:70\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs_\b:_\b:_\b__\b4\n-constexpr index_constant< 4 > _4\n-Compile time index with value 4.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn indices.hh:64\n+105\n+106\n+107#endif // DUNE_COMMON_REFERENCE_HELPER_HH\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be_\bW_\br_\ba_\bp_\bp_\be_\br_\b__\bv\n+constexpr bool IsReferenceWrapper_v\n+Helper to detect if given type is a std::reference_wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:35\n+_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf\n+constexpr T & resolveRef(T &gf) noexcept\n+Helper function to resolve std::reference_wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:47\n+_\bs_\bt_\bd\n+STL namespace.\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bp_\bo_\bw_\be_\br\n-constexpr Base power(Base m, Exponent p)\n-Power method for integer exponents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn math.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bs_\bo_\bl_\bv_\be_\bR_\be_\bf_\b__\bt\n+std::remove_reference_t< decltype(Dune::resolveRef(std::declval< T & >()))>\n+ResolveRef_t\n+Type trait to resolve std::reference_wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn referencehelper.hh:100\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00044.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00044.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: vc.hh File Reference\n+dune-common: float_cmp.cc File Reference\n \n \n \n \n \n \n \n@@ -69,25 +69,121 @@\n \n
    \n \n
    \n
    \n
    \n-
    vc.hh File Reference
    \n+ \n+
    float_cmp.cc File Reference
    \n
    \n
    \n-\n-

    Compatibility header for including <Vc/Vc> \n-More...

    \n-\n+
    #include "float_cmp.hh"
    \n+#include <vector>
    \n+#include <limits>
    \n+#include <algorithm>
    \n+#include <cstdlib>
    \n+#include <dune/common/fvector.hh>
    \n+
    \n

    Go to the source code of this file.

    \n-

    Detailed Description

    \n-

    Compatibility header for including <Vc/Vc>

    \n-

    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.

    \n-
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Classes

    struct  Dune::FloatCmp::EpsilonType< T >
     Mapping of value type to epsilon type. More...
     
    struct  Dune::FloatCmp::EpsilonType< std::vector< T, A > >
     Specialization of EpsilonType for std::vector. More...
     
    struct  Dune::FloatCmp::EpsilonType< FieldVector< T, n > >
     Specialization of EpsilonType for Dune::FieldVector. More...
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, relativeWeak >
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, relativeStrong >
     
    struct  Dune::FloatCmp::DefaultEpsilon< T, absolute >
     
    \n+\n+\n+\n+\n+\n+\n+

    \n+Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::FloatCmp
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

    \n+Functions

    template<class T , CmpStyle style>
    bool Dune::FloatCmp::eq (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for equality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ne (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for inequality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::gt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::lt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ge (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater or equal second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::le (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser or equal second
     
    template<class T >
    bool Dune::FloatCmp::eq (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::ne (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::gt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::lt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::ge (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class T >
    bool Dune::FloatCmp::le (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     round using epsilon
     
    template<class I , class T , CmpStyle cstyle>
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     
    template<class I , class T >
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     truncate using epsilon
     
    template<class I , class T , CmpStyle cstyle>
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     
    template<class I , class T >
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, defaultCmpStyle >::value())
     
    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,126 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-vc.hh File Reference\n-Compatibility header for including _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+float_cmp.cc File Reference\n+#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\"\n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Compatibility header for including \n-Certain versions (1.3.2) of Vc (_\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\bg_\bi_\bt_\bh_\bu_\bb_\b._\bc_\bo_\bm_\b/_\bV_\bc_\bD_\be_\bv_\be_\bl_\b/_\bV_\bc) have a problem\n-with certain compiler versions (g++ 7.2.0) in c++17 mode, see #88.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 Mapping of value type to epsilon type. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>_\b _\b>\n+\u00a0 Specialization of _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be for std::vector. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bn_\b _\b>_\b _\b>\n+\u00a0 Specialization of _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be for _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b _\b>\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bD_\bu_\bn_\be\n+\u00a0 _\bD_\bu_\bn_\be namespace.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test for equality using epsilon\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test for inequality using epsilon\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first greater than second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first lesser than second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first greater or equal second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first lesser or equal second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::\n+ value())\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0 round using epsilon\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::value())\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0 truncate using epsilon\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be >::value())\n+\u00a0\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00044_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00044_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: vc.hh Source File\n+dune-common: float_cmp.cc Source File\n \n \n \n \n \n \n \n@@ -74,38 +74,628 @@\n \n
    \n \n
    \n \n
    \n-
    vc.hh
    \n+
    float_cmp.cc
    \n
    \n
    \n-Go to the documentation of this file.
    1// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n-
    2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    3#ifndef DUNE_COMMON_VC_HH
    \n-
    4#define DUNE_COMMON_VC_HH
    \n-
    5
    \n-
    15#if HAVE_VC
    \n-
    16
    \n-
    17// include Vc's macro definitions
    \n-
    18#include <Vc/global.h>
    \n+Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+
    2// vi: set et ts=4 sw=2 sts=2:
    \n+
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n+
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n+
    5#include "float_cmp.hh"
    \n+
    6
    \n+
    7#include <vector>
    \n+
    8#include <limits>
    \n+
    9#include <algorithm>
    \n+
    10#include <cstdlib>
    \n+\n+
    12
    \n+
    13namespace Dune {
    \n+
    14
    \n+
    15
    \n+
    \n+
    16 namespace FloatCmp {
    \n+
    17 // traits
    \n
    19
    \n-
    20// undefine the macro that signals C++17 support, if set
    \n-
    21#ifdef Vc_CXX17
    \n-
    22#undef Vc_CXX17
    \n-
    23#endif
    \n-
    24
    \n-
    25// include the rest of Vc
    \n-
    26#include <Vc/Vc>
    \n-
    27
    \n-
    28#endif // HAVE_VC
    \n-
    29
    \n-
    30#endif // DUNE_COMMON_VC_HH
    \n+
    \n+
    23 template<class T> struct EpsilonType {
    \n+
    25 typedef T Type;
    \n+
    26 };
    \n+
    \n+
    28
    \n+
    33 template<class T, typename A>
    \n+
    \n+
    34 struct EpsilonType<std::vector<T, A> > {
    \n+
    36 typedef typename EpsilonType<T>::Type Type;
    \n+
    37 };
    \n+
    \n+
    39
    \n+
    44 template<class T, int n>
    \n+
    \n+
    45 struct EpsilonType<FieldVector<T, n> > {
    \n+
    47 typedef typename EpsilonType<T>::Type Type;
    \n+
    48 };
    \n+
    \n+
    49
    \n+
    50 // default epsilon
    \n+
    51 template<class T>
    \n+
    \n+\n+
    \n+
    53 static typename EpsilonType<T>::Type value()
    \n+
    54 { return std::numeric_limits<typename EpsilonType<T>::Type>::epsilon()*8.; }
    \n+
    \n+
    55 };
    \n+
    \n+
    56 template<class T>
    \n+
    \n+\n+
    \n+
    58 static typename EpsilonType<T>::Type value()
    \n+
    59 { return std::numeric_limits<typename EpsilonType<T>::Type>::epsilon()*8.; }
    \n+
    \n+
    60 };
    \n+
    \n+
    61 template<class T>
    \n+
    \n+\n+
    \n+
    63 static typename EpsilonType<T>::Type value()
    \n+
    64 { return std::max(std::numeric_limits<typename EpsilonType<T>::Type>::epsilon(), 1e-6); }
    \n+
    \n+
    65 };
    \n+
    \n+
    66
    \n+
    67 namespace Impl {
    \n+
    68 // basic comparison
    \n+
    69 template<class T, CmpStyle style = defaultCmpStyle>
    \n+
    70 struct eq_t;
    \n+
    71 template<class T>
    \n+
    72 struct eq_t<T, relativeWeak> {
    \n+
    73 static bool eq(const T &first,
    \n+
    74 const T &second,
    \n+\n+
    76 {
    \n+
    77 using std::abs;
    \n+
    78 return abs(first - second) <= epsilon*std::max(abs(first), abs(second));
    \n+
    79 }
    \n+
    80 };
    \n+
    81 template<class T>
    \n+
    82 struct eq_t<T, relativeStrong> {
    \n+
    83 static bool eq(const T &first,
    \n+
    84 const T &second,
    \n+\n+
    86 {
    \n+
    87 using std::abs;
    \n+
    88 return abs(first - second) <= epsilon*std::min(abs(first), abs(second));
    \n+
    89 }
    \n+
    90 };
    \n+
    91 template<class T>
    \n+
    92 struct eq_t<T, absolute> {
    \n+
    93 static bool eq(const T &first,
    \n+
    94 const T &second,
    \n+\n+
    96 {
    \n+
    97 using std::abs;
    \n+
    98 return abs(first-second) <= epsilon;
    \n+
    99 }
    \n+
    100 };
    \n+
    101 template<class T, CmpStyle cstyle>
    \n+
    102 struct eq_t_std_vec {
    \n+
    103 typedef std::vector<T> V;
    \n+
    104 static bool eq(const V &first,
    \n+
    105 const V &second,
    \n+
    106 typename EpsilonType<V>::Type epsilon = DefaultEpsilon<V>::value()) {
    \n+
    107 auto size = first.size();
    \n+
    108 if(size != second.size()) return false;
    \n+
    109 for(unsigned int i = 0; i < size; ++i)
    \n+
    110 if(!eq_t<T, cstyle>::eq(first[i], second[i], epsilon))
    \n+
    111 return false;
    \n+
    112 return true;
    \n+
    113 }
    \n+
    114 };
    \n+
    115 template< class T>
    \n+
    116 struct eq_t<std::vector<T>, relativeWeak> : eq_t_std_vec<T, relativeWeak> {};
    \n+
    117 template< class T>
    \n+
    118 struct eq_t<std::vector<T>, relativeStrong> : eq_t_std_vec<T, relativeStrong> {};
    \n+
    119 template< class T>
    \n+
    120 struct eq_t<std::vector<T>, absolute> : eq_t_std_vec<T, absolute> {};
    \n+
    121
    \n+
    122 template<class T, int n, CmpStyle cstyle>
    \n+
    123 struct eq_t_fvec {
    \n+
    124 typedef Dune::FieldVector<T, n> V;
    \n+
    125 static bool eq(const V &first,
    \n+
    126 const V &second,
    \n+
    127 typename EpsilonType<V>::Type epsilon = DefaultEpsilon<V>::value()) {
    \n+
    128 for(int i = 0; i < n; ++i)
    \n+
    129 if(!eq_t<T, cstyle>::eq(first[i], second[i], epsilon))
    \n+
    130 return false;
    \n+
    131 return true;
    \n+
    132 }
    \n+
    133 };
    \n+
    134 template< class T, int n >
    \n+
    135 struct eq_t< Dune::FieldVector<T, n>, relativeWeak> : eq_t_fvec<T, n, relativeWeak> {};
    \n+
    136 template< class T, int n >
    \n+
    137 struct eq_t< Dune::FieldVector<T, n>, relativeStrong> : eq_t_fvec<T, n, relativeStrong> {};
    \n+
    138 template< class T, int n >
    \n+
    139 struct eq_t< Dune::FieldVector<T, n>, absolute> : eq_t_fvec<T, n, absolute> {};
    \n+
    140 } // namespace Impl
    \n+
    141
    \n+
    142 // operations in functional style
    \n+
    143 template <class T, CmpStyle style>
    \n+
    \n+
    144 bool eq(const T &first,
    \n+
    145 const T &second,
    \n+
    146 typename EpsilonType<T>::Type epsilon)
    \n+
    147 {
    \n+
    148 return Impl::eq_t<T, style>::eq(first, second, epsilon);
    \n+
    149 }
    \n+
    \n+
    150 template <class T, CmpStyle style>
    \n+
    \n+
    151 bool ne(const T &first,
    \n+
    152 const T &second,
    \n+
    153 typename EpsilonType<T>::Type epsilon)
    \n+
    154 {
    \n+
    155 return !eq<T, style>(first, second, epsilon);
    \n+
    156 }
    \n+
    \n+
    157 template <class T, CmpStyle style>
    \n+
    \n+
    158 bool gt(const T &first,
    \n+
    159 const T &second,
    \n+
    160 typename EpsilonType<T>::Type epsilon)
    \n+
    161 {
    \n+
    162 return first > second && ne<T, style>(first, second, epsilon);
    \n+
    163 }
    \n+
    \n+
    164 template <class T, CmpStyle style>
    \n+
    \n+
    165 bool lt(const T &first,
    \n+
    166 const T &second,
    \n+
    167 typename EpsilonType<T>::Type epsilon)
    \n+
    168 {
    \n+
    169 return first < second && ne<T, style>(first, second, epsilon);
    \n+
    170 }
    \n+
    \n+
    171 template <class T, CmpStyle style>
    \n+
    \n+
    172 bool ge(const T &first,
    \n+
    173 const T &second,
    \n+
    174 typename EpsilonType<T>::Type epsilon)
    \n+
    175 {
    \n+
    176 return first > second || eq<T, style>(first, second, epsilon);
    \n+
    177 }
    \n+
    \n+
    178 template <class T, CmpStyle style>
    \n+
    \n+
    179 bool le(const T &first,
    \n+
    180 const T &second,
    \n+
    181 typename EpsilonType<T>::Type epsilon)
    \n+
    182 {
    \n+
    183 return first < second || eq<T, style>(first, second, epsilon);
    \n+
    184 }
    \n+
    \n+
    185
    \n+
    186 // default template arguments
    \n+
    187 template <class T>
    \n+
    \n+
    188 bool eq(const T &first,
    \n+
    189 const T &second,
    \n+\n+
    191 {
    \n+
    192 return eq<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    193 }
    \n+
    \n+
    194 template <class T>
    \n+
    \n+
    195 bool ne(const T &first,
    \n+
    196 const T &second,
    \n+\n+
    198 {
    \n+
    199 return ne<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    200 }
    \n+
    \n+
    201 template <class T>
    \n+
    \n+
    202 bool gt(const T &first,
    \n+
    203 const T &second,
    \n+\n+
    205 {
    \n+
    206 return gt<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    207 }
    \n+
    \n+
    208 template <class T>
    \n+
    \n+
    209 bool lt(const T &first,
    \n+
    210 const T &second,
    \n+\n+
    212 {
    \n+
    213 return lt<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    214 }
    \n+
    \n+
    215 template <class T>
    \n+
    \n+
    216 bool ge(const T &first,
    \n+
    217 const T &second,
    \n+\n+
    219 {
    \n+
    220 return ge<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    221 }
    \n+
    \n+
    222 template <class T>
    \n+
    \n+
    223 bool le(const T &first,
    \n+
    224 const T &second,
    \n+\n+
    226 {
    \n+
    227 return le<T, defaultCmpStyle>(first, second, epsilon);
    \n+
    228 }
    \n+
    \n+
    229
    \n+
    230 // rounding operations
    \n+
    231 namespace Impl {
    \n+
    232 template<class I, class T, CmpStyle cstyle = defaultCmpStyle, RoundingStyle rstyle = defaultRoundingStyle>
    \n+
    233 struct round_t;
    \n+
    234 template<class I, class T, CmpStyle cstyle>
    \n+
    235 struct round_t<I, T, cstyle, downward> {
    \n+
    236 static I
    \n+
    237 round(const T &val,
    \n+\n+
    239 // first get an approximation
    \n+
    240 I lower = I(val);
    \n+
    241 I upper;
    \n+
    242 if(eq<T, cstyle>(T(lower), val, epsilon)) return lower;
    \n+
    243 if(T(lower) > val) { upper = lower; lower--; }
    \n+
    244 else upper = lower+1;
    \n+
    245 if(le<T, cstyle>(val - T(lower), T(upper) - val, epsilon))
    \n+
    246 return lower;
    \n+
    247 else return upper;
    \n+
    248 }
    \n+
    249 };
    \n+
    250 template<class I, class T, CmpStyle cstyle>
    \n+
    251 struct round_t<I, T, cstyle, upward> {
    \n+
    252 static I
    \n+
    253 round(const T &val,
    \n+\n+
    255 // first get an approximation
    \n+
    256 I lower = I(val);
    \n+
    257 I upper;
    \n+
    258 if(eq<T, cstyle>(T(lower), val, epsilon)) return lower;
    \n+
    259 if(T(lower) > val) { upper = lower; lower--; }
    \n+
    260 else upper = lower+1;
    \n+
    261 if(lt<T, cstyle>(val - T(lower), T(upper) - val, epsilon))
    \n+
    262 return lower;
    \n+
    263 else return upper;
    \n+
    264 }
    \n+
    265 };
    \n+
    266 template<class I, class T, CmpStyle cstyle>
    \n+
    267 struct round_t<I, T, cstyle, towardZero> {
    \n+
    268 static I
    \n+
    269 round(const T &val,
    \n+\n+
    271 if(val > T(0))
    \n+
    272 return round_t<I, T, cstyle, downward>::round(val, epsilon);
    \n+
    273 else return round_t<I, T, cstyle, upward>::round(val, epsilon);
    \n+
    274 }
    \n+
    275 };
    \n+
    276 template<class I, class T, CmpStyle cstyle>
    \n+
    277 struct round_t<I, T, cstyle, towardInf> {
    \n+
    278 static I
    \n+
    279 round(const T &val,
    \n+\n+
    281 if(val > T(0))
    \n+
    282 return round_t<I, T, cstyle, upward>::round(val, epsilon);
    \n+
    283 else return round_t<I, T, cstyle, downward>::round(val, epsilon);
    \n+
    284 }
    \n+
    285 };
    \n+
    286 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    287 struct round_t<std::vector<I>, std::vector<T>, cstyle, rstyle> {
    \n+
    288 static std::vector<I>
    \n+
    289 round(const T &val,
    \n+\n+
    291 unsigned int size = val.size();
    \n+
    292 std::vector<I> res(size);
    \n+
    293 for(unsigned int i = 0; i < size; ++i)
    \n+
    294 res[i] = round_t<I, T, cstyle, rstyle>::round(val[i], epsilon);
    \n+
    295 return res;
    \n+
    296 }
    \n+
    297 };
    \n+
    298 template<class I, class T, int n, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    299 struct round_t<Dune::FieldVector<I, n>, Dune::FieldVector<T, n>, cstyle, rstyle> {
    \n+\n+
    301 round(const T &val,
    \n+\n+\n+
    304 for(int i = 0; i < n; ++i)
    \n+
    305 res[i] = round_t<I, T, cstyle, rstyle>::round(val[i], epsilon);
    \n+
    306 return res;
    \n+
    307 }
    \n+
    308 };
    \n+
    309 } // end namespace Impl
    \n+
    310 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    \n+
    311 I round(const T &val, typename EpsilonType<T>::Type epsilon /*= DefaultEpsilon<T, cstyle>::value()*/)
    \n+
    312 {
    \n+
    313 return Impl::round_t<I, T, cstyle, rstyle>::round(val, epsilon);
    \n+
    314 }
    \n+
    \n+
    315 template<class I, class T, CmpStyle cstyle>
    \n+
    \n+
    316 I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value())
    \n+
    317 {
    \n+
    318 return round<I, T, cstyle, defaultRoundingStyle>(val, epsilon);
    \n+
    319 }
    \n+
    \n+
    320 template<class I, class T, RoundingStyle rstyle>
    \n+
    321 I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, defaultCmpStyle>::value())
    \n+
    322 {
    \n+
    323 return round<I, T, defaultCmpStyle, rstyle>(val, epsilon);
    \n+
    324 }
    \n+
    325 template<class I, class T>
    \n+
    \n+\n+
    327 {
    \n+
    328 return round<I, T, defaultCmpStyle>(val, epsilon);
    \n+
    329 }
    \n+
    \n+
    330
    \n+
    331 // truncation
    \n+
    332 namespace Impl {
    \n+
    333 template<class I, class T, CmpStyle cstyle = defaultCmpStyle, RoundingStyle rstyle = defaultRoundingStyle>
    \n+
    334 struct trunc_t;
    \n+
    335 template<class I, class T, CmpStyle cstyle>
    \n+
    336 struct trunc_t<I, T, cstyle, downward> {
    \n+
    337 static I
    \n+
    338 trunc(const T &val,
    \n+\n+
    340 // this should be optimized away unless needed
    \n+
    341 if(!std::numeric_limits<I>::is_signed)
    \n+
    342 // make sure this works for all useful cases even if I is an unsigned type
    \n+
    343 if(eq<T, cstyle>(val, T(0), epsilon)) return I(0);
    \n+
    344 // first get an approximation
    \n+
    345 I lower = I(val); // now |val-lower| < 1
    \n+
    346 // make sure we're really lower in case the cast truncated to an unexpected direction
    \n+
    347 if(T(lower) > val) lower--; // now val-lower < 1
    \n+
    348 // check whether lower + 1 is approximately val
    \n+
    349 if(eq<T, cstyle>(T(lower+1), val, epsilon))
    \n+
    350 return lower+1;
    \n+
    351 else return lower;
    \n+
    352 }
    \n+
    353 };
    \n+
    354 template<class I, class T, CmpStyle cstyle>
    \n+
    355 struct trunc_t<I, T, cstyle, upward> {
    \n+
    356 static I
    \n+
    357 trunc(const T &val,
    \n+\n+
    359 I upper = trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n+
    360 if(ne<T, cstyle>(T(upper), val, epsilon)) ++upper;
    \n+
    361 return upper;
    \n+
    362 }
    \n+
    363 };
    \n+
    364 template<class I, class T, CmpStyle cstyle>
    \n+
    365 struct trunc_t<I, T, cstyle, towardZero> {
    \n+
    366 static I
    \n+
    367 trunc(const T &val,
    \n+\n+
    369 if(val > T(0)) return trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n+
    370 else return trunc_t<I, T, cstyle, upward>::trunc(val, epsilon);
    \n+
    371 }
    \n+
    372 };
    \n+
    373 template<class I, class T, CmpStyle cstyle>
    \n+
    374 struct trunc_t<I, T, cstyle, towardInf> {
    \n+
    375 static I
    \n+
    376 trunc(const T &val,
    \n+\n+
    378 if(val > T(0)) return trunc_t<I, T, cstyle, upward>::trunc(val, epsilon);
    \n+
    379 else return trunc_t<I, T, cstyle, downward>::trunc(val, epsilon);
    \n+
    380 }
    \n+
    381 };
    \n+
    382 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    383 struct trunc_t<std::vector<I>, std::vector<T>, cstyle, rstyle> {
    \n+
    384 static std::vector<I>
    \n+
    385 trunc(const std::vector<T> &val,
    \n+\n+
    387 unsigned int size = val.size();
    \n+
    388 std::vector<I> res(size);
    \n+
    389 for(unsigned int i = 0; i < size; ++i)
    \n+
    390 res[i] = trunc_t<I, T, cstyle, rstyle>::trunc(val[i], epsilon);
    \n+
    391 return res;
    \n+
    392 }
    \n+
    393 };
    \n+
    394 template<class I, class T, int n, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    395 struct trunc_t<Dune::FieldVector<I, n>, Dune::FieldVector<T, n>, cstyle, rstyle> {
    \n+\n+\n+\n+\n+
    400 for(int i = 0; i < n; ++i)
    \n+
    401 res[i] = trunc_t<I, T, cstyle, rstyle>::trunc(val[i], epsilon);
    \n+
    402 return res;
    \n+
    403 }
    \n+
    404 };
    \n+
    405 } // namespace Impl
    \n+
    406 template<class I, class T, CmpStyle cstyle, RoundingStyle rstyle>
    \n+
    \n+
    407 I trunc(const T &val, typename EpsilonType<T>::Type epsilon /*= DefaultEpsilon<T, cstyle>::value()*/)
    \n+
    408 {
    \n+
    409 return Impl::trunc_t<I, T, cstyle, rstyle>::trunc(val, epsilon);
    \n+
    410 }
    \n+
    \n+
    411 template<class I, class T, CmpStyle cstyle>
    \n+
    \n+
    412 I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value())
    \n+
    413 {
    \n+
    414 return trunc<I, T, cstyle, defaultRoundingStyle>(val, epsilon);
    \n+
    415 }
    \n+
    \n+
    416 template<class I, class T, RoundingStyle rstyle>
    \n+
    417 I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, defaultCmpStyle>::value())
    \n+
    418 {
    \n+
    419 return trunc<I, T, defaultCmpStyle, rstyle>(val, epsilon);
    \n+
    420 }
    \n+
    421 template<class I, class T>
    \n+
    \n+\n+
    423 {
    \n+
    424 return trunc<I, T, defaultCmpStyle>(val, epsilon);
    \n+
    425 }
    \n+
    \n+
    426 } //namespace Dune
    \n+
    \n+
    427
    \n+
    428 // oo interface
    \n+
    429 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    431 FloatCmpOps(EpsilonType epsilon) : epsilon_(epsilon) {}
    \n+
    \n+
    432
    \n+
    433
    \n+
    434 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+\n+
    \n+\n+
    437 {
    \n+
    438 return epsilon_;
    \n+
    439 }
    \n+
    \n+
    440
    \n+
    441 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    442 void
    \n+
    \n+\n+
    444 {
    \n+
    445 epsilon_ = epsilon__;
    \n+
    446 }
    \n+
    \n+
    447
    \n+
    448
    \n+
    449 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    451 eq(const ValueType &first, const ValueType &second) const
    \n+
    452 {
    \n+
    453 return Dune::FloatCmp::eq<ValueType, cstyle>(first, second, epsilon_);
    \n+
    454 }
    \n+
    \n+
    455
    \n+
    456 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    458 ne(const ValueType &first, const ValueType &second) const
    \n+
    459 {
    \n+
    460 return Dune::FloatCmp::ne<ValueType, cstyle>(first, second, epsilon_);
    \n+
    461 }
    \n+
    \n+
    462
    \n+
    463 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    465 gt(const ValueType &first, const ValueType &second) const
    \n+
    466 {
    \n+
    467 return Dune::FloatCmp::gt<ValueType, cstyle>(first, second, epsilon_);
    \n+
    468 }
    \n+
    \n+
    469
    \n+
    470 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    472 lt(const ValueType &first, const ValueType &second) const
    \n+
    473 {
    \n+
    474 return Dune::FloatCmp::lt<ValueType, cstyle>(first, second, epsilon_);
    \n+
    475 }
    \n+
    \n+
    476
    \n+
    477 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    479 ge(const ValueType &first, const ValueType &second) const
    \n+
    480 {
    \n+
    481 return Dune::FloatCmp::ge<ValueType, cstyle>(first, second, epsilon_);
    \n+
    482 }
    \n+
    \n+
    483
    \n+
    484 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    \n+\n+
    486 le(const ValueType &first, const ValueType &second) const
    \n+
    487 {
    \n+
    488 return Dune::FloatCmp::le<ValueType, cstyle>(first, second, epsilon_);
    \n+
    489 }
    \n+
    \n+
    490
    \n+
    491
    \n+
    492 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    493 template<class I>
    \n+
    \n+\n+
    495 round(const ValueType &val) const
    \n+
    496 {
    \n+
    497 return Dune::FloatCmp::round<I, ValueType, cstyle, rstyle_>(val, epsilon_);
    \n+
    498 }
    \n+
    \n+
    499
    \n+
    500 template<class T, FloatCmp::CmpStyle cstyle_, FloatCmp::RoundingStyle rstyle_>
    \n+
    501 template<class I>
    \n+
    \n+\n+
    503 trunc(const ValueType &val) const
    \n+
    504 {
    \n+
    505 return Dune::FloatCmp::trunc<I, ValueType, cstyle, rstyle_>(val, epsilon_);
    \n+
    506 }
    \n+
    \n+
    507
    \n+
    508} //namespace Dune
    \n+
    Various ways to compare floating-point numbers.
    \n+
    Implements a vector constructed from a given type representing a field and a compile-time given size.
    \n+
    bool ne(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for inequality using epsilon
    Definition float_cmp.cc:151
    \n+
    bool eq(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for equality using epsilon
    Definition float_cmp.cc:144
    \n+
    I round(const T &val, typename EpsilonType< T >::Type epsilon)
    round using epsilon
    Definition float_cmp.cc:311
    \n+
    I trunc(const T &val, typename EpsilonType< T >::Type epsilon)
    truncate using epsilon
    Definition float_cmp.cc:407
    \n+
    bool lt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser than second
    Definition float_cmp.cc:165
    \n+
    bool gt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater than second
    Definition float_cmp.cc:158
    \n+
    bool ge(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater or equal second
    Definition float_cmp.cc:172
    \n+
    bool le(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser or equal second
    Definition float_cmp.cc:179
    \n+
    @ relativeStrong
    |a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon
    Definition float_cmp.hh:108
    \n+
    @ relativeWeak
    |a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon
    Definition float_cmp.hh:106
    \n+
    @ absolute
    |a-b| <= epsilon
    Definition float_cmp.hh:110
    \n+
    @ towardZero
    always round toward 0
    Definition float_cmp.hh:118
    \n+
    @ towardInf
    always round away from 0
    Definition float_cmp.hh:120
    \n+
    @ upward
    round toward
    Definition float_cmp.hh:124
    \n+
    @ downward
    round toward
    Definition float_cmp.hh:122
    \n+
    STL namespace.
    \n+
    Dune namespace.
    Definition alignedallocator.hh:13
    \n+
    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
    \n+
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n+
    Mapping of value type to epsilon type.
    Definition float_cmp.cc:23
    \n+
    T Type
    The epsilon type corresponding to value type T.
    Definition float_cmp.cc:25
    \n+
    EpsilonType< T >::Type Type
    The epsilon type corresponding to value type std::vector<T, A>
    Definition float_cmp.cc:36
    \n+
    EpsilonType< T >::Type Type
    The epsilon type corresponding to value type Dune::FieldVector<T, n>
    Definition float_cmp.cc:47
    \n+
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:53
    \n+
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:58
    \n+
    static EpsilonType< T >::Type value()
    Definition float_cmp.cc:63
    \n+
    mapping from a value type and a compare style to a default epsilon
    Definition float_cmp.hh:138
    \n+
    static EpsilonType< T >::Type value()
    Returns the default epsilon for the given value type and compare style.
    \n+
    bool le(const ValueType &first, const ValueType &second) const
    test if first lesser or equal second
    Definition float_cmp.cc:486
    \n+
    FloatCmpOps(EpsilonType epsilon=DefaultEpsilon::value())
    construct an operations object
    Definition float_cmp.cc:431
    \n+
    bool eq(const ValueType &first, const ValueType &second) const
    test for equality using epsilon
    Definition float_cmp.cc:451
    \n+
    bool lt(const ValueType &first, const ValueType &second) const
    test if first lesser than second
    Definition float_cmp.cc:472
    \n+
    bool ge(const ValueType &first, const ValueType &second) const
    test if first greater or equal second
    Definition float_cmp.cc:479
    \n+
    FloatCmp::EpsilonType< T >::Type EpsilonType
    Type of the epsilon.
    Definition float_cmp.hh:304
    \n+
    bool ne(const ValueType &first, const ValueType &second) const
    test for inequality using epsilon
    Definition float_cmp.cc:458
    \n+
    T ValueType
    Type of the values to compare.
    Definition float_cmp.hh:299
    \n+
    EpsilonType epsilon() const
    return the current epsilon
    Definition float_cmp.cc:436
    \n+
    I round(const ValueType &val) const
    round using epsilon
    Definition float_cmp.cc:495
    \n+
    I trunc(const ValueType &val) const
    truncate using epsilon
    Definition float_cmp.cc:503
    \n+
    bool gt(const ValueType &first, const ValueType &second) const
    test if first greater than second
    Definition float_cmp.cc:465
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,712 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-vc.hh\n+float_cmp.cc\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n+1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+2// vi: set et ts=4 sw=2 sts=2:\n+3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n-2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-3#ifndef DUNE_COMMON_VC_HH\n-4#define DUNE_COMMON_VC_HH\n-5\n-15#if HAVE_VC\n-16\n-17// include Vc's macro definitions\n-18#include \n+4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n+5#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\"\n+6\n+7#include \n+8#include \n+9#include \n+10#include \n+11#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+12\n+13namespace _\bD_\bu_\bn_\be {\n+14\n+15\n+_\b1_\b6 namespace FloatCmp {\n+17 // traits\n 19\n-20// undefine the macro that signals C++17 support, if set\n-21#ifdef Vc_CXX17\n-22#undef Vc_CXX17\n-23#endif\n-24\n-25// include the rest of Vc\n-26#include \n-27\n-28#endif // HAVE_VC\n-29\n-30#endif // DUNE_COMMON_VC_HH\n+_\b2_\b3 template struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be {\n+_\b2_\b5 typedef T _\bT_\by_\bp_\be;\n+26 };\n+28\n+33 template\n+_\b3_\b4 struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be<_\bs_\bt_\bd::vector > {\n+_\b3_\b6 typedef typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bT_\by_\bp_\be;\n+37 };\n+39\n+44 template\n+_\b4_\b5 struct _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be<_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br > {\n+_\b4_\b7 typedef typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bT_\by_\bp_\be;\n+48 };\n+49\n+50 // default epsilon\n+51 template\n+_\b5_\b2 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n+_\b5_\b3 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n+54 { return std::numeric_limits::Type>::epsilon()*8.; }\n+55 };\n+56 template\n+_\b5_\b7 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n+_\b5_\b8 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n+59 { return std::numeric_limits::Type>::epsilon()*8.; }\n+60 };\n+61 template\n+_\b6_\b2 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n+_\b6_\b3 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be()\n+64 { return std::max(std::numeric_limits_\b:_\b:_\bT_\by_\bp_\be>::\n+epsilon(), 1e-6); }\n+65 };\n+66\n+67 namespace Impl {\n+68 // basic comparison\n+69 template\n+70 struct eq_t;\n+71 template\n+72 struct eq_t {\n+73 static bool _\be_\bq(const T &first,\n+74 const T &second,\n+75 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+76 {\n+77 using std::abs;\n+78 return abs(first - second) <= epsilon*std::max(abs(first), abs(second));\n+79 }\n+80 };\n+81 template\n+82 struct eq_t {\n+83 static bool _\be_\bq(const T &first,\n+84 const T &second,\n+85 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+86 {\n+87 using std::abs;\n+88 return abs(first - second) <= epsilon*std::min(abs(first), abs(second));\n+89 }\n+90 };\n+91 template\n+92 struct eq_t {\n+93 static bool _\be_\bq(const T &first,\n+94 const T &second,\n+95 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+96 {\n+97 using std::abs;\n+98 return abs(first-second) <= epsilon;\n+99 }\n+100 };\n+101 template\n+102 struct eq_t_std_vec {\n+103 typedef std::vector V;\n+104 static bool _\be_\bq(const V &first,\n+105 const V &second,\n+106 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bV_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be()) {\n+107 auto _\bs_\bi_\bz_\be = first.size();\n+108 if(_\bs_\bi_\bz_\be != second.size()) return false;\n+109 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n+110 if(!eq_t::eq(first[i], second[i], epsilon))\n+111 return false;\n+112 return true;\n+113 }\n+114 };\n+115 template< class T>\n+116 struct eq_t<_\bs_\bt_\bd::vector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk> : eq_t_std_vec\n+{};\n+117 template< class T>\n+118 struct eq_t<_\bs_\bt_\bd::vector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg> : eq_t_std_vec {};\n+119 template< class T>\n+120 struct eq_t<_\bs_\bt_\bd::vector, _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be> : eq_t_std_vec {};\n+121\n+122 template\n+123 struct eq_t_fvec {\n+124 typedef _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bn_\b> V;\n+125 static bool _\be_\bq(const V &first,\n+126 const V &second,\n+127 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bV_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bV_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be()) {\n+128 for(int i = 0; i < n; ++i)\n+129 if(!eq_t::eq(first[i], second[i], epsilon))\n+130 return false;\n+131 return true;\n+132 }\n+133 };\n+134 template< class T, int n >\n+135 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk> : eq_t_fvec {};\n+136 template< class T, int n >\n+137 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg> : eq_t_fvec {};\n+138 template< class T, int n >\n+139 struct eq_t< _\bD_\bu_\bn_\be::FieldVector, _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be> : eq_t_fvec\n+{};\n+140 } // namespace Impl\n+141\n+142 // operations in functional style\n+143 template \n+_\b1_\b4_\b4 bool _\be_\bq(const T &first,\n+145 const T &second,\n+146 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+147 {\n+148 return Impl::eq_t::eq(first, second, epsilon);\n+149 }\n+150 template \n+_\b1_\b5_\b1 bool _\bn_\be(const T &first,\n+152 const T &second,\n+153 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+154 {\n+155 return !eq(first, second, epsilon);\n+156 }\n+157 template \n+_\b1_\b5_\b8 bool _\bg_\bt(const T &first,\n+159 const T &second,\n+160 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+161 {\n+162 return first > second && ne(first, second, epsilon);\n+163 }\n+164 template \n+_\b1_\b6_\b5 bool _\bl_\bt(const T &first,\n+166 const T &second,\n+167 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+168 {\n+169 return first < second && ne(first, second, epsilon);\n+170 }\n+171 template \n+_\b1_\b7_\b2 bool _\bg_\be(const T &first,\n+173 const T &second,\n+174 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+175 {\n+176 return first > second || eq(first, second, epsilon);\n+177 }\n+178 template \n+_\b1_\b7_\b9 bool _\bl_\be(const T &first,\n+180 const T &second,\n+181 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon)\n+182 {\n+183 return first < second || eq(first, second, epsilon);\n+184 }\n+185\n+186 // default template arguments\n+187 template \n+_\b1_\b8_\b8 bool _\be_\bq(const T &first,\n+189 const T &second,\n+190 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+191 {\n+192 return eq(first, second, epsilon);\n+193 }\n+194 template \n+_\b1_\b9_\b5 bool _\bn_\be(const T &first,\n+196 const T &second,\n+197 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+198 {\n+199 return ne(first, second, epsilon);\n+200 }\n+201 template \n+_\b2_\b0_\b2 bool _\bg_\bt(const T &first,\n+203 const T &second,\n+204 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+205 {\n+206 return gt(first, second, epsilon);\n+207 }\n+208 template \n+_\b2_\b0_\b9 bool _\bl_\bt(const T &first,\n+210 const T &second,\n+211 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+212 {\n+213 return lt(first, second, epsilon);\n+214 }\n+215 template \n+_\b2_\b1_\b6 bool _\bg_\be(const T &first,\n+217 const T &second,\n+218 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+219 {\n+220 return ge(first, second, epsilon);\n+221 }\n+222 template \n+_\b2_\b2_\b3 bool _\bl_\be(const T &first,\n+224 const T &second,\n+225 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,\n+_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+226 {\n+227 return le(first, second, epsilon);\n+228 }\n+229\n+230 // rounding operations\n+231 namespace Impl {\n+232 template\n+233 struct round_t;\n+234 template\n+235 struct round_t {\n+236 static I\n+237 _\br_\bo_\bu_\bn_\bd(const T &val,\n+238 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+239 // first get an approximation\n+240 I lower = I(val);\n+241 I upper;\n+242 if(eq(T(lower), val, epsilon)) return lower;\n+243 if(T(lower) > val) { upper = lower; lower--; }\n+244 else upper = lower+1;\n+245 if(le(val - T(lower), T(upper) - val, epsilon))\n+246 return lower;\n+247 else return upper;\n+248 }\n+249 };\n+250 template\n+251 struct round_t {\n+252 static I\n+253 _\br_\bo_\bu_\bn_\bd(const T &val,\n+254 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+255 // first get an approximation\n+256 I lower = I(val);\n+257 I upper;\n+258 if(eq(T(lower), val, epsilon)) return lower;\n+259 if(T(lower) > val) { upper = lower; lower--; }\n+260 else upper = lower+1;\n+261 if(lt(val - T(lower), T(upper) - val, epsilon))\n+262 return lower;\n+263 else return upper;\n+264 }\n+265 };\n+266 template\n+267 struct round_t {\n+268 static I\n+269 _\br_\bo_\bu_\bn_\bd(const T &val,\n+270 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+271 if(val > T(0))\n+272 return round_t::round(val, epsilon);\n+273 else return round_t::round(val, epsilon);\n+274 }\n+275 };\n+276 template\n+277 struct round_t {\n+278 static I\n+279 _\br_\bo_\bu_\bn_\bd(const T &val,\n+280 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+281 if(val > T(0))\n+282 return round_t::round(val, epsilon);\n+283 else return round_t::round(val, epsilon);\n+284 }\n+285 };\n+286 template\n+287 struct round_t<_\bs_\bt_\bd::vector, std::vector, cstyle, rstyle> {\n+288 static std::vector\n+289 _\br_\bo_\bu_\bn_\bd(const T &val,\n+290 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+291 unsigned int _\bs_\bi_\bz_\be = val.size();\n+292 std::vector res(_\bs_\bi_\bz_\be);\n+293 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n+294 res[i] = round_t::round(val[i], epsilon);\n+295 return res;\n+296 }\n+297 };\n+298 template\n+299 struct round_t<_\bD_\bu_\bn_\be::FieldVector, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br, cstyle,\n+rstyle> {\n+300 static _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b>\n+301 _\br_\bo_\bu_\bn_\bd(const T &val,\n+302 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+303 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b> res;\n+304 for(int i = 0; i < n; ++i)\n+305 res[i] = round_t::round(val[i], epsilon);\n+306 return res;\n+307 }\n+308 };\n+309 } // end namespace Impl\n+310 template\n+_\b3_\b1_\b1 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon /*=\n+DefaultEpsilon::value()*/)\n+312 {\n+313 return Impl::round_t::round(val, epsilon);\n+314 }\n+315 template\n+_\b3_\b1_\b6 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+317 {\n+318 return round(val, epsilon);\n+319 }\n+320 template\n+321 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+322 {\n+323 return round(val, epsilon);\n+324 }\n+325 template\n+_\b3_\b2_\b6 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+327 {\n+328 return round(val, epsilon);\n+329 }\n+330\n+331 // truncation\n+332 namespace Impl {\n+333 template\n+334 struct trunc_t;\n+335 template\n+336 struct trunc_t {\n+337 static I\n+338 _\bt_\br_\bu_\bn_\bc(const T &val,\n+339 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+340 // this should be optimized away unless needed\n+341 if(!std::numeric_limits::is_signed)\n+342 // make sure this works for all useful cases even if I is an unsigned type\n+343 if(eq(val, T(0), epsilon)) return I(0);\n+344 // first get an approximation\n+345 I lower = I(val); // now |val-lower| < 1\n+346 // make sure we're really lower in case the cast truncated to an unexpected\n+direction\n+347 if(T(lower) > val) lower--; // now val-lower < 1\n+348 // check whether lower + 1 is approximately val\n+349 if(eq(T(lower+1), val, epsilon))\n+350 return lower+1;\n+351 else return lower;\n+352 }\n+353 };\n+354 template\n+355 struct trunc_t {\n+356 static I\n+357 _\bt_\br_\bu_\bn_\bc(const T &val,\n+358 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+359 I upper = trunc_t::trunc(val, epsilon);\n+360 if(ne(T(upper), val, epsilon)) ++upper;\n+361 return upper;\n+362 }\n+363 };\n+364 template\n+365 struct trunc_t {\n+366 static I\n+367 _\bt_\br_\bu_\bn_\bc(const T &val,\n+368 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+369 if(val > T(0)) return trunc_t::trunc(val, epsilon);\n+370 else return trunc_t::trunc(val, epsilon);\n+371 }\n+372 };\n+373 template\n+374 struct trunc_t {\n+375 static I\n+376 _\bt_\br_\bu_\bn_\bc(const T &val,\n+377 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+378 if(val > T(0)) return trunc_t::trunc(val, epsilon);\n+379 else return trunc_t::trunc(val, epsilon);\n+380 }\n+381 };\n+382 template\n+383 struct trunc_t<_\bs_\bt_\bd::vector, std::vector, cstyle, rstyle> {\n+384 static std::vector\n+385 _\bt_\br_\bu_\bn_\bc(const std::vector &val,\n+386 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+387 unsigned int _\bs_\bi_\bz_\be = val.size();\n+388 std::vector res(_\bs_\bi_\bz_\be);\n+389 for(unsigned int i = 0; i < _\bs_\bi_\bz_\be; ++i)\n+390 res[i] = trunc_t::trunc(val[i], epsilon);\n+391 return res;\n+392 }\n+393 };\n+394 template\n+395 struct trunc_t<_\bD_\bu_\bn_\be::FieldVector, _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br, cstyle,\n+rstyle> {\n+396 static _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b>\n+397 _\bt_\br_\bu_\bn_\bc(const _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bn_\b> &val,\n+398 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = (_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+())) {\n+399 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bI_\b,_\b _\bn_\b> res;\n+400 for(int i = 0; i < n; ++i)\n+401 res[i] = trunc_t::trunc(val[i], epsilon);\n+402 return res;\n+403 }\n+404 };\n+405 } // namespace Impl\n+406 template\n+_\b4_\b0_\b7 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon /*=\n+DefaultEpsilon::value()*/)\n+408 {\n+409 return Impl::trunc_t::trunc(val, epsilon);\n+410 }\n+411 template\n+_\b4_\b1_\b2 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+413 {\n+414 return trunc(val, epsilon);\n+415 }\n+416 template\n+417 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+418 {\n+419 return trunc(val, epsilon);\n+420 }\n+421 template\n+_\b4_\b2_\b2 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be())\n+423 {\n+424 return trunc(val, epsilon);\n+425 }\n+426 } //namespace Dune\n+427\n+428 // oo interface\n+429 template\n+_\b4_\b3_\b0 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+431_\b _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon) : epsilon_(epsilon) {}\n+432\n+433\n+434 template\n+435 typename _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n+_\b4_\b3_\b6 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn() const\n+437 {\n+438 return epsilon_;\n+439 }\n+440\n+441 template\n+442 void\n+_\b4_\b4_\b3 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon__)\n+444 {\n+445 epsilon_ = epsilon__;\n+446 }\n+447\n+448\n+449 template\n+_\b4_\b5_\b0 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+451_\b _\be_\bq(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+452 {\n+453 return Dune::FloatCmp::eq(first, second, epsilon_);\n+454 }\n+455\n+456 template\n+_\b4_\b5_\b7 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+458_\b _\bn_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+459 {\n+460 return Dune::FloatCmp::ne(first, second, epsilon_);\n+461 }\n+462\n+463 template\n+_\b4_\b6_\b4 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+465_\b _\bg_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+466 {\n+467 return Dune::FloatCmp::gt(first, second, epsilon_);\n+468 }\n+469\n+470 template\n+_\b4_\b7_\b1 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+472_\b _\bl_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+473 {\n+474 return Dune::FloatCmp::lt(first, second, epsilon_);\n+475 }\n+476\n+477 template\n+_\b4_\b7_\b8 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+479_\b _\bg_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+480 {\n+481 return Dune::FloatCmp::ge(first, second, epsilon_);\n+482 }\n+483\n+484 template\n+_\b4_\b8_\b5 bool _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+486_\b _\bl_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const\n+487 {\n+488 return Dune::FloatCmp::le(first, second, epsilon_);\n+489 }\n+490\n+491\n+492 template\n+493 template\n+_\b4_\b9_\b4 I _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+495_\b _\br_\bo_\bu_\bn_\bd(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const\n+496 {\n+497 return Dune::FloatCmp::round(val, epsilon_);\n+498 }\n+499\n+500 template\n+501 template\n+_\b5_\b0_\b2 I _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b>_\b:_\b:\n+503_\b _\bt_\br_\bu_\bn_\bc(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const\n+504 {\n+505 return Dune::FloatCmp::trunc(val, epsilon_);\n+506 }\n+507\n+508} //namespace Dune\n+_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bh_\bh\n+Various ways to compare floating-point numbers.\n+_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh\n+Implements a vector constructed from a given type representing a field and a\n+compile-time given size.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be\n+bool ne(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test for inequality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:151\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq\n+bool eq(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test for equality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd\n+I round(const T &val, typename EpsilonType< T >::Type epsilon)\n+round using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:311\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc\n+I trunc(const T &val, typename EpsilonType< T >::Type epsilon)\n+truncate using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:407\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt\n+bool lt(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first lesser than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt\n+bool gt(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first greater than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be\n+bool ge(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first greater or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:172\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be\n+bool le(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first lesser or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg\n+@ relativeStrong\n+|a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk\n+@ relativeWeak\n+|a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be\n+@ absolute\n+|a-b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo\n+@ towardZero\n+always round toward 0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bI_\bn_\bf\n+@ towardInf\n+always round away from 0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bu_\bp_\bw_\ba_\br_\bd\n+@ upward\n+round toward\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd\n+@ downward\n+round toward\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:122\n+_\bs_\bt_\bd\n+STL namespace.\n+_\bD_\bu_\bn_\be\n+Dune namespace.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n+_\bD_\bu_\bn_\be_\b:_\b:_\bs_\bi_\bz_\be\n+constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::\n+integer_sequence< T, II... >)\n+Return the size of the sequence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn integersequence.hh:75\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+vector space out of a tensor product of fields.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:91\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n+Mapping of value type to epsilon type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:23\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b:_\b:_\bT_\by_\bp_\be\n+T Type\n+The epsilon type corresponding to value type T.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bs_\bt_\bd_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>_\b _\b>_\b:_\b:_\bT_\by_\bp_\be\n+EpsilonType< T >::Type Type\n+The epsilon type corresponding to value type std::vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:36\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bn_\b _\b>_\b _\b>_\b:_\b:_\bT_\by_\bp_\be\n+EpsilonType< T >::Type Type\n+The epsilon type corresponding to value type Dune::FieldVector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:47\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static EpsilonType< T >::Type value()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:53\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static EpsilonType< T >::Type value()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:58\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static EpsilonType< T >::Type value()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:63\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn\n+mapping from a value type and a compare style to a default epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static EpsilonType< T >::Type value()\n+Returns the default epsilon for the given value type and compare style.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\be\n+bool le(const ValueType &first, const ValueType &second) const\n+test if first lesser or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:486\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs\n+FloatCmpOps(EpsilonType epsilon=DefaultEpsilon::value())\n+construct an operations object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:431\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bq\n+bool eq(const ValueType &first, const ValueType &second) const\n+test for equality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:451\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\bt\n+bool lt(const ValueType &first, const ValueType &second) const\n+test if first lesser than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:472\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\be\n+bool ge(const ValueType &first, const ValueType &second) const\n+test if first greater or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:479\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n+FloatCmp::EpsilonType< T >::Type EpsilonType\n+Type of the epsilon.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:304\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bn_\be\n+bool ne(const ValueType &first, const ValueType &second) const\n+test for inequality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:458\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be\n+T ValueType\n+Type of the values to compare.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn\n+EpsilonType epsilon() const\n+return the current epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:436\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\br_\bo_\bu_\bn_\bd\n+I round(const ValueType &val) const\n+round using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:495\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bt_\br_\bu_\bn_\bc\n+I trunc(const ValueType &val) const\n+truncate using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:503\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\bt\n+bool gt(const ValueType &first, const ValueType &second) const\n+test if first greater than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:465\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00047.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00047.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: matrixconcepts.hh File Reference\n+dune-common: dynmatrixev.hh File Reference\n \n \n \n \n \n \n \n@@ -70,30 +70,47 @@\n
    \n \n
    \n
    \n
    \n \n-
    matrixconcepts.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    dynmatrixev.hh File Reference
    \n \n
    \n-
    #include <utility>
    \n-#include <type_traits>
    \n-#include <dune/common/std/type_traits.hh>
    \n+\n+

    utility functions to compute eigenvalues for dense matrices. \n+More...

    \n+
    #include <algorithm>
    \n+#include <memory>
    \n+#include <dune-common-config.hh>
    \n+#include "dynmatrix.hh"
    \n+#include "fmatrixev.hh"
    \n
    \n

    Go to the source code of this file.

    \n \n \n \n \n \n+\n+\n+

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::DynamicMatrixHelp
     
    \n+\n+\n+\n+\n+\n

    \n+Functions

    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
     
    \n-
    \n+

    Detailed Description

    \n+

    utility functions to compute eigenvalues for dense matrices.

    \n+
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,18 +1,32 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-matrixconcepts.hh File Reference\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\bd_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+dynmatrixev.hh File Reference\n+utility functions to compute eigenvalues for dense matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \"_\bd_\by_\bn_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\"\n+#include \"_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bN_\bo_\bn_\bS_\by_\bm (const _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx< K\n+ > &matrix, _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br< C > &eigenValues, std::vector<\n+ _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br< K > > *eigenVectors=nullptr)\n+\u00a0 calculates the eigenvalues of a symmetric field matrix\n+\u00a0\n+*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+utility functions to compute eigenvalues for dense matrices.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: matrixconcepts.hh Source File\n+dune-common: dynmatrixev.hh Source File\n \n \n \n \n \n \n \n@@ -74,109 +74,125 @@\n \n
    \n \n
    \n \n
    \n-
    matrixconcepts.hh
    \n+
    dynmatrixev.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_COMMON_MATRIXCONCEPTS_HH
    \n-
    6#define DUNE_COMMON_MATRIXCONCEPTS_HH
    \n+
    5#ifndef DUNE_DYNMATRIXEIGENVALUES_HH
    \n+
    6#define DUNE_DYNMATRIXEIGENVALUES_HH
    \n
    7
    \n-
    8
    \n-
    9
    \n-
    10#include <utility>
    \n-
    11#include <type_traits>
    \n+
    8#include <algorithm>
    \n+
    9#include <memory>
    \n+
    10
    \n+
    11#include <dune-common-config.hh> // HAVE_LAPACK
    \n
    12
    \n-\n-
    14
    \n+
    13#include "dynmatrix.hh"
    \n+
    14#include "fmatrixev.hh"
    \n
    15
    \n-
    16
    \n-
    17namespace Dune {
    \n-
    18
    \n-
    19 template<class, int, int>
    \n-
    20 class FieldMatrix;
    \n-
    21
    \n-
    22 template<class>
    \n-
    23 class DynamicMatrix;
    \n-
    24
    \n-
    25}
    \n-
    26
    \n-
    27namespace Dune::Impl {
    \n-
    28
    \n-
    29
    \n-
    30 // Some traits for checking matrix concepts. Currently these are
    \n-
    31 // all technical internal helpers that just serve different headers
    \n-
    32 // to do internal checks and are thus collected here.
    \n-
    33
    \n-
    34 template<class T>
    \n-
    35 using IsMatrixHelper = std::void_t<decltype(std::declval<T>().N(), std::declval<T>().M())>;
    \n-
    36
    \n-
    37 template<class T>
    \n-
    38 struct IsMatrix : public Dune::Std::is_detected<IsMatrixHelper, T> {};
    \n-
    39
    \n-
    40 // Check if T is a matrix by checking for member functions N() and M().
    \n-
    41 template<class T>
    \n-
    42 constexpr bool IsMatrix_v = Impl::IsMatrix<T>::value;
    \n-
    43
    \n-
    44
    \n-
    45
    \n-
    46 template<class T>
    \n-
    47 using IsStaticSizeMatrixHelper = std::void_t<decltype(T::rows, T::cols)>;
    \n-
    48
    \n-
    49 template<class T>
    \n-
    50 struct IsStaticSizeMatrix : public Dune::Std::is_detected<IsStaticSizeMatrixHelper, T> {};
    \n-
    51
    \n-
    52 // Check if T is a statically sized matrix by checking for static members rows and cols.
    \n-
    53 template<class T>
    \n-
    54 constexpr bool IsStaticSizeMatrix_v = Impl::IsStaticSizeMatrix<T>::value;
    \n-
    55
    \n+
    24namespace Dune {
    \n+
    25
    \n+
    \n+
    26 namespace DynamicMatrixHelp {
    \n+
    27
    \n+
    28#if HAVE_LAPACK
    \n+
    29 using Dune::FMatrixHelp::eigenValuesNonsymLapackCall;
    \n+
    30#endif
    \n+
    31
    \n+
    40 template <typename K, class C>
    \n+
    \n+
    41 static void eigenValuesNonSym(const DynamicMatrix<K>& matrix,
    \n+
    42 DynamicVector<C>& eigenValues,
    \n+
    43 std::vector<DynamicVector<K>>* eigenVectors = nullptr
    \n+
    44 )
    \n+
    45 {
    \n+
    46
    \n+
    47#if HAVE_LAPACK
    \n+
    48 {
    \n+
    49 const long int N = matrix.rows();
    \n+
    50 const char jobvl = 'n';
    \n+
    51 const char jobvr = eigenVectors ? 'v' : 'n';
    \n+
    52
    \n+
    53
    \n+
    54 // matrix to put into dgeev
    \n+
    55 auto matrixVector = std::make_unique<double[]>(N*N);
    \n
    56
    \n-
    57
    \n-
    58 template<class T>
    \n-
    59 class IsFieldMatrix : public std::false_type {};
    \n-
    60
    \n-
    61 template< class K, int ROWS, int COLS>
    \n-
    62 class IsFieldMatrix<Dune::FieldMatrix<K, ROWS, COLS>> : public std::true_type {};
    \n-
    63
    \n-
    64 // Check if T is an instance of FieldMatrix
    \n-
    65 template<class T>
    \n-
    66 constexpr bool IsFieldMatrix_v = Impl::IsFieldMatrix<T>::value;
    \n-
    67
    \n-
    68
    \n-
    69
    \n-
    70 template<class T>
    \n-
    71 class IsDenseMatrix : public std::false_type {};
    \n-
    72
    \n-
    73 template<class K, int ROWS, int COLS>
    \n-
    74 class IsDenseMatrix<Dune::FieldMatrix<K, ROWS, COLS>> : public std::true_type {};
    \n-
    75
    \n-
    76 template<class K>
    \n-
    77 class IsDenseMatrix<Dune::DynamicMatrix<K>> : public std::true_type {};
    \n-
    78
    \n-
    79 // Check if T is a dense matrix. This is implemented by specialization.
    \n-
    80 template<class T>
    \n-
    81 constexpr bool IsDenseMatrix_v = Impl::IsDenseMatrix<T>::value;
    \n+
    57 // copy matrix
    \n+
    58 int row = 0;
    \n+
    59 for(int i=0; i<N; ++i)
    \n+
    60 {
    \n+
    61 for(int j=0; j<N; ++j, ++row)
    \n+
    62 {
    \n+
    63 matrixVector[ row ] = matrix[ i ][ j ];
    \n+
    64 }
    \n+
    65 }
    \n+
    66
    \n+
    67 // working memory
    \n+
    68 auto eigenR = std::make_unique<double[]>(N);
    \n+
    69 auto eigenI = std::make_unique<double[]>(N);
    \n+
    70
    \n+
    71 const long int lwork = eigenVectors ? 4*N : 3*N;
    \n+
    72 auto work = std::make_unique<double[]>(lwork);
    \n+
    73 auto vr = eigenVectors ? std::make_unique<double[]>(N*N) : std::unique_ptr<double[]>{};
    \n+
    74
    \n+
    75 // return value information
    \n+
    76 long int info = 0;
    \n+
    77
    \n+
    78 // call LAPACK routine (see fmatrixev_ext.cc)
    \n+
    79 eigenValuesNonsymLapackCall(&jobvl, &jobvr, &N, matrixVector.get(), &N,
    \n+
    80 eigenR.get(), eigenI.get(), nullptr, &N, vr.get(), &N, work.get(),
    \n+
    81 &lwork, &info);
    \n
    82
    \n-
    83
    \n-
    84
    \n-
    85} // namespace Dune::Impl
    \n-
    86
    \n-
    87
    \n+
    83 if( info != 0 )
    \n+
    84 {
    \n+
    85 std::cerr << "For matrix " << matrix << " eigenvalue calculation failed! " << std::endl;
    \n+
    86 DUNE_THROW(InvalidStateException,"eigenValues: Eigenvalue calculation failed!");
    \n+
    87 }
    \n
    88
    \n-
    89#endif // DUNE_COMMON_MATRIXCONCEPTS_HH
    \n-\n-
    typename detected_or< nonesuch, Op, Args... >::value_t is_detected
    Detects whether Op<Args...> is valid.
    Definition type_traits.hh:145
    \n+
    89 eigenValues.resize(N);
    \n+
    90 for (int i=0; i<N; ++i)
    \n+
    91 eigenValues[i] = std::complex<double>(eigenR[i], eigenI[i]);
    \n+
    92
    \n+
    93 if (eigenVectors) {
    \n+
    94 eigenVectors->resize(N);
    \n+
    95 for (int i = 0; i < N; ++i) {
    \n+
    96 auto& v = (*eigenVectors)[i];
    \n+
    97 v.resize(N);
    \n+
    98 std::copy(vr.get() + N*i, vr.get() + N*(i+1), &v[0]);
    \n+
    99 }
    \n+
    100 }
    \n+
    101 }
    \n+
    102#else // #if HAVE_LAPACK
    \n+
    103 DUNE_THROW(NotImplemented,"LAPACK not found!");
    \n+
    104#endif
    \n+
    105 }
    \n+
    \n+
    106 }
    \n+
    \n+
    107
    \n+
    108}
    \n+
    110#endif
    \n+
    Eigenvalue computations for the FieldMatrix class.
    \n+
    This file implements a dense matrix with dynamic numbers of rows and columns.
    \n+
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n+
    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
    \n+
    constexpr size_type rows() const
    number of rows
    Definition densematrix.hh:709
    \n+
    Construct a matrix with a dynamic size.
    Definition dynmatrix.hh:61
    \n+
    Construct a vector with a dynamic size.
    Definition dynvector.hh:59
    \n+
    void resize(size_type n, value_type c=value_type())
    Definition dynvector.hh:141
    \n+
    Default exception for dummy implementations.
    Definition exceptions.hh:263
    \n+
    Default exception if a function was called while the object is not in a valid state for that function...
    Definition exceptions.hh:281
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,113 +1,142 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-matrixconcepts.hh\n+dynmatrixev.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_COMMON_MATRIXCONCEPTS_HH\n-6#define DUNE_COMMON_MATRIXCONCEPTS_HH\n+5#ifndef DUNE_DYNMATRIXEIGENVALUES_HH\n+6#define DUNE_DYNMATRIXEIGENVALUES_HH\n 7\n-8\n-9\n-10#include \n-11#include \n+8#include \n+9#include \n+10\n+11#include // HAVE_LAPACK\n 12\n-13#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bs_\bt_\bd_\b/_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-14\n+13#include \"_\bd_\by_\bn_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\"\n+14#include \"_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\"\n 15\n-16\n-17namespace _\bD_\bu_\bn_\be {\n-18\n-19 template\n-20 class FieldMatrix;\n-21\n-22 template\n-23 class DynamicMatrix;\n-24\n-25}\n-26\n-27namespace Dune::Impl {\n-28\n-29\n-30 // Some traits for checking matrix concepts. Currently these are\n-31 // all technical internal helpers that just serve different headers\n-32 // to do internal checks and are thus collected here.\n-33\n-34 template\n-35 using IsMatrixHelper = std::void_t().N(), std::\n-declval().M())>;\n-36\n-37 template\n-38 struct IsMatrix : public _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\bd_\b:_\b:_\bi_\bs_\b__\bd_\be_\bt_\be_\bc_\bt_\be_\bd {};\n-39\n-40 // Check if T is a matrix by checking for member functions N() and M().\n-41 template\n-42 constexpr bool IsMatrix_v = Impl::IsMatrix::value;\n-43\n-44\n-45\n-46 template\n-47 using IsStaticSizeMatrixHelper = std::void_t;\n-48\n-49 template\n-50 struct IsStaticSizeMatrix : public _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\bd_\b:_\b:\n-_\bi_\bs_\b__\bd_\be_\bt_\be_\bc_\bt_\be_\bd {};\n-51\n-52 // Check if T is a statically sized matrix by checking for static members\n-rows and cols.\n-53 template\n-54 constexpr bool IsStaticSizeMatrix_v = Impl::IsStaticSizeMatrix::value;\n-55\n+24namespace _\bD_\bu_\bn_\be {\n+25\n+_\b2_\b6 namespace DynamicMatrixHelp {\n+27\n+28#if HAVE_LAPACK\n+29 using Dune::FMatrixHelp::eigenValuesNonsymLapackCall;\n+30#endif\n+31\n+40 template \n+_\b4_\b1 static void _\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bN_\bo_\bn_\bS_\by_\bm(const _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bK_\b>& matrix,\n+42 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\b<_\bC_\b>& eigenValues,\n+43 std::vector<_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b>>* eigenVectors = nullptr\n+44 )\n+45 {\n+46\n+47#if HAVE_LAPACK\n+48 {\n+49 const long int N = matrix._\br_\bo_\bw_\bs();\n+50 const char jobvl = 'n';\n+51 const char jobvr = eigenVectors ? 'v' : 'n';\n+52\n+53\n+54 // matrix to put into dgeev\n+55 auto matrixVector = std::make_unique(N*N);\n 56\n-57\n-58 template\n-59 class IsFieldMatrix : public std::false_type {};\n-60\n-61 template< class K, int ROWS, int COLS>\n-62 class IsFieldMatrix<_\bD_\bu_\bn_\be::FieldMatrix> : public std::\n-true_type {};\n-63\n-64 // Check if T is an instance of FieldMatrix\n-65 template\n-66 constexpr bool IsFieldMatrix_v = Impl::IsFieldMatrix::value;\n-67\n-68\n-69\n-70 template\n-71 class IsDenseMatrix : public std::false_type {};\n-72\n-73 template\n-74 class IsDenseMatrix<_\bD_\bu_\bn_\be::FieldMatrix> : public std::\n-true_type {};\n-75\n-76 template\n-77 class IsDenseMatrix<_\bD_\bu_\bn_\be::DynamicMatrix> : public std::true_type {};\n-78\n-79 // Check if T is a dense matrix. This is implemented by specialization.\n-80 template\n-81 constexpr bool IsDenseMatrix_v = Impl::IsDenseMatrix::value;\n+57 // copy matrix\n+58 int row = 0;\n+59 for(int i=0; i(N);\n+69 auto eigenI = std::make_unique(N);\n+70\n+71 const long int lwork = eigenVectors ? 4*N : 3*N;\n+72 auto work = std::make_unique(lwork);\n+73 auto vr = eigenVectors ? std::make_unique(N*N) : std::\n+unique_ptr{};\n+74\n+75 // return value information\n+76 long int info = 0;\n+77\n+78 // call LAPACK routine (see fmatrixev_ext.cc)\n+79 eigenValuesNonsymLapackCall(&jobvl, &jobvr, &N, matrixVector.get(), &N,\n+80 eigenR.get(), eigenI.get(), nullptr, &N, vr.get(), &N, work.get(),\n+81 &lwork, &info);\n 82\n-83\n-84\n-85} // namespace Dune::Impl\n-86\n-87\n+83 if( info != 0 )\n+84 {\n+85 std::cerr << \"For matrix \" << matrix << \" eigenvalue calculation failed! \"\n+<< std::endl;\n+86 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bS_\bt_\ba_\bt_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn,\"eigenValues: Eigenvalue calculation\n+failed!\");\n+87 }\n 88\n-89#endif // DUNE_COMMON_MATRIXCONCEPTS_HH\n-_\bt_\by_\bp_\be_\b__\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bt_\bd_\b:_\b:_\bi_\bs_\b__\bd_\be_\bt_\be_\bc_\bt_\be_\bd\n-typename detected_or< nonesuch, Op, Args... >::value_t is_detected\n-Detects whether Op is valid.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn type_traits.hh:145\n+89 eigenValues._\br_\be_\bs_\bi_\bz_\be(N);\n+90 for (int i=0; i(eigenR[i], eigenI[i]);\n+92\n+93 if (eigenVectors) {\n+94 eigenVectors->_\br_\be_\bs_\bi_\bz_\be(N);\n+95 for (int i = 0; i < N; ++i) {\n+96 auto& v = (*eigenVectors)[i];\n+97 v.resize(N);\n+98 std::copy(vr.get() + N*i, vr.get() + N*(i+1), &v[0]);\n+99 }\n+100 }\n+101 }\n+102#else // #if HAVE_LAPACK\n+103 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bN_\bo_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\be_\bd,\"LAPACK not found!\");\n+104#endif\n+105 }\n+106 }\n+107\n+108}\n+110#endif\n+_\bf_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh\n+Eigenvalue computations for the FieldMatrix class.\n+_\bd_\by_\bn_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh\n+This file implements a dense matrix with dynamic numbers of rows and columns.\n+_\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW\n+#define DUNE_THROW(E, m)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:218\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bN_\bo_\bn_\bS_\by_\bm\n+static void eigenValuesNonSym(const DynamicMatrix< K > &matrix, DynamicVector<\n+C > &eigenValues, std::vector< DynamicVector< K > > *eigenVectors=nullptr)\n+calculates the eigenvalues of a symmetric field matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynmatrixev.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+constexpr size_type rows() const\n+number of rows\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densematrix.hh:709\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bM_\ba_\bt_\br_\bi_\bx\n+Construct a matrix with a dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynmatrix.hh:61\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br\n+Construct a vector with a dynamic size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynvector.hh:59\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+void resize(size_type n, value_type c=value_type())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dynvector.hh:141\n+_\bD_\bu_\bn_\be_\b:_\b:_\bN_\bo_\bt_\bI_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\be_\bd\n+Default exception for dummy implementations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:263\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bS_\bt_\ba_\bt_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Default exception if a function was called while the object is not in a valid\n+state for that function...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:281\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00050.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00050.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: boundschecking.hh File Reference\n+dune-common: float_cmp.hh File Reference\n \n \n \n \n \n \n \n@@ -70,33 +70,101 @@\n
    \n \n
    \n \n
    \n
    \n-Macros
    \n-
    boundschecking.hh File Reference
    \n+Classes |\n+Namespaces |\n+Enumerations |\n+Functions
    \n+
    float_cmp.hh File Reference
    \n \n
    \n \n-

    Macro for wrapping boundary checks. \n+

    Various ways to compare floating-point numbers. \n More...

    \n-
    #include <dune/common/exceptions.hh>
    \n+
    #include "float_cmp.cc"
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+

    \n-Macros

    #define DUNE_ASSERT_BOUNDS(cond)
     If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
     

    \n+Classes

    struct  Dune::FloatCmp::DefaultEpsilon< T, style >
     mapping from a value type and a compare style to a default epsilon More...
     
    class  Dune::FloatCmpOps< T, cstyle_, rstyle_ >
     Class encapsulating a default epsilon. More...
     
    \n+\n+\n+\n+\n+\n+\n+

    \n+Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::FloatCmp
     
    \n+\n+\n+\n+\n+\n+

    \n+Enumerations

    enum  Dune::FloatCmp::CmpStyle { Dune::FloatCmp::relativeWeak\n+, Dune::FloatCmp::relativeStrong\n+, Dune::FloatCmp::absolute\n+, Dune::FloatCmp::defaultCmpStyle = relativeWeak\n+ }
     
    enum  Dune::FloatCmp::RoundingStyle {
    \n+  Dune::FloatCmp::towardZero\n+, Dune::FloatCmp::towardInf\n+, Dune::FloatCmp::downward\n+, Dune::FloatCmp::upward\n+,
    \n+  Dune::FloatCmp::defaultRoundingStyle = towardZero\n+
    \n+ }
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n+Functions

    template<class T , CmpStyle style>
    bool Dune::FloatCmp::eq (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for equality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ne (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test for inequality using epsilon
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::gt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::lt (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser than second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::ge (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first greater or equal second
     
    template<class T , CmpStyle style>
    bool Dune::FloatCmp::le (const T &first, const T &second, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, style >::value())
     test if first lesser or equal second
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::round (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     round using epsilon
     
    template<class I , class T , CmpStyle cstyle, RoundingStyle rstyle>
    Dune::FloatCmp::trunc (const T &val, typename EpsilonType< T >::Type epsilon=DefaultEpsilon< T, cstyle >::value())
     truncate using epsilon
     
    \n

    Detailed Description

    \n-

    Macro for wrapping boundary checks.

    \n+

    Various ways to compare floating-point numbers.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,81 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bM_\ba_\bc_\br_\bo_\bs\n-boundschecking.hh File Reference\n-Macro for wrapping boundary checks. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+float_cmp.hh File Reference\n+Various ways to compare floating-point numbers. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bc_\bc\"\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(cond)\n-\u00a0 If DUNE_CHECK_BOUNDS is defined: check if condition c\bco\bon\bnd\bd holds;\n- otherwise, do nothing.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\b _\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b _\b>\n+\u00a0 mapping from a value type and a compare style to a default epsilon\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b<_\b _\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b__\b,_\b _\br_\bs_\bt_\by_\bl_\be_\b__\b _\b>\n+\u00a0 Class encapsulating a default epsilon. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bD_\bu_\bn_\be\n+\u00a0 _\bD_\bu_\bn_\be namespace.\n+\u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp\n+\u00a0\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be { _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk , _\bD_\bu_\bn_\be_\b:_\b:\n+ _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg , _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be , _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:\n+ _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be = relativeWeak }\n+\u00a0\n+enum \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be {\n+ \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo , _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bI_\bn_\bf , _\bD_\bu_\bn_\be_\b:_\b:\n+ _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd , _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bu_\bp_\bw_\ba_\br_\bd ,\n+ \u00a0\u00a0_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be = towardZero\n+ }\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test for equality using epsilon\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test for inequality using epsilon\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first greater than second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first lesser than second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first greater or equal second\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be (const T &first, const T &second, typename\n+ _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, style >::value())\n+\u00a0 test if first lesser or equal second\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0 round using epsilon\n+\u00a0\n+template\n+ I\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc (const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be< T >::Type\n+ epsilon=_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn< T, cstyle >::value())\n+\u00a0 truncate using epsilon\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Macro for wrapping boundary checks.\n+Various ways to compare floating-point numbers.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00050_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00050_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: boundschecking.hh Source File\n+dune-common: float_cmp.hh Source File\n \n \n \n \n \n \n \n@@ -74,42 +74,197 @@\n \n
    \n \n
    \n
    \n
    \n-
    boundschecking.hh
    \n+
    float_cmp.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n-
    2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    3#ifndef DUNE_BOUNDSCHECKING_HH
    \n-
    4#define DUNE_BOUNDSCHECKING_HH
    \n-
    5
    \n-\n+Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+
    2// vi: set et ts=4 sw=2 sts=2:
    \n+
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n+
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n+
    5#ifndef DUNE_COMMON_FLOAT_CMP_HH
    \n+
    6#define DUNE_COMMON_FLOAT_CMP_HH
    \n
    7
    \n-
    19#ifndef DUNE_ASSERT_BOUNDS
    \n-
    20#if defined(DUNE_CHECK_BOUNDS) || defined(DOXYGEN)
    \n-
    21
    \n-
    \n-
    30#define DUNE_ASSERT_BOUNDS(cond) \\
    \n-
    31 do { \\
    \n-
    32 if (!(cond)) \\
    \n-
    33 DUNE_THROW(Dune::RangeError, "Index out of bounds."); \\
    \n-
    34 } while (false)
    \n-
    \n-
    35
    \n-
    36#else
    \n-
    37#define DUNE_ASSERT_BOUNDS(cond)
    \n-
    38#endif
    \n-
    39#endif
    \n-
    40
    \n-
    43#endif // DUNE_BOUNDSCHECKING_HH
    \n-
    A few common exception classes.
    \n+
    97namespace Dune {
    \n+
    100 namespace FloatCmp {
    \n+
    101 // basic constants
    \n+\n+\n+
    128
    \n+
    129 template<class T> struct EpsilonType;
    \n+
    130
    \n+
    132
    \n+
    137 template<class T, CmpStyle style = defaultCmpStyle>
    \n+
    \n+\n+
    140 static typename EpsilonType<T>::Type value();
    \n+
    141 };
    \n+
    \n+
    142
    \n+
    143 // operations in functional style
    \n+
    144
    \n+
    147
    \n+
    149
    \n+
    156 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    157 bool eq(const T &first,
    \n+
    158 const T &second,
    \n+\n+
    161
    \n+
    169 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    170 bool ne(const T &first,
    \n+
    171 const T &second,
    \n+\n+
    174
    \n+
    185 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    186 bool gt(const T &first,
    \n+
    187 const T &second,
    \n+\n+
    190
    \n+
    201 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    202 bool lt(const T &first,
    \n+
    203 const T &second,
    \n+\n+
    206
    \n+
    217 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    218 bool ge(const T &first,
    \n+
    219 const T &second,
    \n+\n+
    222
    \n+
    233 template <class T, CmpStyle style /*= defaultCmpStyle*/>
    \n+
    234 bool le(const T &first,
    \n+
    235 const T &second,
    \n+\n+
    237
    \n+
    238 // rounding operations
    \n+
    240
    \n+
    253 template<class I, class T, CmpStyle cstyle /*= defaultCmpStyle*/, RoundingStyle rstyle /*= defaultRoundingStyle*/>
    \n+
    254 I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value());
    \n+
    255 // truncation
    \n+
    257
    \n+
    270 template<class I, class T, CmpStyle cstyle /*= defaultCmpStyle*/, RoundingStyle rstyle /*= defaultRoundingStyle*/>
    \n+
    271 I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value());
    \n+
    272
    \n+
    274 // group FloatCmp
    \n+
    275 } //namespace FloatCmp
    \n+
    276
    \n+
    277
    \n+
    278 // oo interface
    \n+
    280
    \n+
    286 template<class T, FloatCmp::CmpStyle cstyle_ = FloatCmp::defaultCmpStyle,
    \n+\n+
    \n+\n+\n+\n+
    291
    \n+
    292 public:
    \n+
    293 // record template parameters
    \n+
    295 static const CmpStyle cstyle = cstyle_;
    \n+
    297 static const RoundingStyle rstyle = rstyle_;
    \n+
    299 typedef T ValueType;
    \n+
    301
    \n+\n+
    305
    \n+
    306 private:
    \n+
    307 EpsilonType epsilon_;
    \n+
    308
    \n+\n+
    310
    \n+
    311 public:
    \n+
    313
    \n+\n+
    317
    \n+
    319 EpsilonType epsilon() const;
    \n+
    321 void epsilon(EpsilonType epsilon__);
    \n+
    322
    \n+
    324 bool eq(const ValueType &first, const ValueType &second) const;
    \n+
    326
    \n+
    329 bool ne(const ValueType &first, const ValueType &second) const;
    \n+
    331
    \n+
    335 bool gt(const ValueType &first, const ValueType &second) const;
    \n+
    337
    \n+
    341 bool lt(const ValueType &first, const ValueType &second) const;
    \n+
    343
    \n+
    347 bool ge(const ValueType &first, const ValueType &second) const;
    \n+
    349
    \n+
    353 bool le(const ValueType &first, const ValueType &second) const;
    \n+
    354
    \n+
    356
    \n+
    365 template<class I>
    \n+
    366 I round(const ValueType &val) const;
    \n+
    367
    \n+
    369
    \n+
    378 template<class I>
    \n+
    379 I trunc(const ValueType &val) const;
    \n+
    380
    \n+
    381 };
    \n+
    \n+
    382
    \n+
    383} //namespace Dune
    \n+
    384
    \n+
    385#include "float_cmp.cc"
    \n+
    386
    \n+
    387#endif //DUNE_COMMON_FLOAT_CMP_HH
    \n+\n+
    bool ne(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for inequality using epsilon
    Definition float_cmp.cc:151
    \n+
    CmpStyle
    Definition float_cmp.hh:104
    \n+
    bool eq(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test for equality using epsilon
    Definition float_cmp.cc:144
    \n+
    I round(const T &val, typename EpsilonType< T >::Type epsilon)
    round using epsilon
    Definition float_cmp.cc:311
    \n+
    I trunc(const T &val, typename EpsilonType< T >::Type epsilon)
    truncate using epsilon
    Definition float_cmp.cc:407
    \n+
    RoundingStyle
    Definition float_cmp.hh:116
    \n+
    bool lt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser than second
    Definition float_cmp.cc:165
    \n+
    bool gt(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater than second
    Definition float_cmp.cc:158
    \n+
    bool ge(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first greater or equal second
    Definition float_cmp.cc:172
    \n+
    bool le(const T &first, const T &second, typename EpsilonType< T >::Type epsilon)
    test if first lesser or equal second
    Definition float_cmp.cc:179
    \n+
    @ defaultCmpStyle
    the global default compare style (relative_weak)
    Definition float_cmp.hh:112
    \n+
    @ relativeStrong
    |a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon
    Definition float_cmp.hh:108
    \n+
    @ relativeWeak
    |a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon
    Definition float_cmp.hh:106
    \n+
    @ absolute
    |a-b| <= epsilon
    Definition float_cmp.hh:110
    \n+
    @ towardZero
    always round toward 0
    Definition float_cmp.hh:118
    \n+
    @ towardInf
    always round away from 0
    Definition float_cmp.hh:120
    \n+
    @ upward
    round toward
    Definition float_cmp.hh:124
    \n+
    @ downward
    round toward
    Definition float_cmp.hh:122
    \n+
    @ defaultRoundingStyle
    the global default rounding style (toward_zero)
    Definition float_cmp.hh:126
    \n+
    Dune namespace.
    Definition alignedallocator.hh:13
    \n+
    T Type
    The epsilon type corresponding to value type T.
    Definition float_cmp.cc:25
    \n+
    mapping from a value type and a compare style to a default epsilon
    Definition float_cmp.hh:138
    \n+
    static EpsilonType< T >::Type value()
    Returns the default epsilon for the given value type and compare style.
    \n+
    Class encapsulating a default epsilon.
    Definition float_cmp.hh:288
    \n+
    bool le(const ValueType &first, const ValueType &second) const
    test if first lesser or equal second
    Definition float_cmp.cc:486
    \n+
    bool eq(const ValueType &first, const ValueType &second) const
    test for equality using epsilon
    Definition float_cmp.cc:451
    \n+
    static const CmpStyle cstyle
    How comparisons are done.
    Definition float_cmp.hh:295
    \n+
    bool lt(const ValueType &first, const ValueType &second) const
    test if first lesser than second
    Definition float_cmp.cc:472
    \n+
    bool ge(const ValueType &first, const ValueType &second) const
    test if first greater or equal second
    Definition float_cmp.cc:479
    \n+
    static const RoundingStyle rstyle
    How rounding is done.
    Definition float_cmp.hh:297
    \n+
    FloatCmp::EpsilonType< T >::Type EpsilonType
    Type of the epsilon.
    Definition float_cmp.hh:304
    \n+
    bool ne(const ValueType &first, const ValueType &second) const
    test for inequality using epsilon
    Definition float_cmp.cc:458
    \n+
    T ValueType
    Type of the values to compare.
    Definition float_cmp.hh:299
    \n+
    EpsilonType epsilon() const
    return the current epsilon
    Definition float_cmp.cc:436
    \n+
    I round(const ValueType &val) const
    round using epsilon
    Definition float_cmp.cc:495
    \n+
    I trunc(const ValueType &val) const
    truncate using epsilon
    Definition float_cmp.cc:503
    \n+
    bool gt(const ValueType &first, const ValueType &second) const
    test if first greater than second
    Definition float_cmp.cc:465
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,298 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-boundschecking.hh\n+float_cmp.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n+1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+2// vi: set et ts=4 sw=2 sts=2:\n+3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n-2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-3#ifndef DUNE_BOUNDSCHECKING_HH\n-4#define DUNE_BOUNDSCHECKING_HH\n-5\n-6#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n+5#ifndef DUNE_COMMON_FLOAT_CMP_HH\n+6#define DUNE_COMMON_FLOAT_CMP_HH\n 7\n-19#ifndef DUNE_ASSERT_BOUNDS\n-20#if defined(DUNE_CHECK_BOUNDS) || defined(DOXYGEN)\n-21\n-_\b3_\b0#define DUNE_ASSERT_BOUNDS(cond) \\\n-31 do { \\\n-32 if (!(cond)) \\\n-33 DUNE_THROW(Dune::RangeError, \"Index out of bounds.\"); \\\n-34 } while (false)\n-35\n-36#else\n-37#define DUNE_ASSERT_BOUNDS(cond)\n-38#endif\n-39#endif\n-40\n-43#endif // DUNE_BOUNDSCHECKING_HH\n-_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n-A few common exception classes.\n+97namespace _\bD_\bu_\bn_\be {\n+100 namespace FloatCmp {\n+101 // basic constants\n+_\b1_\b0_\b4 enum _\bC_\bm_\bp_\bS_\bt_\by_\bl_\be {\n+_\b1_\b0_\b6 _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk,\n+_\b1_\b0_\b8 _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg,\n+_\b1_\b1_\b0 _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be,\n+112 _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be = _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk\n+_\b1_\b1_\b3 };\n+_\b1_\b1_\b6 enum _\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be {\n+_\b1_\b1_\b8 _\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo,\n+_\b1_\b2_\b0 _\bt_\bo_\bw_\ba_\br_\bd_\bI_\bn_\bf,\n+_\b1_\b2_\b2 _\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd,\n+_\b1_\b2_\b4 _\bu_\bp_\bw_\ba_\br_\bd,\n+126 _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be = _\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo\n+_\b1_\b2_\b7 };\n+128\n+129 template struct EpsilonType;\n+130\n+132\n+137 template\n+_\b1_\b3_\b8 struct _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn {\n+_\b1_\b4_\b0 static typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bv_\ba_\bl_\bu_\be();\n+141 };\n+142\n+143 // operations in functional style\n+144\n+147\n+149\n+156 template \n+157 bool _\be_\bq(const T &first,\n+158 const T &second,\n+159 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+161\n+169 template \n+170 bool _\bn_\be(const T &first,\n+171 const T &second,\n+172 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+174\n+185 template \n+186 bool _\bg_\bt(const T &first,\n+187 const T &second,\n+188 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+190\n+201 template \n+202 bool _\bl_\bt(const T &first,\n+203 const T &second,\n+204 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+206\n+217 template \n+218 bool _\bg_\be(const T &first,\n+219 const T &second,\n+220 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+222\n+233 template \n+234 bool _\bl_\be(const T &first,\n+235 const T &second,\n+236 typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+237\n+238 // rounding operations\n+240\n+253 template\n+254 I _\br_\bo_\bu_\bn_\bd(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+255 // truncation\n+257\n+270 template\n+271 I _\bt_\br_\bu_\bn_\bc(const T &val, typename _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be epsilon =\n+_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bT_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+272\n+274 // group FloatCmp\n+275 } //namespace FloatCmp\n+276\n+277\n+278 // oo interface\n+280\n+286 template\n+_\b2_\b8_\b8 class _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs {\n+289 typedef _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be _\bC_\bm_\bp_\bS_\bt_\by_\bl_\be;\n+290 typedef _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be _\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be;\n+291\n+292 public:\n+293 // record template parameters\n+_\b2_\b9_\b5 static const _\bC_\bm_\bp_\bS_\bt_\by_\bl_\be _\bc_\bs_\bt_\by_\bl_\be = cstyle_;\n+_\b2_\b9_\b7 static const _\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be _\br_\bs_\bt_\by_\bl_\be = rstyle_;\n+_\b2_\b9_\b9 typedef T _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be;\n+301\n+_\b3_\b0_\b4 typedef typename _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b<_\bT_\b>_\b:_\b:_\bT_\by_\bp_\be _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be;\n+305\n+306 private:\n+307 _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon_;\n+308\n+309 typedef _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b<_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b,_\b _\bc_\bs_\bt_\by_\bl_\be_\b> _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn;\n+310\n+311 public:\n+313\n+316 _\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be _\be_\bp_\bs_\bi_\bl_\bo_\bn = _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be());\n+317\n+319 _\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be _\be_\bp_\bs_\bi_\bl_\bo_\bn() const;\n+321 void _\be_\bp_\bs_\bi_\bl_\bo_\bn(_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be epsilon__);\n+322\n+324 bool _\be_\bq(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+326\n+329 bool _\bn_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+331\n+335 bool _\bg_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+337\n+341 bool _\bl_\bt(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+343\n+347 bool _\bg_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+349\n+353 bool _\bl_\be(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &first, const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &second) const;\n+354\n+356\n+365 template\n+366 I _\br_\bo_\bu_\bn_\bd(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const;\n+367\n+369\n+378 template\n+379 I _\bt_\br_\bu_\bn_\bc(const _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be &val) const;\n+380\n+381 };\n+382\n+383} //namespace Dune\n+384\n+385#include \"_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bc_\bc\"\n+386\n+387#endif //DUNE_COMMON_FLOAT_CMP_HH\n+_\bf_\bl_\bo_\ba_\bt_\b__\bc_\bm_\bp_\b._\bc_\bc\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bn_\be\n+bool ne(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test for inequality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:151\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be\n+CmpStyle\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:104\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\be_\bq\n+bool eq(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test for equality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:144\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\bo_\bu_\bn_\bd\n+I round(const T &val, typename EpsilonType< T >::Type epsilon)\n+round using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:311\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\br_\bu_\bn_\bc\n+I trunc(const T &val, typename EpsilonType< T >::Type epsilon)\n+truncate using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:407\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be\n+RoundingStyle\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:116\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\bt\n+bool lt(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first lesser than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:165\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\bt\n+bool gt(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first greater than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:158\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bg_\be\n+bool ge(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first greater or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:172\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bl_\be\n+bool le(const T &first, const T &second, typename EpsilonType< T >::Type\n+epsilon)\n+test if first lesser or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:179\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bm_\bp_\bS_\bt_\by_\bl_\be\n+@ defaultCmpStyle\n+the global default compare style (relative_weak)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:112\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bS_\bt_\br_\bo_\bn_\bg\n+@ relativeStrong\n+|a-b|/|a| <= epsilon && |a-b|/|b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bW_\be_\ba_\bk\n+@ relativeWeak\n+|a-b|/|a| <= epsilon || |a-b|/|b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:106\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be\n+@ absolute\n+|a-b| <= epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:110\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bZ_\be_\br_\bo\n+@ towardZero\n+always round toward 0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:118\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bt_\bo_\bw_\ba_\br_\bd_\bI_\bn_\bf\n+@ towardInf\n+always round away from 0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:120\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bu_\bp_\bw_\ba_\br_\bd\n+@ upward\n+round toward\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\bo_\bw_\bn_\bw_\ba_\br_\bd\n+@ downward\n+round toward\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:122\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bR_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bS_\bt_\by_\bl_\be\n+@ defaultRoundingStyle\n+the global default rounding style (toward_zero)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:126\n+_\bD_\bu_\bn_\be\n+Dune namespace.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be_\b:_\b:_\bT_\by_\bp_\be\n+T Type\n+The epsilon type corresponding to value type T.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn\n+mapping from a value type and a compare style to a default epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:138\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static EpsilonType< T >::Type value()\n+Returns the default epsilon for the given value type and compare style.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs\n+Class encapsulating a default epsilon.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:288\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\be\n+bool le(const ValueType &first, const ValueType &second) const\n+test if first lesser or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:486\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bq\n+bool eq(const ValueType &first, const ValueType &second) const\n+test for equality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:451\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bc_\bs_\bt_\by_\bl_\be\n+static const CmpStyle cstyle\n+How comparisons are done.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:295\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bl_\bt\n+bool lt(const ValueType &first, const ValueType &second) const\n+test if first lesser than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:472\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\be\n+bool ge(const ValueType &first, const ValueType &second) const\n+test if first greater or equal second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:479\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\br_\bs_\bt_\by_\bl_\be\n+static const RoundingStyle rstyle\n+How rounding is done.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:297\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bE_\bp_\bs_\bi_\bl_\bo_\bn_\bT_\by_\bp_\be\n+FloatCmp::EpsilonType< T >::Type EpsilonType\n+Type of the epsilon.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:304\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bn_\be\n+bool ne(const ValueType &first, const ValueType &second) const\n+test for inequality using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:458\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be\n+T ValueType\n+Type of the values to compare.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.hh:299\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn\n+EpsilonType epsilon() const\n+return the current epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:436\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\br_\bo_\bu_\bn_\bd\n+I round(const ValueType &val) const\n+round using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:495\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bt_\br_\bu_\bn_\bc\n+I trunc(const ValueType &val) const\n+truncate using epsilon\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:503\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\bo_\ba_\bt_\bC_\bm_\bp_\bO_\bp_\bs_\b:_\b:_\bg_\bt\n+bool gt(const ValueType &first, const ValueType &second) const\n+test if first greater than second\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn float_cmp.cc:465\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00053.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00053.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: sllist.hh File Reference\n+dune-common: fvector.hh File Reference\n \n \n \n \n \n \n \n@@ -73,57 +73,84 @@\n
    \n
    \n
    \n \n-
    sllist.hh File Reference
    \n+ \n
    \n
    \n \n-

    Implements a singly linked list together with the necessary iterators. \n+

    Implements a vector constructed from a given type representing a field and a compile-time given size. \n More...

    \n-
    #include <memory>
    \n-#include <cassert>
    \n-#include "iteratorfacades.hh"
    \n-#include <ostream>
    \n+
    #include <array>
    \n+#include <cmath>
    \n+#include <cstdlib>
    \n+#include <cstring>
    \n+#include <type_traits>
    \n+#include <utility>
    \n+#include <initializer_list>
    \n+#include <dune/common/boundschecking.hh>
    \n+#include <dune/common/densevector.hh>
    \n+#include <dune/common/ftraits.hh>
    \n+#include <dune/common/math.hh>
    \n+#include <dune/common/promotiontraits.hh>
    \n+#include <dune/common/typetraits.hh>
    \n+#include <dune/common/typeutilities.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n \n-\n-\n+\n \n-\n-\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n+\n+\n+\n \n

    \n Classes

    class  Dune::SLList< T, A >
     A single linked list. More...
    struct  Dune::DenseMatVecTraits< FieldVector< K, SIZE > >
     
    class  Dune::SLListIterator< T, A >
     A mutable iterator for the SLList. More...
    struct  Dune::FieldTraits< FieldVector< K, SIZE > >
     
    class  Dune::SLListConstIterator< T, A >
     A constant iterator for the SLList. More...
    struct  Dune::IsFieldVectorSizeCorrect< C, SIZE >
     TMP to check the size of a DenseVectors statically, if possible. More...
     
    class  Dune::SLListModifyIterator< T, A >
     A mutable iterator for the SLList. More...
    struct  Dune::IsFieldVectorSizeCorrect< FieldVector< T, SIZE >, SIZE >
     
    struct  Dune::IsFieldVectorSizeCorrect< FieldVector< T, SIZE1 >, SIZE >
     
    class  Dune::FieldVector< K, SIZE >
     vector space out of a tensor product of fields. More...
     
    \n \n \n \n \n+\n+\n+\n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::MathOverloads
     namespace for customization of math functions with Dune-Semantics
     
    \n \n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n Functions

    template<typename T , typename A >
    std::ostream & Dune::operator<< (std::ostream &os, const SLList< T, A > &sllist)
     
    template<class K , int SIZE>
    auto Dune::MathOverloads::isFinite (const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
     Returns whether all entries are finite.
     
    template<class K , int SIZE>
    bool Dune::MathOverloads::isInf (const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
     Returns whether any entry is infinite.
     
    template<class K , int SIZE, std::enable_if_t< HasNaN< K >::value, int > = 0>
    bool Dune::MathOverloads::isNaN (const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
     Returns whether any entry is NaN.
     
    template<class K , std::enable_if_t< HasNaN< K >::value, int > = 0>
    bool Dune::MathOverloads::isUnordered (const FieldVector< K, 1 > &b, const FieldVector< K, 1 > &c, PriorityTag< 2 >, ADLTag)
     Returns true if either b or c is NaN.
     
    \n

    Detailed Description

    \n-

    Implements a singly linked list together with the necessary iterators.

    \n-
    Author
    Markus Blatt
    \n+

    Implements a vector constructed from a given type representing a field and a compile-time given size.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,75 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-sllist.hh File Reference\n-_\bC_\bo_\bm_\bm_\bo_\bn\n-Implements a singly linked list together with the necessary iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \"_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\bf_\ba_\bc_\ba_\bd_\be_\bs_\b._\bh_\bh\"\n-#include \n+fvector.hh File Reference\n+_\bC_\bo_\bm_\bm_\bo_\bn \u00bb _\bD_\be_\bn_\bs_\be_\b _\bM_\ba_\bt_\br_\bi_\bx_\b _\ba_\bn_\bd_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\bT_\be_\bm_\bp_\bl_\ba_\bt_\be_\b _\bL_\bi_\bb_\br_\ba_\br_\by\n+Implements a vector constructed from a given type representing a field and a\n+compile-time given size. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\bh_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 A single linked list. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 A mutable iterator for the _\bS_\bL_\bL_\bi_\bs_\bt. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 A constant iterator for the _\bS_\bL_\bL_\bi_\bs_\bt. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt_\b<_\b _\bC_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>\n+\u00a0 TMP to check the size of a DenseVectors statically, if possible.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 A mutable iterator for the _\bS_\bL_\bL_\bi_\bs_\bt. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>\n+\u00a0\n+struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bS_\bI_\bZ_\bE_\b1_\b _\b>_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>\n+\u00a0\n+ class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>\n+\u00a0 vector space out of a tensor product of fields. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs\n+\u00a0 namespace for customization of math functions with Dune-Semantics\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-std::ostream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (std::ostream &os, const _\bS_\bL_\bL_\bi_\bs_\bt< T, A >\n- &sllist)\n+template\n+auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bF_\bi_\bn_\bi_\bt_\be (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, SIZE > &b,\n+ _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 2 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0 Returns whether all entries are finite.\n+\u00a0\n+template\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bI_\bn_\bf (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, SIZE > &b, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg<\n+ 2 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0 Returns whether any entry is infinite.\n+\u00a0\n+template::value, int > = 0>\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bN_\ba_\bN (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, SIZE > &b, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg<\n+ 2 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0 Returns whether any entry is NaN.\n+\u00a0\n+template::value, int > = 0>\n+bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, 1 > &b, const\n+ _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, 1 > &c, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg< 2 >, _\bA_\bD_\bL_\bT_\ba_\bg)\n+\u00a0 Returns true if either b or c is NaN.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implements a singly linked list together with the necessary iterators.\n- Author\n- Markus Blatt\n+Implements a vector constructed from a given type representing a field and a\n+compile-time given size.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00053_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00053_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: sllist.hh Source File\n+dune-common: fvector.hh Source File\n \n \n \n \n \n \n \n@@ -74,780 +74,673 @@\n \n
    \n \n
    \n
    \n
    \n-
    sllist.hh
    \n+
    fvector.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_SLLIST_HH
    \n-
    6#define DUNE_SLLIST_HH
    \n+
    5#ifndef DUNE_COMMON_FVECTOR_HH
    \n+
    6#define DUNE_COMMON_FVECTOR_HH
    \n
    7
    \n-
    8#include <memory>
    \n-
    9#include <cassert>
    \n-
    10#include "iteratorfacades.hh"
    \n-
    11#include <ostream>
    \n-
    12
    \n-
    13namespace Dune
    \n-
    14{
    \n-
    26 template<typename T, class A>
    \n-
    27 class SLListIterator;
    \n-
    28
    \n-
    29 template<typename T, class A>
    \n-
    30 class SLListConstIterator;
    \n-
    31
    \n-
    32 template<typename T, class A>
    \n-
    33 class SLListModifyIterator;
    \n-
    34
    \n-
    42 template<typename T, class A=std::allocator<T> >
    \n-
    \n-
    43 class SLList
    \n-
    44 {
    \n-
    45 struct Element;
    \n-
    46 friend class SLListIterator<T,A>;
    \n-
    47 friend class SLListConstIterator<T,A>;
    \n-
    48
    \n-
    49 public:
    \n-
    50
    \n-
    54 typedef typename A::size_type size_type;
    \n-
    55
    \n-
    59 typedef T MemberType;
    \n-
    60
    \n-
    64 using Allocator = typename std::allocator_traits<A>::template rebind_alloc<Element>;
    \n-
    65
    \n-\n-
    70
    \n-\n+
    8#include <array>
    \n+
    9#include <cmath>
    \n+
    10#include <cstdlib>
    \n+
    11#include <cstring>
    \n+
    12#include <type_traits>
    \n+
    13#include <utility>
    \n+
    14#include <initializer_list>
    \n+
    15
    \n+\n+\n+\n+
    19#include <dune/common/math.hh>
    \n+\n+\n+\n+
    23
    \n+
    24namespace Dune {
    \n+
    25
    \n+
    35 template< class K, int SIZE > class FieldVector;
    \n+
    36 template< class K, int SIZE >
    \n+
    \n+\n+
    38 {
    \n+\n+
    40 typedef std::array<K,SIZE> container_type;
    \n+
    41 typedef K value_type;
    \n+
    42 typedef typename container_type::size_type size_type;
    \n+
    43 };
    \n+
    \n+
    44
    \n+
    45 template< class K, int SIZE >
    \n+
    \n+
    46 struct FieldTraits< FieldVector<K,SIZE> >
    \n+
    47 {
    \n+\n+\n+
    50 };
    \n+
    \n+
    51
    \n+
    60 template<typename C, int SIZE>
    \n+
    \n+\n+
    62 {
    \n+
    67 constexpr static bool value = true;
    \n+
    68 };
    \n+
    \n+
    69
    \n+
    70 template<typename T, int SIZE>
    \n+
    \n+\n+
    72 {
    \n+
    73 constexpr static bool value = true;
    \n+
    74 };
    \n+
    \n
    75
    \n-
    \n-\n-
    80
    \n-
    84 template<typename T1, typename A1>
    \n-
    \n-
    85 SLList(const SLList<T1,A1>& other);
    \n-
    86
    \n-
    \n-
    90 SLList(const SLList<T,A>& other);
    \n-
    91
    \n-
    \n-\n-
    98
    \n-\n-
    104
    \n+
    76 template<typename T, int SIZE, int SIZE1>
    \n+
    \n+\n+
    78 {
    \n+
    79 constexpr static bool value = false;
    \n+
    80 };
    \n+
    \n+
    81
    \n+
    82
    \n+
    88 template< class K, int SIZE >
    \n+
    \n+\n+
    90 public DenseVector< FieldVector<K,SIZE> >
    \n+
    91 {
    \n+
    92 std::array<K,SIZE> _data;
    \n+\n+
    94 public:
    \n+
    96 constexpr static int dimension = SIZE;
    \n+
    97
    \n+
    98 typedef typename Base::size_type size_type;
    \n+
    99 typedef typename Base::value_type value_type;
    \n+
    100
    \n+\n+
    103
    \n+\n+
    106
    \n
    \n-\n-
    109
    \n-
    110
    \n-
    \n-
    115 inline void push_back(const MemberType& item);
    \n-
    116
    \n+
    108 constexpr FieldVector () noexcept
    \n+
    109 : _data{}
    \n+
    110 {}
    \n+
    \n+
    111
    \n+
    \n+
    113 explicit constexpr FieldVector (const K& k)
    \n+
    114 noexcept(std::is_nothrow_copy_assignable_v<K>)
    \n+
    115 {
    \n+
    116 for (auto& d : _data)
    \n+
    117 d = k;
    \n+
    118 }
    \n+
    \n+
    119
    \n
    \n-
    121 inline void push_front(const MemberType& item);
    \n-
    122
    \n-
    \n-
    126 inline void pop_front();
    \n-
    127
    \n-
    \n-
    129 inline void clear();
    \n-
    130
    \n-
    \n-
    138 inline iterator begin();
    \n+
    121 constexpr FieldVector (const std::initializer_list<K>& l)
    \n+
    122 : _data{}
    \n+
    123 {
    \n+
    124 assert(l.size() == dimension);
    \n+
    125 for (int i = 0; i < dimension; ++i)
    \n+
    126 _data[i] = std::data(l)[i];
    \n+
    127 }
    \n+
    \n+
    128
    \n+
    130 template<class T,
    \n+
    131 std::enable_if_t<IsFieldVectorSizeCorrect<T,dimension>::value, int> = 0,
    \n+
    132 decltype(std::declval<K&>() = std::declval<const T&>()[0], bool{}) = true>
    \n+
    \n+\n+
    134 {
    \n+
    135 assert(x.size() == dimension);
    \n+
    136 for (int i = 0; i < dimension; ++i)
    \n+
    137 _data[i] = x[i];
    \n+
    138 }
    \n+
    \n
    139
    \n-
    \n-
    147 inline const_iterator begin() const;
    \n-
    148
    \n-
    \n-\n+
    141 template<class T,
    \n+
    142 std::enable_if_t<std::is_assignable_v<K&, const T&>, int> = 0>
    \n+
    \n+
    143 explicit constexpr FieldVector (const FieldVector<T, SIZE>& x)
    \n+
    144 noexcept(std::is_nothrow_assignable_v<K&, const T&>)
    \n+
    145 {
    \n+
    146 for (int i = 0; i < dimension; ++i)
    \n+
    147 _data[i] = x[i];
    \n+
    148 }
    \n+
    \n+
    149
    \n+
    151 template<class K1, int SIZE1,
    \n+
    152 std::enable_if_t<(SIZE1 != SIZE), int> = 0>
    \n+
    153 explicit FieldVector (const FieldVector<K1, SIZE1>&) = delete;
    \n+
    154
    \n+
    156 FieldVector (const FieldVector&) = default;
    \n
    157
    \n-
    \n-\n-
    166
    \n-
    \n-
    173 inline iterator end();
    \n-
    174
    \n-
    \n-
    181 inline const_iterator end() const;
    \n-
    182
    \n-
    \n-
    188 inline bool empty() const;
    \n+
    158
    \n+
    160 template<class T,
    \n+
    161 std::enable_if_t<IsFieldVectorSizeCorrect<T,dimension>::value, int> = 0,
    \n+
    162 decltype(std::declval<K&>() = std::declval<const T&>()[0], bool{}) = true>
    \n+
    \n+
    163 FieldVector& operator= (const DenseVector<T>& x)
    \n+
    164 {
    \n+
    165 assert(x.size() == dimension);
    \n+
    166 for (int i = 0; i < dimension; ++i)
    \n+
    167 _data[i] = x[i];
    \n+
    168 return *this;
    \n+
    169 }
    \n+
    \n+
    170
    \n+
    172 template<class T,
    \n+
    173 std::enable_if_t<std::is_assignable_v<K&, const T&>, int> = 0>
    \n+
    \n+\n+
    175 noexcept(std::is_nothrow_assignable_v<K&, const T&>)
    \n+
    176 {
    \n+
    177 for (int i = 0; i < dimension; ++i)
    \n+
    178 _data[i] = x[i];
    \n+
    179 return *this;
    \n+
    180 }
    \n+
    \n+
    181
    \n+
    183 template<class K1, int SIZE1,
    \n+
    184 std::enable_if_t<(SIZE1 != SIZE), int> = 0>
    \n+
    185 FieldVector& operator= (const FieldVector<K1, SIZE1>&) = delete;
    \n+
    186
    \n+
    188 constexpr FieldVector& operator= (const FieldVector&) = default;
    \n
    189
    \n-
    \n-
    194 inline int size() const;
    \n-
    195
    \n+
    190 using Base::operator=;
    \n+
    191
    \n+
    193 static constexpr size_type size () noexcept { return dimension; }
    \n+
    194
    \n
    \n-
    196 bool operator==(const SLList& sl) const;
    \n-
    197
    \n-
    198
    \n-
    \n-
    199 bool operator!=(const SLList& sl) const;
    \n-
    200
    \n-
    201 private:
    \n-
    203 struct Element
    \n-
    204 {
    \n-\n-\n-
    213
    \n-
    \n-
    214 Element(const MemberType& item, Element* next_=0);
    \n-
    215
    \n+\n+
    197 {
    \n+\n+
    199 return _data[i];
    \n+
    200 }
    \n+
    \n+
    201
    \n+
    \n+\n+
    204 {
    \n+\n+
    206 return _data[i];
    \n+
    207 }
    \n+
    \n+
    208
    \n+
    \n+
    210 constexpr K* data () noexcept
    \n+
    211 {
    \n+
    212 return _data.data();
    \n+
    213 }
    \n+
    \n+
    214
    \n
    \n-\n-
    217
    \n-\n-
    219 };
    \n-
    220
    \n-
    225 void deleteNext(Element* current);
    \n-
    226
    \n-
    231 void copyElements(const SLList<T,A>& other);
    \n-
    232
    \n-
    240 template<bool watchForTail>
    \n-
    241 void deleteNext(Element* current);
    \n-
    247 void insertAfter(Element* current, const T& item);
    \n-
    248
    \n-
    250 Element beforeHead_;
    \n-
    251
    \n-
    257 Element* tail_;
    \n-
    258
    \n-
    260 Allocator allocator_;
    \n-
    261
    \n-
    263 int size_;
    \n-
    264 };
    \n-
    265
    \n-
    269 template<typename T, class A>
    \n-
    \n-
    270 class SLListIterator : public Dune::ForwardIteratorFacade<SLListIterator<T,A>, T, T&, std::size_t>
    \n-
    271 {
    \n-
    272 friend class SLListConstIterator<T,A>;
    \n-
    273 friend class SLListModifyIterator<T,A>;
    \n-
    274 friend class SLList<T,A>;
    \n-
    275
    \n-
    276 public:
    \n-
    \n-\n-
    278 SLList<T,A>* sllist)
    \n-
    279 : current_(item), list_(sllist)
    \n-
    280 {}
    \n-
    \n-
    281
    \n-
    \n-\n-
    283 : current_(0), list_(0)
    \n-
    284 {}
    \n-
    \n-
    285
    \n-
    \n-\n-
    287 : current_(other.iterator_.current_), list_(other.iterator_.list_)
    \n-
    288 {}
    \n-
    \n-
    289
    \n-
    \n-
    294 inline T& dereference() const
    \n-
    295 {
    \n-
    296 return current_->item_;
    \n-
    297 }
    \n-
    \n-
    298
    \n-
    \n-
    304 inline bool equals(const SLListConstIterator<T,A>& other) const
    \n-
    305 {
    \n-
    306 return current_==other.current_;
    \n-
    307 }
    \n+
    216 constexpr const K* data () const noexcept
    \n+
    217 {
    \n+
    218 return _data.data();
    \n+
    219 }
    \n
    \n+
    220
    \n+
    222 template<class Scalar,
    \n+
    223 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n+
    \n+
    224 friend constexpr auto operator* (const FieldVector& vector, Scalar scalar)
    \n+
    225 {
    \n+\n+
    227 FieldVector<T,SIZE> result;
    \n+
    228
    \n+
    229 for (size_type i = 0; i < vector.size(); ++i)
    \n+
    230 result[i] = vector[i] * scalar;
    \n+
    231 return result;
    \n+
    232 }
    \n+
    \n+
    233
    \n+
    235 template<class Scalar,
    \n+
    236 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n+
    \n+
    237 friend constexpr auto operator* (Scalar scalar, const FieldVector& vector)
    \n+
    238 {
    \n+\n+
    240 FieldVector<T,SIZE> result;
    \n+
    241
    \n+
    242 for (size_type i = 0; i < vector.size(); ++i)
    \n+
    243 result[i] = scalar * vector[i];
    \n+
    244 return result;
    \n+
    245 }
    \n+
    \n+
    246
    \n+
    248 template<class Scalar,
    \n+
    249 std::enable_if_t<IsNumber<Scalar>::value, int> = 0>
    \n+
    \n+
    250 friend constexpr auto operator/ (const FieldVector& vector, Scalar scalar)
    \n+
    251 {
    \n+\n+
    253 FieldVector<T,SIZE> result;
    \n+
    254
    \n+
    255 for (size_type i = 0; i < vector.size(); ++i)
    \n+
    256 result[i] = vector[i] / scalar;
    \n+
    257
    \n+
    258 return result;
    \n+
    259 }
    \n+
    \n+
    260
    \n+
    261 };
    \n+
    \n+
    262
    \n+
    274 template<class K, int SIZE>
    \n+
    \n+
    275 std::istream &operator>> (std::istream& in, FieldVector<K, SIZE>& v)
    \n+
    276 {
    \n+\n+
    278 for (int i = 0; i < SIZE; ++i)
    \n+
    279 in >> w[i];
    \n+
    280 if (in)
    \n+
    281 v = w;
    \n+
    282 return in;
    \n+
    283 }
    \n+
    \n+
    284
    \n+
    285#ifndef DOXYGEN
    \n+
    286 template< class K >
    \n+
    287 struct DenseMatVecTraits< FieldVector<K,1> >
    \n+
    288 {
    \n+
    289 typedef FieldVector<K,1> derived_type;
    \n+
    290 typedef K container_type;
    \n+
    291 typedef K value_type;
    \n+
    292 typedef size_t size_type;
    \n+
    293 };
    \n+
    294
    \n+
    297 template<class K>
    \n+
    298 class FieldVector<K, 1> :
    \n+
    299 public DenseVector< FieldVector<K,1> >
    \n+
    300 {
    \n+
    301 K _data;
    \n+
    302 typedef DenseVector< FieldVector<K,1> > Base;
    \n+
    303 public:
    \n+
    305 constexpr static int dimension = 1;
    \n+
    306
    \n+
    307 typedef typename Base::size_type size_type;
    \n
    308
    \n-
    \n-
    314 inline bool equals(const SLListIterator<T,A>& other) const
    \n-
    315 {
    \n-
    316 return current_==other.current_;
    \n-
    317 }
    \n-
    \n-
    318
    \n-
    \n-
    324 inline bool equals(const SLListModifyIterator<T,A>& other) const
    \n-
    325 {
    \n-
    326 return current_==other.iterator_.current_;
    \n-
    327 }
    \n-
    \n+
    310 typedef K& reference;
    \n+
    311
    \n+
    313 typedef const K& const_reference;
    \n+
    314
    \n+
    315 //===== construction
    \n+
    316
    \n+
    318 constexpr FieldVector () noexcept
    \n+
    319 : _data()
    \n+
    320 {}
    \n+
    321
    \n+
    323 template<class T,
    \n+
    324 std::enable_if_t<std::is_constructible_v<K,T>, int> = 0>
    \n+
    325 constexpr FieldVector (const T& k) noexcept
    \n+
    326 : _data(k)
    \n+
    327 {}
    \n
    328
    \n-
    \n-
    332 inline void increment()
    \n-
    333 {
    \n-
    334 current_ = current_->next_;
    \n-
    335 }
    \n-
    \n-
    336
    \n-
    \n-
    342 inline void insertAfter(const T& v) const
    \n-
    343 {
    \n-
    344 assert(list_ );
    \n-
    345 list_->insertAfter(current_, v);
    \n-
    346 }
    \n-
    \n-
    347
    \n-
    \n-
    353 inline void deleteNext() const
    \n-
    354 {
    \n-
    355 assert(list_);
    \n-
    356 list_->deleteNext(current_);
    \n-
    357 }
    \n-
    \n+
    330 constexpr FieldVector (const std::initializer_list<K>& l)
    \n+
    331 {
    \n+
    332 assert(l.size() == 1);
    \n+
    333 _data = *l.begin();
    \n+
    334 }
    \n+
    335
    \n+
    337 template<class T,
    \n+
    338 std::enable_if_t<std::is_constructible_v<K,T>, int> = 0>
    \n+
    339 constexpr FieldVector (const FieldVector<T,1>& x) noexcept
    \n+
    340 : _data(x[0])
    \n+
    341 {}
    \n+
    342
    \n+
    344 template<class T,
    \n+
    345 std::enable_if_t<IsFieldVectorSizeCorrect<T,1>::value, int> = 0,
    \n+
    346 decltype(std::declval<K&>() = std::declval<const T&>()[0], bool{}) = true>
    \n+
    347 FieldVector (const DenseVector<T>& x)
    \n+
    348 {
    \n+
    349 assert(x.size() == 1);
    \n+
    350 _data = x[0];
    \n+
    351 }
    \n+
    352
    \n+
    354 constexpr FieldVector (const FieldVector&) = default;
    \n+
    355
    \n+
    357 constexpr FieldVector& operator= (const FieldVector&) = default;
    \n
    358
    \n-
    359 private:
    \n-
    361 typename SLList<T,A>::Element* current_;
    \n-\n-
    364 };
    \n-
    \n-
    365
    \n-
    369 template<class T, class A>
    \n-
    \n-
    370 class SLListConstIterator : public Dune::ForwardIteratorFacade<SLListConstIterator<T,A>, const T, const T&, std::size_t>
    \n-
    371 {
    \n-
    372 friend class SLListIterator<T,A>;
    \n-
    373 friend class SLList<T,A>;
    \n-
    374
    \n-
    375 public:
    \n-
    \n-\n-
    377 : current_(0)
    \n-
    378 {}
    \n-
    \n-
    379
    \n-
    \n-\n-
    381 : current_(item)
    \n-
    382 {}
    \n-
    \n-
    383
    \n-
    \n-\n-
    385 : current_(other.current_)
    \n-
    386 {}
    \n-
    \n+
    360 template<class T,
    \n+
    361 decltype(std::declval<K&>() = std::declval<const T&>(), bool{}) = true>
    \n+
    362 constexpr FieldVector& operator= (const FieldVector<T,1>& other) noexcept
    \n+
    363 {
    \n+
    364 _data = other[0];
    \n+
    365 return *this;
    \n+
    366 }
    \n+
    367
    \n+
    369 template<class T,
    \n+
    370 std::enable_if_t<IsFieldVectorSizeCorrect<T,1>::value, int> = 0,
    \n+
    371 decltype(std::declval<K&>() = std::declval<const T&>()[0], bool{}) = true>
    \n+
    372 FieldVector& operator= (const DenseVector<T>& other)
    \n+
    373 {
    \n+
    374 assert(other.size() == 1);
    \n+
    375 _data = other[0];
    \n+
    376 return *this;
    \n+
    377 }
    \n+
    378
    \n+
    380 template<class T,
    \n+
    381 decltype(std::declval<K&>() = std::declval<const T&>(), bool{}) = true>
    \n+
    382 constexpr FieldVector& operator= (const T& k) noexcept
    \n+
    383 {
    \n+
    384 _data = k;
    \n+
    385 return *this;
    \n+
    386 }
    \n
    387
    \n-
    \n-\n-
    389 : current_(other.iterator_.current_)
    \n-
    390 {}
    \n-
    \n-
    391
    \n-
    \n-
    396 inline const T& dereference() const
    \n+
    388 //===== forward methods to container
    \n+
    389 static constexpr size_type size () noexcept { return 1; }
    \n+
    390
    \n+
    391 reference operator[] ([[maybe_unused]] size_type i)
    \n+
    392 {
    \n+
    393 DUNE_ASSERT_BOUNDS(i == 0);
    \n+
    394 return _data;
    \n+
    395 }
    \n+
    396 const_reference operator[] ([[maybe_unused]] size_type i) const
    \n
    397 {
    \n-
    398 return current_->item_;
    \n-
    399 }
    \n-
    \n-
    400
    \n-
    \n-
    406 inline bool equals(const SLListConstIterator<T,A>& other) const
    \n-
    407 {
    \n-
    408 return current_==other.current_;
    \n-
    409 }
    \n-
    \n-
    410
    \n-
    \n-
    414 inline void increment()
    \n-
    415 {
    \n-
    416 current_ = current_->next_;
    \n-
    417 }
    \n-
    \n+
    398 DUNE_ASSERT_BOUNDS(i == 0);
    \n+
    399 return _data;
    \n+
    400 }
    \n+
    401
    \n+
    403 constexpr K* data () noexcept
    \n+
    404 {
    \n+
    405 return &_data;
    \n+
    406 }
    \n+
    407
    \n+
    409 constexpr const K* data () const noexcept
    \n+
    410 {
    \n+
    411 return &_data;
    \n+
    412 }
    \n+
    413
    \n+
    414 //===== conversion operator
    \n+
    415
    \n+
    417 constexpr operator reference () noexcept { return _data; }
    \n
    418
    \n-
    419 private:
    \n-
    421 typename SLList<T,A>::Element* current_;
    \n-
    422 };
    \n-
    \n-
    423
    \n-
    427 template<typename T, class A>
    \n-
    \n-
    428 class SLListModifyIterator : public Dune::ForwardIteratorFacade<SLListModifyIterator<T,A>, T, T&, std::size_t>
    \n+
    420 constexpr operator const_reference () const noexcept { return _data; }
    \n+
    421 };
    \n+
    422
    \n+
    423 /* ----- FV / FV ----- */
    \n+
    424 /* mostly not necessary as these operations are already covered via the cast operator */
    \n+
    425
    \n+
    427 template<class K>
    \n+
    428 constexpr bool operator> (const FieldVector<K,1>& a, const FieldVector<K,1>& b) noexcept
    \n
    429 {
    \n-
    430 friend class SLListConstIterator<T,A>;
    \n-
    431 friend class SLListIterator<T,A>;
    \n-
    432 public:
    \n-
    \n-\n-
    434 SLListIterator<T,A> _iterator)
    \n-
    435 : beforeIterator_(beforeIterator), iterator_(_iterator)
    \n-
    436 {}
    \n-
    \n-
    437
    \n-
    \n-\n-
    439 : beforeIterator_(), iterator_()
    \n-
    440 {}
    \n-
    \n-
    441
    \n-
    \n-
    446 inline T& dereference() const
    \n-
    447 {
    \n-
    448 return *iterator_;
    \n-
    449 }
    \n-
    \n-
    450
    \n-
    \n-
    456 inline bool equals(const SLListConstIterator<T,A>& other) const
    \n-
    457 {
    \n-
    458 return iterator_== other;
    \n-
    459 }
    \n-
    \n-
    460
    \n-
    461
    \n-
    \n-
    467 inline bool equals(const SLListIterator<T,A>& other) const
    \n-
    468 {
    \n-
    469 return iterator_== other;
    \n-
    470 }
    \n-
    \n-
    471
    \n-
    472
    \n-
    \n-
    478 inline bool equals(const SLListModifyIterator<T,A>& other) const
    \n-
    479 {
    \n-
    480 return iterator_== other.iterator_;
    \n-
    481 }
    \n-
    \n-
    482
    \n-
    \n-
    486 inline void increment()
    \n-
    487 {
    \n-
    488 ++iterator_;
    \n-
    489 ++beforeIterator_;
    \n-
    490 }
    \n-
    \n-
    491
    \n-
    \n-
    505 inline void insert(const T& v)
    \n-
    506 {
    \n-
    507 beforeIterator_.insertAfter(v);
    \n-
    508 ++beforeIterator_;
    \n-
    509 }
    \n-
    \n-
    510
    \n-
    \n-
    518 inline void remove()
    \n-
    519 {
    \n-
    520 ++iterator_;
    \n-
    521 beforeIterator_.deleteNext();
    \n-
    522 }
    \n-
    \n-
    523
    \n-
    524 private:
    \n-
    526 SLListIterator<T,A> beforeIterator_;
    \n-
    528 SLListIterator<T,A> iterator_;
    \n-
    529 };
    \n-
    \n-
    530
    \n-
    531 template<typename T, typename A>
    \n-
    \n-
    532 std::ostream& operator<<(std::ostream& os, const SLList<T,A>& sllist)
    \n-
    533 {
    \n-
    534 typedef typename SLList<T,A>::const_iterator Iterator;
    \n-
    535 Iterator end = sllist.end();
    \n-
    536 Iterator current= sllist.begin();
    \n-
    537
    \n-
    538 os << "{ ";
    \n-
    539
    \n-
    540 if(current!=end) {
    \n-
    541 os<<*current<<" ("<<static_cast<const void*>(&(*current))<<")";
    \n-
    542 ++current;
    \n-
    543
    \n-
    544 for(; current != end; ++current)
    \n-
    545 os<<", "<<*current<<" ("<<static_cast<const void*>(&(*current))<<")";
    \n-
    546 }
    \n-
    547 os<<"} ";
    \n-
    548 return os;
    \n-
    549 }
    \n-
    \n-
    550
    \n-
    551 template<typename T, class A>
    \n-
    \n-
    552 SLList<T,A>::Element::Element(const MemberType& item, Element* next)
    \n-
    553 : next_(next), item_(item)
    \n-
    554 {}
    \n-
    \n+
    430 return a[0]>b[0];
    \n+
    431 }
    \n+
    432
    \n+
    434 template<class K>
    \n+
    435 constexpr bool operator>= (const FieldVector<K,1>& a, const FieldVector<K,1>& b) noexcept
    \n+
    436 {
    \n+
    437 return a[0]>=b[0];
    \n+
    438 }
    \n+
    439
    \n+
    441 template<class K>
    \n+
    442 constexpr bool operator< (const FieldVector<K,1>& a, const FieldVector<K,1>& b) noexcept
    \n+
    443 {
    \n+
    444 return a[0]<b[0];
    \n+
    445 }
    \n+
    446
    \n+
    448 template<class K>
    \n+
    449 constexpr bool operator<= (const FieldVector<K,1>& a, const FieldVector<K,1>& b) noexcept
    \n+
    450 {
    \n+
    451 return a[0]<=b[0];
    \n+
    452 }
    \n+
    453
    \n+
    454 /* ----- FV / scalar ----- */
    \n+
    455
    \n+
    457 template<class K>
    \n+
    458 constexpr FieldVector<K,1> operator+ (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    459 {
    \n+
    460 return a[0]+b;
    \n+
    461 }
    \n+
    462
    \n+
    464 template<class K>
    \n+
    465 constexpr FieldVector<K,1> operator- (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    466 {
    \n+
    467 return a[0]-b;
    \n+
    468 }
    \n+
    469
    \n+
    471 template<class K>
    \n+
    472 constexpr FieldVector<K,1> operator* (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    473 {
    \n+
    474 return a[0]*b;
    \n+
    475 }
    \n+
    476
    \n+
    478 template<class K>
    \n+
    479 constexpr FieldVector<K,1> operator/ (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    480 {
    \n+
    481 return a[0]/b;
    \n+
    482 }
    \n+
    483
    \n+
    485 template<class K>
    \n+
    486 constexpr bool operator> (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    487 {
    \n+
    488 return a[0]>b;
    \n+
    489 }
    \n+
    490
    \n+
    492 template<class K>
    \n+
    493 constexpr bool operator>= (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    494 {
    \n+
    495 return a[0]>=b;
    \n+
    496 }
    \n+
    497
    \n+
    499 template<class K>
    \n+
    500 constexpr bool operator< (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    501 {
    \n+
    502 return a[0]<b;
    \n+
    503 }
    \n+
    504
    \n+
    506 template<class K>
    \n+
    507 constexpr bool operator<= (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    508 {
    \n+
    509 return a[0]<=b;
    \n+
    510 }
    \n+
    511
    \n+
    513 template<class K>
    \n+
    514 constexpr bool operator== (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    515 {
    \n+
    516 return a[0]==b;
    \n+
    517 }
    \n+
    518
    \n+
    520 template<class K>
    \n+
    521 constexpr bool operator!= (const FieldVector<K,1>& a, const K b) noexcept
    \n+
    522 {
    \n+
    523 return a[0]!=b;
    \n+
    524 }
    \n+
    525
    \n+
    526 /* ----- scalar / FV ------ */
    \n+
    527
    \n+
    529 template<class K>
    \n+
    530 constexpr FieldVector<K,1> operator+ (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    531 {
    \n+
    532 return a+b[0];
    \n+
    533 }
    \n+
    534
    \n+
    536 template<class K>
    \n+
    537 constexpr FieldVector<K,1> operator- (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    538 {
    \n+
    539 return a-b[0];
    \n+
    540 }
    \n+
    541
    \n+
    543 template<class K>
    \n+
    544 constexpr FieldVector<K,1> operator* (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    545 {
    \n+
    546 return a*b[0];
    \n+
    547 }
    \n+
    548
    \n+
    550 template<class K>
    \n+
    551 constexpr FieldVector<K,1> operator/ (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    552 {
    \n+
    553 return a/b[0];
    \n+
    554 }
    \n
    555
    \n-
    556 template<typename T, class A>
    \n-
    \n-\n-
    558 : next_(0), item_()
    \n-
    559 {}
    \n-
    \n-
    \n-
    560
    \n-
    561 template<typename T, class A>
    \n-
    \n-\n-
    563 {
    \n-
    564 next_=0;
    \n-
    565 }
    \n-
    \n-
    566
    \n-
    567 template<typename T, class A>
    \n-
    \n-\n-
    569 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
    \n-
    570 {
    \n-
    571 beforeHead_.next_=0;
    \n-
    572 assert(&beforeHead_==tail_);
    \n-
    573 assert(tail_->next_==0);
    \n-
    574 }
    \n-
    \n-
    575
    \n-
    576 template<typename T, class A>
    \n-
    \n-\n-
    578 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
    \n-
    579 {
    \n-
    580 copyElements(other);
    \n-
    581 }
    \n-
    \n-
    582
    \n-
    583 template<typename T, class A>
    \n-
    584 template<typename T1, class A1>
    \n-
    \n-\n-
    586 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)
    \n+
    557 template<class K>
    \n+
    558 constexpr bool operator> (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    559 {
    \n+
    560 return a>b[0];
    \n+
    561 }
    \n+
    562
    \n+
    564 template<class K>
    \n+
    565 constexpr bool operator>= (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    566 {
    \n+
    567 return a>=b[0];
    \n+
    568 }
    \n+
    569
    \n+
    571 template<class K>
    \n+
    572 constexpr bool operator< (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    573 {
    \n+
    574 return a<b[0];
    \n+
    575 }
    \n+
    576
    \n+
    578 template<class K>
    \n+
    579 constexpr bool operator<= (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    580 {
    \n+
    581 return a<=b[0];
    \n+
    582 }
    \n+
    583
    \n+
    585 template<class K>
    \n+
    586 constexpr bool operator== (const K a, const FieldVector<K,1>& b) noexcept
    \n
    587 {
    \n-
    588 copyElements(other);
    \n+
    588 return a==b[0];
    \n
    589 }
    \n-
    \n
    590
    \n-
    591 template<typename T, typename A>
    \n-
    592 void SLList<T,A>::copyElements(const SLList<T,A>& other)
    \n-
    593 {
    \n-
    594 assert(tail_==&beforeHead_);
    \n-
    595 assert(size_==0);
    \n-
    596 typedef typename SLList<T,A>::const_iterator Iterator;
    \n-
    597 Iterator iend = other.end();
    \n-
    598 for(Iterator element=other.begin(); element != iend; ++element)
    \n-
    599 push_back(*element);
    \n-
    600
    \n-
    601 assert(other.size()==size());
    \n-
    602 }
    \n-
    603
    \n-
    604 template<typename T, class A>
    \n-
    \n-\n-
    606 {
    \n-
    607 clear();
    \n-
    608 }
    \n-
    \n-
    609
    \n-
    610 template<typename T, class A>
    \n-
    \n-
    611 bool SLList<T,A>::operator==(const SLList& other) const
    \n-
    612 {
    \n-
    613 if(size()!=other.size())
    \n-
    614 return false;
    \n-
    615 for(const_iterator iter=begin(), oiter=other.begin();
    \n-
    616 iter != end(); ++iter, ++oiter)
    \n-
    617 if(*iter!=*oiter)
    \n-
    618 return false;
    \n-
    619 return true;
    \n-
    620 }
    \n-
    \n-
    621
    \n-
    622 template<typename T, class A>
    \n-
    \n-
    623 bool SLList<T,A>::operator!=(const SLList& other) const
    \n-
    624 {
    \n-
    625 if(size()==other.size()) {
    \n-
    626 for(const_iterator iter=begin(), oiter=other.begin();
    \n-
    627 iter != end(); ++iter, ++oiter)
    \n-
    628 if(*iter!=*oiter)
    \n-
    629 return true;
    \n-
    630 return false;
    \n-
    631 }else
    \n-
    632 return true;
    \n-
    633 }
    \n-
    \n-
    634 template<typename T, class A>
    \n-
    \n-\n-
    636 {
    \n-
    637 clear();
    \n-
    638 copyElements(other);
    \n-
    639 return *this;
    \n-
    640 }
    \n-
    \n-
    641
    \n-
    642 template<typename T, class A>
    \n-
    \n-
    643 inline void SLList<T,A>::push_back(const MemberType& item)
    \n-
    644 {
    \n-
    645 assert(size_>0 || tail_==&beforeHead_);
    \n-
    646 tail_->next_ = allocator_.allocate(1);
    \n-
    647 assert(size_>0 || tail_==&beforeHead_);
    \n-
    648 tail_ = tail_->next_;
    \n-
    649 ::new (static_cast<void*>(&(tail_->item_)))T(item);
    \n-
    650 tail_->next_=0;
    \n-
    651 assert(tail_->next_==0);
    \n-
    652 ++size_;
    \n-
    653 }
    \n-
    \n-
    654
    \n-
    655 template<typename T, class A>
    \n-
    656 inline void SLList<T,A>::insertAfter(Element* current, const T& item)
    \n-
    657 {
    \n-
    658 assert(current);
    \n-
    659
    \n-
    660#ifndef NDEBUG
    \n-
    661 bool changeTail = (current == tail_);
    \n-
    662#endif
    \n-
    663
    \n-
    664 // Save old next element
    \n-
    665 Element* tmp = current->next_;
    \n-
    666
    \n-
    667 assert(!changeTail || !tmp);
    \n-
    668
    \n-
    669 // Allocate space
    \n-
    670 current->next_ = allocator_.allocate(1);
    \n-
    671
    \n-
    672 // Use copy constructor to initialize memory
    \n-
    673 std::allocator_traits<Allocator>::construct(allocator_, current->next_, Element(item,tmp));
    \n-
    674
    \n-
    675 //::new(static_cast<void*>(&(current->next_->item_))) T(item);
    \n-
    676
    \n-
    677 if(!current->next_->next_) {
    \n-
    678 // Update tail
    \n-
    679 assert(changeTail);
    \n-
    680 tail_ = current->next_;
    \n-
    681 }
    \n-
    682 ++size_;
    \n-
    683 assert(!tail_->next_);
    \n-
    684 }
    \n-
    685
    \n-
    686 template<typename T, class A>
    \n-
    \n-
    687 inline void SLList<T,A>::push_front(const MemberType& item)
    \n-
    688 {
    \n-
    689 if(tail_ == &beforeHead_) {
    \n-
    690 // list was empty
    \n-
    691 beforeHead_.next_ = tail_ = allocator_.allocate(1, 0);
    \n-
    692 ::new(static_cast<void*>(&beforeHead_.next_->item_))T(item);
    \n-
    693 beforeHead_.next_->next_=0;
    \n-
    694 }else{
    \n-
    695 Element* added = allocator_.allocate(1, 0);
    \n-
    696 ::new(static_cast<void*>(&added->item_))T(item);
    \n-
    697 added->next_=beforeHead_.next_;
    \n-
    698 beforeHead_.next_=added;
    \n-
    699 }
    \n-
    700 assert(tail_->next_==0);
    \n-
    701 ++size_;
    \n-
    702 }
    \n-
    \n-
    703
    \n-
    704
    \n-
    705 template<typename T, class A>
    \n-
    706 inline void SLList<T,A>::deleteNext(Element* current)
    \n-
    707 {
    \n-
    708 this->template deleteNext<true>(current);
    \n-
    709 }
    \n-
    710
    \n-
    711 template<typename T, class A>
    \n-
    712 template<bool watchForTail>
    \n-
    713 inline void SLList<T,A>::deleteNext(Element* current)
    \n-
    714 {
    \n-
    715 assert(current->next_);
    \n-
    716 Element* next = current->next_;
    \n-
    717
    \n-
    718 if(watchForTail)
    \n-
    719 if(next == tail_) {
    \n-
    720 // deleting last element changes tail!
    \n-
    721 tail_ = current;
    \n-
    722 }
    \n-
    723
    \n-
    724 current->next_ = next->next_;
    \n-
    725 std::allocator_traits<Allocator>::destroy(allocator_, next);
    \n-
    726 allocator_.deallocate(next, 1);
    \n-
    727 --size_;
    \n-
    728 assert(!watchForTail || &beforeHead_ != tail_ || size_==0);
    \n-
    729 }
    \n-
    730
    \n-
    731 template<typename T, class A>
    \n-
    \n-\n-
    733 {
    \n-
    734 deleteNext(&beforeHead_);
    \n-
    735 }
    \n-
    \n-
    736
    \n-
    737 template<typename T, class A>
    \n-
    \n-
    738 inline void SLList<T,A>::clear()
    \n-
    739 {
    \n-
    740 while(beforeHead_.next_ ) {
    \n-
    741 this->template deleteNext<false>(&beforeHead_);
    \n-
    742 }
    \n-
    743
    \n-
    744 assert(size_==0);
    \n-
    745 // update the tail!
    \n-
    746 tail_ = &beforeHead_;
    \n-
    747 }
    \n-
    \n-
    748
    \n-
    749 template<typename T, class A>
    \n-
    \n-
    750 inline bool SLList<T,A>::empty() const
    \n-
    751 {
    \n-
    752 return (&beforeHead_ == tail_);
    \n-
    753 }
    \n-
    \n-
    754
    \n-
    755 template<typename T, class A>
    \n-
    \n-
    756 inline int SLList<T,A>::size() const
    \n-
    757 {
    \n-
    758 return size_;
    \n-
    759 }
    \n-
    \n-
    760
    \n-
    761 template<typename T, class A>
    \n-
    \n-\n-
    763 {
    \n-
    764 return iterator(beforeHead_.next_, this);
    \n-
    765 }
    \n-
    \n-
    766
    \n-
    767 template<typename T, class A>
    \n-
    \n-\n-
    769 {
    \n-
    770 return const_iterator(beforeHead_.next_);
    \n-
    771 }
    \n-
    \n-
    772
    \n-
    773 template<typename T, class A>
    \n-
    \n-\n-
    775 {
    \n-
    776 return iterator();
    \n-
    777 }
    \n-
    \n-
    778
    \n-
    779 template<typename T, class A>
    \n-
    \n-\n-
    781 {
    \n-
    782 return SLListModifyIterator<T,A>(iterator(tail_, this),iterator());
    \n-
    783 }
    \n-
    \n-
    784
    \n-
    785
    \n-
    786 template<typename T, class A>
    \n-
    \n-\n-
    788 {
    \n-
    789 return SLListModifyIterator<T,A>(iterator(&beforeHead_, this),
    \n-
    790 iterator(beforeHead_.next_, this));
    \n-
    791 }
    \n-
    \n-
    792
    \n-
    793 template<typename T, class A>
    \n-
    \n-\n-
    795 {
    \n-
    796 return const_iterator();
    \n-
    797 }
    \n-
    \n-
    798
    \n-
    800}
    \n-
    801#endif
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    \n-
    This file implements iterator facade classes for writing stl conformant iterators.
    \n-
    void push_front(const MemberType &item)
    Add a new entry to the beginning of the list.
    Definition sllist.hh:687
    \n-
    bool equals(const SLListConstIterator< T, A > &other) const
    Equality test for the iterator facade.
    Definition sllist.hh:406
    \n-
    void push_back(const MemberType &item)
    Add a new entry to the end of the list.
    Definition sllist.hh:643
    \n-
    ModifyIterator endModify()
    Get an iterator capable of deleting and inserting elements.
    Definition sllist.hh:780
    \n-
    SLListModifyIterator()
    Definition sllist.hh:438
    \n-
    Element()
    Definition sllist.hh:557
    \n-
    T & dereference() const
    Dereferencing function for the iterator facade.
    Definition sllist.hh:294
    \n-
    bool operator!=(const SLList &sl) const
    Definition sllist.hh:623
    \n-
    MemberType item_
    The element we hold.
    Definition sllist.hh:212
    \n-
    SLListConstIterator(typename SLList< T, A >::Element *item)
    Definition sllist.hh:380
    \n-
    typename std::allocator_traits< A >::template rebind_alloc< Element > Allocator
    The allocator to use.
    Definition sllist.hh:64
    \n-
    void insertAfter(const T &v) const
    Insert an element in the underlying list after the current position.
    Definition sllist.hh:342
    \n-
    SLListIterator< T, A > iterator
    The mutable iterator of the list.
    Definition sllist.hh:69
    \n-
    SLListConstIterator(const SLListModifyIterator< T, A > &other)
    Definition sllist.hh:388
    \n-
    SLListIterator()
    Definition sllist.hh:282
    \n-
    ~Element()
    Definition sllist.hh:562
    \n-
    bool operator==(const SLList &sl) const
    Definition sllist.hh:611
    \n-
    void deleteNext() const
    Delete the entry after the current position.
    Definition sllist.hh:353
    \n-
    SLList(const SLList< T, A > &other)
    Copy constructor.
    Definition sllist.hh:577
    \n-
    bool equals(const SLListModifyIterator< T, A > &other) const
    Equality test for the iterator facade.
    Definition sllist.hh:324
    \n-
    T & dereference() const
    Dereferencing function for the iterator facade.
    Definition sllist.hh:446
    \n-
    int size() const
    Get the number of elements the list contains.
    Definition sllist.hh:756
    \n-
    const_iterator begin() const
    Get an iterator pointing to the first element in the list.
    Definition sllist.hh:768
    \n-
    iterator end()
    Get an iterator pointing to the end of the list.
    Definition sllist.hh:774
    \n-
    void clear()
    Remove all elements from the list.
    Definition sllist.hh:738
    \n-
    SLList(const SLList< T1, A1 > &other)
    Copy constructor with type conversion.
    Definition sllist.hh:585
    \n-
    T MemberType
    The type we store.
    Definition sllist.hh:59
    \n-
    bool equals(const SLListModifyIterator< T, A > &other) const
    Test whether another iterator is equal.
    Definition sllist.hh:478
    \n-
    ModifyIterator beginModify()
    Get an iterator capable of deleting and inserting elements.
    Definition sllist.hh:787
    \n-
    SLList< T, A > & operator=(const SLList< T, A > &other)
    Assignment operator.
    Definition sllist.hh:635
    \n-
    SLListConstIterator(const SLListIterator< T, A > &other)
    Definition sllist.hh:384
    \n-
    SLListConstIterator< T, A > const_iterator
    The constant iterator of the list.
    Definition sllist.hh:74
    \n-
    bool empty() const
    Check whether the list is empty.
    Definition sllist.hh:750
    \n-
    SLListConstIterator()
    Definition sllist.hh:376
    \n-
    bool equals(const SLListConstIterator< T, A > &other) const
    Equality test for the iterator facade.
    Definition sllist.hh:304
    \n-
    bool equals(const SLListConstIterator< T, A > &other) const
    Test whether another iterator is equal.
    Definition sllist.hh:456
    \n-
    SLListModifyIterator< T, A > ModifyIterator
    The type of the iterator capable of deletion and insertion.
    Definition sllist.hh:103
    \n-
    const_iterator end() const
    Get an iterator pointing to the end of the list.
    Definition sllist.hh:794
    \n-
    SLList()
    Constructor.
    Definition sllist.hh:568
    \n-
    void insert(const T &v)
    Insert an element at the current position.
    Definition sllist.hh:505
    \n-
    SLListIterator(typename SLList< T, A >::Element *item, SLList< T, A > *sllist)
    Definition sllist.hh:277
    \n-
    SLListModifyIterator(SLListIterator< T, A > beforeIterator, SLListIterator< T, A > _iterator)
    Definition sllist.hh:433
    \n-
    void pop_front()
    Remove the first item in the list.
    Definition sllist.hh:732
    \n-
    void increment()
    Increment function for the iterator facade.
    Definition sllist.hh:332
    \n-
    SLListIterator(const SLListModifyIterator< T, A > &other)
    Definition sllist.hh:286
    \n-
    A::size_type size_type
    The size type.
    Definition sllist.hh:54
    \n-
    void remove()
    Delete the entry at the current position.
    Definition sllist.hh:518
    \n-
    const T & dereference() const
    Dereferencing function for the facade.
    Definition sllist.hh:396
    \n-
    Element * next_
    The next element in the list.
    Definition sllist.hh:208
    \n-
    void increment()
    Increment function for the iterator facade.
    Definition sllist.hh:486
    \n-
    void increment()
    Increment function for the iterator facade.
    Definition sllist.hh:414
    \n-
    ~SLList()
    Destructor.
    Definition sllist.hh:605
    \n-
    bool equals(const SLListIterator< T, A > &other) const
    Test whether another iterator is equal.
    Definition sllist.hh:467
    \n-
    iterator begin()
    Get an iterator pointing to the first element in the list.
    Definition sllist.hh:762
    \n-
    bool equals(const SLListIterator< T, A > &other) const
    Equality test for the iterator facade.
    Definition sllist.hh:314
    \n-
    std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
    Definition bigunsignedint.hh:278
    \n+
    592 template<class K>
    \n+
    593 constexpr bool operator!= (const K a, const FieldVector<K,1>& b) noexcept
    \n+
    594 {
    \n+
    595 return a!=b[0];
    \n+
    596 }
    \n+
    597#endif
    \n+
    598
    \n+
    599 /* Overloads for common classification functions */
    \n+
    \n+
    600 namespace MathOverloads {
    \n+
    601
    \n+
    603 template<class K, int SIZE>
    \n+
    \n+\n+
    605 {
    \n+
    606 bool out = true;
    \n+
    607 for (int i = 0; i < SIZE; ++i) {
    \n+
    608 out &= Dune::isFinite(b[i]);
    \n+
    609 }
    \n+
    610 return out;
    \n+
    611 }
    \n+
    \n+
    612
    \n+
    614 template<class K, int SIZE>
    \n+
    \n+\n+
    616 {
    \n+
    617 bool out = false;
    \n+
    618 for (int i = 0; i < SIZE; ++i) {
    \n+
    619 out |= Dune::isInf(b[i]);
    \n+
    620 }
    \n+
    621 return out;
    \n+
    622 }
    \n+
    \n+
    623
    \n+
    625 template<class K, int SIZE,
    \n+
    626 std::enable_if_t<HasNaN<K>::value, int> = 0>
    \n+
    \n+\n+
    628 {
    \n+
    629 bool out = false;
    \n+
    630 for (int i = 0; i < SIZE; ++i) {
    \n+
    631 out |= Dune::isNaN(b[i]);
    \n+
    632 }
    \n+
    633 return out;
    \n+
    634 }
    \n+
    \n+
    635
    \n+
    637 template<class K,
    \n+
    638 std::enable_if_t<HasNaN<K>::value, int> = 0>
    \n+
    \n+\n+\n+
    641 {
    \n+
    642 return Dune::isUnordered(b[0],c[0]);
    \n+
    643 }
    \n+
    \n+
    644
    \n+
    645 } // end namespace MathOverloads
    \n+
    \n+
    646
    \n+
    649} // end namespace Dune
    \n+
    650
    \n+
    651#endif // DUNE_COMMON_FVECTOR_HH
    \n+
    Implements the dense vector interface, with an exchangeable storage class.
    \n+
    Some useful basic math stuff.
    \n+
    Traits for type conversions and type information.
    \n+
    Type traits to determine the type of reals (when working with complex numbers)
    \n+
    Compute type of the result of an arithmetic operation involving two different number types.
    \n+
    Utilities for type computations, constraining overloads, ...
    \n+
    Macro for wrapping boundary checks.
    \n+
    Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)
    Read a std::tuple.
    Definition streamoperators.hh:43
    \n+
    #define DUNE_ASSERT_BOUNDS(cond)
    If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do nothing.
    Definition boundschecking.hh:30
    \n+
    bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:549
    \n+
    bigunsignedint< k > operator/(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:556
    \n+
    bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:542
    \n+
    bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:535
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator<(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:638
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator>(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:684
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator<=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:661
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator==(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for equality.
    Definition iteratorfacades.hh:238
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator>=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:706
    \n+
    EnableIfInterOperable< T1, T2, bool >::type operator!=(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for inequality.
    Definition iteratorfacades.hh:260
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    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
    \n-
    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
    \n-
    Base class for stl conformant forward iterators.
    Definition iteratorfacades.hh:142
    \n-
    A mutable iterator for the SLList.
    Definition sllist.hh:271
    \n-
    A constant iterator for the SLList.
    Definition sllist.hh:371
    \n-
    A mutable iterator for the SLList.
    Definition sllist.hh:429
    \n-
    A single linked list.
    Definition sllist.hh:44
    \n+
    bool isNaN(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
    Returns whether any entry is NaN.
    Definition fvector.hh:627
    \n+
    bool isInf(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
    Returns whether any entry is infinite.
    Definition fvector.hh:615
    \n+
    auto isFinite(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)
    Returns whether all entries are finite.
    Definition fvector.hh:604
    \n+
    bool isUnordered(const FieldVector< K, 1 > &b, const FieldVector< K, 1 > &c, PriorityTag< 2 >, ADLTag)
    Returns true if either b or c is NaN.
    Definition fvector.hh:639
    \n+
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n+
    constexpr FieldVector(const K &k) noexcept(std::is_nothrow_copy_assignable_v< K >)
    Constructor making vector with identical coordinates.
    Definition fvector.hh:113
    \n+
    const value_type & const_reference
    The type used for const references to the vector entry.
    Definition fvector.hh:105
    \n+
    constexpr FieldVector(const std::initializer_list< K > &l)
    Construct from a std::initializer_list.
    Definition fvector.hh:121
    \n+
    static constexpr size_type size() noexcept
    Obtain the number of elements stored in the vector.
    Definition fvector.hh:193
    \n+
    Base::size_type size_type
    Definition fvector.hh:98
    \n+
    FieldVector & operator=(const DenseVector< T > &x)
    Assignment from another dense vector.
    Definition fvector.hh:163
    \n+
    static constexpr int dimension
    The size of this vector.
    Definition fvector.hh:96
    \n+
    constexpr FieldVector() noexcept
    Default constructor, making value-initialized vector with all components set to zero.
    Definition fvector.hh:108
    \n+
    friend constexpr auto operator/(const FieldVector &vector, Scalar scalar)
    Vector space division by scalar.
    Definition fvector.hh:250
    \n+
    friend constexpr auto operator*(const FieldVector &vector, Scalar scalar)
    Vector space multiplication with scalar.
    Definition fvector.hh:224
    \n+
    value_type & reference
    The type used for references to the vector entry.
    Definition fvector.hh:102
    \n+
    Base::value_type value_type
    Definition fvector.hh:99
    \n+
    constexpr FieldVector(const FieldVector< T, SIZE > &x) noexcept(std::is_nothrow_assignable_v< K &, const T & >)
    Converting constructor from FieldVector with different element type.
    Definition fvector.hh:143
    \n+
    constexpr const K * data() const noexcept
    Return pointer to underlying array.
    Definition fvector.hh:216
    \n+
    FieldVector(const FieldVector &)=default
    Copy constructor with default behavior.
    \n+
    reference operator[](size_type i)
    Return a reference to the ith element.
    Definition fvector.hh:196
    \n+
    constexpr K * data() noexcept
    Return pointer to underlying array.
    Definition fvector.hh:210
    \n+
    Interface for a class of dense vectors over a given field.
    Definition densevector.hh:229
    \n+
    Traits::value_type value_type
    export the type representing the field
    Definition densevector.hh:250
    \n+
    size_type size() const
    size method
    Definition densevector.hh:336
    \n+
    Traits::size_type size_type
    The type used for the index access and size operation.
    Definition densevector.hh:259
    \n+
    Definition ftraits.hh:26
    \n+
    T field_type
    export the type representing the field
    Definition ftraits.hh:28
    \n+
    T real_type
    export the type representing the real type of the field
    Definition ftraits.hh:30
    \n+\n+
    std::array< K, SIZE > container_type
    Definition fvector.hh:40
    \n+
    container_type::size_type size_type
    Definition fvector.hh:42
    \n+
    FieldVector< K, SIZE > derived_type
    Definition fvector.hh:39
    \n+
    FieldTraits< K >::real_type real_type
    Definition fvector.hh:49
    \n+
    FieldTraits< K >::field_type field_type
    Definition fvector.hh:48
    \n+
    TMP to check the size of a DenseVectors statically, if possible.
    Definition fvector.hh:62
    \n+
    static constexpr bool value
    True if C is not of type FieldVector or its dimension is not equal SIZE.
    Definition fvector.hh:67
    \n+
    Tag to make sure the functions in this namespace can be found by ADL.
    Definition math.hh:230
    \n+
    Definition matvectraits.hh:31
    \n+
    decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType
    Definition promotiontraits.hh:28
    \n+
    Helper class for tagging priorities.
    Definition typeutilities.hh:73
    \n \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,808 +1,791 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-sllist.hh\n+fvector.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_SLLIST_HH\n-6#define DUNE_SLLIST_HH\n+5#ifndef DUNE_COMMON_FVECTOR_HH\n+6#define DUNE_COMMON_FVECTOR_HH\n 7\n-8#include \n-9#include \n-10#include \"_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\bf_\ba_\bc_\ba_\bd_\be_\bs_\b._\bh_\bh\"\n-11#include \n-12\n-13namespace _\bD_\bu_\bn_\be\n-14{\n-26 template\n-27 class SLListIterator;\n-28\n-29 template\n-30 class SLListConstIterator;\n-31\n-32 template\n-33 class SLListModifyIterator;\n-34\n-42 template >\n-_\b4_\b3 class _\bS_\bL_\bL_\bi_\bs_\bt\n-44 {\n-45 struct Element;\n-46 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-47 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-48\n-49 public:\n-50\n-_\b5_\b4 typedef typename A::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-55\n-_\b5_\b9 typedef T _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be;\n-60\n-_\b6_\b4 using _\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br = typename std::allocator_traits::template\n-rebind_alloc;\n-65\n-_\b6_\b9 typedef _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-70\n-_\b7_\b4 typedef _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+8#include \n+9#include \n+10#include \n+11#include \n+12#include \n+13#include \n+14#include \n+15\n+16#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh>\n+17#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bn_\bs_\be_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+18#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\bh_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+22#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n+23\n+24namespace _\bD_\bu_\bn_\be {\n+25\n+35 template< class K, int SIZE > class FieldVector;\n+36 template< class K, int SIZE >\n+_\b3_\b7 struct _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs< _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br >\n+38 {\n+_\b3_\b9 typedef _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bS_\bI_\bZ_\bE_\b> _\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be;\n+_\b4_\b0 typedef std::array _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\bt_\by_\bp_\be;\n+_\b4_\b1 typedef K _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b4_\b2 typedef typename container_type::size_type _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+43 };\n+44\n+45 template< class K, int SIZE >\n+_\b4_\b6 struct _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs< _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br >\n+47 {\n+_\b4_\b8 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be _\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be;\n+_\b4_\b9 typedef typename _\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bK_\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be _\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be;\n+50 };\n+51\n+60 template\n+_\b6_\b1 struct _\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt\n+62 {\n+_\b6_\b7 constexpr static bool _\bv_\ba_\bl_\bu_\be = true;\n+68 };\n+69\n+70 template\n+_\b7_\b1 struct _\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt<_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br,SIZE>\n+72 {\n+_\b7_\b3 constexpr static bool _\bv_\ba_\bl_\bu_\be = true;\n+74 };\n 75\n-_\b7_\b9 _\bS_\bL_\bL_\bi_\bs_\bt();\n-80\n-84 template\n-_\b8_\b5 _\bS_\bL_\bL_\bi_\bs_\bt(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b1_\b,_\bA_\b1_\b>& other);\n-86\n-_\b9_\b0 _\bS_\bL_\bL_\bi_\bs_\bt(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other);\n-91\n-_\b9_\b7 _\b~_\bS_\bL_\bL_\bi_\bs_\bt();\n-98\n-_\b1_\b0_\b3 typedef _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-104\n-_\b1_\b0_\b8 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other);\n-109\n-110\n-_\b1_\b1_\b5 inline void _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item);\n-116\n-_\b1_\b2_\b1 inline void _\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item);\n-122\n-_\b1_\b2_\b6 inline void _\bp_\bo_\bp_\b__\bf_\br_\bo_\bn_\bt();\n-127\n-_\b1_\b2_\b9 inline void _\bc_\bl_\be_\ba_\br();\n-130\n-_\b1_\b3_\b8 inline _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn();\n+76 template\n+_\b7_\b7 struct _\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt<_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br,SIZE>\n+78 {\n+_\b7_\b9 constexpr static bool _\bv_\ba_\bl_\bu_\be = false;\n+80 };\n+81\n+82\n+88 template< class K, int SIZE >\n+_\b8_\b9 class _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br :\n+90 public _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br< FieldVector >\n+91 {\n+92 std::array _data;\n+93 typedef _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bS_\bI_\bZ_\bE_\b> > _\bB_\ba_\bs_\be;\n+94 public:\n+_\b9_\b6 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = SIZE;\n+97\n+_\b9_\b8 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n+_\b9_\b9 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+100\n+_\b1_\b0_\b2 typedef _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+103\n+_\b1_\b0_\b5 typedef const _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+106\n+_\b1_\b0_\b8 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br () noexcept\n+109 : _data{}\n+110 {}\n+111\n+_\b1_\b1_\b3 explicit constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const K& k)\n+114 noexcept(std::is_nothrow_copy_assignable_v)\n+115 {\n+116 for (auto& d : _data)\n+117 d = k;\n+118 }\n+119\n+_\b1_\b2_\b1 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const std::initializer_list& l)\n+122 : _data{}\n+123 {\n+124 assert(l.size() == _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+125 for (int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+126 _data[i] = std::data(l)[i];\n+127 }\n+128\n+130 template::value, int> = 0,\n+132 decltype(std::declval() = std::declval()[0], bool{}) = true>\n+_\b1_\b3_\b3 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b>& x)\n+134 {\n+135 assert(x._\bs_\bi_\bz_\be() == _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+136 for (int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+137 _data[i] = x[i];\n+138 }\n 139\n-_\b1_\b4_\b7 inline _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const;\n-148\n-_\b1_\b5_\b6 inline _\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn_\bM_\bo_\bd_\bi_\bf_\by();\n+141 template, int> = 0>\n+_\b1_\b4_\b3 explicit constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bS_\bI_\bZ_\bE_\b>& x)\n+144 noexcept(std::is_nothrow_assignable_v)\n+145 {\n+146 for (int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+147 _data[i] = x[i];\n+148 }\n+149\n+151 template = 0>\n+_\b1_\b5_\b3 explicit _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b1_\b,_\b _\bS_\bI_\bZ_\bE_\b1_\b>&) = delete;\n+154\n+_\b1_\b5_\b6 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br&) = default;\n 157\n-_\b1_\b6_\b5 inline _\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd_\bM_\bo_\bd_\bi_\bf_\by();\n-166\n-_\b1_\b7_\b3 inline _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd();\n-174\n-_\b1_\b8_\b1 inline _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const;\n-182\n-_\b1_\b8_\b8 inline bool _\be_\bm_\bp_\bt_\by() const;\n+158\n+160 template::value, int> = 0,\n+162 decltype(std::declval() = std::declval()[0], bool{}) = true>\n+_\b1_\b6_\b3 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& operator= (const _\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b>& x)\n+164 {\n+165 assert(x._\bs_\bi_\bz_\be() == _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+166 for (int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+167 _data[i] = x[i];\n+168 return *this;\n+169 }\n+170\n+172 template, int> = 0>\n+_\b1_\b7_\b4 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bS_\bI_\bZ_\bE_\b>& x)\n+175 noexcept(std::is_nothrow_assignable_v)\n+176 {\n+177 for (int i = 0; i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; ++i)\n+178 _data[i] = x[i];\n+179 return *this;\n+180 }\n+181\n+183 template = 0>\n+_\b1_\b8_\b5 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& operator= (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b1_\b,_\b _\bS_\bI_\bZ_\bE_\b1_\b>&) = delete;\n+186\n+_\b1_\b8_\b8 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br&) = default;\n 189\n-_\b1_\b9_\b4 inline int _\bs_\bi_\bz_\be() const;\n-195\n-_\b1_\b9_\b6 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt& sl) const;\n-197\n-198\n-_\b1_\b9_\b9 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt& sl) const;\n-200\n-201 private:\n-203 struct Element\n+190 using Base::operator=;\n+191\n+_\b1_\b9_\b3 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () noexcept { return _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn; }\n+194\n+_\b1_\b9_\b6 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n+197 {\n+198 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+199 return _data[i];\n+200 }\n+201\n+_\b2_\b0_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n 204 {\n-_\b2_\b0_\b8 _\bE_\bl_\be_\bm_\be_\bn_\bt* _\bn_\be_\bx_\bt_\b_;\n-_\b2_\b1_\b2 _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be _\bi_\bt_\be_\bm_\b_;\n-213\n-_\b2_\b1_\b4 _\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item, _\bE_\bl_\be_\bm_\be_\bn_\bt* _\bn_\be_\bx_\bt_\b_=0);\n-215\n-_\b2_\b1_\b6 _\bE_\bl_\be_\bm_\be_\bn_\bt();\n-217\n-_\b2_\b1_\b8 _\b~_\bE_\bl_\be_\bm_\be_\bn_\bt();\n-219 };\n+205 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i < _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+206 return _data[i];\n+207 }\n+208\n+_\b2_\b1_\b0 constexpr K* _\bd_\ba_\bt_\ba () noexcept\n+211 {\n+212 return _data.data();\n+213 }\n+214\n+_\b2_\b1_\b6 constexpr const K* _\bd_\ba_\bt_\ba () const noexcept\n+217 {\n+218 return _data.data();\n+219 }\n 220\n-225 void deleteNext(Element* current);\n-226\n-231 void copyElements(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other);\n-232\n-240 template\n-241 void deleteNext(Element* current);\n-247 void insertAfter(Element* current, const T& item);\n-248\n-250 Element beforeHead_;\n-251\n-257 Element* tail_;\n-258\n-260 _\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br allocator_;\n-261\n-263 int size_;\n-264 };\n-265\n-269 template\n-_\b2_\b7_\b0 class _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br : public _\bD_\bu_\bn_\be_\b:_\b:\n-_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be, T, T&, std::size_t>\n-271 {\n-272 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-273 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-274 friend class _\bS_\bL_\bL_\bi_\bs_\bt;\n-275\n-276 public:\n-_\b2_\b7_\b7 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt* item,\n-278 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>* sllist)\n-279 : current_(item), list_(sllist)\n-280 {}\n-281\n-_\b2_\b8_\b2 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br()\n-283 : current_(0), list_(0)\n-284 {}\n-285\n-_\b2_\b8_\b6 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other)\n-287 : current_(other.iterator_.current_), list_(other.iterator_.list_)\n-288 {}\n-289\n-_\b2_\b9_\b4 inline T& _\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const\n-295 {\n-296 return current_->item_;\n-297 }\n-298\n-_\b3_\b0_\b4 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-305 {\n-306 return current_==other.current_;\n-307 }\n+222 template::value, int> = 0>\n+_\b2_\b2_\b4 friend constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& vector, Scalar scalar)\n+225 {\n+226 using T = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n+227 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\bS_\bI_\bZ_\bE_\b> result;\n+228\n+229 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < vector._\bs_\bi_\bz_\be(); ++i)\n+230 result[i] = vector[i] * scalar;\n+231 return result;\n+232 }\n+233\n+235 template::value, int> = 0>\n+_\b2_\b3_\b7 friend constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b (Scalar scalar, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& vector)\n+238 {\n+239 using T = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n+240 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\bS_\bI_\bZ_\bE_\b> result;\n+241\n+242 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < vector._\bs_\bi_\bz_\be(); ++i)\n+243 result[i] = scalar * vector[i];\n+244 return result;\n+245 }\n+246\n+248 template::value, int> = 0>\n+_\b2_\b5_\b0 friend constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& vector, Scalar scalar)\n+251 {\n+252 using T = typename _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be_\b,_\bS_\bc_\ba_\bl_\ba_\br_\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n+253 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bT_\b,_\bS_\bI_\bZ_\bE_\b> result;\n+254\n+255 for (_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i = 0; i < vector._\bs_\bi_\bz_\be(); ++i)\n+256 result[i] = vector[i] / scalar;\n+257\n+258 return result;\n+259 }\n+260\n+261 };\n+262\n+274 template\n+_\b2_\b7_\b5 std::istream &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>_\b (std::istream& in, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b>& v)\n+276 {\n+277 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b> w;\n+278 for (int i = 0; i < SIZE; ++i)\n+279 in >> w[i];\n+280 if (in)\n+281 v = w;\n+282 return in;\n+283 }\n+284\n+285#ifndef DOXYGEN\n+286 template< class K >\n+287 struct _\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs< _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br >\n+288 {\n+289 typedef _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b1_\b> derived_type;\n+290 typedef K container_type;\n+291 typedef K value_type;\n+292 typedef size_t size_type;\n+293 };\n+294\n+297 template\n+298 class FieldVector :\n+299 public DenseVector< FieldVector >\n+300 {\n+301 K _data;\n+302 typedef DenseVector< FieldVector > Base;\n+303 public:\n+305 constexpr static int _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn = 1;\n+306\n+307 typedef typename _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n 308\n-_\b3_\b1_\b4 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-315 {\n-316 return current_==other.current_;\n-317 }\n-318\n-_\b3_\b2_\b4 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-325 {\n-326 return current_==other.iterator_.current_;\n-327 }\n+310 typedef K& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+311\n+313 typedef const K& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n+314\n+315 //===== construction\n+316\n+318 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br () noexcept\n+319 : _data()\n+320 {}\n+321\n+323 template, int> = 0>\n+325 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const T& k) noexcept\n+326 : _data(k)\n+327 {}\n 328\n-_\b3_\b3_\b2 inline void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-333 {\n-334 current_ = current_->next_;\n-335 }\n-336\n-_\b3_\b4_\b2 inline void _\bi_\bn_\bs_\be_\br_\bt_\bA_\bf_\bt_\be_\br(const T& v) const\n-343 {\n-344 assert(list_ );\n-345 list_->insertAfter(current_, v);\n-346 }\n-347\n-_\b3_\b5_\b3 inline void _\bd_\be_\bl_\be_\bt_\be_\bN_\be_\bx_\bt() const\n-354 {\n-355 assert(list_);\n-356 list_->deleteNext(current_);\n-357 }\n+330 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const std::initializer_list& l)\n+331 {\n+332 assert(l.size() == 1);\n+333 _data = *l.begin();\n+334 }\n+335\n+337 template, int> = 0>\n+339 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const FieldVector& x) noexcept\n+340 : _data(x[0])\n+341 {}\n+342\n+344 template::value, int> = 0,\n+346 decltype(std::declval() = std::declval()[0], bool{}) = true>\n+347 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const DenseVector& x)\n+348 {\n+349 assert(x.size() == 1);\n+350 _data = x[0];\n+351 }\n+352\n+354 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br&) = default;\n+355\n+357 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br&) = default;\n 358\n-359 private:\n-361 typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt* current_;\n-_\b3_\b6_\b3 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>* list_;\n-364 };\n-365\n-369 template\n-_\b3_\b7_\b0 class _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br : public _\bD_\bu_\bn_\be_\b:_\b:\n-_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be, const T, const T&, std::size_t>\n-371 {\n-372 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-373 friend class _\bS_\bL_\bL_\bi_\bs_\bt;\n-374\n-375 public:\n-_\b3_\b7_\b6 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br()\n-377 : current_(0)\n-378 {}\n-379\n-_\b3_\b8_\b0 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt* item)\n-381 : current_(item)\n-382 {}\n-383\n-_\b3_\b8_\b4 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other)\n-385 : current_(other.current_)\n-386 {}\n+360 template() = std::declval(), bool{}) = true>\n+362 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& operator= (const FieldVector& other) noexcept\n+363 {\n+364 _data = other[0];\n+365 return *this;\n+366 }\n+367\n+369 template::value, int> = 0,\n+371 decltype(std::declval() = std::declval()[0], bool{}) = true>\n+372 _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& operator= (const DenseVector& other)\n+373 {\n+374 assert(other.size() == 1);\n+375 _data = other[0];\n+376 return *this;\n+377 }\n+378\n+380 template() = std::declval(), bool{}) = true>\n+382 constexpr _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br& operator= (const T& k) noexcept\n+383 {\n+384 _data = k;\n+385 return *this;\n+386 }\n 387\n-_\b3_\b8_\b8 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(const _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other)\n-389 : current_(other.iterator_.current_)\n-390 {}\n-391\n-_\b3_\b9_\b6 inline const T& _\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const\n+388 //===== forward methods to container\n+389 static constexpr _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bs_\bi_\bz_\be () noexcept { return 1; }\n+390\n+391 _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b ([[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i)\n+392 {\n+393 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i == 0);\n+394 return _data;\n+395 }\n+396 _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]_\b ([[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be i) const\n 397 {\n-398 return current_->item_;\n-399 }\n-400\n-_\b4_\b0_\b6 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-407 {\n-408 return current_==other.current_;\n-409 }\n-410\n-_\b4_\b1_\b4 inline void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n-415 {\n-416 current_ = current_->next_;\n-417 }\n+398 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS(i == 0);\n+399 return _data;\n+400 }\n+401\n+403 constexpr K* _\bd_\ba_\bt_\ba () noexcept\n+404 {\n+405 return &_data;\n+406 }\n+407\n+409 constexpr const K* _\bd_\ba_\bt_\ba () const noexcept\n+410 {\n+411 return &_data;\n+412 }\n+413\n+414 //===== conversion operator\n+415\n+417 constexpr operator _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be () noexcept { return _data; }\n 418\n-419 private:\n-_\b4_\b2_\b1 typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt* current_;\n-422 };\n-423\n-427 template\n-_\b4_\b2_\b8 class _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br : public _\bD_\bu_\bn_\be_\b:_\b:\n-_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be, T, T&, std::size_t>\n+420 constexpr operator _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be () const noexcept { return _data; }\n+421 };\n+422\n+423 /* ----- FV / FV ----- */\n+424 /* mostly not necessary as these operations are already covered via the\n+cast operator */\n+425\n+427 template\n+428 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b (const FieldVector& a, const\n+FieldVector& b) noexcept\n 429 {\n-430 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-431 friend class _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br;\n-432 public:\n-_\b4_\b3_\b3 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br(_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> beforeIterator,\n-434 _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _iterator)\n-435 : beforeIterator_(beforeIterator), iterator_(_iterator)\n-436 {}\n-437\n-_\b4_\b3_\b8 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br()\n-439 : beforeIterator_(), iterator_()\n-440 {}\n-441\n-_\b4_\b4_\b6 inline T& _\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be() const\n-447 {\n-448 return *iterator_;\n-449 }\n-450\n-_\b4_\b5_\b6 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-457 {\n-458 return iterator_== other;\n-459 }\n-460\n-461\n-_\b4_\b6_\b7 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-468 {\n-469 return iterator_== other;\n-470 }\n-471\n-472\n-_\b4_\b7_\b8 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>& other) const\n-479 {\n-480 return iterator_== other.iterator_;\n-481 }\n-482\n-_\b4_\b8_\b6 inline void _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt()\n+430 return a[0]>b[0];\n+431 }\n+432\n+434 template\n+435 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=_\b (const FieldVector& a, const\n+FieldVector& b) noexcept\n+436 {\n+437 return a[0]>=b[0];\n+438 }\n+439\n+441 template\n+442 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b (const FieldVector& a, const\n+FieldVector& b) noexcept\n+443 {\n+444 return a[0]\n+449 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=_\b (const FieldVector& a, const\n+FieldVector& b) noexcept\n+450 {\n+451 return a[0]<=b[0];\n+452 }\n+453\n+454 /* ----- FV / scalar ----- */\n+455\n+457 template\n+458 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b (const FieldVector& a, const K b)\n+noexcept\n+459 {\n+460 return a[0]+b;\n+461 }\n+462\n+464 template\n+465 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b (const FieldVector& a, const K b)\n+noexcept\n+466 {\n+467 return a[0]-b;\n+468 }\n+469\n+471 template\n+472 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b (const FieldVector& a, const K b)\n+noexcept\n+473 {\n+474 return a[0]*b;\n+475 }\n+476\n+478 template\n+479 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b (const FieldVector& a, const K b)\n+noexcept\n+480 {\n+481 return a[0]/b;\n+482 }\n+483\n+485 template\n+486 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b (const FieldVector& a, const K b) noexcept\n 487 {\n-488 ++iterator_;\n-489 ++beforeIterator_;\n-490 }\n-491\n-_\b5_\b0_\b5 inline void _\bi_\bn_\bs_\be_\br_\bt(const T& v)\n-506 {\n-507 beforeIterator_.insertAfter(v);\n-508 ++beforeIterator_;\n-509 }\n-510\n-_\b5_\b1_\b8 inline void _\br_\be_\bm_\bo_\bv_\be()\n-519 {\n-520 ++iterator_;\n-521 beforeIterator_.deleteNext();\n-522 }\n-523\n-524 private:\n-526 _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> beforeIterator_;\n-528 _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> iterator_;\n-529 };\n-530\n-531 template\n-_\b5_\b3_\b2 std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream& os, const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& sllist)\n-533 {\n-534 typedef typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br Iterator;\n-535 Iterator end = sllist._\be_\bn_\bd();\n-536 Iterator current= sllist._\bb_\be_\bg_\bi_\bn();\n-537\n-538 os << \"{ \";\n-539\n-540 if(current!=end) {\n-541 os<<*current<<\" (\"<(&(*current))<<\")\";\n-542 ++current;\n-543\n-544 for(; current != end; ++current)\n-545 os<<\", \"<<*current<<\" (\"<(&(*current))<<\")\";\n-546 }\n-547 os<<\"} \";\n-548 return os;\n-549 }\n-550\n-551 template\n-_\b5_\b5_\b2 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item, Element* next)\n-553 : next_(next), item_(item)\n-554 {}\n+488 return a[0]>b;\n+489 }\n+490\n+492 template\n+493 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=_\b (const FieldVector& a, const K b) noexcept\n+494 {\n+495 return a[0]>=b;\n+496 }\n+497\n+499 template\n+500 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b (const FieldVector& a, const K b) noexcept\n+501 {\n+502 return a[0]\n+507 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=_\b (const FieldVector& a, const K b) noexcept\n+508 {\n+509 return a[0]<=b;\n+510 }\n+511\n+513 template\n+514 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b (const FieldVector& a, const K b) noexcept\n+515 {\n+516 return a[0]==b;\n+517 }\n+518\n+520 template\n+521 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=_\b (const FieldVector& a, const K b) noexcept\n+522 {\n+523 return a[0]!=b;\n+524 }\n+525\n+526 /* ----- scalar / FV ------ */\n+527\n+529 template\n+530 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b (const K a, const FieldVector& b)\n+noexcept\n+531 {\n+532 return a+b[0];\n+533 }\n+534\n+536 template\n+537 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b (const K a, const FieldVector& b)\n+noexcept\n+538 {\n+539 return a-b[0];\n+540 }\n+541\n+543 template\n+544 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*_\b (const K a, const FieldVector& b)\n+noexcept\n+545 {\n+546 return a*b[0];\n+547 }\n+548\n+550 template\n+551 constexpr FieldVector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/_\b (const K a, const FieldVector& b)\n+noexcept\n+552 {\n+553 return a/b[0];\n+554 }\n 555\n-556 template\n-_\b5_\b5_\b7 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt()\n-558 : next_(0), item_()\n-559 {}\n-560\n-561 template\n-_\b5_\b6_\b2 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bE_\bl_\be_\bm_\be_\bn_\bt()\n-563 {\n-564 next_=0;\n-565 }\n-566\n-567 template\n-_\b5_\b6_\b8 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt()\n-569 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)\n-570 {\n-571 beforeHead_.next_=0;\n-572 assert(&beforeHead_==tail_);\n-573 assert(tail_->next_==0);\n-574 }\n-575\n-576 template\n-_\b5_\b7_\b7 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other)\n-578 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)\n-579 {\n-580 copyElements(other);\n-581 }\n-582\n-583 template\n-584 template\n-_\b5_\b8_\b5 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b1_\b,_\bA_\b1_\b>& other)\n-586 : beforeHead_(), tail_(&beforeHead_), allocator_(), size_(0)\n+557 template\n+558 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b (const K a, const FieldVector& b) noexcept\n+559 {\n+560 return a>b[0];\n+561 }\n+562\n+564 template\n+565 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=_\b (const K a, const FieldVector& b) noexcept\n+566 {\n+567 return a>=b[0];\n+568 }\n+569\n+571 template\n+572 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b (const K a, const FieldVector& b) noexcept\n+573 {\n+574 return a\n+579 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=_\b (const K a, const FieldVector& b) noexcept\n+580 {\n+581 return a<=b[0];\n+582 }\n+583\n+585 template\n+586 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b (const K a, const FieldVector& b) noexcept\n 587 {\n-588 copyElements(other);\n+588 return a==b[0];\n 589 }\n 590\n-591 template\n-592 void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bc_\bo_\bp_\by_\bE_\bl_\be_\bm_\be_\bn_\bt_\bs(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other)\n-593 {\n-594 assert(tail_==&beforeHead_);\n-595 assert(size_==0);\n-596 typedef typename _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br Iterator;\n-597 Iterator iend = other._\be_\bn_\bd();\n-598 for(Iterator element=other._\bb_\be_\bg_\bi_\bn(); element != iend; ++element)\n-599 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(*element);\n-600\n-601 assert(other._\bs_\bi_\bz_\be()==_\bs_\bi_\bz_\be());\n-602 }\n-603\n-604 template\n-_\b6_\b0_\b5 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\b~_\bS_\bL_\bL_\bi_\bs_\bt()\n-606 {\n-607 clear();\n-608 }\n-609\n-610 template\n-_\b6_\b1_\b1 bool _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt& other) const\n-612 {\n-613 if(_\bs_\bi_\bz_\be()!=other._\bs_\bi_\bz_\be())\n-614 return false;\n-615 for(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br iter=begin(), oiter=other._\bb_\be_\bg_\bi_\bn();\n-616 iter != end(); ++iter, ++oiter)\n-617 if(*iter!=*oiter)\n-618 return false;\n-619 return true;\n+592 template\n+593 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=_\b (const K a, const FieldVector& b) noexcept\n+594 {\n+595 return a!=b[0];\n+596 }\n+597#endif\n+598\n+599 /* Overloads for common classification functions */\n+_\b6_\b0_\b0 namespace MathOverloads {\n+601\n+603 template\n+_\b6_\b0_\b4 auto _\bi_\bs_\bF_\bi_\bn_\bi_\bt_\be (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bS_\bI_\bZ_\bE_\b>& b, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg_\b<_\b2_\b>, _\bA_\bD_\bL_\bT_\ba_\bg)\n+605 {\n+606 bool out = true;\n+607 for (int i = 0; i < SIZE; ++i) {\n+608 out &= Dune::isFinite(b[i]);\n+609 }\n+610 return out;\n+611 }\n+612\n+614 template\n+_\b6_\b1_\b5 bool _\bi_\bs_\bI_\bn_\bf (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bS_\bI_\bZ_\bE_\b>& b, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg_\b<_\b2_\b>, _\bA_\bD_\bL_\bT_\ba_\bg)\n+616 {\n+617 bool out = false;\n+618 for (int i = 0; i < SIZE; ++i) {\n+619 out |= Dune::isInf(b[i]);\n 620 }\n-621\n-622 template\n-_\b6_\b2_\b3 bool _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt& other) const\n-624 {\n-625 if(_\bs_\bi_\bz_\be()==other._\bs_\bi_\bz_\be()) {\n-626 for(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br iter=begin(), oiter=other._\bb_\be_\bg_\bi_\bn();\n-627 iter != end(); ++iter, ++oiter)\n-628 if(*iter!=*oiter)\n-629 return true;\n-630 return false;\n-631 }else\n-632 return true;\n-633 }\n-634 template\n-_\b6_\b3_\b5 _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>& other)\n-636 {\n-637 clear();\n-638 copyElements(other);\n-639 return *this;\n-640 }\n-641\n-642 template\n-_\b6_\b4_\b3 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item)\n-644 {\n-645 assert(size_>0 || tail_==&beforeHead_);\n-646 tail_->next_ = allocator_.allocate(1);\n-647 assert(size_>0 || tail_==&beforeHead_);\n-648 tail_ = tail_->next_;\n-649 ::new (static_cast(&(tail_->item_)))T(item);\n-650 tail_->next_=0;\n-651 assert(tail_->next_==0);\n-652 ++size_;\n-653 }\n-654\n-655 template\n-656 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bA_\bf_\bt_\be_\br(Element* current, const T& item)\n-657 {\n-658 assert(current);\n-659\n-660#ifndef NDEBUG\n-661 bool changeTail = (current == tail_);\n-662#endif\n-663\n-664 // Save old next element\n-665 Element* tmp = current->next_;\n-666\n-667 assert(!changeTail || !tmp);\n-668\n-669 // Allocate space\n-670 current->next_ = allocator_.allocate(1);\n-671\n-672 // Use copy constructor to initialize memory\n-673 std::allocator_traits::construct(allocator_, current->next_,\n-Element(item,tmp));\n-674\n-675 //::new(static_cast(&(current->next_->item_))) T(item);\n-676\n-677 if(!current->next_->next_) {\n-678 // Update tail\n-679 assert(changeTail);\n-680 tail_ = current->next_;\n-681 }\n-682 ++size_;\n-683 assert(!tail_->next_);\n-684 }\n-685\n-686 template\n-_\b6_\b8_\b7 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt(const _\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be& item)\n-688 {\n-689 if(tail_ == &beforeHead_) {\n-690 // list was empty\n-691 beforeHead_.next_ = tail_ = allocator_.allocate(1, 0);\n-692 ::new(static_cast(&beforeHead_.next_->item_))T(item);\n-693 beforeHead_.next_->next_=0;\n-694 }else{\n-695 Element* added = allocator_.allocate(1, 0);\n-696 ::new(static_cast(&added->item_))T(item);\n-697 added->next_=beforeHead_.next_;\n-698 beforeHead_.next_=added;\n-699 }\n-700 assert(tail_->next_==0);\n-701 ++size_;\n-702 }\n-703\n-704\n-705 template\n-706 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bN_\be_\bx_\bt(Element* current)\n-707 {\n-708 this->template deleteNext(current);\n-709 }\n-710\n-711 template\n-712 template\n-713 inline void SLList::deleteNext(Element* current)\n-714 {\n-715 assert(current->next_);\n-716 Element* next = current->next_;\n-717\n-718 if(watchForTail)\n-719 if(next == tail_) {\n-720 // deleting last element changes tail!\n-721 tail_ = current;\n-722 }\n-723\n-724 current->next_ = next->next_;\n-725 std::allocator_traits::destroy(allocator_, next);\n-726 allocator_.deallocate(next, 1);\n-727 --size_;\n-728 assert(!watchForTail || &beforeHead_ != tail_ || size_==0);\n-729 }\n-730\n-731 template\n-_\b7_\b3_\b2 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bp_\bo_\bp_\b__\bf_\br_\bo_\bn_\bt()\n-733 {\n-734 deleteNext(&beforeHead_);\n-735 }\n-736\n-737 template\n-_\b7_\b3_\b8 inline void _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bc_\bl_\be_\ba_\br()\n-739 {\n-740 while(beforeHead_.next_ ) {\n-741 this->template deleteNext(&beforeHead_);\n-742 }\n-743\n-744 assert(size_==0);\n-745 // update the tail!\n-746 tail_ = &beforeHead_;\n-747 }\n-748\n-749 template\n-_\b7_\b5_\b0 inline bool _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\be_\bm_\bp_\bt_\by() const\n-751 {\n-752 return (&beforeHead_ == tail_);\n-753 }\n-754\n-755 template\n-_\b7_\b5_\b6 inline int _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bs_\bi_\bz_\be() const\n-757 {\n-758 return size_;\n-759 }\n-760\n-761 template\n-_\b7_\b6_\b2 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bb_\be_\bg_\bi_\bn()\n-763 {\n-764 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(beforeHead_.next_, this);\n-765 }\n-766\n-767 template\n-_\b7_\b6_\b8 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bb_\be_\bg_\bi_\bn() const\n-769 {\n-770 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(beforeHead_.next_);\n-771 }\n-772\n-773 template\n-_\b7_\b7_\b4 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\be_\bn_\bd()\n-775 {\n-776 return _\bi_\bt_\be_\br_\ba_\bt_\bo_\br();\n-777 }\n-778\n-779 template\n-_\b7_\b8_\b0 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\be_\bn_\bd_\bM_\bo_\bd_\bi_\bf_\by()\n-781 {\n-782 return _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>(_\bi_\bt_\be_\br_\ba_\bt_\bo_\br(tail_, this),_\bi_\bt_\be_\br_\ba_\bt_\bo_\br());\n-783 }\n-784\n-785\n-786 template\n-_\b7_\b8_\b7 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bM_\bo_\bd_\bi_\bf_\by()\n-788 {\n-789 return _\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b>(_\bi_\bt_\be_\br_\ba_\bt_\bo_\br(&beforeHead_, this),\n-790 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br(beforeHead_.next_, this));\n-791 }\n-792\n-793 template\n-_\b7_\b9_\b4 inline _\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b<_\bT_\b,_\bA_\b> _\bS_\bL_\bL_\bi_\bs_\bt_\b<_\bT_\b,_\bA_\b>_\b:_\b:_\be_\bn_\bd() const\n-795 {\n-796 return _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br();\n-797 }\n-798\n-800}\n-801#endif\n-_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\bf_\ba_\bc_\ba_\bd_\be_\bs_\b._\bh_\bh\n-This file implements iterator facade classes for writing stl conformant\n-iterators.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt\n-void push_front(const MemberType &item)\n-Add a new entry to the beginning of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:687\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListConstIterator< T, A > &other) const\n-Equality test for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:406\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-void push_back(const MemberType &item)\n-Add a new entry to the end of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:643\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\be_\bn_\bd_\bM_\bo_\bd_\bi_\bf_\by\n-ModifyIterator endModify()\n-Get an iterator capable of deleting and inserting elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:780\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListModifyIterator()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:438\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt\n-Element()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:557\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-T & dereference() const\n-Dereferencing function for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:294\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const SLList &sl) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:623\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bi_\bt_\be_\bm_\b_\n-MemberType item_\n-The element we hold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:212\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListConstIterator(typename SLList< T, A >::Element *item)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:380\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-typename std::allocator_traits< A >::template rebind_alloc< Element > Allocator\n-The allocator to use.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:64\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bA_\bf_\bt_\be_\br\n-void insertAfter(const T &v) const\n-Insert an element in the underlying list after the current position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:342\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListIterator< T, A > iterator\n-The mutable iterator of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListConstIterator(const SLListModifyIterator< T, A > &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:388\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListIterator()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bE_\bl_\be_\bm_\be_\bn_\bt\n-~Element()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:562\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const SLList &sl) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:611\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bN_\be_\bx_\bt\n-void deleteNext() const\n-Delete the entry after the current position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:353\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt\n-SLList(const SLList< T, A > &other)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:577\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListModifyIterator< T, A > &other) const\n-Equality test for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:324\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-T & dereference() const\n-Dereferencing function for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:446\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bs_\bi_\bz_\be\n-int size() const\n-Get the number of elements the list contains.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:756\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Get an iterator pointing to the first element in the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:768\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-Get an iterator pointing to the end of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:774\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-Remove all elements from the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:738\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt\n-SLList(const SLList< T1, A1 > &other)\n-Copy constructor with type conversion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:585\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bM_\be_\bm_\bb_\be_\br_\bT_\by_\bp_\be\n-T MemberType\n-The type we store.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:59\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListModifyIterator< T, A > &other) const\n-Test whether another iterator is equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:478\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bM_\bo_\bd_\bi_\bf_\by\n-ModifyIterator beginModify()\n-Get an iterator capable of deleting and inserting elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:787\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-SLList< T, A > & operator=(const SLList< T, A > &other)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:635\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListConstIterator(const SLListIterator< T, A > &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:384\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListConstIterator< T, A > const_iterator\n-The constant iterator of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Check whether the list is empty.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:750\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListConstIterator()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:376\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListConstIterator< T, A > &other) const\n-Equality test for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:304\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListConstIterator< T, A > &other) const\n-Test whether another iterator is equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:456\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListModifyIterator< T, A > ModifyIterator\n-The type of the iterator capable of deletion and insertion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:103\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Get an iterator pointing to the end of the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:794\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt\n-SLList()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:568\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(const T &v)\n-Insert an element at the current position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:505\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListIterator(typename SLList< T, A >::Element *item, SLList< T, A > *sllist)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:277\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListModifyIterator(SLListIterator< T, A > beforeIterator, SLListIterator< T,\n-A > _iterator)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:433\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bp_\bo_\bp_\b__\bf_\br_\bo_\bn_\bt\n-void pop_front()\n-Remove the first item in the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:732\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-Increment function for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:332\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-SLListIterator(const SLListModifyIterator< T, A > &other)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:286\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n-A::size_type size_type\n-The size type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:54\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n-void remove()\n-Delete the entry at the current position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:518\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bd_\be_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-const T & dereference() const\n-Dereferencing function for the facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:396\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bE_\bl_\be_\bm_\be_\bn_\bt_\b:_\b:_\bn_\be_\bx_\bt_\b_\n-Element * next_\n-The next element in the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:208\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-Increment function for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:486\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt\n-void increment()\n-Increment function for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:414\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\b~_\bS_\bL_\bL_\bi_\bs_\bt\n-~SLList()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:605\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListIterator< T, A > &other) const\n-Test whether another iterator is equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:467\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Get an iterator pointing to the first element in the list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:762\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const SLListIterator< T, A > &other) const\n-Equality test for the iterator facade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:314\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:278\n+621 return out;\n+622 }\n+623\n+625 template::value, int> = 0>\n+_\b6_\b2_\b7 bool _\bi_\bs_\bN_\ba_\bN (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\bS_\bI_\bZ_\bE_\b>& b, _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg_\b<_\b2_\b>, _\bA_\bD_\bL_\bT_\ba_\bg)\n+628 {\n+629 bool out = false;\n+630 for (int i = 0; i < SIZE; ++i) {\n+631 out |= Dune::isNaN(b[i]);\n+632 }\n+633 return out;\n+634 }\n+635\n+637 template::value, int> = 0>\n+_\b6_\b3_\b9 bool _\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd (const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b1_\b>& b, const _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\b,_\b1_\b>& c,\n+640 _\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg_\b<_\b2_\b>, _\bA_\bD_\bL_\bT_\ba_\bg)\n+641 {\n+642 return Dune::isUnordered(b[0],c[0]);\n+643 }\n+644\n+645 } // end namespace MathOverloads\n+646\n+649} // end namespace Dune\n+650\n+651#endif // DUNE_COMMON_FVECTOR_HH\n+_\bd_\be_\bn_\bs_\be_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh\n+Implements the dense vector interface, with an exchangeable storage class.\n+_\bm_\ba_\bt_\bh_\b._\bh_\bh\n+Some useful basic math stuff.\n+_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Traits for type conversions and type information.\n+_\bf_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Type traits to determine the type of reals (when working with complex numbers)\n+_\bp_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n+Compute type of the result of an arithmetic operation involving two different\n+number types.\n+_\bt_\by_\bp_\be_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh\n+Utilities for type computations, constraining overloads, ...\n+_\bb_\bo_\bu_\bn_\bd_\bs_\bc_\bh_\be_\bc_\bk_\bi_\bn_\bg_\b._\bh_\bh\n+Macro for wrapping boundary checks.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n+Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)\n+Read a std::tuple.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn streamoperators.hh:43\n+_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bE_\bR_\bT_\b__\bB_\bO_\bU_\bN_\bD_\bS\n+#define DUNE_ASSERT_BOUNDS(cond)\n+If DUNE_CHECK_BOUNDS is defined: check if condition cond holds; otherwise, do\n+nothing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn boundschecking.hh:30\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+bigunsignedint< k > operator*(const bigunsignedint< k > &x, std::uintmax_t y)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:549\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n+bigunsignedint< k > operator/(const bigunsignedint< k > &x, std::uintmax_t y)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:556\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:542\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:535\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n+EnableIfInterOperable< T1, T2, bool >::type operator<(const\n+RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n+RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n+Comparison operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:638\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>\n+EnableIfInterOperable< T1, T2, bool >::type operator>(const\n+RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n+RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n+Comparison operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:684\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=\n+EnableIfInterOperable< T1, T2, bool >::type operator<=(const\n+RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n+RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n+Comparison operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:661\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+EnableIfInterOperable< T1, T2, bool >::type operator==(const\n+ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n+V2, R2, D > &rhs)\n+Checks for equality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:238\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=\n+EnableIfInterOperable< T1, T2, bool >::type operator>=(const\n+RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n+RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n+Comparison operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:706\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+EnableIfInterOperable< T1, T2, bool >::type operator!=(const\n+ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n+V2, R2, D > &rhs)\n+Checks for inequality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:260\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-constexpr std::integer_sequence< T, II..., T(IN)> push_back(std::\n-integer_sequence< T, II... >, std::integral_constant< T, IN >={})\n-Append an index IN to the back of the sequence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn integersequence.hh:69\n-_\bD_\bu_\bn_\be_\b:_\b:_\bs_\bi_\bz_\be\n-constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::\n-integer_sequence< T, II... >)\n-Return the size of the sequence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn integersequence.hh:75\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Base class for stl conformant forward iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-A mutable iterator for the SLList.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:271\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bC_\bo_\bn_\bs_\bt_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-A constant iterator for the SLList.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:371\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt_\bM_\bo_\bd_\bi_\bf_\by_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-A mutable iterator for the SLList.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:429\n-_\bD_\bu_\bn_\be_\b:_\b:_\bS_\bL_\bL_\bi_\bs_\bt\n-A single linked list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn sllist.hh:44\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bN_\ba_\bN\n+bool isNaN(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)\n+Returns whether any entry is NaN.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:627\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bI_\bn_\bf\n+bool isInf(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)\n+Returns whether any entry is infinite.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:615\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bF_\bi_\bn_\bi_\bt_\be\n+auto isFinite(const FieldVector< K, SIZE > &b, PriorityTag< 2 >, ADLTag)\n+Returns whether all entries are finite.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:604\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bi_\bs_\bU_\bn_\bo_\br_\bd_\be_\br_\be_\bd\n+bool isUnordered(const FieldVector< K, 1 > &b, const FieldVector< K, 1 > &c,\n+PriorityTag< 2 >, ADLTag)\n+Returns true if either b or c is NaN.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:639\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+vector space out of a tensor product of fields.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:91\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+constexpr FieldVector(const K &k) noexcept(std::is_nothrow_copy_assignable_v< K\n+>)\n+Constructor making vector with identical coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:113\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+const value_type & const_reference\n+The type used for const references to the vector entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:105\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+constexpr FieldVector(const std::initializer_list< K > &l)\n+Construct from a std::initializer_list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:121\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+static constexpr size_type size() noexcept\n+Obtain the number of elements stored in the vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:193\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+Base::size_type size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:98\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+FieldVector & operator=(const DenseVector< T > &x)\n+Assignment from another dense vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:163\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+static constexpr int dimension\n+The size of this vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:96\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+constexpr FieldVector() noexcept\n+Default constructor, making value-initialized vector with all components set to\n+zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:108\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n+friend constexpr auto operator/(const FieldVector &vector, Scalar scalar)\n+Vector space division by scalar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:250\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+friend constexpr auto operator*(const FieldVector &vector, Scalar scalar)\n+Vector space multiplication with scalar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:224\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n+value_type & reference\n+The type used for references to the vector entry.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:102\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+Base::value_type value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:99\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+constexpr FieldVector(const FieldVector< T, SIZE > &x) noexcept(std::\n+is_nothrow_assignable_v< K &, const T & >)\n+Converting constructor from FieldVector with different element type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:143\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba\n+constexpr const K * data() const noexcept\n+Return pointer to underlying array.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:216\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br\n+FieldVector(const FieldVector &)=default\n+Copy constructor with default behavior.\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+reference operator[](size_type i)\n+Return a reference to the ith element.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:196\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bd_\ba_\bt_\ba\n+constexpr K * data() noexcept\n+Return pointer to underlying array.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:210\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br\n+Interface for a class of dense vectors over a given field.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:229\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+Traits::value_type value_type\n+export the type representing the field\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:250\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_type size() const\n+size method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:336\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+Traits::size_type size_type\n+The type used for the index access and size operation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn densevector.hh:259\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:26\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n+T field_type\n+export the type representing the field\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:28\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n+T real_type\n+export the type representing the real type of the field\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ftraits.hh:30\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+K value_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:41\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\bt_\by_\bp_\be\n+std::array< K, SIZE > container_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:40\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be\n+container_type::size_type size_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:42\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bt_\by_\bp_\be\n+FieldVector< K, SIZE > derived_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:39\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\br_\be_\ba_\bl_\b__\bt_\by_\bp_\be\n+FieldTraits< K >::real_type real_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:49\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\be_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\b<_\b _\bK_\b,_\b _\bS_\bI_\bZ_\bE_\b _\b>_\b _\b>_\b:_\b:_\bf_\bi_\be_\bl_\bd_\b__\bt_\by_\bp_\be\n+FieldTraits< K >::field_type field_type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:48\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt\n+TMP to check the size of a DenseVectors statically, if possible.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:62\n+_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bS_\bi_\bz_\be_\bC_\bo_\br_\br_\be_\bc_\bt_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+static constexpr bool value\n+True if C is not of type FieldVector or its dimension is not equal SIZE.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn fvector.hh:67\n+_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bt_\bh_\bO_\bv_\be_\br_\bl_\bo_\ba_\bd_\bs_\b:_\b:_\bA_\bD_\bL_\bT_\ba_\bg\n+Tag to make sure the functions in this namespace can be found by ADL.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn math.hh:230\n+_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\bV_\be_\bc_\bT_\br_\ba_\bi_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn matvectraits.hh:31\n+_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be\n+decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn promotiontraits.hh:28\n+_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bi_\bo_\br_\bi_\bt_\by_\bT_\ba_\bg\n+Helper class for tagging priorities.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typeutilities.hh:73\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00056.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00056.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: stdstreams.hh File Reference\n+dune-common: precision.hh File Reference\n \n \n \n \n \n \n \n@@ -70,85 +70,40 @@\n \n \n
    \n \n-
    stdstreams.hh File Reference
    \n+Classes |\n+Namespaces
    \n+
    precision.hh File Reference
    \n \n
    \n \n-

    Standard Dune debug streams. \n+

    Various precision settings for calculations with FieldMatrix and FieldVector. \n More...

    \n-
    #include <dune-common-config.hh>
    \n-#include "debugstream.hh"
    \n+
    #include <stdlib.h>
    \n
    \n

    Go to the source code of this file.

    \n \n+\n+\n+\n+\n+

    \n+Classes

    class  Dune::FMatrixPrecision< ctype >
     Precisions for calculations with FieldMatrix and FieldVector. More...
     
    \n \n \n \n \n-

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n-\n-\n-\n-\n-

    \n-Macros

    #define DUNE_MINIMAL_DEBUG_LEVEL   4
     The default minimum debug level.
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Typedefs

    typedef DebugStream< VERY_VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVELDune::DVVerbType
     Type of very verbose debug stream.
     
    typedef DebugStream< VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVELDune::DVerbType
     Type of more verbose debug stream.
     
    typedef DebugStream< INFO_DEBUG_LEVEL, MINIMAL_DEBUG_LEVELDune::DInfoType
     Type of debug stream with info level.
     
    typedef DebugStream< WARN_DEBUG_LEVEL, MINIMAL_DEBUG_LEVELDune::DWarnType
     Type of debug stream with warn level.
     
    typedef DebugStream< GRAVE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVELDune::DGraveType
     Type of debug stream for fatal errors.
     
    typedef DebugStream< 1 > Dune::DErrType
     The type of the stream used for error messages.
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

    \n-Variables

    static const DebugLevel Dune::MINIMAL_DEBUG_LEVEL = DUNE_MINIMAL_DEBUG_LEVEL
     
    static const DebugLevel Dune::VERY_VERBOSE_DEBUG_LEVEL = 1
     The level of the very verbose debug stream.
     
    static const DebugLevel Dune::VERBOSE_DEBUG_LEVEL = 2
     The level of the verbose debug stream.
     
    static const DebugLevel Dune::INFO_DEBUG_LEVEL = 3
     The level of the informative debug stream.
     
    static const DebugLevel Dune::WARN_DEBUG_LEVEL = 4
     The level of the debug stream for warnings.
     
    static const DebugLevel Dune::GRAVE_DEBUG_LEVEL = 5
     The level of the debug stream for fatal errors.
     
    \n

    Detailed Description

    \n-

    Standard Dune debug streams.

    \n-

    The standard debug streams are compiled into libdune to exist globally. This file declares the stream types and the global debug level.

    \n+

    Various precision settings for calculations with FieldMatrix and FieldVector.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,71 +1,24 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-stdstreams.hh File Reference\n-Standard _\bD_\bu_\bn_\be debug streams. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \"_\bd_\be_\bb_\bu_\bg_\bs_\bt_\br_\be_\ba_\bm_\b._\bh_\bh\"\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+precision.hh File Reference\n+Various precision settings for calculations with FieldMatrix and FieldVector.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b<_\b _\bc_\bt_\by_\bp_\be_\b _\b>\n+\u00a0 Precisions for calculations with _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx and _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\u00a0\u00a0\u00a04\n-\u00a0 The default minimum debug level.\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm<\n- _\bV_\bE_\bR_\bY_\b__\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL,\n- _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bV_\bV_\be_\br_\bb_\bT_\by_\bp_\be\n-\u00a0 Type of very verbose debug stream.\n-\u00a0\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm<\n-_\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL, _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n- >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bV_\be_\br_\bb_\bT_\by_\bp_\be\n-\u00a0 Type of more verbose debug stream.\n-\u00a0\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm< _\bI_\bN_\bF_\bO_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL,\n- _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bI_\bn_\bf_\bo_\bT_\by_\bp_\be\n-\u00a0 Type of debug stream with info level.\n-\u00a0\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm< _\bW_\bA_\bR_\bN_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL,\n- _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bW_\ba_\br_\bn_\bT_\by_\bp_\be\n-\u00a0 Type of debug stream with warn level.\n-\u00a0\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm< _\bG_\bR_\bA_\bV_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL,\n- _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bG_\br_\ba_\bv_\be_\bT_\by_\bp_\be\n-\u00a0 Type of debug stream for fatal errors.\n-\u00a0\n- typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm< 1 >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bD_\bE_\br_\br_\bT_\by_\bp_\be\n-\u00a0 The type of the stream used for error\n- messages.\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = _\bD_\bU_\bN_\bE_\b__\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-\u00a0\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bE_\bR_\bY_\b__\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 1\n-\u00a0 The level of the very verbose debug stream.\n-\u00a0\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 2\n-\u00a0 The level of the verbose debug stream.\n-\u00a0\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bN_\bF_\bO_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 3\n-\u00a0 The level of the informative debug stream.\n-\u00a0\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bW_\bA_\bR_\bN_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 4\n-\u00a0 The level of the debug stream for warnings.\n-\u00a0\n-static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bG_\bR_\bA_\bV_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 5\n-\u00a0 The level of the debug stream for fatal errors.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Standard _\bD_\bu_\bn_\be debug streams.\n-The standard debug streams are compiled into libdune to exist globally. This\n-file declares the stream types and the global debug level.\n+Various precision settings for calculations with FieldMatrix and FieldVector.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00056_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00056_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: stdstreams.hh Source File\n+dune-common: precision.hh Source File\n \n \n \n \n \n \n \n@@ -74,95 +74,62 @@\n \n
    \n \n
    \n
    \n
    \n-
    stdstreams.hh
    \n+
    precision.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5
    \n-
    15#ifndef DUNE_COMMON_STDSTREAMS_HH
    \n-
    16#define DUNE_COMMON_STDSTREAMS_HH
    \n-
    17
    \n-
    18#include <dune-common-config.hh> // DUNE_MINIMAL_DEBUG_LEVEL
    \n-
    19#include "debugstream.hh"
    \n-
    20
    \n-
    21namespace Dune {
    \n-
    22
    \n-
    67#ifndef DUNE_MINIMAL_DEBUG_LEVEL
    \n-
    68#define DUNE_MINIMAL_DEBUG_LEVEL 4
    \n-
    69#endif
    \n-\n-
    71
    \n-\n-
    77
    \n-\n-
    83
    \n-\n-
    97
    \n-\n-
    103
    \n-\n-
    109
    \n-\n-
    118
    \n-
    123 static const DebugLevel INFO_DEBUG_LEVEL = 3;
    \n-
    124
    \n-\n-
    130
    \n-\n-
    142
    \n-
    147 static const DebugLevel WARN_DEBUG_LEVEL = 4;
    \n-
    148
    \n-\n-
    154
    \n-\n-
    163
    \n-\n-
    169
    \n-\n-
    172
    \n-\n-
    181
    \n-\n-
    184
    \n-\n-
    197
    \n-
    199}
    \n-
    200
    \n-
    201#endif
    \n-
    Defines several output streams for messages of different importance.
    \n-
    unsigned int DebugLevel
    Type for debug levels.
    Definition debugstream.hh:118
    \n-
    DebugStream< VERY_VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DVVerbType
    Type of very verbose debug stream.
    Definition stdstreams.hh:82
    \n-
    DebugStream< WARN_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DWarnType
    Type of debug stream with warn level.
    Definition stdstreams.hh:153
    \n-
    DVVerbType dvverb(std::cout)
    stream for very verbose output.
    Definition stdstreams.hh:96
    \n-
    static const DebugLevel MINIMAL_DEBUG_LEVEL
    Definition stdstreams.hh:70
    \n-
    #define DUNE_MINIMAL_DEBUG_LEVEL
    The default minimum debug level.
    Definition stdstreams.hh:68
    \n-
    static const DebugLevel VERY_VERBOSE_DEBUG_LEVEL
    The level of the very verbose debug stream.
    Definition stdstreams.hh:76
    \n-
    DWarnType dwarn(std::cerr)
    Stream for warnings indicating problems.
    Definition stdstreams.hh:162
    \n-
    static const DebugLevel GRAVE_DEBUG_LEVEL
    The level of the debug stream for fatal errors.
    Definition stdstreams.hh:168
    \n-
    DebugStream< VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DVerbType
    Type of more verbose debug stream.
    Definition stdstreams.hh:108
    \n-
    DebugStream< GRAVE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DGraveType
    Type of debug stream for fatal errors.
    Definition stdstreams.hh:171
    \n-
    DGraveType dgrave(std::cerr)
    Stream for warnings indicating fatal errors.
    Definition stdstreams.hh:180
    \n-
    DebugStream< 1 > DErrType
    The type of the stream used for error messages.
    Definition stdstreams.hh:183
    \n-
    static const DebugLevel INFO_DEBUG_LEVEL
    The level of the informative debug stream.
    Definition stdstreams.hh:123
    \n-
    DebugStream< INFO_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DInfoType
    Type of debug stream with info level.
    Definition stdstreams.hh:129
    \n-
    DInfoType dinfo(std::cout)
    Stream for informative output.
    Definition stdstreams.hh:141
    \n-
    DVerbType dverb(std::cout)
    Singleton of verbose debug stream.
    Definition stdstreams.hh:117
    \n-
    static const DebugLevel VERBOSE_DEBUG_LEVEL
    The level of the verbose debug stream.
    Definition stdstreams.hh:102
    \n-
    DErrType derr(std::cerr)
    Stream for error messages.
    Definition stdstreams.hh:196
    \n-
    static const DebugLevel WARN_DEBUG_LEVEL
    The level of the debug stream for warnings.
    Definition stdstreams.hh:147
    \n+
    5#ifndef DUNE_PRECISION_HH
    \n+
    6#define DUNE_PRECISION_HH
    \n+
    7
    \n+
    12#include <stdlib.h>
    \n+
    13
    \n+
    14namespace Dune {
    \n+
    15
    \n+
    24 template <class ctype = double>
    \n+
    \n+\n+
    26 public:
    \n+
    \n+
    28 static ctype absolute_limit ()
    \n+
    29 {
    \n+
    30 return _absolute;
    \n+
    31 }
    \n+
    \n+
    32
    \n+
    \n+
    34 static void set_absolute_limit (ctype absthres)
    \n+
    35 {
    \n+
    36 _absolute = absthres;
    \n+
    37 }
    \n+
    \n+
    38
    \n+
    39 private:
    \n+
    40 // just to demonstrate some state information
    \n+
    41 static ctype _absolute;
    \n+
    42 };
    \n+
    \n+
    43
    \n+
    44 template <class ctype>
    \n+
    45 ctype FMatrixPrecision<ctype>::_absolute = 1E-80;
    \n+
    46
    \n+
    49} // end namespace
    \n+
    50
    \n+
    51#endif
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Generic class to implement debug output streams.
    Definition debugstream.hh:192
    \n+
    Precisions for calculations with FieldMatrix and FieldVector.
    Definition precision.hh:25
    \n+
    static ctype absolute_limit()
    return threshold to declare matrix singular
    Definition precision.hh:28
    \n+
    static void set_absolute_limit(ctype absthres)
    set singular threshold
    Definition precision.hh:34
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,154 +1,60 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-stdstreams.hh\n+precision.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-15#ifndef DUNE_COMMON_STDSTREAMS_HH\n-16#define DUNE_COMMON_STDSTREAMS_HH\n-17\n-18#include // DUNE_MINIMAL_DEBUG_LEVEL\n-19#include \"_\bd_\be_\bb_\bu_\bg_\bs_\bt_\br_\be_\ba_\bm_\b._\bh_\bh\"\n-20\n-21namespace _\bD_\bu_\bn_\be {\n-22\n-67#ifndef DUNE_MINIMAL_DEBUG_LEVEL\n-_\b6_\b8#define DUNE_MINIMAL_DEBUG_LEVEL 4\n-69#endif\n-_\b7_\b0 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = _\bD_\bU_\bN_\bE_\b__\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL;\n-71\n-_\b7_\b6 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bV_\bE_\bR_\bY_\b__\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 1;\n-77\n-_\b8_\b2 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\bV_\bE_\bR_\bY_\b__\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b,_\b _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b>\n-_\bD_\bV_\bV_\be_\br_\bb_\bT_\by_\bp_\be;\n-83\n-_\b9_\b6 extern _\bD_\bV_\bV_\be_\br_\bb_\bT_\by_\bp_\be _\bd_\bv_\bv_\be_\br_\bb;\n-97\n-_\b1_\b0_\b2 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 2;\n-103\n-_\b1_\b0_\b8 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b,_\b _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b> _\bD_\bV_\be_\br_\bb_\bT_\by_\bp_\be;\n-109\n-_\b1_\b1_\b7 extern _\bD_\bV_\be_\br_\bb_\bT_\by_\bp_\be _\bd_\bv_\be_\br_\bb;\n-118\n-_\b1_\b2_\b3 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bI_\bN_\bF_\bO_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 3;\n-124\n-_\b1_\b2_\b9 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\bI_\bN_\bF_\bO_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b,_\b _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b> _\bD_\bI_\bn_\bf_\bo_\bT_\by_\bp_\be;\n-130\n-_\b1_\b4_\b1 extern _\bD_\bI_\bn_\bf_\bo_\bT_\by_\bp_\be _\bd_\bi_\bn_\bf_\bo;\n-142\n-_\b1_\b4_\b7 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bW_\bA_\bR_\bN_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 4;\n-148\n-_\b1_\b5_\b3 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\bW_\bA_\bR_\bN_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b,_\b _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b> _\bD_\bW_\ba_\br_\bn_\bT_\by_\bp_\be;\n-154\n-_\b1_\b6_\b2 extern _\bD_\bW_\ba_\br_\bn_\bT_\by_\bp_\be _\bd_\bw_\ba_\br_\bn;\n-163\n-_\b1_\b6_\b8 static const _\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl _\bG_\bR_\bA_\bV_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL = 5;\n-169\n-_\b1_\b7_\b1 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\bG_\bR_\bA_\bV_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b,_\b _\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL_\b> _\bD_\bG_\br_\ba_\bv_\be_\bT_\by_\bp_\be;\n-172\n-_\b1_\b8_\b0 extern _\bD_\bG_\br_\ba_\bv_\be_\bT_\by_\bp_\be _\bd_\bg_\br_\ba_\bv_\be;\n-181\n-_\b1_\b8_\b3 typedef _\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm_\b<_\b1_\b> _\bD_\bE_\br_\br_\bT_\by_\bp_\be;\n-184\n-_\b1_\b9_\b6 extern _\bD_\bE_\br_\br_\bT_\by_\bp_\be _\bd_\be_\br_\br;\n-197\n-199}\n-200\n-201#endif\n-_\bd_\be_\bb_\bu_\bg_\bs_\bt_\br_\be_\ba_\bm_\b._\bh_\bh\n-Defines several output streams for messages of different importance.\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bL_\be_\bv_\be_\bl\n-unsigned int DebugLevel\n-Type for debug levels.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:118\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bV_\bV_\be_\br_\bb_\bT_\by_\bp_\be\n-DebugStream< VERY_VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DVVerbType\n-Type of very verbose debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:82\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bW_\ba_\br_\bn_\bT_\by_\bp_\be\n-DebugStream< WARN_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DWarnType\n-Type of debug stream with warn level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:153\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bv_\bv_\be_\br_\bb\n-DVVerbType dvverb(std::cout)\n-stream for very verbose output.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:96\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel MINIMAL_DEBUG_LEVEL\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:70\n-_\bD_\bU_\bN_\bE_\b__\bM_\bI_\bN_\bI_\bM_\bA_\bL_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-#define DUNE_MINIMAL_DEBUG_LEVEL\n-The default minimum debug level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bE_\bR_\bY_\b__\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel VERY_VERBOSE_DEBUG_LEVEL\n-The level of the very verbose debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:76\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bw_\ba_\br_\bn\n-DWarnType dwarn(std::cerr)\n-Stream for warnings indicating problems.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:162\n-_\bD_\bu_\bn_\be_\b:_\b:_\bG_\bR_\bA_\bV_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel GRAVE_DEBUG_LEVEL\n-The level of the debug stream for fatal errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:168\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bV_\be_\br_\bb_\bT_\by_\bp_\be\n-DebugStream< VERBOSE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DVerbType\n-Type of more verbose debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:108\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bG_\br_\ba_\bv_\be_\bT_\by_\bp_\be\n-DebugStream< GRAVE_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DGraveType\n-Type of debug stream for fatal errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:171\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bg_\br_\ba_\bv_\be\n-DGraveType dgrave(std::cerr)\n-Stream for warnings indicating fatal errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:180\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bE_\br_\br_\bT_\by_\bp_\be\n-DebugStream< 1 > DErrType\n-The type of the stream used for error messages.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:183\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bN_\bF_\bO_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel INFO_DEBUG_LEVEL\n-The level of the informative debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:123\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\bI_\bn_\bf_\bo_\bT_\by_\bp_\be\n-DebugStream< INFO_DEBUG_LEVEL, MINIMAL_DEBUG_LEVEL > DInfoType\n-Type of debug stream with info level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bi_\bn_\bf_\bo\n-DInfoType dinfo(std::cout)\n-Stream for informative output.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:141\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\bv_\be_\br_\bb\n-DVerbType dverb(std::cout)\n-Singleton of verbose debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:117\n-_\bD_\bu_\bn_\be_\b:_\b:_\bV_\bE_\bR_\bB_\bO_\bS_\bE_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel VERBOSE_DEBUG_LEVEL\n-The level of the verbose debug stream.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:102\n-_\bD_\bu_\bn_\be_\b:_\b:_\bd_\be_\br_\br\n-DErrType derr(std::cerr)\n-Stream for error messages.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bW_\bA_\bR_\bN_\b__\bD_\bE_\bB_\bU_\bG_\b__\bL_\bE_\bV_\bE_\bL\n-static const DebugLevel WARN_DEBUG_LEVEL\n-The level of the debug stream for warnings.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn stdstreams.hh:147\n+5#ifndef DUNE_PRECISION_HH\n+6#define DUNE_PRECISION_HH\n+7\n+12#include \n+13\n+14namespace _\bD_\bu_\bn_\be {\n+15\n+24 template \n+_\b2_\b5 class _\bF_\bM_\ba_\bt_\br_\bi_\bx_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn {\n+26 public:\n+_\b2_\b8 static ctype _\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b__\bl_\bi_\bm_\bi_\bt ()\n+29 {\n+30 return _absolute;\n+31 }\n+32\n+_\b3_\b4 static void _\bs_\be_\bt_\b__\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b__\bl_\bi_\bm_\bi_\bt (ctype absthres)\n+35 {\n+36 _absolute = absthres;\n+37 }\n+38\n+39 private:\n+40 // just to demonstrate some state information\n+41 static ctype _absolute;\n+42 };\n+43\n+44 template \n+45 ctype FMatrixPrecision::_absolute = 1E-80;\n+46\n+49} // end namespace\n+50\n+51#endif\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bD_\be_\bb_\bu_\bg_\bS_\bt_\br_\be_\ba_\bm\n-Generic class to implement debug output streams.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugstream.hh:192\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n+Precisions for calculations with FieldMatrix and FieldVector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn precision.hh:25\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b__\bl_\bi_\bm_\bi_\bt\n+static ctype absolute_limit()\n+return threshold to declare matrix singular\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn precision.hh:28\n+_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\b:_\b:_\bs_\be_\bt_\b__\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\b__\bl_\bi_\bm_\bi_\bt\n+static void set_absolute_limit(ctype absthres)\n+set singular threshold\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn precision.hh:34\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00059.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00059.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: deprecated.hh File Reference\n+dune-common: concepts.hh File Reference\n \n \n \n \n \n \n \n@@ -69,36 +69,19 @@\n \n
    \n \n
    \n
    \n
    \n-
    \n-Macros
    \n-
    deprecated.hh File Reference
    \n+
    concepts.hh File Reference
    \n
    \n
    \n \n-

    Definition of the DUNE_NO_DEPRECATED_* macros. \n-More...

    \n-\n

    Go to the source code of this file.

    \n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Macros

    #define DUNE_NO_DEPRECATED_BEGIN   ...
     Ignore deprecation warnings (start)
     
    #define DUNE_NO_DEPRECATED_END   ...
     Ignore deprecation warnings (end)
     
    \n-

    Detailed Description

    \n-

    Definition of the DUNE_NO_DEPRECATED_* macros.

    \n-
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,10 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bM_\ba_\bc_\br_\bo_\bs\n-deprecated.hh File Reference\n-Definition of the DUNE_NO_DEPRECATED_* macros. _\bM_\bo_\br_\be_\b._\b._\b.\n+concepts.hh File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bN_\bO_\b__\bD_\bE_\bP_\bR_\bE_\bC_\bA_\bT_\bE_\bD_\b__\bB_\bE_\bG_\bI_\bN\u00a0\u00a0\u00a0...\n-\u00a0 Ignore deprecation warnings (start)\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bN_\bO_\b__\bD_\bE_\bP_\bR_\bE_\bC_\bA_\bT_\bE_\bD_\b__\bE_\bN_\bD\u00a0\u00a0\u00a0...\n-\u00a0 Ignore deprecation warnings (end)\n-\u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Definition of the DUNE_NO_DEPRECATED_* macros.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00059_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00059_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: deprecated.hh Source File\n+dune-common: concepts.hh Source File\n \n \n \n \n \n \n \n@@ -74,52 +74,44 @@\n \n
    \n \n
    \n \n
    \n-
    deprecated.hh
    \n+
    concepts.hh
    \n
    \n
    \n-Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n-
    2// vi: set et ts=4 sw=2 sts=2:
    \n-
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n-
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_DEPRECATED_HH
    \n-
    6#define DUNE_DEPRECATED_HH
    \n+Go to the documentation of this file.
    1// SPDX-FileCopyrightText: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n+
    2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n+
    3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n+
    4// vi: set et ts=4 sw=2 sts=2:
    \n+
    5#ifndef DUNE_COMMON_CONCEPTS_HH
    \n+
    6#define DUNE_COMMON_CONCEPTS_HH
    \n
    7
    \n-
    14#ifdef DOXYGEN
    \n-
    32#define DUNE_NO_DEPRECATED_BEGIN ...
    \n-
    38#define DUNE_NO_DEPRECATED_END ...
    \n-
    39#else
    \n-
    40# if defined __clang__
    \n-
    41# define DUNE_NO_DEPRECATED_BEGIN \\
    \n-
    42 _Pragma("clang diagnostic push") \\
    \n-
    43 _Pragma("clang diagnostic ignored \\"-Wdeprecated-declarations\\"")
    \n-
    44# define DUNE_NO_DEPRECATED_END _Pragma("clang diagnostic pop")
    \n-
    45# elif defined __INTEL_COMPILER
    \n-
    46# define DUNE_NO_DEPRECATED_BEGIN \\
    \n-
    47 _Pragma("warning push") \\
    \n-
    48 _Pragma("warning(disable:1478)") \\
    \n-
    49 _Pragma("warning(disable:1786)")
    \n-
    50# define DUNE_NO_DEPRECATED_END _Pragma("warning pop")
    \n-
    51# elif defined __GNUC__
    \n-
    52# define DUNE_NO_DEPRECATED_BEGIN \\
    \n-
    53 _Pragma("GCC diagnostic push") \\
    \n-
    54 _Pragma("GCC diagnostic ignored \\"-Wdeprecated-declarations\\"")
    \n-
    55# define DUNE_NO_DEPRECATED_END _Pragma("GCC diagnostic pop")
    \n-
    56# else
    \n-
    57# define DUNE_NO_DEPRECATED_BEGIN /* Noop. */
    \n-
    58# define DUNE_NO_DEPRECATED_END /* Noop. */
    \n-
    59# endif
    \n-
    60#endif
    \n-
    61
    \n-
    63
    \n-
    64#endif
    \n+
    8// check whether c++20 concept can be used
    \n+
    9#if __has_include(<version>) && __has_include(<concepts>)
    \n+
    10 #include <version>
    \n+
    11 #if __cpp_concepts >= 201907L && __cpp_lib_concepts >= 202002L
    \n+
    12 #ifndef DUNE_ENABLE_CONCEPTS
    \n+
    13 #define DUNE_ENABLE_CONCEPTS 1
    \n+
    14 #endif
    \n+
    15 #endif
    \n+
    16#endif
    \n+
    17
    \n+
    18#if DUNE_ENABLE_CONCEPTS
    \n+
    19
    \n+\n+\n+
    22
    \n+
    23#endif // DUNE_ENABLE_CONCEPTS
    \n+
    24
    \n+
    25#endif // DUNE_COMMON_CONCEPTS_HH
    \n+\n+\n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,38 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-deprecated.hh\n+concepts.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n-2// vi: set et ts=4 sw=2 sts=2:\n-3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n+1// SPDX-FileCopyrightText: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n-4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_DEPRECATED_HH\n-6#define DUNE_DEPRECATED_HH\n+2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n+3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+4// vi: set et ts=4 sw=2 sts=2:\n+5#ifndef DUNE_COMMON_CONCEPTS_HH\n+6#define DUNE_COMMON_CONCEPTS_HH\n 7\n-14#ifdef DOXYGEN\n-_\b3_\b2#define DUNE_NO_DEPRECATED_BEGIN ...\n-_\b3_\b8#define DUNE_NO_DEPRECATED_END ...\n-39#else\n-40# if defined __clang__\n-41# define DUNE_NO_DEPRECATED_BEGIN \\\n-42 _Pragma(\"clang diagnostic push\") \\\n-43 _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n-44# define DUNE_NO_DEPRECATED_END _Pragma(\"clang diagnostic pop\")\n-45# elif defined __INTEL_COMPILER\n-46# define DUNE_NO_DEPRECATED_BEGIN \\\n-47 _Pragma(\"warning push\") \\\n-48 _Pragma(\"warning(disable:1478)\") \\\n-49 _Pragma(\"warning(disable:1786)\")\n-50# define DUNE_NO_DEPRECATED_END _Pragma(\"warning pop\")\n-51# elif defined __GNUC__\n-52# define DUNE_NO_DEPRECATED_BEGIN \\\n-53 _Pragma(\"GCC diagnostic push\") \\\n-54 _Pragma(\"GCC diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")\n-55# define DUNE_NO_DEPRECATED_END _Pragma(\"GCC diagnostic pop\")\n-56# else\n-57# define DUNE_NO_DEPRECATED_BEGIN /* Noop. */\n-58# define DUNE_NO_DEPRECATED_END /* Noop. */\n-59# endif\n-60#endif\n-61\n-63\n-64#endif\n+8// check whether c++20 concept can be used\n+9#if __has_include() && __has_include()\n+10 #include \n+11 #if __cpp_concepts >= 201907L && __cpp_lib_concepts >= 202002L\n+12 #ifndef DUNE_ENABLE_CONCEPTS\n+13 #define DUNE_ENABLE_CONCEPTS 1\n+14 #endif\n+15 #endif\n+16#endif\n+17\n+18#if DUNE_ENABLE_CONCEPTS\n+19\n+20#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b/_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b/_\bh_\ba_\bs_\bh_\ba_\bb_\bl_\be_\b._\bh_\bh>\n+22\n+23#endif // DUNE_ENABLE_CONCEPTS\n+24\n+25#endif // DUNE_COMMON_CONCEPTS_HH\n+_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b._\bh_\bh\n+_\bh_\ba_\bs_\bh_\ba_\bb_\bl_\be_\b._\bh_\bh\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00062.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00062.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: iteratorfacades.hh File Reference\n+dune-common: quadmath.hh File Reference\n \n \n \n \n \n \n \n@@ -69,140 +69,19 @@\n \n
    \n \n
    \n
    \n
    \n- \n-
    iteratorfacades.hh File Reference
    \n+
    quadmath.hh File Reference
    \n
    \n
    \n \n-

    This file implements iterator facade classes for writing stl conformant iterators. \n-More...

    \n-
    #include <iterator>
    \n-#include <type_traits>
    \n-#include <dune/common/typetraits.hh>
    \n-#include <dune/common/concept.hh>
    \n-
    \n

    Go to the source code of this file.

    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Classes

    class  Dune::ForwardIteratorFacade< T, V, R, D >
     Base class for stl conformant forward iterators. More...
     
    class  Dune::BidirectionalIteratorFacade< T, V, R, D >
     Facade class for stl conformant bidirectional iterators. More...
     
    class  Dune::RandomAccessIteratorFacade< T, V, R, D >
     Base class for stl conformant forward iterators. More...
     
    class  Dune::ProxyArrowResult< ProxyType >
     Helper to mimic a pointer for proxy objects. More...
     
    struct  Dune::IteratorFacadeAccess
     This class encapsulates access of IteratorFacade. More...
     
    class  Dune::IteratorFacade< It, C, V, R, P, D >
     CRTP-Mixing class for stl conformant iterators of given iterator category. More...
     
    \n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-Functions

    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator== (const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for equality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator!= (const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for inequality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    std::enable_if< std::is_convertible< T2, T1 >::value, bool >::type Dune::operator== (const BidirectionalIteratorFacade< T1, V1, R1, D > &lhs, const BidirectionalIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for equality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    std::enable_if< std::is_convertible< T1, T2 >::value &&!std::is_convertible< T2, T1 >::value, bool >::type Dune::operator== (const BidirectionalIteratorFacade< T1, V1, R1, D > &lhs, const BidirectionalIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for equality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator!= (const BidirectionalIteratorFacade< T1, V1, R1, D > &lhs, const BidirectionalIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for inequality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator== (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for equality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator!= (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Checks for inequality.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator< (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Comparison operator.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator<= (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Comparison operator.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator> (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Comparison operator.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, bool >::type Dune::operator>= (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Comparison operator.
     
    template<class T1 , class V1 , class R1 , class D , class T2 , class V2 , class R2 >
    EnableIfInterOperable< T1, T2, D >::type Dune::operator- (const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
     Calculates the difference between two pointers.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 >
    constexpr auto Dune::operator== (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Equality comparison for IteratorFacade.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 , std::enable_if_t< Dune::models< Impl::Concepts::IterEqualsOp, T1, T2 >(), int > = 0>
    constexpr bool Dune::operator!= (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Inequality comparison for IteratorFacade.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D >
    constexpr auto Dune::operator- (const IteratorFacade< T1, C, V1, R1, P1, D > &it1, const IteratorFacade< T2, C, V2, R2, P2, D > &it2)
     Difference for two IteratorFacade objects.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 , std::enable_if_t< Dune::models< Impl::Concepts::IterDistanceOp< D1 >, T1, T2 >(), int > = 0>
    constexpr bool Dune::operator< (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Comparison for IteratorFacade.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 , std::enable_if_t< Dune::models< Impl::Concepts::IterDistanceOp< D1 >, T1, T2 >(), int > = 0>
    constexpr bool Dune::operator<= (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Comparison for IteratorFacade.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 , std::enable_if_t< Dune::models< Impl::Concepts::IterDistanceOp< D1 >, T1, T2 >(), int > = 0>
    constexpr bool Dune::operator> (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Comparison for IteratorFacade.
     
    template<class T1 , class T2 , class C , class V1 , class V2 , class R1 , class R2 , class P1 , class P2 , class D1 , class D2 , std::enable_if_t< Dune::models< Impl::Concepts::IterDistanceOp< D1 >, T1, T2 >(), int > = 0>
    constexpr bool Dune::operator>= (const IteratorFacade< T1, C, V1, R1, P1, D1 > &it1, const IteratorFacade< T2, C, V2, R2, P2, D2 > &it2)
     Comparison for IteratorFacade.
     
    \n-

    Detailed Description

    \n-

    This file implements iterator facade classes for writing stl conformant iterators.

    \n-

    With using these facades writing iterators for arbitrary containers becomes much less cumbersome as only few functions have to be implemented. All other functions needed by the stl are provided by the facades using the Barton-Nackman trick (also known as curiously recurring template pattern.

    \n-
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,219 +1,10 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-iteratorfacades.hh File Reference\n-This file implements iterator facade classes for writing stl conformant\n-iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\b._\bh_\bh>\n+quadmath.hh File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\b _\bT_\b,_\b _\bV_\b,_\b _\bR_\b,_\b _\bD_\b _\b>\n-\u00a0 Base class for stl conformant forward iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\b _\bT_\b,_\b _\bV_\b,_\b _\bR_\b,_\b _\bD_\b _\b>\n-\u00a0 Facade class for stl conformant bidirectional iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\b _\bT_\b,_\b _\bV_\b,_\b _\bR_\b,_\b _\bD_\b _\b>\n-\u00a0 Base class for stl conformant forward iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt_\b<_\b _\bP_\br_\bo_\bx_\by_\bT_\by_\bp_\be_\b _\b>\n-\u00a0 Helper to mimic a pointer for proxy objects. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\bA_\bc_\bc_\be_\bs_\bs\n-\u00a0 This class encapsulates access of _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\b _\bI_\bt_\b,_\b _\bC_\b,_\b _\bV_\b,_\b _\bR_\b,_\b _\bP_\b,_\b _\bD_\b _\b>\n-\u00a0 CRTP-Mixing class for stl conformant iterators of given iterator\n- category. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bD_\bu_\bn_\be\n-\u00a0 _\bD_\bu_\bn_\be namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const\n- type\u00a0 _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1, D >\n- &lhs, const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2,\n- V2, R2, D > &rhs)\n-\u00a0 Checks for equality.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const\n- type\u00a0 _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1, D >\n- &lhs, const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2,\n- V2, R2, D > &rhs)\n-\u00a0 Checks for inequality.\n-\u00a0\n-template\n- std::enable_if< std::is_convertible< _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const\n- T2, T1 >::value, bool >::type\u00a0 _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1,\n- R1, D > &lhs, const\n- _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2,\n- R2, D > &rhs)\n-\u00a0 Checks for equality.\n-\u00a0\n-template\n- std::enable_if< std::is_convertible< _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const\n-T1, T2 >::value &&!std::is_convertible< _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1,\n- T2, T1 >::value, bool >::type\u00a0 R1, D > &lhs, const\n- _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2,\n- R2, D > &rhs)\n-\u00a0 Checks for equality.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const\n- type\u00a0 _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1,\n- R1, D > &lhs, const\n- _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2,\n- R2, D > &rhs)\n-\u00a0 Checks for inequality.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Checks for equality.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Checks for inequality.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b< (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Comparison operator.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b= (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Comparison operator.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b> (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Comparison operator.\n-\u00a0\n-template\n-_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, bool >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b= (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Comparison operator.\n-\u00a0\n-template\n- _\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be< T1, T2, D >:: _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b- (const\n- type\u00a0 _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T1, V1, R1,\n- D > &lhs, const\n- _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, V2, R2,\n- D > &rhs)\n-\u00a0 Calculates the difference between two\n- pointers.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Equality comparison for _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-template(), int > = 0>\n- constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Inequality comparison for\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b- (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D >\n- &it2)\n-\u00a0 Difference for two _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n- objects.\n-\u00a0\n-template, T1, T2 >(), int > = 0>\n- constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b< (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Comparison for _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-template, T1, T2 >(), int > = 0>\n- constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b= (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Comparison for _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-template, T1, T2 >(), int > = 0>\n- constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b> (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Comparison for _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-template, T1, T2 >(), int > = 0>\n- constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b= (const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be<\n- T1, C, V1, R1, P1, D1 > &it1, const\n- _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be< T2, C, V2, R2, P2, D2 >\n- &it2)\n-\u00a0 Comparison for _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be.\n-\u00a0\n-*\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-This file implements iterator facade classes for writing stl conformant\n-iterators.\n-With using these facades writing iterators for arbitrary containers becomes\n-much less cumbersome as only few functions have to be implemented. All other\n-functions needed by the stl are provided by the facades using the Barton-\n-Nackman trick (also known as curiously recurring template pattern.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: iteratorfacades.hh Source File\n+dune-common: quadmath.hh Source File\n \n \n \n \n \n \n \n@@ -74,983 +74,490 @@\n \n
    \n \n
    \n \n
    \n-
    iteratorfacades.hh
    \n+
    quadmath.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5#ifndef DUNE_ITERATORFACADES_HH
    \n-
    6#define DUNE_ITERATORFACADES_HH
    \n+
    5#ifndef DUNE_QUADMATH_HH
    \n+
    6#define DUNE_QUADMATH_HH
    \n
    7
    \n-
    8#include <iterator>
    \n-
    9#include <type_traits>
    \n+
    8#if HAVE_QUADMATH
    \n+
    9#include <quadmath.h>
    \n
    10
    \n-\n-\n-
    13
    \n-
    14namespace Dune
    \n-
    15{
    \n-
    140 template<class T, class V, class R = V&, class D = std::ptrdiff_t>
    \n-
    \n-\n-
    142 {
    \n-
    143
    \n-
    144 public:
    \n-
    145 /* type aliases required by C++ for iterators */
    \n-
    146 using iterator_category = std::forward_iterator_tag;
    \n-
    147 using value_type = typename std::remove_const<V>::type;
    \n-\n-
    149 using pointer = V*;
    \n-
    150 using reference = R;
    \n-
    151
    \n-
    176 typedef T DerivedType;
    \n-
    177
    \n-
    181 typedef V Value;
    \n-
    182
    \n-
    186 typedef V* Pointer;
    \n-
    187
    \n-
    191 typedef D DifferenceType;
    \n-
    192
    \n-
    196 typedef R Reference;
    \n-
    197
    \n-
    \n-\n-
    200 {
    \n-
    201 return static_cast<DerivedType const*>(this)->dereference();
    \n-
    202 }
    \n-
    \n+
    11#include <cmath>
    \n+
    12#include <cstddef>
    \n+
    13#include <cstdint>
    \n+
    14#include <cstdlib> // abs
    \n+
    15#include <istream>
    \n+
    16#include <ostream>
    \n+
    17#include <type_traits>
    \n+
    18#include <utility>
    \n+
    19
    \n+\n+\n+
    22
    \n+
    23namespace Dune
    \n+
    24{
    \n+
    25 namespace Impl
    \n+
    26 {
    \n+
    27 // forward declaration
    \n+
    28 class Float128;
    \n+
    29
    \n+
    30 } // end namespace Impl
    \n+
    31
    \n+
    32 using Impl::Float128;
    \n+
    33
    \n+
    34 // The purpose of this namespace is to move the `<cmath>` function overloads
    \n+
    35 // out of namespace `Dune`, see AlignedNumber in debugalign.hh.
    \n+
    36 namespace Impl
    \n+
    37 {
    \n+
    38 using float128_t = __float128;
    \n+
    39
    \n+
    41 class Float128
    \n+
    42 {
    \n+
    43 float128_t value_ = 0.0q;
    \n+
    44
    \n+
    45 public:
    \n+
    46 constexpr Float128() = default;
    \n+
    47 constexpr Float128(const float128_t& value) noexcept
    \n+
    48 : value_(value)
    \n+
    49 {}
    \n+
    50
    \n+
    51 // constructor from any floating-point or integer type
    \n+
    52 template <class T,
    \n+
    53 std::enable_if_t<std::is_arithmetic<T>::value, int> = 0>
    \n+
    54 constexpr Float128(const T& value) noexcept
    \n+
    55 : value_(value)
    \n+
    56 {}
    \n+
    57
    \n+
    58 // constructor from pointer to null-terminated byte string
    \n+
    59 explicit Float128(const char* str) noexcept
    \n+
    60 : value_(strtoflt128(str, NULL))
    \n+
    61 {}
    \n+
    62
    \n+
    63 // accessors
    \n+
    64 constexpr operator float128_t() const noexcept { return value_; }
    \n+
    65
    \n+
    66 constexpr float128_t const& value() const noexcept { return value_; }
    \n+
    67 constexpr float128_t& value() noexcept { return value_; }
    \n+
    68
    \n+
    69 // I/O
    \n+
    70 template<class CharT, class Traits>
    \n+
    71 friend std::basic_istream<CharT, Traits>&
    \n+
    72 operator>>(std::basic_istream<CharT, Traits>& in, Float128& x)
    \n+
    73 {
    \n+
    74 std::string buf;
    \n+
    75 buf.reserve(128);
    \n+
    76 in >> buf;
    \n+
    77 x.value() = strtoflt128(buf.c_str(), NULL);
    \n+
    78 return in;
    \n+
    79 }
    \n+
    80
    \n+
    81 template<class CharT, class Traits>
    \n+
    82 friend std::basic_ostream<CharT, Traits>&
    \n+
    83 operator<<(std::basic_ostream<CharT, Traits>& out, const Float128& x)
    \n+
    84 {
    \n+
    85 const std::size_t bufSize = 128;
    \n+
    86 CharT buf[128];
    \n+
    87
    \n+
    88 std::string format = "%." + std::to_string(out.precision()) + "Q" +
    \n+
    89 ((out.flags() | std::ios_base::scientific) ? "e" : "f");
    \n+
    90 const int numChars = quadmath_snprintf(buf, bufSize, format.c_str(), x.value());
    \n+
    91 if (std::size_t(numChars) >= bufSize) {
    \n+
    92 DUNE_THROW(Dune::RangeError, "Failed to print Float128 value: buffer overflow");
    \n+
    93 }
    \n+
    94 out << buf;
    \n+
    95 return out;
    \n+
    96 }
    \n+
    97
    \n+
    98 // Increment, decrement
    \n+
    99 constexpr Float128& operator++() noexcept { ++value_; return *this; }
    \n+
    100 constexpr Float128& operator--() noexcept { --value_; return *this; }
    \n+
    101
    \n+
    102 constexpr Float128 operator++(int) noexcept { Float128 tmp{*this}; ++value_; return tmp; }
    \n+
    103 constexpr Float128 operator--(int) noexcept { Float128 tmp{*this}; --value_; return tmp; }
    \n+
    104
    \n+
    105 // unary operators
    \n+
    106 constexpr Float128 operator+() const noexcept { return Float128{+value_}; }
    \n+
    107 constexpr Float128 operator-() const noexcept { return Float128{-value_}; }
    \n+
    108
    \n+
    109 // assignment operators
    \n+
    110#define DUNE_ASSIGN_OP(OP) \\
    \n+
    111 constexpr Float128& operator OP(const Float128& u) noexcept \\
    \n+
    112 { \\
    \n+
    113 value_ OP float128_t(u); \\
    \n+
    114 return *this; \\
    \n+
    115 } \\
    \n+
    116 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    117
    \n+
    118 DUNE_ASSIGN_OP(+=);
    \n+
    119 DUNE_ASSIGN_OP(-=);
    \n+
    120
    \n+
    121 DUNE_ASSIGN_OP(*=);
    \n+
    122 DUNE_ASSIGN_OP(/=);
    \n+
    123
    \n+
    124#undef DUNE_ASSIGN_OP
    \n+
    125
    \n+
    126 }; // end class Float128
    \n+
    127
    \n+
    128 // binary operators:
    \n+
    129 // For symmetry provide overloads with arithmetic types
    \n+
    130 // in the first or second argument.
    \n+
    131#define DUNE_BINARY_OP(OP) \\
    \n+
    132 constexpr Float128 operator OP(const Float128& t, \\
    \n+
    133 const Float128& u) noexcept \\
    \n+
    134 { \\
    \n+
    135 return Float128{float128_t(t) OP float128_t(u)}; \\
    \n+
    136 } \\
    \n+
    137 constexpr Float128 operator OP(const float128_t& t, \\
    \n+
    138 const Float128& u) noexcept \\
    \n+
    139 { \\
    \n+
    140 return Float128{t OP float128_t(u)}; \\
    \n+
    141 } \\
    \n+
    142 constexpr Float128 operator OP(const Float128& t, \\
    \n+
    143 const float128_t& u) noexcept \\
    \n+
    144 { \\
    \n+
    145 return Float128{float128_t(t) OP u}; \\
    \n+
    146 } \\
    \n+
    147 template <class T, \\
    \n+
    148 std::enable_if_t<std::is_arithmetic<T>::value, int> = 0> \\
    \n+
    149 constexpr Float128 operator OP(const T& t, \\
    \n+
    150 const Float128& u) noexcept \\
    \n+
    151 { \\
    \n+
    152 return Float128{float128_t(t) OP float128_t(u)}; \\
    \n+
    153 } \\
    \n+
    154 template <class U, \\
    \n+
    155 std::enable_if_t<std::is_arithmetic<U>::value, int> = 0> \\
    \n+
    156 constexpr Float128 operator OP(const Float128& t, \\
    \n+
    157 const U& u) noexcept \\
    \n+
    158 { \\
    \n+
    159 return Float128{float128_t(t) OP float128_t(u)}; \\
    \n+
    160 } \\
    \n+
    161 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    162
    \n+\n+\n+\n+\n+
    167
    \n+
    168#undef DUNE_BINARY_OP
    \n+
    169
    \n+
    170 // logical operators:
    \n+
    171 // For symmetry provide overloads with arithmetic types
    \n+
    172 // in the first or second argument.
    \n+
    173#define DUNE_BINARY_BOOL_OP(OP) \\
    \n+
    174 constexpr bool operator OP(const Float128& t, \\
    \n+
    175 const Float128& u) noexcept \\
    \n+
    176 { \\
    \n+
    177 return float128_t(t) OP float128_t(u); \\
    \n+
    178 } \\
    \n+
    179 template <class T, \\
    \n+
    180 std::enable_if_t<std::is_arithmetic<T>::value, int> = 0> \\
    \n+
    181 constexpr bool operator OP(const T& t, \\
    \n+
    182 const Float128& u) noexcept \\
    \n+
    183 { \\
    \n+
    184 return float128_t(t) OP float128_t(u); \\
    \n+
    185 } \\
    \n+
    186 template <class U, \\
    \n+
    187 std::enable_if_t<std::is_arithmetic<U>::value, int> = 0> \\
    \n+
    188 constexpr bool operator OP(const Float128& t, \\
    \n+
    189 const U& u) noexcept \\
    \n+
    190 { \\
    \n+
    191 return float128_t(t) OP float128_t(u); \\
    \n+
    192 } \\
    \n+
    193 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    194
    \n+
    195 DUNE_BINARY_BOOL_OP(==);
    \n+
    196 DUNE_BINARY_BOOL_OP(!=);
    \n+
    197 DUNE_BINARY_BOOL_OP(<);
    \n+
    198 DUNE_BINARY_BOOL_OP(>);
    \n+
    199 DUNE_BINARY_BOOL_OP(<=);
    \n+
    200 DUNE_BINARY_BOOL_OP(>=);
    \n+
    201
    \n+
    202#undef DUNE_BINARY_BOOL_OP
    \n
    203
    \n-
    \n-\n-
    205 {
    \n-
    206 return &(static_cast<const DerivedType *>(this)->dereference());
    \n-
    207 }
    \n-
    \n-
    208
    \n-
    \n-\n-
    211 {
    \n-
    212 static_cast<DerivedType *>(this)->increment();
    \n-
    213 return *static_cast<DerivedType *>(this);
    \n-
    214 }
    \n-
    \n-
    215
    \n-
    \n-\n-
    218 {
    \n-
    219 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    220 this->operator++();
    \n-
    221 return tmp;
    \n-
    222 }
    \n-
    \n-
    223 };
    \n-
    \n-
    224
    \n-
    235 template<class T1, class V1, class R1, class D,
    \n-
    236 class T2, class V2, class R2>
    \n-
    237 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    240 {
    \n-
    241 if(std::is_convertible<T2,T1>::value)
    \n-
    242 return static_cast<const T1&>(lhs).equals(static_cast<const T2&>(rhs));
    \n-
    243 else
    \n-
    244 return static_cast<const T2&>(rhs).equals(static_cast<const T1&>(lhs));
    \n-
    245 }
    \n-
    \n-
    246
    \n-
    257 template<class T1, class V1, class R1, class D,
    \n-
    258 class T2, class V2, class R2>
    \n-
    259 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    262 {
    \n-
    263 if(std::is_convertible<T2,T1>::value)
    \n-
    264 return !static_cast<const T1&>(lhs).equals(static_cast<const T2&>(rhs));
    \n-
    265 else
    \n-
    266 return !static_cast<const T2&>(rhs).equals(static_cast<const T1&>(lhs));
    \n-
    267 }
    \n-
    \n-
    268
    \n-
    273 template<class T, class V, class R = V&, class D = std::ptrdiff_t>
    \n-
    \n-\n-
    275 {
    \n+
    204 // Overloads for the cmath functions
    \n+
    205
    \n+
    206 // function with name `name` redirects to quadmath function `func`
    \n+
    207#define DUNE_UNARY_FUNC(name,func) \\
    \n+
    208 inline Float128 name(const Float128& u) noexcept \\
    \n+
    209 { \\
    \n+
    210 return Float128{func (float128_t(u))}; \\
    \n+
    211 } \\
    \n+
    212 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    213
    \n+
    214 // like DUNE_UNARY_FUNC but with custom return type
    \n+
    215#define DUNE_CUSTOM_UNARY_FUNC(type,name,func) \\
    \n+
    216 inline type name(const Float128& u) noexcept \\
    \n+
    217 { \\
    \n+
    218 return (type)(func (float128_t(u))); \\
    \n+
    219 } \\
    \n+
    220 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    221
    \n+
    222 // redirects to quadmath function with two arguments
    \n+
    223#define DUNE_BINARY_FUNC(name,func) \\
    \n+
    224 inline Float128 name(const Float128& t, \\
    \n+
    225 const Float128& u) noexcept \\
    \n+
    226 { \\
    \n+
    227 return Float128{func (float128_t(t), float128_t(u))}; \\
    \n+
    228 } \\
    \n+
    229 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    230
    \n+
    231 DUNE_UNARY_FUNC(abs, fabsq);
    \n+
    232 DUNE_UNARY_FUNC(acos, acosq);
    \n+
    233 DUNE_UNARY_FUNC(acosh, acoshq);
    \n+
    234 DUNE_UNARY_FUNC(asin, asinq);
    \n+
    235 DUNE_UNARY_FUNC(asinh, asinhq);
    \n+
    236 DUNE_UNARY_FUNC(atan, atanq);
    \n+
    237 DUNE_UNARY_FUNC(atanh, atanhq);
    \n+
    238 DUNE_UNARY_FUNC(cbrt, cbrtq);
    \n+
    239 DUNE_UNARY_FUNC(ceil, ceilq);
    \n+
    240 DUNE_UNARY_FUNC(cos, cosq);
    \n+
    241 DUNE_UNARY_FUNC(cosh, coshq);
    \n+
    242 DUNE_UNARY_FUNC(erf, erfq);
    \n+
    243 DUNE_UNARY_FUNC(erfc, erfcq);
    \n+
    244 DUNE_UNARY_FUNC(exp, expq);
    \n+
    245 DUNE_UNARY_FUNC(expm1, expm1q);
    \n+
    246 DUNE_UNARY_FUNC(fabs, fabsq);
    \n+
    247 DUNE_UNARY_FUNC(floor, floorq);
    \n+
    248 DUNE_CUSTOM_UNARY_FUNC(int, ilogb, ilogbq);
    \n+
    249 DUNE_UNARY_FUNC(lgamma, lgammaq);
    \n+
    250 DUNE_CUSTOM_UNARY_FUNC(long long int, llrint, llrintq);
    \n+
    251 DUNE_CUSTOM_UNARY_FUNC(long long int, llround, llroundq);
    \n+
    252 DUNE_UNARY_FUNC(log, logq);
    \n+
    253 DUNE_UNARY_FUNC(log10, log10q);
    \n+
    254 DUNE_UNARY_FUNC(log1p, log1pq);
    \n+
    255 DUNE_UNARY_FUNC(log2, log2q);
    \n+
    256 // DUNE_UNARY_FUNC(logb, logbq); // not available in gcc5
    \n+
    257 DUNE_CUSTOM_UNARY_FUNC(long int, lrint, lrintq);
    \n+
    258 DUNE_CUSTOM_UNARY_FUNC(long int, lround, lroundq);
    \n+
    259 DUNE_UNARY_FUNC(nearbyint, nearbyintq);
    \n+
    260 DUNE_BINARY_FUNC(nextafter, nextafterq);
    \n+
    261 DUNE_BINARY_FUNC(pow, powq); // overload for integer argument see below
    \n+
    262 DUNE_UNARY_FUNC(rint, rintq);
    \n+
    263 DUNE_UNARY_FUNC(round, roundq);
    \n+
    264 DUNE_UNARY_FUNC(sin, sinq);
    \n+
    265 DUNE_UNARY_FUNC(sinh, sinhq);
    \n+
    266 DUNE_UNARY_FUNC(sqrt, sqrtq);
    \n+
    267 DUNE_UNARY_FUNC(tan, tanq);
    \n+
    268 DUNE_UNARY_FUNC(tanh, tanhq);
    \n+
    269 DUNE_UNARY_FUNC(tgamma, tgammaq);
    \n+
    270 DUNE_UNARY_FUNC(trunc, truncq);
    \n+
    271
    \n+
    272 DUNE_CUSTOM_UNARY_FUNC(bool, isfinite, finiteq);
    \n+
    273 DUNE_CUSTOM_UNARY_FUNC(bool, isinf, isinfq);
    \n+
    274 DUNE_CUSTOM_UNARY_FUNC(bool, isnan, isnanq);
    \n+
    275 DUNE_CUSTOM_UNARY_FUNC(bool, signbit, signbitq);
    \n
    276
    \n-
    277 public:
    \n-
    278 /* type aliases required by C++ for iterators */
    \n-
    279 using iterator_category = std::bidirectional_iterator_tag;
    \n-
    280 using value_type = typename std::remove_const<V>::type;
    \n-\n-
    282 using pointer = V*;
    \n-
    283 using reference = R;
    \n-
    284
    \n-
    310 typedef T DerivedType;
    \n-
    311
    \n-
    315 typedef V Value;
    \n-
    316
    \n-
    320 typedef V* Pointer;
    \n-
    321
    \n-
    325 typedef D DifferenceType;
    \n-
    326
    \n-
    330 typedef R Reference;
    \n-
    331
    \n-
    \n-\n-
    334 {
    \n-
    335 return static_cast<DerivedType const*>(this)->dereference();
    \n+
    277#undef DUNE_UNARY_FUNC
    \n+
    278#undef DUNE_CUSTOM_UNARY_FUNC
    \n+
    279#undef DUNE_BINARY_FUNC
    \n+
    280
    \n+
    281 // like DUNE_BINARY_FUNC but provide overloads with arithmetic
    \n+
    282 // types in the first or second argument.
    \n+
    283#define DUNE_BINARY_ARITHMETIC_FUNC(name,func) \\
    \n+
    284 inline Float128 name(const Float128& t, \\
    \n+
    285 const Float128& u) noexcept \\
    \n+
    286 { \\
    \n+
    287 return Float128{func (float128_t(t), float128_t(u))}; \\
    \n+
    288 } \\
    \n+
    289 template <class T, \\
    \n+
    290 std::enable_if_t<std::is_arithmetic<T>::value, int> = 0> \\
    \n+
    291 inline Float128 name(const T& t, \\
    \n+
    292 const Float128& u) noexcept \\
    \n+
    293 { \\
    \n+
    294 return Float128{func (float128_t(t), float128_t(u))}; \\
    \n+
    295 } \\
    \n+
    296 template <class U, \\
    \n+
    297 std::enable_if_t<std::is_arithmetic<U>::value, int> = 0> \\
    \n+
    298 inline Float128 name(const Float128& t, \\
    \n+
    299 const U& u) noexcept \\
    \n+
    300 { \\
    \n+
    301 return Float128{func (float128_t(t), float128_t(u))}; \\
    \n+
    302 } \\
    \n+
    303 static_assert(true, "Require semicolon to unconfuse editors")
    \n+
    304
    \n+
    305 DUNE_BINARY_ARITHMETIC_FUNC(atan2,atan2q);
    \n+
    306 DUNE_BINARY_ARITHMETIC_FUNC(copysign,copysignq);
    \n+
    307 DUNE_BINARY_ARITHMETIC_FUNC(fdim,fdimq);
    \n+
    308 DUNE_BINARY_ARITHMETIC_FUNC(fmax,fmaxq);
    \n+
    309 DUNE_BINARY_ARITHMETIC_FUNC(fmin,fminq);
    \n+
    310 DUNE_BINARY_ARITHMETIC_FUNC(fmod,fmodq);
    \n+
    311 DUNE_BINARY_ARITHMETIC_FUNC(hypot,hypotq);
    \n+
    312 DUNE_BINARY_ARITHMETIC_FUNC(remainder,remainderq);
    \n+
    313
    \n+
    314#undef DUNE_BINARY_ARITHMETIC_FUNC
    \n+
    315
    \n+
    316 // some more cmath functions with special signature
    \n+
    317
    \n+
    318 inline Float128 fma(const Float128& t, const Float128& u, const Float128& v)
    \n+
    319 {
    \n+
    320 return Float128{fmaq(float128_t(t),float128_t(u),float128_t(v))};
    \n+
    321 }
    \n+
    322
    \n+
    323 inline Float128 frexp(const Float128& u, int* p)
    \n+
    324 {
    \n+
    325 return Float128{frexpq(float128_t(u), p)};
    \n+
    326 }
    \n+
    327
    \n+
    328 inline Float128 ldexp(const Float128& u, int p)
    \n+
    329 {
    \n+
    330 return Float128{ldexpq(float128_t(u), p)};
    \n+
    331 }
    \n+
    332
    \n+
    333 inline Float128 remquo(const Float128& t, const Float128& u, int* quo)
    \n+
    334 {
    \n+
    335 return Float128{remquoq(float128_t(t), float128_t(u), quo)};
    \n
    336 }
    \n-
    \n
    337
    \n-
    \n-\n-
    339 {
    \n-
    340 return &(static_cast<const DerivedType *>(this)->dereference());
    \n+
    338 inline Float128 scalbln(const Float128& u, long int e)
    \n+
    339 {
    \n+
    340 return Float128{scalblnq(float128_t(u), e)};
    \n
    341 }
    \n-
    \n
    342
    \n-
    \n-\n-
    345 {
    \n-
    346 static_cast<DerivedType *>(this)->increment();
    \n-
    347 return *static_cast<DerivedType *>(this);
    \n-
    348 }
    \n-
    \n-
    349
    \n-
    \n-\n-
    352 {
    \n-
    353 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    354 this->operator++();
    \n-
    355 return tmp;
    \n-
    356 }
    \n-
    \n-
    357
    \n-
    358
    \n-
    \n-\n-
    361 {
    \n-
    362 static_cast<DerivedType *>(this)->decrement();
    \n-
    363 return *static_cast<DerivedType *>(this);
    \n-
    364 }
    \n-
    \n-
    365
    \n-
    \n-\n-
    368 {
    \n-
    369 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    370 this->operator--();
    \n-
    371 return tmp;
    \n-
    372 }
    \n-
    \n-
    373 };
    \n-
    \n-
    374
    \n-
    382 template<class T1, class V1, class R1, class D,
    \n-
    383 class T2, class V2, class R2>
    \n-
    384 inline typename std::enable_if<std::is_convertible<T2,T1>::value,bool>::type
    \n-
    \n-\n-\n-
    387 {
    \n-
    388 return static_cast<const T1&>(lhs).equals(static_cast<const T2&>(rhs));
    \n-
    389 }
    \n-
    \n-
    390
    \n-
    399 template<class T1, class V1, class R1, class D,
    \n-
    400 class T2, class V2, class R2>
    \n-
    401 inline
    \n-
    402 typename std::enable_if<std::is_convertible<T1,T2>::value && !std::is_convertible<T2,T1>::value,
    \n-
    403 bool>::type
    \n-
    \n-\n-\n-
    406 {
    \n-
    407 return static_cast<const T2&>(rhs).equals(static_cast<const T1&>(lhs));
    \n-
    408 }
    \n-
    \n-
    409
    \n-
    420 template<class T1, class V1, class R1, class D,
    \n-
    421 class T2, class V2, class R2>
    \n-
    422 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    425 {
    \n-
    426 return !(lhs == rhs);
    \n-
    427 }
    \n-
    \n-
    428
    \n-
    433 template<class T, class V, class R = V&, class D = std::ptrdiff_t>
    \n-
    \n-\n-
    435 {
    \n-
    436
    \n-
    437 public:
    \n-
    438 /* type aliases required by C++ for iterators */
    \n-
    439 using iterator_category = std::random_access_iterator_tag;
    \n-
    440 using value_type = typename std::remove_const<V>::type;
    \n-\n-
    442 using pointer = V*;
    \n-
    443 using reference = R;
    \n-
    444
    \n-
    478 typedef T DerivedType;
    \n-
    479
    \n-
    483 typedef V Value;
    \n-
    484
    \n-
    488 typedef V* Pointer;
    \n-
    489
    \n-
    493 typedef D DifferenceType;
    \n-
    494
    \n-
    498 typedef R Reference;
    \n-
    499
    \n-
    \n-\n-
    502 {
    \n-
    503 return static_cast<DerivedType const*>(this)->dereference();
    \n-
    504 }
    \n-
    \n-
    505
    \n-
    \n-\n-
    507 {
    \n-
    508 return &(static_cast<const DerivedType *>(this)->dereference());
    \n-
    509 }
    \n-
    \n-
    510
    \n-
    \n-\n-
    517 {
    \n-
    518 return static_cast<const DerivedType *>(this)->elementAt(n);
    \n-
    519 }
    \n-
    \n-
    520
    \n-
    \n-\n-
    523 {
    \n-
    524 static_cast<DerivedType *>(this)->increment();
    \n-
    525 return *static_cast<DerivedType *>(this);
    \n-
    526 }
    \n-
    \n-
    527
    \n-
    \n-\n-
    530 {
    \n-
    531 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    532 this->operator++();
    \n-
    533 return tmp;
    \n-
    534 }
    \n-
    \n-
    535
    \n-
    \n-\n-
    537 {
    \n-
    538 static_cast<DerivedType *>(this)->advance(n);
    \n-
    539 return *static_cast<DerivedType *>(this);
    \n-
    540 }
    \n-
    \n-
    541
    \n-
    \n-\n-
    543 {
    \n-
    544 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    545 tmp.advance(n);
    \n-
    546 return tmp;
    \n-
    547 }
    \n-
    \n-
    548
    \n-
    549
    \n-
    \n-\n-
    552 {
    \n-
    553 static_cast<DerivedType *>(this)->decrement();
    \n-
    554 return *static_cast<DerivedType *>(this);
    \n-
    555 }
    \n-
    \n-
    556
    \n-
    \n-\n-
    559 {
    \n-
    560 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    561 this->operator--();
    \n-
    562 return tmp;
    \n-
    563 }
    \n-
    \n-
    564
    \n-
    \n-\n-
    566 {
    \n-
    567 static_cast<DerivedType *>(this)->advance(-n);
    \n-
    568 return *static_cast<DerivedType *>(this);
    \n-
    569 }
    \n-
    \n-
    570
    \n-
    \n-\n-
    572 {
    \n-
    573 DerivedType tmp(static_cast<DerivedType const&>(*this));
    \n-
    574 tmp.advance(-n);
    \n-
    575 return tmp;
    \n-
    576 }
    \n-
    \n-
    577
    \n-
    578
    \n-
    579 };
    \n-
    \n-
    580
    \n-
    591 template<class T1, class V1, class R1, class D,
    \n-
    592 class T2, class V2, class R2>
    \n-
    593 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    596 {
    \n-
    597 if(std::is_convertible<T2,T1>::value)
    \n-
    598 return static_cast<const T1&>(lhs).equals(static_cast<const T2&>(rhs));
    \n-
    599 else
    \n-
    600 return static_cast<const T2&>(rhs).equals(static_cast<const T1&>(lhs));
    \n-
    601 }
    \n-
    \n-
    602
    \n-
    613 template<class T1, class V1, class R1, class D,
    \n-
    614 class T2, class V2, class R2>
    \n-
    615 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    618 {
    \n-
    619 if(std::is_convertible<T2,T1>::value)
    \n-
    620 return !static_cast<const T1&>(lhs).equals(static_cast<const T2&>(rhs));
    \n-
    621 else
    \n-
    622 return !static_cast<const T2&>(rhs).equals(static_cast<const T1&>(lhs));
    \n-
    623 }
    \n-
    \n-
    624
    \n-
    635 template<class T1, class V1, class R1, class D,
    \n-
    636 class T2, class V2, class R2>
    \n-
    \n-\n-\n-\n-
    640 {
    \n-
    641 if(std::is_convertible<T2,T1>::value)
    \n-
    642 return static_cast<const T1&>(lhs).distanceTo(static_cast<const T2&>(rhs))>0;
    \n-
    643 else
    \n-
    644 return static_cast<const T2&>(rhs).distanceTo(static_cast<const T1&>(lhs))<0;
    \n-
    645 }
    \n-
    \n-
    646
    \n-
    647
    \n-
    658 template<class T1, class V1, class R1, class D,
    \n-
    659 class T2, class V2, class R2>
    \n-
    \n-\n-\n-\n-
    663 {
    \n-
    664 if(std::is_convertible<T2,T1>::value)
    \n-
    665 return static_cast<const T1&>(lhs).distanceTo(static_cast<const T2&>(rhs))>=0;
    \n-
    666 else
    \n-
    667 return static_cast<const T2&>(rhs).distanceTo(static_cast<const T1&>(lhs))<=0;
    \n-
    668 }
    \n-
    \n-
    669
    \n-
    670
    \n-
    681 template<class T1, class V1, class R1, class D,
    \n-
    682 class T2, class V2, class R2>
    \n-
    683 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    686 {
    \n-
    687 if(std::is_convertible<T2,T1>::value)
    \n-
    688 return static_cast<const T1&>(lhs).distanceTo(static_cast<const T2&>(rhs))<0;
    \n-
    689 else
    \n-
    690 return static_cast<const T2&>(rhs).distanceTo(static_cast<const T1&>(lhs))>0;
    \n-
    691 }
    \n-
    \n-
    692
    \n-
    703 template<class T1, class V1, class R1, class D,
    \n-
    704 class T2, class V2, class R2>
    \n-
    705 inline typename EnableIfInterOperable<T1,T2,bool>::type
    \n-
    \n-\n-\n-
    708 {
    \n-
    709 if(std::is_convertible<T2,T1>::value)
    \n-
    710 return static_cast<const T1&>(lhs).distanceTo(static_cast<const T2&>(rhs))<=0;
    \n-
    711 else
    \n-
    712 return static_cast<const T2&>(rhs).distanceTo(static_cast<const T1&>(lhs))>=0;
    \n-
    713 }
    \n-
    \n-
    714
    \n-
    725 template<class T1, class V1, class R1, class D,
    \n-
    726 class T2, class V2, class R2>
    \n-
    727 inline typename EnableIfInterOperable<T1,T2,D>::type
    \n-
    \n-\n-\n-
    730 {
    \n-
    731 if(std::is_convertible<T2,T1>::value)
    \n-
    732 return -static_cast<const T1&>(lhs).distanceTo(static_cast<const T2&>(rhs));
    \n-
    733 else
    \n-
    734 return static_cast<const T2&>(rhs).distanceTo(static_cast<const T1&>(lhs));
    \n-
    735 }
    \n-
    \n-
    736
    \n-
    737
    \n-
    748 template<class ProxyType>
    \n-
    \n-\n-
    750 {
    \n-
    751 public:
    \n-
    \n-
    752 constexpr ProxyArrowResult(ProxyType&& p)
    \n-
    753 noexcept(std::is_nothrow_constructible_v<ProxyType, ProxyType&&>)
    \n-
    754 : p_(std::move(p))
    \n-
    755 {}
    \n-
    \n-
    756
    \n-
    \n-
    757 constexpr ProxyArrowResult(const ProxyType& p)
    \n-
    758 noexcept(std::is_nothrow_constructible_v<ProxyType, const ProxyType&>)
    \n-
    759 : p_(p)
    \n-
    760 {}
    \n-
    \n-
    761
    \n-
    \n-
    762 constexpr const ProxyType* operator->() const noexcept
    \n-
    763 {
    \n-
    764 return &p_;
    \n-
    765 }
    \n-
    \n-
    766
    \n-
    \n-
    767 constexpr ProxyType* operator->() noexcept
    \n-
    768 {
    \n-
    769 return &p_;
    \n-
    770 }
    \n-
    \n-
    771
    \n-
    772 private:
    \n-
    773 ProxyType p_;
    \n-
    774 };
    \n-
    \n-
    775
    \n-
    776
    \n-
    \n-\n-
    786 {
    \n-
    787
    \n-
    789 template<class It>
    \n-
    790 static constexpr auto baseIterator(It&& it) noexcept
    \n-
    791 -> decltype(it.baseIterator())
    \n-
    792 {
    \n-
    793 return it.baseIterator();
    \n-
    794 }
    \n-
    795
    \n-
    797 template<class It>
    \n-
    798 static constexpr auto derived(It&& it) noexcept
    \n-
    799 -> decltype(it.derived())
    \n-
    800 {
    \n-
    801 return it.derived();
    \n-
    802 }
    \n-
    803
    \n-
    804 };
    \n-
    \n-
    805
    \n-
    806
    \n-
    807
    \n-
    808 namespace Impl::Concepts {
    \n-
    809
    \n-
    810 using namespace Dune::Concept;
    \n-
    811
    \n-
    812 template<class R>
    \n-
    813 struct BaseIterDereferenceOp
    \n-
    814 {
    \n-
    815 template<class It>
    \n-
    816 auto require(const It& it) -> decltype(
    \n-
    817 *(IteratorFacadeAccess::baseIterator(it)),
    \n-
    818 requireConvertible<decltype(*(IteratorFacadeAccess::baseIterator(it))), R>()
    \n-
    819 );
    \n-
    820 };
    \n-
    821
    \n-
    822 struct IterEqualsOp
    \n-
    823 {
    \n-
    824 template<class It1, class It2>
    \n-
    825 auto require(const It1& it1, const It2& it2) -> decltype(
    \n-
    826 requireConvertible<bool>(it1 == it2)
    \n-
    827 );
    \n-
    828 };
    \n-
    829
    \n-
    830 struct BaseIterEqualsOp
    \n-
    831 {
    \n-
    832 template<class It1, class It2>
    \n-
    833 auto require(const It1& it1, const It2& it2) -> decltype(
    \n-
    834 Dune::Concept::requireConvertible<bool>(IteratorFacadeAccess::baseIterator(it1) == IteratorFacadeAccess::baseIterator(it2))
    \n-
    835 );
    \n-
    836 };
    \n-
    837
    \n-
    838 struct BaseIterIncrementOp
    \n-
    839 {
    \n-
    840 template<class It>
    \n-
    841 auto require(It it) -> decltype(
    \n-
    842 ++(IteratorFacadeAccess::baseIterator(it))
    \n-
    843 );
    \n-
    844 };
    \n-
    845
    \n-
    846 struct BaseIterDecrementOp
    \n-
    847 {
    \n-
    848 template<class It>
    \n-
    849 auto require(It it) -> decltype(
    \n-
    850 --(IteratorFacadeAccess::baseIterator(it))
    \n-
    851 );
    \n-
    852 };
    \n-
    853
    \n-
    854 template<class D>
    \n-
    855 struct IterAdvanceOp
    \n-
    856 {
    \n-
    857 template<class It>
    \n-
    858 auto require(It it) -> decltype(
    \n-
    859 it += std::declval<D>()
    \n-
    860 );
    \n-
    861 };
    \n-
    862
    \n-
    863 template<class D>
    \n-
    864 struct BaseIterAdvanceOp
    \n-
    865 {
    \n-
    866 template<class It>
    \n-
    867 auto require(It it) -> decltype(
    \n-
    868 IteratorFacadeAccess::baseIterator(it) += std::declval<D>()
    \n-
    869 );
    \n-
    870 };
    \n-
    871
    \n-
    872 template<class D>
    \n-
    873 struct IterDistanceOp
    \n-
    874 {
    \n-
    875 template<class It1, class It2>
    \n-
    876 auto require(const It1& it1, const It2& it2) -> decltype(
    \n-
    877 Dune::Concept::requireConvertible<D>(it1 - it2)
    \n-
    878 );
    \n-
    879 };
    \n-
    880
    \n-
    881 template<class D>
    \n-
    882 struct BaseIterDistanceOp
    \n-
    883 {
    \n-
    884 template<class It1, class It2>
    \n-
    885 auto require(const It1& it1, const It2& it2) -> decltype(
    \n-
    886 Dune::Concept::requireConvertible<D>(IteratorFacadeAccess::baseIterator(it1) - IteratorFacadeAccess::baseIterator(it2))
    \n-
    887 );
    \n-
    888 };
    \n-
    889
    \n-
    890 } // namespace Impl::Concept
    \n-
    891
    \n-
    892
    \n-
    893
    \n-
    1051 template<class It, class C, class V, class R = V&, class P = V*, class D = std::ptrdiff_t>
    \n-
    \n-\n-
    1053 {
    \n-
    1054 static constexpr bool isBidirectional = std::is_convertible_v<C, std::bidirectional_iterator_tag>;
    \n-
    1055 static constexpr bool isRandomAccess = std::is_convertible_v<C, std::random_access_iterator_tag>;
    \n-
    1056
    \n-
    1057 // We make IteratorFacadeAccess a friend to allow forwarding of the derived()
    \n-
    1058 // methods to the free operators instead of havin to do raw casts there.
    \n-
    1059 // This allows to encapsulate all casts within IteratorFacade itself.
    \n-
    1060 friend IteratorFacadeAccess;
    \n-
    1061
    \n-
    1062 protected:
    \n-
    1063
    \n-\n-
    1066
    \n-
    \n-
    1068 constexpr const DerivedIterator& derived() const
    \n-
    1069 {
    \n-
    1070 return static_cast<const DerivedIterator&>(*this);
    \n-
    1071 }
    \n-
    \n-
    1072
    \n-
    \n-\n-
    1075 {
    \n-
    1076 return static_cast<DerivedIterator&>(*this);
    \n-
    1077 }
    \n-
    \n-
    1078
    \n-
    1079 public:
    \n-
    1080
    \n-
    1081 // Standard types of of C++ iterators
    \n-\n-
    1083 using value_type = typename std::remove_const<V>::type;
    \n-
    1084 using reference = R;
    \n-
    1085 using pointer = P;
    \n-\n-
    1087
    \n-
    1088 // Corresponding Dune typedefs
    \n-\n-\n-\n-\n-
    1093
    \n-
    1094 // Only defined to do static assertions.
    \n-
    \n-\n-
    1096 {
    \n-
    1097 static_assert(std::is_signed_v<difference_type>,
    \n-
    1098 "Type used as difference_type must be signed");
    \n-
    1099 const DerivedIterator& constDerived = derived();
    \n-
    1100 static_assert(std::is_convertible_v<decltype(*constDerived), reference>,
    \n-
    1101 "Derived class does not implement `*it` or `*(it.baseIterator())` for const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1102 static_assert(std::is_convertible_v<decltype(++derived()), DerivedIterator&>,
    \n-
    1103 "Derived class does not implement `++it`, `++(it.baseIterator())`, or `it+=1` for mutable `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1104 static_assert(std::is_convertible_v<decltype(constDerived==constDerived), bool>,
    \n-
    1105 "Derived class does not implement `it1==it2` or `it1.baseIterator()==it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1106 if constexpr (isBidirectional)
    \n-
    1107 static_assert(std::is_convertible_v<decltype(--derived()), DerivedIterator&>,
    \n-
    1108 "Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-=1` for mutable `it` required by IteratorFacade<..., std::bidirectional_iterator_tag, ...>.");
    \n-
    1109 if constexpr (isRandomAccess)
    \n-
    1110 {
    \n-
    1111 static_assert(std::is_convertible_v<decltype(derived()+=std::declval<difference_type>()), DerivedIterator&>,
    \n-
    1112 "Derived class does not implement `it+=` or `it.baseIterator()+=` for mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
    \n-
    1113 static_assert(std::is_convertible_v<decltype(constDerived-constDerived), difference_type>,
    \n-
    1114 "Derived class does not implement `it1-it2` or `it1.baseIterator()-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
    \n-
    1115 }
    \n-
    1116 }
    \n-
    \n-
    1117
    \n-
    \n-
    1119 constexpr decltype(auto) operator*() const
    \n-
    1120 {
    \n-
    1121 if constexpr (Dune::models<Impl::Concepts::BaseIterDereferenceOp<reference>, DerivedIterator>())
    \n-
    1122 return *(IteratorFacadeAccess::baseIterator(derived()));
    \n-
    1123 else
    \n-
    1124 static_assert(AlwaysFalse<It>::value,
    \n-
    1125 "Derived class does not implement `*it` or `*(it.baseIterator())` for const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1126 }
    \n-
    \n-
    1127
    \n-
    \n-
    1129 constexpr pointer operator->() const
    \n-
    1130 {
    \n-
    1131 if constexpr (std::is_pointer_v<pointer>)
    \n-
    1132 return std::addressof(*derived());
    \n-
    1133 else
    \n-
    1134 return pointer(*derived());
    \n-
    1135 }
    \n-
    \n-
    1136
    \n-
    \n-
    1138 constexpr decltype(auto) operator++()
    \n-
    1139 {
    \n-
    1140 if constexpr (Dune::models<Impl::Concepts::BaseIterIncrementOp, DerivedIterator>())
    \n-
    1141 {
    \n-
    1142 ++(IteratorFacadeAccess::baseIterator(derived()));
    \n-
    1143 return derived();
    \n-
    1144 }
    \n-
    1145 else if constexpr (Dune::models<Impl::Concepts::IterAdvanceOp<difference_type>, DerivedIterator>())
    \n-
    1146 {
    \n-
    1147 derived() += 1;
    \n-
    1148 return derived();
    \n-
    1149 }
    \n-
    1150 else
    \n-
    1151 static_assert(AlwaysFalse<It>::value,
    \n-
    1152 "Derived class does not implement `++it`, `++(it.baseIterator())`, or `it+=1` for mutable `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1153 }
    \n-
    \n-
    1154
    \n-
    \n-\n-
    1157 {
    \n-
    1158 DerivedIterator tmp(derived());
    \n-
    1159 this->operator++();
    \n-
    1160 return tmp;
    \n-
    1161 }
    \n-
    \n-
    1162
    \n-
    1168 template<bool dummy=true, std::enable_if_t<isBidirectional and dummy, int> =0>
    \n-
    \n-
    1169 constexpr decltype(auto) operator--()
    \n-
    1170 {
    \n-
    1171 if constexpr (Dune::models<Impl::Concepts::BaseIterDecrementOp, DerivedIterator>())
    \n-
    1172 {
    \n-
    1173 --(IteratorFacadeAccess::baseIterator(derived()));
    \n-
    1174 return derived();
    \n-
    1175 }
    \n-
    1176 else if constexpr (Dune::models<Impl::Concepts::IterAdvanceOp<difference_type>, DerivedIterator>())
    \n-
    1177 {
    \n-
    1178 derived() -= 1;
    \n-
    1179 return derived();
    \n-
    1180 }
    \n-
    1181 else
    \n-
    1182 static_assert(AlwaysFalse<It>::value,
    \n-
    1183 "Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-=1` for mutable `it` required by IteratorFacade<..., std::bidirectional_iterator_tag, ...>.");
    \n-
    1184 }
    \n-
    \n-
    1185
    \n-
    1191 template<bool dummy=true, std::enable_if_t<isBidirectional and dummy, int> =0>
    \n-
    \n-\n-
    1193 {
    \n-
    1194 DerivedIterator tmp(derived());
    \n-
    1195 this->operator--();
    \n-
    1196 return tmp;
    \n-
    1197 }
    \n-
    \n-
    1198
    \n-
    1206 template<bool dummy=true, std::enable_if_t<isRandomAccess and dummy, int> =0>
    \n-
    \n-\n-
    1208 {
    \n-
    1209 return *(derived()+n);
    \n-
    1210 }
    \n-
    \n-
    1211
    \n-
    1217 template<bool dummy=true, std::enable_if_t<isRandomAccess and dummy, int> =0>
    \n-
    \n-
    1218 constexpr decltype(auto) operator+=(difference_type n)
    \n-
    1219 {
    \n-
    1220 if constexpr (Dune::models<Impl::Concepts::BaseIterAdvanceOp<difference_type>, DerivedIterator>())
    \n-
    1221 {
    \n-
    1222 IteratorFacadeAccess::baseIterator(derived()) += n;
    \n-
    1223 return derived();
    \n-
    1224 }
    \n-
    1225 else
    \n-
    1226 static_assert(AlwaysFalse<It>::value,
    \n-
    1227 "Derived class does not implement `it+=` or `it.baseIterator()+=` for mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
    \n-
    1228 }
    \n-
    \n-
    1229
    \n-
    1235 template<bool dummy=true, std::enable_if_t<isRandomAccess and dummy, int> =0>
    \n-
    \n-\n-
    1237 {
    \n-
    1238 DerivedIterator tmp(derived());
    \n-
    1239 tmp += n;
    \n-
    1240 return tmp;
    \n-
    1241 }
    \n-
    \n-
    1242
    \n-
    1248 template<bool dummy=true, std::enable_if_t<isRandomAccess and dummy, int> =0>
    \n-
    \n-\n-
    1250 {
    \n-
    1251 derived() += (-n);
    \n-
    1252 return derived();
    \n-
    1253 }
    \n-
    \n-
    1254
    \n-
    1260 template<bool dummy=true, std::enable_if_t<isRandomAccess and dummy, int> =0>
    \n-
    \n-\n-
    1262 {
    \n-
    1263 DerivedIterator tmp(derived());
    \n-
    1264 tmp -= n;
    \n-
    1265 return tmp;
    \n-
    1266 }
    \n-
    \n-
    1267
    \n-
    1268 };
    \n-
    \n-
    1269
    \n-
    1270
    \n-
    1271
    \n-
    1282 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2>
    \n-
    \n-\n-
    1284 {
    \n-
    1285 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1286 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1287 if constexpr (Dune::models<Impl::Concepts::BaseIterEqualsOp, T1, T2>())
    \n-
    1288 return IteratorFacadeAccess::baseIterator(derivedIt1) == IteratorFacadeAccess::baseIterator(derivedIt2);
    \n-
    1289 else
    \n-
    1290 static_assert(AlwaysFalse<T1>::value,
    \n-
    1291 "Derived class does not implement `it1==it2` or `it1.baseIterator()==it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
    \n-
    1292 }
    \n-
    \n-
    1293
    \n-
    1301 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2,
    \n-
    1302 std::enable_if_t< Dune::models<Impl::Concepts::IterEqualsOp,T1, T2>() , int> =0>
    \n-
    \n-\n-
    1304 {
    \n-
    1305 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1306 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1307 return not(derivedIt1 == derivedIt2);
    \n-
    1308 }
    \n-
    \n-
    1309
    \n-
    1320 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D>
    \n-
    \n-\n-
    1322 {
    \n-
    1323 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1324 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1325 if constexpr (Dune::models<Impl::Concepts::BaseIterDistanceOp<D>,T1, T2>())
    \n-
    1326 return D(IteratorFacadeAccess::baseIterator(derivedIt1) - IteratorFacadeAccess::baseIterator(derivedIt2));
    \n-
    1327 else
    \n-
    1328 static_assert(AlwaysFalse<T1>::value,
    \n-
    1329 "Derived class does not implement `it1-it2` or `it1.baseIterator()-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
    \n-
    1330 }
    \n-
    \n-
    1331
    \n-
    1339 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2,
    \n-
    1340 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() , int> =0>
    \n-
    \n-
    1341 constexpr bool operator<(const IteratorFacade<T1,C,V1,R1,P1,D1>& it1, const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
    \n-
    1342 {
    \n-
    1343 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1344 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1345 return (derivedIt1 - derivedIt2) < D1(0);
    \n-
    1346 }
    \n-
    \n-
    1347
    \n-
    1355 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2,
    \n-
    1356 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() , int> =0>
    \n-
    \n-
    1357 constexpr bool operator<=(const IteratorFacade<T1,C,V1,R1,P1,D1>& it1, const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
    \n-
    1358 {
    \n-
    1359 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1360 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1361 return (derivedIt1 - derivedIt2) <= D1(0);
    \n-
    1362 }
    \n-
    \n-
    1363
    \n-
    1371 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2,
    \n-
    1372 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() , int> =0>
    \n-
    \n-
    1373 constexpr bool operator>(const IteratorFacade<T1,C,V1,R1,P1,D1>& it1, const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
    \n-
    1374 {
    \n-
    1375 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1376 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1377 return (derivedIt1 - derivedIt2) > D1(0);
    \n-
    1378 }
    \n-
    \n-
    1379
    \n-
    1387 template<class T1, class T2, class C, class V1, class V2, class R1, class R2, class P1, class P2, class D1, class D2,
    \n-
    1388 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() , int> =0>
    \n-
    \n-
    1389 constexpr bool operator>=(const IteratorFacade<T1,C,V1,R1,P1,D1>& it1, const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
    \n-
    1390 {
    \n-
    1391 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
    \n-
    1392 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
    \n-
    1393 return (derivedIt1 - derivedIt2) >= D1(0);
    \n-
    1394 }
    \n-
    \n-
    1395
    \n-
    1396
    \n-
    1397
    \n-
    1399}
    \n-
    1400#endif
    \n-
    Traits for type conversions and type information.
    \n-
    Infrastructure for concepts.
    \n+
    343 inline Float128 scalbn(const Float128& u, int e)
    \n+
    344 {
    \n+
    345 return Float128{scalbnq(float128_t(u), e)};
    \n+
    346 }
    \n+
    347
    \n+
    349 // NOTE: This is much faster than a pow(x, Float128(p)) call
    \n+
    350 // NOTE: This is a modified version of boost::math::cstdfloat::detail::pown
    \n+
    351 // (adapted to the type Float128) that is part of the Boost 1.65 Math toolkit 2.8.0
    \n+
    352 // and is implemented by Christopher Kormanyos, John Maddock, and Paul A. Bristow,
    \n+
    353 // distributed under the Boost Software License, Version 1.0
    \n+
    354 // (See http://www.boost.org/LICENSE_1_0.txt)
    \n+
    355 template <class Int,
    \n+
    356 std::enable_if_t<std::is_integral<Int>::value, int> = 0>
    \n+
    357 inline Float128 pow(const Float128& x, const Int p)
    \n+
    358 {
    \n+
    359 static const Float128 max_value = FLT128_MAX;
    \n+
    360 static const Float128 min_value = FLT128_MIN;
    \n+
    361 static const Float128 inf_value = float128_t{1} / float128_t{0};
    \n+
    362
    \n+
    363 const bool isneg = (x < 0);
    \n+
    364 const bool isnan = (x != x);
    \n+
    365 const bool isinf = (isneg ? bool(-x > max_value) : bool(+x > max_value));
    \n+
    366
    \n+
    367 if (isnan) { return x; }
    \n+
    368 if (isinf) { return Float128{nanq("")}; }
    \n+
    369
    \n+
    370 const Float128 abs_x = (isneg ? -x : x);
    \n+
    371 if (p < Int(0)) {
    \n+
    372 if (abs_x < min_value)
    \n+
    373 return (isneg ? -inf_value : +inf_value);
    \n+
    374 else
    \n+
    375 return Float128(1) / pow(x, Int(-p));
    \n+
    376 }
    \n+
    377
    \n+
    378 if (p == Int(0)) { return Float128(1); }
    \n+
    379 if (p == Int(1)) { return x; }
    \n+
    380 if (abs_x > max_value)
    \n+
    381 return (isneg ? -inf_value : +inf_value);
    \n+
    382
    \n+
    383 if (p == Int(2)) { return (x * x); }
    \n+
    384 if (p == Int(3)) { return ((x * x) * x); }
    \n+
    385 if (p == Int(4)) { const Float128 x2 = (x * x); return (x2 * x2); }
    \n+
    386
    \n+
    387 Float128 result = ((p % Int(2)) != Int(0)) ? x : Float128(1);
    \n+
    388 Float128 xn = x; // binary powers of x
    \n+
    389
    \n+
    390 Int p2 = p;
    \n+
    391 while (Int(p2 /= 2) != Int(0)) {
    \n+
    392 xn *= xn; // Square xn for each binary power
    \n+
    393
    \n+
    394 const bool has_binary_power = (Int(p2 % Int(2)) != Int(0));
    \n+
    395 if (has_binary_power)
    \n+
    396 result *= xn;
    \n+
    397 }
    \n+
    398
    \n+
    399 return result;
    \n+
    400 }
    \n+
    401
    \n+
    402
    \n+
    403 } // end namespace Impl
    \n+
    404
    \n+
    405 template <>
    \n+
    406 struct IsNumber<Impl::Float128>
    \n+
    407 : public std::true_type {};
    \n+
    408
    \n+
    409} // end namespace Dune
    \n+
    410
    \n+
    411namespace std
    \n+
    412{
    \n+
    413#ifndef NO_STD_NUMERIC_LIMITS_SPECIALIZATION
    \n+
    414 template <>
    \n+
    415 class numeric_limits<Dune::Impl::Float128>
    \n+
    416 {
    \n+
    417 using Float128 = Dune::Impl::Float128;
    \n+
    418 using float128_t = Dune::Impl::float128_t;
    \n+
    419
    \n+
    420 public:
    \n+
    421 static constexpr bool is_specialized = true;
    \n+
    422 static constexpr Float128 min() noexcept { return FLT128_MIN; }
    \n+
    423 static constexpr Float128 max() noexcept { return FLT128_MAX; }
    \n+
    424 static constexpr Float128 lowest() noexcept { return -FLT128_MAX; }
    \n+
    425 static constexpr int digits = FLT128_MANT_DIG;
    \n+
    426 static constexpr int digits10 = 34;
    \n+
    427 static constexpr int max_digits10 = 36;
    \n+
    428 static constexpr bool is_signed = true;
    \n+
    429 static constexpr bool is_integer = false;
    \n+
    430 static constexpr bool is_exact = false;
    \n+
    431 static constexpr int radix = 2;
    \n+
    432 static constexpr Float128 epsilon() noexcept { return FLT128_EPSILON; }
    \n+
    433 static constexpr Float128 round_error() noexcept { return float128_t{0.5}; }
    \n+
    434 static constexpr int min_exponent = FLT128_MIN_EXP;
    \n+
    435 static constexpr int min_exponent10 = FLT128_MIN_10_EXP;
    \n+
    436 static constexpr int max_exponent = FLT128_MAX_EXP;
    \n+
    437 static constexpr int max_exponent10 = FLT128_MAX_10_EXP;
    \n+
    438 static constexpr bool has_infinity = true;
    \n+
    439 static constexpr bool has_quiet_NaN = true;
    \n+
    440 static constexpr bool has_signaling_NaN = false;
    \n+
    441 static constexpr float_denorm_style has_denorm = denorm_present;
    \n+
    442 static constexpr bool has_denorm_loss = false;
    \n+
    443 static constexpr Float128 infinity() noexcept { return float128_t{1}/float128_t{0}; }
    \n+
    444 static Float128 quiet_NaN() noexcept { return nanq(""); }
    \n+
    445 static constexpr Float128 signaling_NaN() noexcept { return float128_t{}; }
    \n+
    446 static constexpr Float128 denorm_min() noexcept { return FLT128_DENORM_MIN; }
    \n+
    447 static constexpr bool is_iec559 = true;
    \n+
    448 static constexpr bool is_bounded = false;
    \n+
    449 static constexpr bool is_modulo = false;
    \n+
    450 static constexpr bool traps = false;
    \n+
    451 static constexpr bool tinyness_before = false;
    \n+
    452 static constexpr float_round_style round_style = round_to_nearest;
    \n+
    453 };
    \n+
    454#endif
    \n+
    455} // end namespace std
    \n+
    456
    \n+
    457#endif // HAVE_QUADMATH
    \n+
    458#endif // DUNE_QUADMATH_HH
    \n+
    Traits for type conversions and type information.
    \n+
    A few common exception classes.
    \n+
    #define DUNE_BINARY_OP(OP)
    Definition debugalign.hh:261
    \n+
    #define DUNE_UNARY_FUNC(name)
    \n+
    #define DUNE_ASSIGN_OP(OP)
    Definition debugalign.hh:220
    \n+
    Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)
    Read a std::tuple.
    Definition streamoperators.hh:43
    \n+
    constexpr auto max
    Function object that returns the greater of the given values.
    Definition hybridutilities.hh:484
    \n+
    constexpr auto min
    Function object that returns the smaller of the given values.
    Definition hybridutilities.hh:506
    \n+
    std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
    Definition bigunsignedint.hh:278
    \n
    bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:542
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator<(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:638
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator>(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:684
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator<=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:661
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator==(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for equality.
    Definition iteratorfacades.hh:238
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator>=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
    Comparison operator.
    Definition iteratorfacades.hh:706
    \n-
    EnableIfInterOperable< T1, T2, bool >::type operator!=(const ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2, V2, R2, D > &rhs)
    Checks for inequality.
    Definition iteratorfacades.hh:260
    \n+
    bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)
    Definition bigunsignedint.hh:535
    \n+
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    STL namespace.
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Namespace for concepts.
    Definition concept.hh:34
    \n-
    constexpr bool requireConvertible()
    Definition concept.hh:247
    \n-
    Base class for stl conformant forward iterators.
    Definition iteratorfacades.hh:142
    \n-
    std::forward_iterator_tag iterator_category
    Definition iteratorfacades.hh:146
    \n-
    V * pointer
    Definition iteratorfacades.hh:149
    \n-
    DerivedType & operator++()
    Preincrement operator.
    Definition iteratorfacades.hh:210
    \n-
    D DifferenceType
    The type of the difference between two positions.
    Definition iteratorfacades.hh:191
    \n-
    R Reference
    The type of the reference to the values accessed.
    Definition iteratorfacades.hh:196
    \n-
    Pointer operator->() const
    Definition iteratorfacades.hh:204
    \n-
    T DerivedType
    The type of derived iterator.
    Definition iteratorfacades.hh:176
    \n-
    V Value
    The type of value accessed through the iterator.
    Definition iteratorfacades.hh:181
    \n-
    typename std::remove_const< V >::type value_type
    Definition iteratorfacades.hh:147
    \n-
    DerivedType operator++(int)
    Postincrement operator.
    Definition iteratorfacades.hh:217
    \n-
    V * Pointer
    The pointer to the Value.
    Definition iteratorfacades.hh:186
    \n-
    D difference_type
    Definition iteratorfacades.hh:148
    \n-
    Reference operator*() const
    Dereferencing operator.
    Definition iteratorfacades.hh:199
    \n-
    R reference
    Definition iteratorfacades.hh:150
    \n-
    Facade class for stl conformant bidirectional iterators.
    Definition iteratorfacades.hh:275
    \n-
    V * pointer
    Definition iteratorfacades.hh:282
    \n-
    typename std::remove_const< V >::type value_type
    Definition iteratorfacades.hh:280
    \n-
    Reference operator*() const
    Dereferencing operator.
    Definition iteratorfacades.hh:333
    \n-
    D difference_type
    Definition iteratorfacades.hh:281
    \n-
    T DerivedType
    The type of derived iterator.
    Definition iteratorfacades.hh:310
    \n-
    DerivedType & operator--()
    Preincrement operator.
    Definition iteratorfacades.hh:360
    \n-
    Pointer operator->() const
    Definition iteratorfacades.hh:338
    \n-
    DerivedType & operator++()
    Preincrement operator.
    Definition iteratorfacades.hh:344
    \n-
    V * Pointer
    The pointer to the Value.
    Definition iteratorfacades.hh:320
    \n-
    R Reference
    The type of the reference to the values accessed.
    Definition iteratorfacades.hh:330
    \n-
    DerivedType operator++(int)
    Postincrement operator.
    Definition iteratorfacades.hh:351
    \n-
    std::bidirectional_iterator_tag iterator_category
    Definition iteratorfacades.hh:279
    \n-
    D DifferenceType
    The type of the difference between two positions.
    Definition iteratorfacades.hh:325
    \n-
    DerivedType operator--(int)
    Postincrement operator.
    Definition iteratorfacades.hh:367
    \n-
    R reference
    Definition iteratorfacades.hh:283
    \n-
    V Value
    The type of value accessed through the iterator.
    Definition iteratorfacades.hh:315
    \n-
    Base class for stl conformant forward iterators.
    Definition iteratorfacades.hh:435
    \n-
    typename std::remove_const< V >::type value_type
    Definition iteratorfacades.hh:440
    \n-
    D difference_type
    Definition iteratorfacades.hh:441
    \n-
    DerivedType operator--(int)
    Postdecrement operator.
    Definition iteratorfacades.hh:558
    \n-
    V * pointer
    Definition iteratorfacades.hh:442
    \n-
    std::random_access_iterator_tag iterator_category
    Definition iteratorfacades.hh:439
    \n-
    Reference operator*() const
    Dereferencing operator.
    Definition iteratorfacades.hh:501
    \n-
    DerivedType & operator++()
    Preincrement operator.
    Definition iteratorfacades.hh:522
    \n-
    R reference
    Definition iteratorfacades.hh:443
    \n-
    Pointer operator->() const
    Definition iteratorfacades.hh:506
    \n-
    D DifferenceType
    The type of the difference between two positions.
    Definition iteratorfacades.hh:493
    \n-
    DerivedType & operator--()
    Predecrement operator.
    Definition iteratorfacades.hh:551
    \n-
    DerivedType & operator-=(DifferenceType n)
    Definition iteratorfacades.hh:565
    \n-
    DerivedType operator+(DifferenceType n) const
    Definition iteratorfacades.hh:542
    \n-
    Reference operator[](DifferenceType n) const
    Get the element n positions from the current one.
    Definition iteratorfacades.hh:516
    \n-
    T DerivedType
    The type of derived iterator.
    Definition iteratorfacades.hh:478
    \n-
    V * Pointer
    The pointer to the Value.
    Definition iteratorfacades.hh:488
    \n-
    DerivedType operator-(DifferenceType n) const
    Definition iteratorfacades.hh:571
    \n-
    DerivedType operator++(int)
    Postincrement operator.
    Definition iteratorfacades.hh:529
    \n-
    V Value
    The type of value accessed through the iterator.
    Definition iteratorfacades.hh:483
    \n-
    DerivedType & operator+=(DifferenceType n)
    Definition iteratorfacades.hh:536
    \n-
    R Reference
    The type of the reference to the values accessed.
    Definition iteratorfacades.hh:498
    \n-
    Helper to mimic a pointer for proxy objects.
    Definition iteratorfacades.hh:750
    \n-
    constexpr ProxyArrowResult(const ProxyType &p) noexcept(std::is_nothrow_constructible_v< ProxyType, const ProxyType & >)
    Definition iteratorfacades.hh:757
    \n-
    constexpr ProxyType * operator->() noexcept
    Definition iteratorfacades.hh:767
    \n-
    constexpr const ProxyType * operator->() const noexcept
    Definition iteratorfacades.hh:762
    \n-
    constexpr ProxyArrowResult(ProxyType &&p) noexcept(std::is_nothrow_constructible_v< ProxyType, ProxyType && >)
    Definition iteratorfacades.hh:752
    \n-
    This class encapsulates access of IteratorFacade.
    Definition iteratorfacades.hh:786
    \n-
    CRTP-Mixing class for stl conformant iterators of given iterator category.
    Definition iteratorfacades.hh:1053
    \n-
    constexpr DerivedIterator operator--(int)
    Postdecrement operator.
    Definition iteratorfacades.hh:1192
    \n-
    D difference_type
    Definition iteratorfacades.hh:1086
    \n-
    C iterator_category
    Definition iteratorfacades.hh:1082
    \n-
    IteratorFacade()
    Definition iteratorfacades.hh:1095
    \n-
    constexpr pointer operator->() const
    Arrow access to members of referenced value.
    Definition iteratorfacades.hh:1129
    \n-
    pointer Pointer
    Definition iteratorfacades.hh:1091
    \n-
    reference Reference
    Definition iteratorfacades.hh:1090
    \n-
    constexpr DerivedIterator operator+(difference_type n) const
    Create iterator incremented by given value.
    Definition iteratorfacades.hh:1236
    \n-
    constexpr DerivedIterator operator++(int)
    Postincrement operator.
    Definition iteratorfacades.hh:1156
    \n-
    constexpr DerivedIterator & derived()
    Cast of *this to DerivedIterator type.
    Definition iteratorfacades.hh:1074
    \n-
    It DerivedIterator
    The derived iterator type.
    Definition iteratorfacades.hh:1065
    \n-
    constexpr DerivedIterator & operator-=(difference_type n)
    Decrement iterator by given value.
    Definition iteratorfacades.hh:1249
    \n-
    constexpr decltype(auto) operator--()
    Predecrement operator.
    Definition iteratorfacades.hh:1169
    \n-
    R reference
    Definition iteratorfacades.hh:1084
    \n-
    constexpr reference operator[](difference_type n) const
    Dereference element with given offset form this iterator.
    Definition iteratorfacades.hh:1207
    \n-
    constexpr const DerivedIterator & derived() const
    Cast of *this to const DerivedIterator type.
    Definition iteratorfacades.hh:1068
    \n-
    P pointer
    Definition iteratorfacades.hh:1085
    \n-
    typename std::remove_const< V >::type value_type
    Definition iteratorfacades.hh:1083
    \n-
    value_type Value
    Definition iteratorfacades.hh:1089
    \n-
    constexpr decltype(auto) operator++()
    Preincrement operator.
    Definition iteratorfacades.hh:1138
    \n-
    difference_type DifferenceType
    Definition iteratorfacades.hh:1092
    \n-
    constexpr DerivedIterator operator-(difference_type n) const
    Create iterator decremented by given value.
    Definition iteratorfacades.hh:1261
    \n-
    Enable typedef if two types are interoperable.
    Definition typetraits.hh:81
    \n-
    template which always yields a false value
    Definition typetraits.hh:124
    \n+
    T max_value(const AlignedNumber< T, align > &val)
    Definition debugalign.hh:494
    \n+
    T min_value(const AlignedNumber< T, align > &val)
    Definition debugalign.hh:500
    \n+
    Default exception class for range errors.
    Definition exceptions.hh:254
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1183 +1,527 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-iteratorfacades.hh\n+quadmath.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5#ifndef DUNE_ITERATORFACADES_HH\n-6#define DUNE_ITERATORFACADES_HH\n+5#ifndef DUNE_QUADMATH_HH\n+6#define DUNE_QUADMATH_HH\n 7\n-8#include \n-9#include \n+8#if HAVE_QUADMATH\n+9#include \n 10\n-11#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n-12#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\b._\bh_\bh>\n-13\n-14namespace _\bD_\bu_\bn_\be\n-15{\n-140 template\n-_\b1_\b4_\b1 class _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-142 {\n-143\n-144 public:\n-145 /* type aliases required by C++ for iterators */\n-_\b1_\b4_\b6 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by = std::forward_iterator_tag;\n-_\b1_\b4_\b7 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename std::remove_const::type;\n-_\b1_\b4_\b8 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = D;\n-_\b1_\b4_\b9 using _\bp_\bo_\bi_\bn_\bt_\be_\br = V*;\n-_\b1_\b5_\b0 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = R;\n-151\n-_\b1_\b7_\b6 typedef T _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be;\n-177\n-_\b1_\b8_\b1 typedef V _\bV_\ba_\bl_\bu_\be;\n-182\n-_\b1_\b8_\b6 typedef V* _\bP_\bo_\bi_\bn_\bt_\be_\br;\n-187\n-_\b1_\b9_\b1 typedef D _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be;\n-192\n-_\b1_\b9_\b6 typedef R _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-197\n-_\b1_\b9_\b9 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const\n-200 {\n-201 return static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const*>(this)->dereference();\n-202 }\n+11#include \n+12#include \n+13#include \n+14#include // abs\n+15#include \n+16#include \n+17#include \n+18#include \n+19\n+20#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+22\n+23namespace _\bD_\bu_\bn_\be\n+24{\n+25 namespace Impl\n+26 {\n+27 // forward declaration\n+28 class Float128;\n+29\n+30 } // end namespace Impl\n+31\n+32 using Impl::Float128;\n+33\n+34 // The purpose of this namespace is to move the `` function overloads\n+35 // out of namespace `Dune`, see AlignedNumber in debugalign.hh.\n+36 namespace Impl\n+37 {\n+38 using float128_t = __float128;\n+39\n+41 class Float128\n+42 {\n+43 float128_t value_ = 0.0q;\n+44\n+45 public:\n+46 constexpr Float128() = default;\n+47 constexpr Float128(const float128_t& value) noexcept\n+48 : value_(value)\n+49 {}\n+50\n+51 // constructor from any floating-point or integer type\n+52 template ::value, int> = 0>\n+54 constexpr Float128(const T& value) noexcept\n+55 : value_(value)\n+56 {}\n+57\n+58 // constructor from pointer to null-terminated byte string\n+59 explicit Float128(const char* str) noexcept\n+60 : value_(strtoflt128(str, NULL))\n+61 {}\n+62\n+63 // accessors\n+64 constexpr operator float128_t() const noexcept { return value_; }\n+65\n+66 constexpr float128_t const& value() const noexcept { return value_; }\n+67 constexpr float128_t& value() noexcept { return value_; }\n+68\n+69 // I/O\n+70 template\n+71 friend std::basic_istream&\n+72 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(std::basic_istream& in, Float128& x)\n+73 {\n+74 std::string buf;\n+75 buf.reserve(128);\n+76 in >> buf;\n+77 x.value() = strtoflt128(buf.c_str(), NULL);\n+78 return in;\n+79 }\n+80\n+81 template\n+82 friend std::basic_ostream&\n+83 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::basic_ostream& out, const Float128& x)\n+84 {\n+85 const std::size_t bufSize = 128;\n+86 CharT buf[128];\n+87\n+88 std::string format = \"%.\" + std::to_string(out.precision()) + \"Q\" +\n+89 ((out.flags() | std::ios_base::scientific) ? \"e\" : \"f\");\n+90 const int numChars = quadmath_snprintf(buf, bufSize, format.c_str(), x.value\n+());\n+91 if (std::size_t(numChars) >= bufSize) {\n+92 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be_\bE_\br_\br_\bo_\br, \"Failed to print Float128 value: buffer\n+overflow\");\n+93 }\n+94 out << buf;\n+95 return out;\n+96 }\n+97\n+98 // Increment, decrement\n+99 constexpr Float128& operator++() noexcept { ++value_; return *this; }\n+100 constexpr Float128& operator--() noexcept { --value_; return *this; }\n+101\n+102 constexpr Float128 operator++(int) noexcept { Float128 tmp{*this};\n+++value_; return tmp; }\n+103 constexpr Float128 operator--(int) noexcept { Float128 tmp{*this}; --\n+value_; return tmp; }\n+104\n+105 // unary operators\n+106 constexpr Float128 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+() const noexcept { return Float128{+value_}; }\n+107 constexpr Float128 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const noexcept { return Float128{-value_}; }\n+108\n+109 // assignment operators\n+110#define DUNE_ASSIGN_OP(OP) \\\n+111 constexpr Float128& operator OP(const Float128& u) noexcept \\\n+112 { \\\n+113 value_ OP float128_t(u); \\\n+114 return *this; \\\n+115 } \\\n+116 static_assert(true, \"Require semicolon to unconfuse editors\")\n+117\n+118 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(+=);\n+119 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(-=);\n+120\n+121 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(*=);\n+122 _\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP(/=);\n+123\n+124#undef DUNE_ASSIGN_OP\n+125\n+126 }; // end class Float128\n+127\n+128 // binary operators:\n+129 // For symmetry provide overloads with arithmetic types\n+130 // in the first or second argument.\n+131#define DUNE_BINARY_OP(OP) \\\n+132 constexpr Float128 operator OP(const Float128& t, \\\n+133 const Float128& u) noexcept \\\n+134 { \\\n+135 return Float128{float128_t(t) OP float128_t(u)}; \\\n+136 } \\\n+137 constexpr Float128 operator OP(const float128_t& t, \\\n+138 const Float128& u) noexcept \\\n+139 { \\\n+140 return Float128{t OP float128_t(u)}; \\\n+141 } \\\n+142 constexpr Float128 operator OP(const Float128& t, \\\n+143 const float128_t& u) noexcept \\\n+144 { \\\n+145 return Float128{float128_t(t) OP u}; \\\n+146 } \\\n+147 template ::value, int> = 0> \\\n+149 constexpr Float128 operator OP(const T& t, \\\n+150 const Float128& u) noexcept \\\n+151 { \\\n+152 return Float128{float128_t(t) OP float128_t(u)}; \\\n+153 } \\\n+154 template ::value, int> = 0> \\\n+156 constexpr Float128 operator OP(const Float128& t, \\\n+157 const U& u) noexcept \\\n+158 { \\\n+159 return Float128{float128_t(t) OP float128_t(u)}; \\\n+160 } \\\n+161 static_assert(true, \"Require semicolon to unconfuse editors\")\n+162\n+163 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(+);\n+164 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(-);\n+165 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(*);\n+166 _\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP(/);\n+167\n+168#undef DUNE_BINARY_OP\n+169\n+170 // logical operators:\n+171 // For symmetry provide overloads with arithmetic types\n+172 // in the first or second argument.\n+173#define DUNE_BINARY_BOOL_OP(OP) \\\n+174 constexpr bool operator OP(const Float128& t, \\\n+175 const Float128& u) noexcept \\\n+176 { \\\n+177 return float128_t(t) OP float128_t(u); \\\n+178 } \\\n+179 template ::value, int> = 0> \\\n+181 constexpr bool operator OP(const T& t, \\\n+182 const Float128& u) noexcept \\\n+183 { \\\n+184 return float128_t(t) OP float128_t(u); \\\n+185 } \\\n+186 template ::value, int> = 0> \\\n+188 constexpr bool operator OP(const Float128& t, \\\n+189 const U& u) noexcept \\\n+190 { \\\n+191 return float128_t(t) OP float128_t(u); \\\n+192 } \\\n+193 static_assert(true, \"Require semicolon to unconfuse editors\")\n+194\n+195 DUNE_BINARY_BOOL_OP(==);\n+196 DUNE_BINARY_BOOL_OP(!=);\n+197 DUNE_BINARY_BOOL_OP(<);\n+198 DUNE_BINARY_BOOL_OP(>);\n+199 DUNE_BINARY_BOOL_OP(<=);\n+200 DUNE_BINARY_BOOL_OP(>=);\n+201\n+202#undef DUNE_BINARY_BOOL_OP\n 203\n-_\b2_\b0_\b4 _\bP_\bo_\bi_\bn_\bt_\be_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const\n-205 {\n-206 return &(static_cast(this)->dereference());\n-207 }\n-208\n-_\b2_\b1_\b0 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+()\n-211 {\n-212 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->increment();\n-213 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-214 }\n-215\n-_\b2_\b1_\b7 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+(int)\n-218 {\n-219 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-220 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+();\n-221 return tmp;\n-222 }\n-223 };\n-224\n-235 template\n-237 inline typename EnableIfInterOperable::type\n-_\b2_\b3_\b8 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-239 const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-240 {\n-241 if(std::is_convertible::value)\n-242 return static_cast(lhs).equals(static_cast(rhs));\n-243 else\n-244 return static_cast(rhs).equals(static_cast(lhs));\n-245 }\n-246\n-257 template\n-259 inline typename EnableIfInterOperable::type\n-_\b2_\b6_\b0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-261 const _\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-262 {\n-263 if(std::is_convertible::value)\n-264 return !static_cast(lhs).equals(static_cast(rhs));\n-265 else\n-266 return !static_cast(rhs).equals(static_cast(lhs));\n-267 }\n-268\n-273 template\n-_\b2_\b7_\b4 class _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-275 {\n+204 // Overloads for the cmath functions\n+205\n+206 // function with name `name` redirects to quadmath function `func`\n+207#define DUNE_UNARY_FUNC(name,func) \\\n+208 inline Float128 name(const Float128& u) noexcept \\\n+209 { \\\n+210 return Float128{func (float128_t(u))}; \\\n+211 } \\\n+212 static_assert(true, \"Require semicolon to unconfuse editors\")\n+213\n+214 // like DUNE_UNARY_FUNC but with custom return type\n+215#define DUNE_CUSTOM_UNARY_FUNC(type,name,func) \\\n+216 inline type name(const Float128& u) noexcept \\\n+217 { \\\n+218 return (type)(func (float128_t(u))); \\\n+219 } \\\n+220 static_assert(true, \"Require semicolon to unconfuse editors\")\n+221\n+222 // redirects to quadmath function with two arguments\n+223#define DUNE_BINARY_FUNC(name,func) \\\n+224 inline Float128 name(const Float128& t, \\\n+225 const Float128& u) noexcept \\\n+226 { \\\n+227 return Float128{func (float128_t(t), float128_t(u))}; \\\n+228 } \\\n+229 static_assert(true, \"Require semicolon to unconfuse editors\")\n+230\n+231 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(abs, fabsq);\n+232 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(acos, acosq);\n+233 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(acosh, acoshq);\n+234 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(asin, asinq);\n+235 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(asinh, asinhq);\n+236 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(atan, atanq);\n+237 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(atanh, atanhq);\n+238 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cbrt, cbrtq);\n+239 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(ceil, ceilq);\n+240 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cos, cosq);\n+241 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(cosh, coshq);\n+242 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(erf, erfq);\n+243 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(erfc, erfcq);\n+244 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(exp, expq);\n+245 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(expm1, expm1q);\n+246 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(fabs, fabsq);\n+247 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(floor, floorq);\n+248 DUNE_CUSTOM_UNARY_FUNC(int, ilogb, ilogbq);\n+249 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(lgamma, lgammaq);\n+250 DUNE_CUSTOM_UNARY_FUNC(long long int, llrint, llrintq);\n+251 DUNE_CUSTOM_UNARY_FUNC(long long int, llround, llroundq);\n+252 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log, logq);\n+253 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log10, log10q);\n+254 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log1p, log1pq);\n+255 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(log2, log2q);\n+256 // DUNE_UNARY_FUNC(logb, logbq); // not available in gcc5\n+257 DUNE_CUSTOM_UNARY_FUNC(long int, lrint, lrintq);\n+258 DUNE_CUSTOM_UNARY_FUNC(long int, lround, lroundq);\n+259 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(nearbyint, nearbyintq);\n+260 DUNE_BINARY_FUNC(nextafter, nextafterq);\n+261 DUNE_BINARY_FUNC(pow, powq); // overload for integer argument see below\n+262 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(rint, rintq);\n+263 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(round, roundq);\n+264 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sin, sinq);\n+265 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sinh, sinhq);\n+266 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(sqrt, sqrtq);\n+267 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tan, tanq);\n+268 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tanh, tanhq);\n+269 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(tgamma, tgammaq);\n+270 _\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC(trunc, truncq);\n+271\n+272 DUNE_CUSTOM_UNARY_FUNC(bool, isfinite, finiteq);\n+273 DUNE_CUSTOM_UNARY_FUNC(bool, isinf, isinfq);\n+274 DUNE_CUSTOM_UNARY_FUNC(bool, isnan, isnanq);\n+275 DUNE_CUSTOM_UNARY_FUNC(bool, signbit, signbitq);\n 276\n-277 public:\n-278 /* type aliases required by C++ for iterators */\n-_\b2_\b7_\b9 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by = std::bidirectional_iterator_tag;\n-_\b2_\b8_\b0 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename std::remove_const::type;\n-_\b2_\b8_\b1 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = D;\n-_\b2_\b8_\b2 using _\bp_\bo_\bi_\bn_\bt_\be_\br = V*;\n-_\b2_\b8_\b3 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = R;\n-284\n-_\b3_\b1_\b0 typedef T _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be;\n-311\n-_\b3_\b1_\b5 typedef V _\bV_\ba_\bl_\bu_\be;\n-316\n-_\b3_\b2_\b0 typedef V* _\bP_\bo_\bi_\bn_\bt_\be_\br;\n-321\n-_\b3_\b2_\b5 typedef D _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be;\n-326\n-_\b3_\b3_\b0 typedef R _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-331\n-_\b3_\b3_\b3 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const\n+277#undef DUNE_UNARY_FUNC\n+278#undef DUNE_CUSTOM_UNARY_FUNC\n+279#undef DUNE_BINARY_FUNC\n+280\n+281 // like DUNE_BINARY_FUNC but provide overloads with arithmetic\n+282 // types in the first or second argument.\n+283#define DUNE_BINARY_ARITHMETIC_FUNC(name,func) \\\n+284 inline Float128 name(const Float128& t, \\\n+285 const Float128& u) noexcept \\\n+286 { \\\n+287 return Float128{func (float128_t(t), float128_t(u))}; \\\n+288 } \\\n+289 template ::value, int> = 0> \\\n+291 inline Float128 name(const T& t, \\\n+292 const Float128& u) noexcept \\\n+293 { \\\n+294 return Float128{func (float128_t(t), float128_t(u))}; \\\n+295 } \\\n+296 template ::value, int> = 0> \\\n+298 inline Float128 name(const Float128& t, \\\n+299 const U& u) noexcept \\\n+300 { \\\n+301 return Float128{func (float128_t(t), float128_t(u))}; \\\n+302 } \\\n+303 static_assert(true, \"Require semicolon to unconfuse editors\")\n+304\n+305 DUNE_BINARY_ARITHMETIC_FUNC(atan2,atan2q);\n+306 DUNE_BINARY_ARITHMETIC_FUNC(copysign,copysignq);\n+307 DUNE_BINARY_ARITHMETIC_FUNC(fdim,fdimq);\n+308 DUNE_BINARY_ARITHMETIC_FUNC(fmax,fmaxq);\n+309 DUNE_BINARY_ARITHMETIC_FUNC(fmin,fminq);\n+310 DUNE_BINARY_ARITHMETIC_FUNC(fmod,fmodq);\n+311 DUNE_BINARY_ARITHMETIC_FUNC(hypot,hypotq);\n+312 DUNE_BINARY_ARITHMETIC_FUNC(remainder,remainderq);\n+313\n+314#undef DUNE_BINARY_ARITHMETIC_FUNC\n+315\n+316 // some more cmath functions with special signature\n+317\n+318 inline Float128 fma(const Float128& t, const Float128& u, const Float128&\n+v)\n+319 {\n+320 return Float128{fmaq(float128_t(t),float128_t(u),float128_t(v))};\n+321 }\n+322\n+323 inline Float128 frexp(const Float128& u, int* p)\n+324 {\n+325 return Float128{frexpq(float128_t(u), p)};\n+326 }\n+327\n+328 inline Float128 ldexp(const Float128& u, int p)\n+329 {\n+330 return Float128{ldexpq(float128_t(u), p)};\n+331 }\n+332\n+333 inline Float128 remquo(const Float128& t, const Float128& u, int* quo)\n 334 {\n-335 return static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const*>(this)->dereference();\n+335 return Float128{remquoq(float128_t(t), float128_t(u), quo)};\n 336 }\n 337\n-_\b3_\b3_\b8 _\bP_\bo_\bi_\bn_\bt_\be_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const\n+338 inline Float128 scalbln(const Float128& u, long int e)\n 339 {\n-340 return &(static_cast(this)->dereference());\n+340 return Float128{scalblnq(float128_t(u), e)};\n 341 }\n 342\n-_\b3_\b4_\b4 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+()\n-345 {\n-346 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->increment();\n-347 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-348 }\n-349\n-_\b3_\b5_\b1 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+(int)\n-352 {\n-353 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-354 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+();\n-355 return tmp;\n-356 }\n-357\n-358\n-_\b3_\b6_\b0 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-()\n-361 {\n-362 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->decrement();\n-363 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-364 }\n-365\n-_\b3_\b6_\b7 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-(int)\n-368 {\n-369 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-370 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-();\n-371 return tmp;\n-372 }\n-373 };\n-374\n-382 template\n-384 inline typename std::enable_if::value,bool>::\n-type\n-_\b3_\b8_\b5 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-386 const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-387 {\n-388 return static_cast(lhs).equals(static_cast(rhs));\n-389 }\n-390\n-399 template\n-401 inline\n-402 typename std::enable_if::value && !std::\n-is_convertible::value,\n-403 bool>::type\n-_\b4_\b0_\b4 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-405 const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-406 {\n-407 return static_cast(rhs).equals(static_cast(lhs));\n-408 }\n-409\n-420 template\n-422 inline typename EnableIfInterOperable::type\n-_\b4_\b2_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-424 const _\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-425 {\n-426 return !(lhs == rhs);\n-427 }\n-428\n-433 template\n-_\b4_\b3_\b4 class _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-435 {\n-436\n-437 public:\n-438 /* type aliases required by C++ for iterators */\n-_\b4_\b3_\b9 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by = std::random_access_iterator_tag;\n-_\b4_\b4_\b0 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename std::remove_const::type;\n-_\b4_\b4_\b1 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = D;\n-_\b4_\b4_\b2 using _\bp_\bo_\bi_\bn_\bt_\be_\br = V*;\n-_\b4_\b4_\b3 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = R;\n-444\n-_\b4_\b7_\b8 typedef T _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be;\n-479\n-_\b4_\b8_\b3 typedef V _\bV_\ba_\bl_\bu_\be;\n-484\n-_\b4_\b8_\b8 typedef V* _\bP_\bo_\bi_\bn_\bt_\be_\br;\n-489\n-_\b4_\b9_\b3 typedef D _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be;\n-494\n-_\b4_\b9_\b8 typedef R _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-499\n-_\b5_\b0_\b1 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const\n-502 {\n-503 return static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const*>(this)->dereference();\n-504 }\n-505\n-_\b5_\b0_\b6 _\bP_\bo_\bi_\bn_\bt_\be_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const\n-507 {\n-508 return &(static_cast(this)->dereference());\n-509 }\n-510\n-_\b5_\b1_\b6 _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n) const\n-517 {\n-518 return static_cast(this)->elementAt(n);\n-519 }\n-520\n-_\b5_\b2_\b2 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+()\n-523 {\n-524 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->increment();\n-525 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-526 }\n-527\n-_\b5_\b2_\b9 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+(int)\n-530 {\n-531 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-532 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+();\n-533 return tmp;\n-534 }\n-535\n-_\b5_\b3_\b6 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n)\n-537 {\n-538 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->advance(n);\n-539 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-540 }\n-541\n-_\b5_\b4_\b2 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n) const\n-543 {\n-544 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-545 tmp.advance(n);\n-546 return tmp;\n-547 }\n-548\n-549\n-_\b5_\b5_\b1 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-()\n-552 {\n-553 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->decrement();\n-554 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-555 }\n-556\n-_\b5_\b5_\b8 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-(int)\n-559 {\n-560 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-561 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-();\n-562 return tmp;\n-563 }\n-564\n-_\b5_\b6_\b5 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n)\n-566 {\n-567 static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this)->advance(-n);\n-568 return *static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be *>(this);\n-569 }\n-570\n-_\b5_\b7_\b1 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be n) const\n-572 {\n-573 _\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be tmp(static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be const&>(*this));\n-574 tmp.advance(-n);\n-575 return tmp;\n-576 }\n-577\n-578\n-579 };\n-580\n-591 template\n-593 inline typename EnableIfInterOperable::type\n-_\b5_\b9_\b4 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-595 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-596 {\n-597 if(std::is_convertible::value)\n-598 return static_cast(lhs).equals(static_cast(rhs));\n-599 else\n-600 return static_cast(rhs).equals(static_cast(lhs));\n-601 }\n-602\n-613 template\n-615 inline typename EnableIfInterOperable::type\n-_\b6_\b1_\b6 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-617 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-618 {\n-619 if(std::is_convertible::value)\n-620 return !static_cast(lhs).equals(static_cast(rhs));\n-621 else\n-622 return !static_cast(rhs).equals(static_cast(lhs));\n-623 }\n-624\n-635 template\n-_\b6_\b3_\b7 inline typename _\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be_\b<_\bT_\b1_\b,_\bT_\b2_\b,_\bb_\bo_\bo_\bl_\b>_\b:_\b:_\bt_\by_\bp_\be\n-638 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-639 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-640 {\n-641 if(std::is_convertible::value)\n-642 return static_cast(lhs).distanceTo(static_cast\n-(rhs))>0;\n-643 else\n-644 return static_cast(rhs).distanceTo(static_cast\n-(lhs))<0;\n-645 }\n-646\n-647\n-658 template\n-_\b6_\b6_\b0 inline typename _\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be_\b<_\bT_\b1_\b,_\bT_\b2_\b,_\bb_\bo_\bo_\bl_\b>_\b:_\b:_\bt_\by_\bp_\be\n-661 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-662 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-663 {\n-664 if(std::is_convertible::value)\n-665 return static_cast(lhs).distanceTo(static_cast\n-(rhs))>=0;\n-666 else\n-667 return static_cast(rhs).distanceTo(static_cast\n-(lhs))<=0;\n-668 }\n-669\n-670\n-681 template\n-683 inline typename EnableIfInterOperable::type\n-_\b6_\b8_\b4 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-685 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-686 {\n-687 if(std::is_convertible::value)\n-688 return static_cast(lhs).distanceTo(static_cast\n-(rhs))<0;\n-689 else\n-690 return static_cast(rhs).distanceTo(static_cast\n-(lhs))>0;\n-691 }\n-692\n-703 template\n-705 inline typename EnableIfInterOperable::type\n-_\b7_\b0_\b6 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-707 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-708 {\n-709 if(std::is_convertible::value)\n-710 return static_cast(lhs).distanceTo(static_cast\n-(rhs))<=0;\n-711 else\n-712 return static_cast(rhs).distanceTo(static_cast\n-(lhs))>=0;\n-713 }\n-714\n-725 template\n-727 inline typename EnableIfInterOperable::type\n-_\b7_\b2_\b8 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bD_\b>& lhs,\n-729 const _\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bD_\b>& rhs)\n-730 {\n-731 if(std::is_convertible::value)\n-732 return -static_cast(lhs).distanceTo(static_cast\n-(rhs));\n-733 else\n-734 return static_cast(rhs).distanceTo(static_cast(lhs));\n-735 }\n-736\n-737\n-748 template\n-_\b7_\b4_\b9 class _\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt\n-750 {\n-751 public:\n-_\b7_\b5_\b2 constexpr _\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt(ProxyType&& p)\n-753 noexcept(std::is_nothrow_constructible_v)\n-754 : p_(_\bs_\bt_\bd::move(p))\n-755 {}\n-756\n-_\b7_\b5_\b7 constexpr _\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt(const ProxyType& p)\n-758 noexcept(std::is_nothrow_constructible_v)\n-759 : p_(p)\n-760 {}\n-761\n-_\b7_\b6_\b2 constexpr const ProxyType* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const noexcept\n-763 {\n-764 return &p_;\n-765 }\n-766\n-_\b7_\b6_\b7 constexpr ProxyType* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() noexcept\n-768 {\n-769 return &p_;\n-770 }\n-771\n-772 private:\n-773 ProxyType p_;\n-774 };\n-775\n-776\n-_\b7_\b8_\b5 struct _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\bA_\bc_\bc_\be_\bs_\bs\n-786 {\n-787\n-789 template\n-790 static constexpr auto baseIterator(It&& it) noexcept\n-791 -> decltype(it.baseIterator())\n-792 {\n-793 return it.baseIterator();\n-794 }\n-795\n-797 template\n-798 static constexpr auto derived(It&& it) noexcept\n-799 -> decltype(it.derived())\n-800 {\n-801 return it.derived();\n-802 }\n-803\n-804 };\n-805\n-806\n-807\n-808 namespace Impl::Concepts {\n-809\n-810 using namespace _\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt;\n-811\n-812 template\n-813 struct BaseIterDereferenceOp\n-814 {\n-815 template\n-816 auto require(const It& it) -> decltype(\n-817 *(IteratorFacadeAccess::baseIterator(it)),\n-818 _\br_\be_\bq_\bu_\bi_\br_\be_\bC_\bo_\bn_\bv_\be_\br_\bt_\bi_\bb_\bl_\be\n-()\n-819 );\n-820 };\n-821\n-822 struct IterEqualsOp\n-823 {\n-824 template\n-825 auto require(const It1& it1, const It2& it2) -> decltype(\n-826 requireConvertible(it1 == it2)\n-827 );\n-828 };\n-829\n-830 struct BaseIterEqualsOp\n-831 {\n-832 template\n-833 auto require(const It1& it1, const It2& it2) -> decltype(\n-834 Dune::Concept::requireConvertible(IteratorFacadeAccess::baseIterator\n-(it1) == IteratorFacadeAccess::baseIterator(it2))\n-835 );\n-836 };\n-837\n-838 struct BaseIterIncrementOp\n-839 {\n-840 template\n-841 auto require(It it) -> decltype(\n-842 ++(IteratorFacadeAccess::baseIterator(it))\n-843 );\n-844 };\n-845\n-846 struct BaseIterDecrementOp\n-847 {\n-848 template\n-849 auto require(It it) -> decltype(\n-850 --(IteratorFacadeAccess::baseIterator(it))\n-851 );\n-852 };\n-853\n-854 template\n-855 struct IterAdvanceOp\n-856 {\n-857 template\n-858 auto require(It it) -> decltype(\n-859 it += std::declval()\n-860 );\n-861 };\n-862\n-863 template\n-864 struct BaseIterAdvanceOp\n-865 {\n-866 template\n-867 auto require(It it) -> decltype(\n-868 IteratorFacadeAccess::baseIterator(it) += std::declval()\n-869 );\n-870 };\n-871\n-872 template\n-873 struct IterDistanceOp\n-874 {\n-875 template\n-876 auto require(const It1& it1, const It2& it2) -> decltype(\n-877 Dune::Concept::requireConvertible(it1 - it2)\n-878 );\n-879 };\n-880\n-881 template\n-882 struct BaseIterDistanceOp\n-883 {\n-884 template\n-885 auto require(const It1& it1, const It2& it2) -> decltype(\n-886 Dune::Concept::requireConvertible(IteratorFacadeAccess::baseIterator\n-(it1) - IteratorFacadeAccess::baseIterator(it2))\n-887 );\n-888 };\n-889\n-890 } // namespace Impl::Concept\n-891\n-892\n-893\n-1051 template\n-_\b1_\b0_\b5_\b2 class _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-1053 {\n-1054 static constexpr bool isBidirectional = std::is_convertible_v;\n-1055 static constexpr bool isRandomAccess = std::is_convertible_v;\n-1056\n-1057 // We make IteratorFacadeAccess a friend to allow forwarding of the\n-derived()\n-1058 // methods to the free operators instead of havin to do raw casts there.\n-1059 // This allows to encapsulate all casts within IteratorFacade itself.\n-1060 friend _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\bA_\bc_\bc_\be_\bs_\bs;\n-1061\n-1062 protected:\n-1063\n-_\b1_\b0_\b6_\b5 using _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br = It;\n-1066\n-_\b1_\b0_\b6_\b8 constexpr const _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& _\bd_\be_\br_\bi_\bv_\be_\bd() const\n-1069 {\n-1070 return static_cast(*this);\n-1071 }\n-1072\n-_\b1_\b0_\b7_\b4 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& _\bd_\be_\br_\bi_\bv_\be_\bd()\n-1075 {\n-1076 return static_cast<_\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br&>(*this);\n-1077 }\n-1078\n-1079 public:\n-1080\n-1081 // Standard types of of C++ iterators\n-_\b1_\b0_\b8_\b2 using _\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by = C;\n-_\b1_\b0_\b8_\b3 using _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be = typename std::remove_const::type;\n-_\b1_\b0_\b8_\b4 using _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be = R;\n-_\b1_\b0_\b8_\b5 using _\bp_\bo_\bi_\bn_\bt_\be_\br = P;\n-_\b1_\b0_\b8_\b6 using _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be = D;\n-1087\n-1088 // Corresponding Dune typedefs\n-_\b1_\b0_\b8_\b9 using _\bV_\ba_\bl_\bu_\be = _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b1_\b0_\b9_\b0 using _\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be = _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b1_\b0_\b9_\b1 using _\bP_\bo_\bi_\bn_\bt_\be_\br = _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-_\b1_\b0_\b9_\b2 using _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be = _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n-1093\n-1094 // Only defined to do static assertions.\n-_\b1_\b0_\b9_\b5 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be()\n-1096 {\n-1097 static_assert(std::is_signed_v,\n-1098 \"Type used as difference_type must be signed\");\n-1099 const _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& constDerived = _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1100 static_assert(std::is_convertible_v,\n-1101 \"Derived class does not implement `*it` or `*(it.baseIterator())` for\n-const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.\");\n-1102 static_assert(std::is_convertible_v,\n-1103 \"Derived class does not implement `++it`, `++(it.baseIterator())`, or\n-`it+=1` for mutable `it` required by IteratorFacade<..., std::\n-forward_iterator_tag, ...>.\");\n-1104 static_assert(std::is_convertible_v,\n-1105 \"Derived class does not implement `it1==it2` or `it1.baseIterator\n-()==it2.baseIterator()` for const `it1` and `it2` required by\n-IteratorFacade<..., std::forward_iterator_tag, ...>.\");\n-1106 if constexpr (isBidirectional)\n-1107 static_assert(std::is_convertible_v,\n-1108 \"Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-\n-=1` for mutable `it` required by IteratorFacade<..., std::\n-bidirectional_iterator_tag, ...>.\");\n-1109 if constexpr (isRandomAccess)\n-1110 {\n-1111 static_assert(std::is_convertible_v()), _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br&>,\n-1112 \"Derived class does not implement `it+=` or `it.baseIterator()+=` for\n-mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag,\n-...>.\");\n-1113 static_assert(std::is_convertible_v,\n-1114 \"Derived class does not implement `it1-it2` or `it1.baseIterator()-\n-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<...,\n-std::random_access_iterator_tag, ...>.\");\n-1115 }\n-1116 }\n-1117\n-_\b1_\b1_\b1_\b9 constexpr decltype(auto) operator*() const\n-1120 {\n-1121 if constexpr (Dune::models, _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br>())\n-1122 return *(IteratorFacadeAccess::baseIterator(_\bd_\be_\br_\bi_\bv_\be_\bd()));\n-1123 else\n-1124 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bI_\bt_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1125 \"Derived class does not implement `*it` or `*(it.baseIterator())` for\n-const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.\");\n-1126 }\n-1127\n-_\b1_\b1_\b2_\b9 constexpr _\bp_\bo_\bi_\bn_\bt_\be_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() const\n-1130 {\n-1131 if constexpr (std::is_pointer_v)\n-1132 return std::addressof(*_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1133 else\n-1134 return _\bp_\bo_\bi_\bn_\bt_\be_\br(*_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1135 }\n-1136\n-_\b1_\b1_\b3_\b8 constexpr decltype(auto) operator++()\n-1139 {\n-1140 if constexpr (Dune::models())\n-1141 {\n-1142 ++(IteratorFacadeAccess::baseIterator(_\bd_\be_\br_\bi_\bv_\be_\bd()));\n-1143 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1144 }\n-1145 else if constexpr (Dune::models, _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br>())\n-1146 {\n-1147 _\bd_\be_\br_\bi_\bv_\be_\bd() += 1;\n-1148 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1149 }\n-1150 else\n-1151 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bI_\bt_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1152 \"Derived class does not implement `++it`, `++(it.baseIterator())`, or\n-`it+=1` for mutable `it` required by IteratorFacade<..., std::\n-forward_iterator_tag, ...>.\");\n-1153 }\n-1154\n-_\b1_\b1_\b5_\b6 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+(int)\n-1157 {\n-1158 _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1159 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+();\n-1160 return tmp;\n-1161 }\n-1162\n-1168 template\n-=0>\n-_\b1_\b1_\b6_\b9 constexpr decltype(auto) operator--()\n-1170 {\n-1171 if constexpr (Dune::models())\n-1172 {\n-1173 --(IteratorFacadeAccess::baseIterator(_\bd_\be_\br_\bi_\bv_\be_\bd()));\n-1174 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1175 }\n-1176 else if constexpr (Dune::models, _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br>())\n-1177 {\n-1178 _\bd_\be_\br_\bi_\bv_\be_\bd() -= 1;\n-1179 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1180 }\n-1181 else\n-1182 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bI_\bt_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1183 \"Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-\n-=1` for mutable `it` required by IteratorFacade<..., std::\n-bidirectional_iterator_tag, ...>.\");\n-1184 }\n-1185\n-1191 template\n-=0>\n-_\b1_\b1_\b9_\b2 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-(int)\n-1193 {\n-1194 _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1195 this->_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-();\n-1196 return tmp;\n-1197 }\n-1198\n-1206 template\n-=0>\n-_\b1_\b2_\b0_\b7 constexpr _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be n) const\n-1208 {\n-1209 return *(_\bd_\be_\br_\bi_\bv_\be_\bd()+n);\n-1210 }\n-1211\n-1217 template\n-=0>\n-_\b1_\b2_\b1_\b8 constexpr decltype(auto) operator+=(_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be n)\n-1219 {\n-1220 if constexpr (Dune::models, _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br>())\n-1221 {\n-1222 IteratorFacadeAccess::baseIterator(_\bd_\be_\br_\bi_\bv_\be_\bd()) += n;\n-1223 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1224 }\n-1225 else\n-1226 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bI_\bt_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1227 \"Derived class does not implement `it+=` or `it.baseIterator()+=` for\n-mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag,\n-...>.\");\n-1228 }\n-1229\n-1235 template\n-=0>\n-_\b1_\b2_\b3_\b6 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be n) const\n-1237 {\n-1238 _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1239 tmp += n;\n-1240 return tmp;\n-1241 }\n-1242\n-1248 template\n-=0>\n-_\b1_\b2_\b4_\b9 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=(_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be n)\n-1250 {\n-1251 _\bd_\be_\br_\bi_\bv_\be_\bd() += (-n);\n-1252 return _\bd_\be_\br_\bi_\bv_\be_\bd();\n-1253 }\n-1254\n-1260 template\n-=0>\n-_\b1_\b2_\b6_\b1 constexpr _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be n) const\n-1262 {\n-1263 _\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br tmp(_\bd_\be_\br_\bi_\bv_\be_\bd());\n-1264 tmp -= n;\n-1265 return tmp;\n-1266 }\n-1267\n-1268 };\n-1269\n-1270\n-1271\n-1282 template\n-_\b1_\b2_\b8_\b3 constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1284 {\n-1285 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1286 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1287 if constexpr (Dune::models())\n-1288 return IteratorFacadeAccess::baseIterator(derivedIt1) ==\n-IteratorFacadeAccess::baseIterator(derivedIt2);\n-1289 else\n-1290 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bT_\b1_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1291 \"Derived class does not implement `it1==it2` or `it1.baseIterator\n-()==it2.baseIterator()` for const `it1` and `it2` required by\n-IteratorFacade<..., std::forward_iterator_tag, ...>.\");\n-1292 }\n-1293\n-1301 template() ,\n-int> =0>\n-_\b1_\b3_\b0_\b3 constexpr bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1304 {\n-1305 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1306 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1307 return not(derivedIt1 == derivedIt2);\n-1308 }\n-1309\n-1320 template\n-_\b1_\b3_\b2_\b1 constexpr auto _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b>& it1, const\n-_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b>& it2)\n-1322 {\n-1323 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1324 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1325 if constexpr (Dune::models,T1, T2>\n-())\n-1326 return D(IteratorFacadeAccess::baseIterator(derivedIt1) -\n-IteratorFacadeAccess::baseIterator(derivedIt2));\n-1327 else\n-1328 static_assert(_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be_\b<_\bT_\b1_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be,\n-1329 \"Derived class does not implement `it1-it2` or `it1.baseIterator()-\n-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<...,\n-std::random_access_iterator_tag, ...>.\");\n-1330 }\n-1331\n-1339 template,T1, T2>\n-() , int> =0>\n-_\b1_\b3_\b4_\b1 constexpr bool operator<(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1342 {\n-1343 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1344 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1345 return (derivedIt1 - derivedIt2) < D1(0);\n-1346 }\n-1347\n-1355 template,T1, T2>\n-() , int> =0>\n-_\b1_\b3_\b5_\b7 constexpr bool operator<=(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1358 {\n-1359 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1360 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1361 return (derivedIt1 - derivedIt2) <= D1(0);\n-1362 }\n-1363\n-1371 template,T1, T2>\n-() , int> =0>\n-_\b1_\b3_\b7_\b3 constexpr bool operator>(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1374 {\n-1375 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1376 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1377 return (derivedIt1 - derivedIt2) > D1(0);\n-1378 }\n-1379\n-1387 template,T1, T2>\n-() , int> =0>\n-_\b1_\b3_\b8_\b9 constexpr bool operator>=(const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b1_\b,_\bC_\b,_\bV_\b1_\b,_\bR_\b1_\b,_\bP_\b1_\b,_\bD_\b1_\b>& it1,\n-const _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b<_\bT_\b2_\b,_\bC_\b,_\bV_\b2_\b,_\bR_\b2_\b,_\bP_\b2_\b,_\bD_\b2_\b>& it2)\n-1390 {\n-1391 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);\n-1392 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);\n-1393 return (derivedIt1 - derivedIt2) >= D1(0);\n-1394 }\n-1395\n-1396\n-1397\n-1399}\n-1400#endif\n+343 inline Float128 scalbn(const Float128& u, int e)\n+344 {\n+345 return Float128{scalbnq(float128_t(u), e)};\n+346 }\n+347\n+349 // NOTE: This is much faster than a pow(x, Float128(p)) call\n+350 // NOTE: This is a modified version of boost::math::cstdfloat::detail::pown\n+351 // (adapted to the type Float128) that is part of the Boost 1.65 Math\n+toolkit 2.8.0\n+352 // and is implemented by Christopher Kormanyos, John Maddock, and Paul A.\n+Bristow,\n+353 // distributed under the Boost Software License, Version 1.0\n+354 // (See http://www.boost.org/LICENSE_1_0.txt)\n+355 template ::value, int> = 0>\n+357 inline Float128 pow(const Float128& x, const Int p)\n+358 {\n+359 static const Float128 _\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be = FLT128_MAX;\n+360 static const Float128 _\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be = FLT128_MIN;\n+361 static const Float128 inf_value = float128_t{1} / float128_t{0};\n+362\n+363 const bool isneg = (x < 0);\n+364 const bool isnan = (x != x);\n+365 const bool isinf = (isneg ? bool(-x > _\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be) : bool(+x > _\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be));\n+366\n+367 if (isnan) { return x; }\n+368 if (isinf) { return Float128{nanq(\"\")}; }\n+369\n+370 const Float128 abs_x = (isneg ? -x : x);\n+371 if (p < Int(0)) {\n+372 if (abs_x < _\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be)\n+373 return (isneg ? -inf_value : +inf_value);\n+374 else\n+375 return Float128(1) / pow(x, Int(-p));\n+376 }\n+377\n+378 if (p == Int(0)) { return Float128(1); }\n+379 if (p == Int(1)) { return x; }\n+380 if (abs_x > _\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be)\n+381 return (isneg ? -inf_value : +inf_value);\n+382\n+383 if (p == Int(2)) { return (x * x); }\n+384 if (p == Int(3)) { return ((x * x) * x); }\n+385 if (p == Int(4)) { const Float128 x2 = (x * x); return (x2 * x2); }\n+386\n+387 Float128 result = ((p % Int(2)) != Int(0)) ? x : Float128(1);\n+388 Float128 xn = x; // binary powers of x\n+389\n+390 Int p2 = p;\n+391 while (Int(p2 /= 2) != Int(0)) {\n+392 xn *= xn; // Square xn for each binary power\n+393\n+394 const bool has_binary_power = (Int(p2 % Int(2)) != Int(0));\n+395 if (has_binary_power)\n+396 result *= xn;\n+397 }\n+398\n+399 return result;\n+400 }\n+401\n+402\n+403 } // end namespace Impl\n+404\n+405 template <>\n+406 struct IsNumber\n+407 : public std::true_type {};\n+408\n+409} // end namespace Dune\n+410\n+411namespace _\bs_\bt_\bd\n+412{\n+413#ifndef NO_STD_NUMERIC_LIMITS_SPECIALIZATION\n+414 template <>\n+415 class numeric_limits<_\bD_\bu_\bn_\be::Impl::Float128>\n+416 {\n+417 using Float128 = Dune::Impl::Float128;\n+418 using float128_t = Dune::Impl::float128_t;\n+419\n+420 public:\n+421 static constexpr bool is_specialized = true;\n+422 static constexpr Float128 _\bm_\bi_\bn() noexcept { return FLT128_MIN; }\n+423 static constexpr Float128 _\bm_\ba_\bx() noexcept { return FLT128_MAX; }\n+424 static constexpr Float128 lowest() noexcept { return -FLT128_MAX; }\n+425 static constexpr int digits = FLT128_MANT_DIG;\n+426 static constexpr int digits10 = 34;\n+427 static constexpr int max_digits10 = 36;\n+428 static constexpr bool is_signed = true;\n+429 static constexpr bool is_integer = false;\n+430 static constexpr bool is_exact = false;\n+431 static constexpr int radix = 2;\n+432 static constexpr Float128 epsilon() noexcept { return FLT128_EPSILON; }\n+433 static constexpr Float128 round_error() noexcept { return float128_t{0.5};\n+}\n+434 static constexpr int min_exponent = FLT128_MIN_EXP;\n+435 static constexpr int min_exponent10 = FLT128_MIN_10_EXP;\n+436 static constexpr int max_exponent = FLT128_MAX_EXP;\n+437 static constexpr int max_exponent10 = FLT128_MAX_10_EXP;\n+438 static constexpr bool has_infinity = true;\n+439 static constexpr bool has_quiet_NaN = true;\n+440 static constexpr bool has_signaling_NaN = false;\n+441 static constexpr float_denorm_style has_denorm = denorm_present;\n+442 static constexpr bool has_denorm_loss = false;\n+443 static constexpr Float128 infinity() noexcept { return float128_t{1}/\n+float128_t{0}; }\n+444 static Float128 quiet_NaN() noexcept { return nanq(\"\"); }\n+445 static constexpr Float128 signaling_NaN() noexcept { return float128_t{}; }\n+446 static constexpr Float128 denorm_min() noexcept { return FLT128_DENORM_MIN;\n+}\n+447 static constexpr bool is_iec559 = true;\n+448 static constexpr bool is_bounded = false;\n+449 static constexpr bool is_modulo = false;\n+450 static constexpr bool traps = false;\n+451 static constexpr bool tinyness_before = false;\n+452 static constexpr float_round_style round_style = round_to_nearest;\n+453 };\n+454#endif\n+455} // end namespace std\n+456\n+457#endif // HAVE_QUADMATH\n+458#endif // DUNE_QUADMATH_HH\n _\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh\n Traits for type conversions and type information.\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\b._\bh_\bh\n-Infrastructure for concepts.\n+_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh\n+A few common exception classes.\n+_\bD_\bU_\bN_\bE_\b__\bB_\bI_\bN_\bA_\bR_\bY_\b__\bO_\bP\n+#define DUNE_BINARY_OP(OP)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:261\n+_\bD_\bU_\bN_\bE_\b__\bU_\bN_\bA_\bR_\bY_\b__\bF_\bU_\bN_\bC\n+#define DUNE_UNARY_FUNC(name)\n+_\bD_\bU_\bN_\bE_\b__\bA_\bS_\bS_\bI_\bG_\bN_\b__\bO_\bP\n+#define DUNE_ASSIGN_OP(OP)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:220\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n+Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)\n+Read a std::tuple.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn streamoperators.hh:43\n+_\bD_\bu_\bn_\be_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\b:_\b:_\bm_\ba_\bx\n+constexpr auto max\n+Function object that returns the greater of the given values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hybridutilities.hh:484\n+_\bD_\bu_\bn_\be_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\b:_\b:_\bm_\bi_\bn\n+constexpr auto min\n+Function object that returns the smaller of the given values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hybridutilities.hh:506\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:278\n _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:542\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<\n-EnableIfInterOperable< T1, T2, bool >::type operator<(const\n-RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n-RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n-Comparison operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:638\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>\n-EnableIfInterOperable< T1, T2, bool >::type operator>(const\n-RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n-RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n-Comparison operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:684\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator<=(const\n-RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n-RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n-Comparison operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:661\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator==(const\n-ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n-V2, R2, D > &rhs)\n-Checks for equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:238\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator>=(const\n-RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const\n-RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)\n-Comparison operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:706\n-_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-EnableIfInterOperable< T1, T2, bool >::type operator!=(const\n-ForwardIteratorFacade< T1, V1, R1, D > &lhs, const ForwardIteratorFacade< T2,\n-V2, R2, D > &rhs)\n-Checks for inequality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:260\n+_\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn bigunsignedint.hh:535\n+_\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW\n+#define DUNE_THROW(E, m)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:218\n _\bs_\bt_\bd\n STL namespace.\n _\bD_\bu_\bn_\be\n Dune namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn alignedallocator.hh:13\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt\n-Namespace for concepts.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concept.hh:34\n-_\bD_\bu_\bn_\be_\b:_\b:_\bC_\bo_\bn_\bc_\be_\bp_\bt_\b:_\b:_\br_\be_\bq_\bu_\bi_\br_\be_\bC_\bo_\bn_\bv_\be_\br_\bt_\bi_\bb_\bl_\be\n-constexpr bool requireConvertible()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concept.hh:247\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Base class for stl conformant forward iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:142\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by\n-std::forward_iterator_tag iterator_category\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:146\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-V * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:149\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType & operator++()\n-Preincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:210\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be\n-D DifferenceType\n-The type of the difference between two positions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:191\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R Reference\n-The type of the reference to the values accessed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:196\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-Pointer operator->() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:204\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be\n-T DerivedType\n-The type of derived iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:176\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-V Value\n-The type of value accessed through the iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:181\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-typename std::remove_const< V >::type value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:147\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType operator++(int)\n-Postincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:217\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\be_\br\n-V * Pointer\n-The pointer to the Value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:186\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-D difference_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:148\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Reference operator*() const\n-Dereferencing operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:199\n-_\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bw_\ba_\br_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:150\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Facade class for stl conformant bidirectional iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:275\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-V * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:282\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-typename std::remove_const< V >::type value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:280\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Reference operator*() const\n-Dereferencing operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:333\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-D difference_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:281\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be\n-T DerivedType\n-The type of derived iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:310\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-DerivedType & operator--()\n-Preincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:360\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-Pointer operator->() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:338\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType & operator++()\n-Preincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:344\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\be_\br\n-V * Pointer\n-The pointer to the Value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:320\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R Reference\n-The type of the reference to the values accessed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:330\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType operator++(int)\n-Postincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:351\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by\n-std::bidirectional_iterator_tag iterator_category\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:279\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be\n-D DifferenceType\n-The type of the difference between two positions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:325\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-DerivedType operator--(int)\n-Postincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:367\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:283\n-_\bD_\bu_\bn_\be_\b:_\b:_\bB_\bi_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\ba_\bl_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-V Value\n-The type of value accessed through the iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:315\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-Base class for stl conformant forward iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:435\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-typename std::remove_const< V >::type value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:440\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-D difference_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:441\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-DerivedType operator--(int)\n-Postdecrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:558\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-V * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:442\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by\n-std::random_access_iterator_tag iterator_category\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:439\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Reference operator*() const\n-Dereferencing operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:501\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType & operator++()\n-Preincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:522\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:443\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-Pointer operator->() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:506\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be\n-D DifferenceType\n-The type of the difference between two positions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:493\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-DerivedType & operator--()\n-Predecrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:551\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=\n-DerivedType & operator-=(DifferenceType n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:565\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-DerivedType operator+(DifferenceType n) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:542\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-Reference operator[](DifferenceType n) const\n-Get the element n positions from the current one.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:516\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\be_\bd_\bT_\by_\bp_\be\n-T DerivedType\n-The type of derived iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:478\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\be_\br\n-V * Pointer\n-The pointer to the Value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:488\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-DerivedType operator-(DifferenceType n) const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:571\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-DerivedType operator++(int)\n-Postincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:529\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-V Value\n-The type of value accessed through the iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:483\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-DerivedType & operator+=(DifferenceType n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:536\n-_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm_\bA_\bc_\bc_\be_\bs_\bs_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R Reference\n-The type of the reference to the values accessed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:498\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt\n-Helper to mimic a pointer for proxy objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:750\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt\n-constexpr ProxyArrowResult(const ProxyType &p) noexcept(std::\n-is_nothrow_constructible_v< ProxyType, const ProxyType & >)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:757\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-constexpr ProxyType * operator->() noexcept\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:767\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-constexpr const ProxyType * operator->() const noexcept\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:762\n-_\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bP_\br_\bo_\bx_\by_\bA_\br_\br_\bo_\bw_\bR_\be_\bs_\bu_\bl_\bt\n-constexpr ProxyArrowResult(ProxyType &&p) noexcept(std::\n-is_nothrow_constructible_v< ProxyType, ProxyType && >)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:752\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\bA_\bc_\bc_\be_\bs_\bs\n-This class encapsulates access of IteratorFacade.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:786\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-CRTP-Mixing class for stl conformant iterators of given iterator category.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1053\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-constexpr DerivedIterator operator--(int)\n-Postdecrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1192\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be\n-D difference_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1086\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by\n-C iterator_category\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1082\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be\n-IteratorFacade()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1095\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-constexpr pointer operator->() const\n-Arrow access to members of referenced value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1129\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\be_\br\n-pointer Pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1091\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bR_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-reference Reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1090\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-constexpr DerivedIterator operator+(difference_type n) const\n-Create iterator incremented by given value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1236\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-constexpr DerivedIterator operator++(int)\n-Postincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1156\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\be_\br_\bi_\bv_\be_\bd\n-constexpr DerivedIterator & derived()\n-Cast of *this to DerivedIterator type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1074\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\be_\bd_\bI_\bt_\be_\br_\ba_\bt_\bo_\br\n-It DerivedIterator\n-The derived iterator type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1065\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b=\n-constexpr DerivedIterator & operator-=(difference_type n)\n-Decrement iterator by given value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1249\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b-\n-constexpr decltype(auto) operator--()\n-Predecrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1169\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-R reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1084\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-constexpr reference operator[](difference_type n) const\n-Dereference element with given offset form this iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1207\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bd_\be_\br_\bi_\bv_\be_\bd\n-constexpr const DerivedIterator & derived() const\n-Cast of *this to const DerivedIterator type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1068\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-P pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1085\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-typename std::remove_const< V >::type value_type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1083\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-value_type Value\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1089\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b+\n-constexpr decltype(auto) operator++()\n-Preincrement operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1138\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\bT_\by_\bp_\be\n-difference_type DifferenceType\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1092\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bF_\ba_\bc_\ba_\bd_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-constexpr DerivedIterator operator-(difference_type n) const\n-Create iterator decremented by given value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorfacades.hh:1261\n-_\bD_\bu_\bn_\be_\b:_\b:_\bE_\bn_\ba_\bb_\bl_\be_\bI_\bf_\bI_\bn_\bt_\be_\br_\bO_\bp_\be_\br_\ba_\bb_\bl_\be\n-Enable typedef if two types are interoperable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typetraits.hh:81\n-_\bD_\bu_\bn_\be_\b:_\b:_\bA_\bl_\bw_\ba_\by_\bs_\bF_\ba_\bl_\bs_\be\n-template which always yields a false value\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typetraits.hh:124\n+_\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bx_\b__\bv_\ba_\bl_\bu_\be\n+T max_value(const AlignedNumber< T, align > &val)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:494\n+_\bD_\bu_\bn_\be_\b:_\b:_\bm_\bi_\bn_\b__\bv_\ba_\bl_\bu_\be\n+T min_value(const AlignedNumber< T, align > &val)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn debugalign.hh:500\n+_\bD_\bu_\bn_\be_\b:_\b:_\bR_\ba_\bn_\bg_\be_\bE_\br_\br_\bo_\br\n+Default exception class for range errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn exceptions.hh:254\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00065.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00065.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: tupleutility.hh File Reference\n+dune-common: fmatrixev.hh File Reference\n \n \n \n \n \n \n \n@@ -70,118 +70,67 @@\n
    \n \n
    \n \n
    \n \n-
    tupleutility.hh File Reference
    \n+
    fmatrixev.hh File Reference
    \n
    \n
    \n \n-

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

    Eigenvalue computations for the FieldMatrix class. \n More...

    \n-
    #include <cstddef>
    \n-#include <tuple>
    \n-#include <type_traits>
    \n-#include <utility>
    \n-#include <dune/common/hybridutilities.hh>
    \n-#include <dune/common/typetraits.hh>
    \n+
    #include <algorithm>
    \n+#include <iostream>
    \n+#include <cmath>
    \n+#include <cassert>
    \n+#include <dune-common-config.hh>
    \n+#include <dune/common/exceptions.hh>
    \n+#include <dune/common/fvector.hh>
    \n+#include <dune/common/fmatrix.hh>
    \n+#include <dune/common/math.hh>
    \n
    \n

    Go to the source code of this file.

    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

    \n-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...
     
    \n \n \n \n \n+\n+\n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    namespace  Dune::FMatrixHelp
     
    \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

    \n 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<int dim, typename K >
    static void Dune::FMatrixHelp::eigenValues (const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues)
     calculates the eigenvalues of a symmetric field matrix
     
    template<int dim, typename K >
    static void Dune::FMatrixHelp::eigenValuesVectors (const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues, FieldMatrix< K, dim, dim > &eigenVectors)
     calculates the eigenvalues and eigenvectors of a symmetric field matrix
     
    template<int dim, typename K >
    static void Dune::FMatrixHelp::eigenValuesLapack (const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues)
     calculates the eigenvalues of a symmetric field matrix
     
    template<int dim, typename K >
    static void Dune::FMatrixHelp::eigenValuesVectorsLapack (const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues, FieldMatrix< K, dim, dim > &eigenVectors)
     calculates the eigenvalues and -vectors of a symmetric field matrix
     
    template<int dim, typename K , class C >
    static void Dune::FMatrixHelp::eigenValuesNonSym (const FieldMatrix< K, dim, dim > &matrix, FieldVector< C, dim > &eigenValues)
     calculates the eigenvalues of a non-symmetric field matrix
     
    \n

    Detailed Description

    \n-

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

    \n+

    Eigenvalue computations for the FieldMatrix class.

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,108 +1,59 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-tupleutility.hh File Reference\n-_\bC_\bo_\bm_\bm_\bo_\bn \u00bb _\bU_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs \u00bb _\bT_\bu_\bp_\bl_\be_\b _\bU_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs\n-Contains utility classes which can be used with std::tuple. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bh_\by_\bb_\br_\bi_\bd_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+fmatrixev.hh File Reference\n+Eigenvalue computations for the FieldMatrix class. _\bM_\bo_\br_\be_\b._\b._\b.\n+#include \n+#include \n+#include \n+#include \n+#include \n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n+#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\bh_\b._\bh_\bh>\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b _\b*_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b _\b&_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bN_\bu_\bl_\bl_\bP_\bo_\bi_\bn_\bt_\be_\br_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bs_\be_\br_\b<_\b _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bo_\br_\bE_\ba_\bc_\bh_\bT_\by_\bp_\be_\b<_\b _\bT_\bE_\b,_\b _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bT_\bE_\b,_\b _\bA_\br_\bg_\bs_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bT_\bE_\b,_\b _\bA_\br_\bg_\bs_\b _\b>_\b:_\b:_\bT_\by_\bp_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bd_\bd_\bR_\be_\bf_\bT_\by_\bp_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 TypeEvaluator to turn a type T into a reference to T _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bd_\bd_\bP_\bt_\br_\bT_\by_\bp_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 TypeEvaluator to turn a type T into a pointer to T _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bd_\bd_\bP_\bt_\br_\bT_\by_\bp_\be_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b&_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bt_\bT_\by_\bp_\be_\b<_\b _\bN_\b,_\b _\bT_\bu_\bp_\bl_\be_\b _\b>\n-\u00a0 Type for reverse element access. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bA_\bt_\b<_\b _\bN_\b _\b>\n-\u00a0 Reverse element access. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\be_\br_\bP_\ba_\bi_\br_\bD_\be_\bl_\be_\bt_\bo_\br_\b<_\b _\bT_\bu_\bp_\bl_\be_\b _\b>\n-\u00a0 Deletes all objects pointed to in a std::tuple of pointers. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\br_\bs_\bt_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be_\bI_\bn_\bd_\be_\bx_\b<_\b _\bT_\bu_\bp_\bl_\be_\b,_\b _\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be_\b,_\b _\bs_\bt_\ba_\br_\bt_\b,_\b _\bs_\bi_\bz_\be_\b _\b>\n-\u00a0 Finding the index of a certain type in a std::tuple. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Generator for predicates accepting one particular type. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>_\b:_\b:_\bP_\br_\be_\bd_\bi_\bc_\ba_\bt_\be_\b<_\b _\bU_\b _\b>\n-\u00a0 The actual predicate. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bi_\br_\bs_\bt_\bT_\by_\bp_\be_\bI_\bn_\bd_\be_\bx_\b<_\b _\bT_\bu_\bp_\bl_\be_\b,_\b _\bT_\b,_\b _\bs_\bt_\ba_\br_\bt_\b _\b>\n-\u00a0 Find the first occurrence of a type in a std::tuple. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\bT_\bu_\bp_\bl_\be_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b,_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\bu_\bs_\bh_\bF_\br_\bo_\bn_\bt_\bT_\bu_\bp_\bl_\be_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bs_\bt_\bd_\b:_\b:_\bt_\bu_\bp_\bl_\be_\b<_\b _\bA_\br_\bg_\bs_\b._\b._\b._\b _\b>_\b,_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bd_\bu_\bc_\be_\bT_\bu_\bp_\bl_\be_\b<_\b _\bF_\b,_\b _\bT_\bu_\bp_\bl_\be_\b,_\b _\bS_\be_\be_\bd_\b,_\b _\bN_\b _\b>\n-\u00a0 Apply reduce with meta binary function to template. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bR_\be_\bd_\bu_\bc_\be_\bT_\bu_\bp_\bl_\be_\b<_\b _\bF_\b,_\b _\bT_\bu_\bp_\bl_\be_\b,_\b _\bS_\be_\be_\bd_\b,_\b _\b0_\b _\b>\n-\u00a0 Apply reduce with meta binary function to template. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bJ_\bo_\bi_\bn_\bT_\bu_\bp_\bl_\be_\bs_\b<_\b _\bH_\be_\ba_\bd_\b,_\b _\bT_\ba_\bi_\bl_\b _\b>\n-\u00a0 Join two std::tuple's. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bl_\ba_\bt_\bt_\be_\bn_\bT_\bu_\bp_\bl_\be_\b<_\b _\bT_\bu_\bp_\bl_\be_\b _\b>\n-\u00a0 Flatten a std::tuple of std::tuple's. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bD_\bu_\bn_\be\n \u00a0 _\bD_\bu_\bn_\be namespace.\n \u00a0\n+namespace \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- decltype(auto)\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\ba_\bp_\bp_\bl_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl (F &&f, ArgTuple\n- &&args, std::integer_sequence< I, i... >)\n-\u00a0 Apply function with arguments from a\n- given tuple.\n-\u00a0\n-template\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bn_\be_\br_\bi_\bc_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (Tuple &&t,\n- Functor &&f) -> decltype\n- (genericTransformTupleBackend(t, f))\n-\u00a0\n-template class TE, class... Args>\n-_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br< TE, Args... >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bm_\ba_\bk_\be_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br (Args\n- &&... args)\n-\u00a0\n-template class TypeEvaluator, class Tuple , class... Args>\n- auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be (Tuple &&orig, Args\n- &&... args) -> decltype\n- (_\bg_\be_\bn_\be_\br_\bi_\bc_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be(orig,\n- _\bm_\ba_\bk_\be_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bu_\bp_\bl_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br< TypeEvaluator\n- >(args...)))\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, dim, dim >\n+ &matrix, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, dim > &eigenValues)\n+\u00a0 calculates the eigenvalues of a symmetric field matrix\n+\u00a0\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bV_\be_\bc_\bt_\bo_\br_\bs (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, dim,\n+ dim > &matrix, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, dim > &_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs, _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n+ dim, dim > &eigenVectors)\n+\u00a0 calculates the eigenvalues and eigenvectors of a symmetric field\n+ matrix\n+\u00a0\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bL_\ba_\bp_\ba_\bc_\bk (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, dim,\n+ dim > &matrix, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, dim > &_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs)\n+\u00a0 calculates the eigenvalues of a symmetric field matrix\n+\u00a0\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bV_\be_\bc_\bt_\bo_\br_\bs_\bL_\ba_\bp_\ba_\bc_\bk (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K,\n+ dim, dim > &matrix, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< K, dim > &_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs,\n+ _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, dim, dim > &eigenVectors)\n+\u00a0 calculates the eigenvalues and -vectors of a symmetric field\n+ matrix\n+\u00a0\n+template\n+static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bF_\bM_\ba_\bt_\br_\bi_\bx_\bH_\be_\bl_\bp_\b:_\b:_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs_\bN_\bo_\bn_\bS_\by_\bm (const _\bF_\bi_\be_\bl_\bd_\bM_\ba_\bt_\br_\bi_\bx< K, dim,\n+ dim > &matrix, _\bF_\bi_\be_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br< C, dim > &_\be_\bi_\bg_\be_\bn_\bV_\ba_\bl_\bu_\be_\bs)\n+\u00a0 calculates the eigenvalues of a non-symmetric field matrix\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Contains utility classes which can be used with std::tuple.\n+Eigenvalue computations for the FieldMatrix class.\n ===============================================================================\n Generated by\u00a0_\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b] 1.9.8\n"}]}, {"source1": "./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html", "source2": "./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-dune-common: tupleutility.hh Source File\n+dune-common: fmatrixev.hh Source File\n \n \n \n \n \n \n \n@@ -74,448 +74,641 @@\n \n
    \n \n
    \n
    \n
    \n-
    tupleutility.hh
    \n+
    fmatrixev.hh
    \n
    \n
    \n Go to the documentation of this file.
    1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    \n
    2// vi: set et ts=4 sw=2 sts=2:
    \n
    3// SPDX-FileCopyrightInfo: Copyright \u00a9 DUNE Project contributors, see file LICENSE.md in module root
    \n
    4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
    \n-
    5
    \n-
    6#ifndef DUNE_TUPLE_UTILITY_HH
    \n-
    7#define DUNE_TUPLE_UTILITY_HH
    \n-
    8
    \n-
    9#include <cstddef>
    \n-
    10#include <tuple>
    \n-
    11#include <type_traits>
    \n-
    12#include <utility>
    \n-
    13
    \n-\n-\n+
    5#ifndef DUNE_FMATRIXEIGENVALUES_HH
    \n+
    6#define DUNE_FMATRIXEIGENVALUES_HH
    \n+
    7
    \n+
    12#include <algorithm>
    \n+
    13#include <iostream>
    \n+
    14#include <cmath>
    \n+
    15#include <cassert>
    \n
    16
    \n-
    17namespace Dune {
    \n-
    18
    \n-
    41 template<class F, class ArgTuple, class I, I... i>
    \n-
    \n-
    42 decltype(auto) applyPartial(F&& f, ArgTuple&& args, std::integer_sequence<I, i...> /*indices*/)
    \n-
    43 {
    \n-
    44 return f(std::get<i>(args)...);
    \n-
    45 }
    \n-
    \n-
    46
    \n-
    47 template<class T>
    \n-
    \n-\n-
    49 {
    \n-
    50 typedef typename std::add_const<T>::type& ConstType;
    \n-
    51 typedef T& NonConstType;
    \n-
    52 typedef const typename std::remove_const<T>::type& ParameterType;
    \n-
    53 };
    \n-
    \n-
    54
    \n-
    55 template<class T>
    \n-
    \n-\n-
    57 {
    \n-
    58 typedef typename std::add_const<T>::type* ConstType;
    \n-
    59 typedef T* NonConstType;
    \n-
    60 typedef T* ParameterType;
    \n-
    61 };
    \n-
    \n-
    62
    \n-
    63 template<class T>
    \n-
    \n-\n-
    65 {
    \n-
    66 typedef T& ConstType;
    \n-
    67 typedef T& NonConstType;
    \n-
    68 typedef T& ParameterType;
    \n-
    69 };
    \n-
    \n-
    70
    \n-
    78 template<class T>
    \n-\n-
    80
    \n-
    81 template<class... Args>
    \n-
    \n-
    82 struct NullPointerInitialiser<std::tuple<Args...> >
    \n-
    83 {
    \n-
    84 typedef std::tuple<Args...> ResultType;
    \n-
    \n-\n-
    86 {
    \n-
    87 return ResultType(static_cast<Args>(nullptr)...);
    \n-
    88 }
    \n-
    \n-
    89 };
    \n-
    \n+
    17#include <dune-common-config.hh> // HAVE_LAPACK
    \n+\n+\n+\n+
    21#include <dune/common/math.hh>
    \n+
    22
    \n+
    23namespace Dune {
    \n+
    24
    \n+
    30 namespace FMatrixHelp {
    \n+
    31
    \n+
    32#if HAVE_LAPACK
    \n+
    33 // defined in fmatrixev.cc
    \n+
    34 extern void eigenValuesLapackCall(
    \n+
    35 const char* jobz, const char* uplo, const long
    \n+
    36 int* n, double* a, const long int* lda, double* w,
    \n+
    37 double* work, const long int* lwork, long int* info);
    \n+
    38
    \n+
    39 extern void eigenValuesNonsymLapackCall(
    \n+
    40 const char* jobvl, const char* jobvr, const long
    \n+
    41 int* n, double* a, const long int* lda, double* wr, double* wi, double* vl,
    \n+
    42 const long int* ldvl, double* vr, const long int* ldvr, double* work,
    \n+
    43 const long int* lwork, long int* info);
    \n+
    44
    \n+
    45 extern void eigenValuesLapackCall(
    \n+
    46 const char* jobz, const char* uplo, const long
    \n+
    47 int* n, float* a, const long int* lda, float* w,
    \n+
    48 float* work, const long int* lwork, long int* info);
    \n+
    49
    \n+
    50 extern void eigenValuesNonsymLapackCall(
    \n+
    51 const char* jobvl, const char* jobvr, const long
    \n+
    52 int* n, float* a, const long int* lda, float* wr, float* wi, float* vl,
    \n+
    53 const long int* ldvl, float* vr, const long int* ldvr, float* work,
    \n+
    54 const long int* lwork, long int* info);
    \n+
    55
    \n+
    56#endif
    \n+
    57
    \n+
    58 namespace Impl {
    \n+
    59 //internal tag to activate/disable code for eigenvector calculation at compile time
    \n+
    60 enum Jobs { OnlyEigenvalues=0, EigenvaluesEigenvectors=1 };
    \n+
    61
    \n+
    62 //internal dummy used if only eigenvalues are to be calculated
    \n+
    63 template<typename K, int dim>
    \n+
    64 using EVDummy = FieldMatrix<K, dim, dim>;
    \n+
    65
    \n+
    66 //compute the cross-product of two vectors
    \n+
    67 template<typename K>
    \n+
    68 inline FieldVector<K,3> crossProduct(const FieldVector<K,3>& vec0, const FieldVector<K,3>& vec1) {
    \n+
    69 return {vec0[1]*vec1[2] - vec0[2]*vec1[1], vec0[2]*vec1[0] - vec0[0]*vec1[2], vec0[0]*vec1[1] - vec0[1]*vec1[0]};
    \n+
    70 }
    \n+
    71
    \n+
    72 template <typename K>
    \n+
    73 static void eigenValues2dImpl(const FieldMatrix<K, 2, 2>& matrix,
    \n+
    74 FieldVector<K, 2>& eigenvalues)
    \n+
    75 {
    \n+
    76 using std::sqrt;
    \n+
    77 const K p = 0.5 * (matrix[0][0] + matrix [1][1]);
    \n+
    78 const K p2 = p - matrix[1][1];
    \n+
    79 K q = p2 * p2 + matrix[1][0] * matrix[0][1];
    \n+
    80 if( q < 0 && q > -1e-14 ) q = 0;
    \n+
    81 if (q < 0)
    \n+
    82 {
    \n+
    83 std::cout << matrix << std::endl;
    \n+
    84 // Complex eigenvalues are either caused by non-symmetric matrices or by round-off errors
    \n+
    85 DUNE_THROW(MathError, "Complex eigenvalue detected (which this implementation cannot handle).");
    \n+
    86 }
    \n+
    87
    \n+
    88 // get square root
    \n+
    89 q = sqrt(q);
    \n
    90
    \n-
    115 template<template <class> class TE, class T>
    \n-\n-
    117
    \n-
    118 template<template <class> class TE, class... Args>
    \n-
    \n-
    119 struct ForEachType<TE, std::tuple<Args...> >
    \n-
    120 {
    \n-
    121 typedef std::tuple<typename TE<Args>::Type...> Type;
    \n-
    122 };
    \n-
    \n-
    123
    \n-
    124#ifndef DOXYGEN
    \n-
    125 template<class Tuple, class Functor, std::size_t... I>
    \n-
    126 inline auto genericTransformTupleBackendImpl(Tuple& t, Functor& f, const std::index_sequence<I...>& )
    \n-
    127 -> std::tuple<decltype(f(std::get<I>(t)))...>
    \n-
    128 {
    \n-
    129 return std::tuple<decltype(f(std::get<I>(t)))...>(f(std::get<I>(t))...);
    \n-
    130 }
    \n-
    131
    \n-
    132 template<class... Args, class Functor>
    \n-
    133 auto genericTransformTupleBackend(std::tuple<Args...>& t, Functor& f) ->
    \n-
    134 decltype(genericTransformTupleBackendImpl(t, f,std::index_sequence_for<Args...>{}))
    \n-
    135 {
    \n-
    136 return genericTransformTupleBackendImpl(t, f,std::index_sequence_for<Args...>{});
    \n-
    137 }
    \n+
    91 // store eigenvalues in ascending order
    \n+
    92 eigenvalues[0] = p - q;
    \n+
    93 eigenvalues[1] = p + q;
    \n+
    94 }
    \n+
    95
    \n+
    96 /*
    \n+
    97 This implementation was adapted from the pseudo-code (Python?) implementation found on
    \n+
    98 http://en.wikipedia.org/wiki/Eigenvalue_algorithm (retrieved late August 2014).
    \n+
    99 Wikipedia claims to have taken it from
    \n+
    100 Smith, Oliver K. (April 1961), Eigenvalues of a symmetric 3 \u00d7 3 matrix.,
    \n+
    101 Communications of the ACM 4 (4): 168, doi:10.1145/355578.366316
    \n+
    102 */
    \n+
    103 template <typename K>
    \n+
    104 static K eigenValues3dImpl(const FieldMatrix<K, 3, 3>& matrix,
    \n+
    105 FieldVector<K, 3>& eigenvalues)
    \n+
    106 {
    \n+
    107 using std::sqrt;
    \n+
    108 using std::acos;
    \n+
    109 using real_type = typename FieldTraits<K>::real_type;
    \n+
    110 const K pi = MathematicalConstants<K>::pi();
    \n+
    111 K p1 = matrix[0][1]*matrix[0][1] + matrix[0][2]*matrix[0][2] + matrix[1][2]*matrix[1][2];
    \n+
    112
    \n+
    113 if (p1 <= std::numeric_limits<K>::epsilon()) {
    \n+
    114 // A is diagonal.
    \n+
    115 eigenvalues[0] = matrix[0][0];
    \n+
    116 eigenvalues[1] = matrix[1][1];
    \n+
    117 eigenvalues[2] = matrix[2][2];
    \n+
    118 std::sort(eigenvalues.begin(), eigenvalues.end());
    \n+
    119
    \n+
    120 return 0.0;
    \n+
    121 }
    \n+
    122 else
    \n+
    123 {
    \n+
    124 // q = trace(A)/3
    \n+
    125 K q = 0;
    \n+
    126 for (int i=0; i<3; i++)
    \n+
    127 q += matrix[i][i] / 3.0;
    \n+
    128
    \n+
    129 K p2 = (matrix[0][0] - q)*(matrix[0][0] - q) + (matrix[1][1] - q)*(matrix[1][1] - q) + (matrix[2][2] - q)*(matrix[2][2] - q) + 2.0 * p1;
    \n+
    130 K p = sqrt(p2 / 6);
    \n+
    131 // B = (1 / p) * (A - q * I); // I is the identity matrix
    \n+
    132 FieldMatrix<K,3,3> B;
    \n+
    133 for (int i=0; i<3; i++)
    \n+
    134 for (int j=0; j<3; j++)
    \n+
    135 B[i][j] = (real_type(1.0)/p) * (matrix[i][j] - q*(i==j));
    \n+
    136
    \n+
    137 K r = B.determinant() / 2.0;
    \n
    138
    \n-
    139 template<class... Args, class Functor>
    \n-
    140 auto genericTransformTupleBackend(const std::tuple<Args...>& t, Functor& f) ->
    \n-
    141 decltype(genericTransformTupleBackendImpl(t, f, std::index_sequence_for<Args...>{}))
    \n-
    142 {
    \n-
    143 return genericTransformTupleBackendImpl(t, f, std::index_sequence_for<Args...>{});
    \n-
    144 }
    \n-
    145#endif
    \n-
    146
    \n-
    185 template<class Tuple, class Functor>
    \n-
    \n-
    186 auto genericTransformTuple(Tuple&& t, Functor&& f) ->
    \n-
    187 decltype(genericTransformTupleBackend(t, f))
    \n-
    188 {
    \n-
    189 return genericTransformTupleBackend(t, f);
    \n-
    190 }
    \n-
    \n-
    191
    \n-
    224 template<template<class> class TE, class... Args>
    \n-
    \n-\n-
    226 {
    \n-
    227 mutable std::tuple<Args&...> tup;
    \n-
    228
    \n-
    229 template<class T, std::size_t... I>
    \n-
    230 inline auto apply(T&& t, const std::index_sequence<I...>& ) ->
    \n-
    231 decltype(TE<T>::apply(t,std::get<I>(tup)...)) const
    \n-
    232 {
    \n-
    233 return TE<T>::apply(t,std::get<I>(tup)...);
    \n-
    234 }
    \n-
    235
    \n-
    236 public:
    \n-
    237 template<class T>
    \n-
    \n-
    238 struct TypeEvaluator : public TE<T>
    \n-
    239 {};
    \n-
    \n+
    139 /*In exact arithmetic for a symmetric matrix -1 <= r <= 1
    \n+
    140 but computation error can leave it slightly outside this range.
    \n+
    141 acos(z) function requires |z| <= 1, but will fail silently
    \n+
    142 and return NaN if the input is larger than 1 in magnitude.
    \n+
    143 Thus r is clamped to [-1,1].*/
    \n+
    144 using std::clamp;
    \n+
    145 r = clamp<K>(r, -1.0, 1.0);
    \n+
    146 K phi = acos(r) / 3.0;
    \n+
    147
    \n+
    148 // the eigenvalues satisfy eig[2] <= eig[1] <= eig[0]
    \n+
    149 eigenvalues[2] = q + 2 * p * cos(phi);
    \n+
    150 eigenvalues[0] = q + 2 * p * cos(phi + (2*pi/3));
    \n+
    151 eigenvalues[1] = 3 * q - eigenvalues[0] - eigenvalues[2]; // since trace(matrix) = eig1 + eig2 + eig3
    \n+
    152
    \n+
    153 return r;
    \n+
    154 }
    \n+
    155 }
    \n+
    156
    \n+
    157 //see https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf
    \n+
    158 //Robustly compute a right-handed orthonormal set {u, v, evec0}.
    \n+
    159 template<typename K>
    \n+
    160 void orthoComp(const FieldVector<K,3>& evec0, FieldVector<K,3>& u, FieldVector<K,3>& v) {
    \n+
    161 using std::abs;
    \n+
    162 if(abs(evec0[0]) > abs(evec0[1])) {
    \n+
    163 //The component of maximum absolute value is either evec0[0] or evec0[2].
    \n+
    164 FieldVector<K,2> temp = {evec0[0], evec0[2]};
    \n+
    165 auto L = 1.0 / temp.two_norm();
    \n+
    166 u = L * FieldVector<K,3>({-evec0[2], 0.0, evec0[0]});
    \n+
    167 }
    \n+
    168 else {
    \n+
    169 //The component of maximum absolute value is either evec0[1] or evec0[2].
    \n+
    170 FieldVector<K,2> temp = {evec0[1], evec0[2]};
    \n+
    171 auto L = 1.0 / temp.two_norm();
    \n+
    172 u = L * FieldVector<K,3>({0.0, evec0[2], -evec0[1]});
    \n+
    173 }
    \n+
    174 v = crossProduct(evec0, u);
    \n+
    175 }
    \n+
    176
    \n+
    177 //see https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf
    \n+
    178 template<typename K>
    \n+
    179 void eig0(const FieldMatrix<K,3,3>& matrix, K eval0, FieldVector<K,3>& evec0) {
    \n+
    180 /* Compute a unit-length eigenvector for eigenvalue[i0]. The
    \n+
    181 matrix is rank 2, so two of the rows are linearly independent.
    \n+
    182 For a robust computation of the eigenvector, select the two
    \n+
    183 rows whose cross product has largest length of all pairs of
    \n+
    184 rows. */
    \n+
    185 using Vector = FieldVector<K,3>;
    \n+
    186 Vector row0 = {matrix[0][0]-eval0, matrix[0][1], matrix[0][2]};
    \n+
    187 Vector row1 = {matrix[1][0], matrix[1][1]-eval0, matrix[1][2]};
    \n+
    188 Vector row2 = {matrix[2][0], matrix[2][1], matrix[2][2]-eval0};
    \n+
    189
    \n+
    190 Vector r0xr1 = crossProduct(row0, row1);
    \n+
    191 Vector r0xr2 = crossProduct(row0, row2);
    \n+
    192 Vector r1xr2 = crossProduct(row1, row2);
    \n+
    193 auto d0 = r0xr1.two_norm();
    \n+
    194 auto d1 = r0xr2.two_norm();
    \n+
    195 auto d2 = r1xr2.two_norm();
    \n+
    196
    \n+
    197 auto dmax = d0 ;
    \n+
    198 int imax = 0;
    \n+
    199 if(d1>dmax) {
    \n+
    200 dmax = d1;
    \n+
    201 imax = 1;
    \n+
    202 }
    \n+
    203 if(d2>dmax)
    \n+
    204 imax = 2;
    \n+
    205
    \n+
    206 if(imax == 0)
    \n+
    207 evec0 = r0xr1 / d0;
    \n+
    208 else if(imax == 1)
    \n+
    209 evec0 = r0xr2 / d1;
    \n+
    210 else
    \n+
    211 evec0 = r1xr2 / d2;
    \n+
    212 }
    \n+
    213
    \n+
    214 //see https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf
    \n+
    215 template<typename K>
    \n+
    216 void eig1(const FieldMatrix<K,3,3>& matrix, const FieldVector<K,3>& evec0, FieldVector<K,3>& evec1, K eval1) {
    \n+
    217 using Vector = FieldVector<K,3>;
    \n+
    218
    \n+
    219 //Robustly compute a right-handed orthonormal set {u, v, evec0}.
    \n+
    220 Vector u,v;
    \n+
    221 orthoComp(evec0, u, v);
    \n+
    222
    \n+
    223 /* Let e be eval1 and let E be a corresponding eigenvector which
    \n+
    224 is a solution to the linear system (A - e*I)*E = 0. The matrix
    \n+
    225 (A - e*I) is 3x3, not invertible (so infinitely many
    \n+
    226 solutions), and has rank 2 when eval1 and eval are different.
    \n+
    227 It has rank 1 when eval1 and eval2 are equal. Numerically, it
    \n+
    228 is difficult to compute robustly the rank of a matrix. Instead,
    \n+
    229 the 3x3 linear system is reduced to a 2x2 system as follows.
    \n+
    230 Define the 3x2 matrix J = [u,v] whose columns are the u and v
    \n+
    231 computed previously. Define the 2x1 vector X = J*E. The 2x2
    \n+
    232 system is 0 = M * X = (J^T * (A - e*I) * J) * X where J^T is
    \n+
    233 the transpose of J and M = J^T * (A - e*I) * J is a 2x2 matrix.
    \n+
    234 The system may be written as
    \n+
    235 +- -++- -+ +- -+
    \n+
    236 | U^T*A*U - e U^T*A*V || x0 | = e * | x0 |
    \n+
    237 | V^T*A*U V^T*A*V - e || x1 | | x1 |
    \n+
    238 +- -++ -+ +- -+
    \n+
    239 where X has row entries x0 and x1. */
    \n
    240
    \n-
    \n-
    241 TransformTupleFunctor(Args&&... args)
    \n-
    242 : tup(args...)
    \n-
    243 { }
    \n-
    \n+
    241 Vector Au, Av;
    \n+
    242 matrix.mv(u, Au);
    \n+
    243 matrix.mv(v, Av);
    \n
    244
    \n-
    245 template<class T>
    \n-
    \n-
    246 inline auto operator()(T&& t) ->
    \n-
    247 decltype(this->apply(t,std::index_sequence_for<Args...>{})) const
    \n-
    248 {
    \n-
    249 return apply(t,std::index_sequence_for<Args...>{});
    \n-
    250 }
    \n-
    \n-
    251 };
    \n-
    \n-
    252
    \n-
    253 template<template<class> class TE, class... Args>
    \n-
    \n-\n-
    255 {
    \n-
    256 return TransformTupleFunctor<TE, Args...>(args...);
    \n-
    257 }
    \n-
    \n-
    258
    \n-
    291 template<template<class> class TypeEvaluator, class Tuple, class... Args>
    \n-
    \n-
    292 auto transformTuple(Tuple&& orig, Args&&... args) ->
    \n-
    293 decltype(genericTransformTuple(orig, makeTransformTupleFunctor<TypeEvaluator>(args...)))
    \n-
    294 {
    \n-
    295 return genericTransformTuple(orig, makeTransformTupleFunctor<TypeEvaluator>(args...));
    \n-
    296 }
    \n-
    \n-
    297
    \n-
    299
    \n-
    303 template<class T>
    \n-
    \n-\n-
    305 {
    \n-
    306 typedef T& Type;
    \n-
    \n-
    307 static Type apply(T& t)
    \n-
    308 {
    \n-
    309 return t;
    \n-
    310 }
    \n-
    \n-
    311 };
    \n-
    \n-
    312
    \n-
    314
    \n-
    318 template<class T>
    \n-
    \n-\n-
    320 {
    \n-
    321 typedef typename std::remove_reference<T>::type* Type;
    \n-
    \n-
    322 static Type apply(T& t)
    \n-
    323 {
    \n-
    324 return &t;
    \n-
    325 }
    \n-
    \n-
    326 };
    \n-
    \n-
    327
    \n-
    328 // Specialization, in case the type is already a reference
    \n-
    329 template<class T>
    \n-
    \n-\n-
    331 {
    \n-
    332 typedef typename std::remove_reference<T>::type* Type;
    \n-
    \n-
    333 static Type apply(T& t)
    \n-
    334 {
    \n-
    335 return &t;
    \n-
    336 }
    \n-
    \n-
    337 };
    \n-
    \n-
    338
    \n-
    344 template<int N, class Tuple>
    \n-
    \n-
    345 struct AtType
    \n-
    346 {
    \n-
    347 typedef typename std::tuple_element<std::tuple_size<Tuple>::value - N - 1, Tuple>::type Type;
    \n-
    348 };
    \n-
    \n+
    245 auto m00 = u.dot(Au) - eval1;
    \n+
    246 auto m01 = u.dot(Av);
    \n+
    247 auto m11 = v.dot(Av) - eval1;
    \n+
    248
    \n+
    249 /* For robustness, choose the largest-length row of M to compute
    \n+
    250 the eigenvector. The 2-tuple of coefficients of U and V in the
    \n+
    251 assignments to eigenvector[1] lies on a circle, and U and V are
    \n+
    252 unit length and perpendicular, so eigenvector[1] is unit length
    \n+
    253 (within numerical tolerance). */
    \n+
    254 using std::abs, std::sqrt, std::max;
    \n+
    255 auto absM00 = abs(m00);
    \n+
    256 auto absM01 = abs(m01);
    \n+
    257 auto absM11 = abs(m11);
    \n+
    258 if(absM00 >= absM11) {
    \n+
    259 auto maxAbsComp = max(absM00, absM01);
    \n+
    260 if(maxAbsComp > 0.0) {
    \n+
    261 if(absM00 >= absM01) {
    \n+
    262 m01 /= m00;
    \n+
    263 m00 = 1.0 / sqrt(1.0 + m01*m01);
    \n+
    264 m01 *= m00;
    \n+
    265 }
    \n+
    266 else {
    \n+
    267 m00 /= m01;
    \n+
    268 m01 = 1.0 / sqrt(1.0 + m00*m00);
    \n+
    269 m00 *= m01;
    \n+
    270 }
    \n+
    271 evec1 = m01*u - m00*v;
    \n+
    272 }
    \n+
    273 else
    \n+
    274 evec1 = u;
    \n+
    275 }
    \n+
    276 else {
    \n+
    277 auto maxAbsComp = max(absM11, absM01);
    \n+
    278 if(maxAbsComp > 0.0) {
    \n+
    279 if(absM11 >= absM01) {
    \n+
    280 m01 /= m11;
    \n+
    281 m11 = 1.0 / sqrt(1.0 + m01*m01);
    \n+
    282 m01 *= m11;
    \n+
    283 }
    \n+
    284 else {
    \n+
    285 m11 /= m01;
    \n+
    286 m01 = 1.0 / sqrt(1.0 + m11*m11);
    \n+
    287 m11 *= m01;
    \n+
    288 }
    \n+
    289 evec1 = m11*u - m01*v;
    \n+
    290 }
    \n+
    291 else
    \n+
    292 evec1 = u;
    \n+
    293 }
    \n+
    294 }
    \n+
    295
    \n+
    296 // 1d specialization
    \n+
    297 template<Jobs Tag, typename K>
    \n+
    298 static void eigenValuesVectorsImpl(const FieldMatrix<K, 1, 1>& matrix,
    \n+
    299 FieldVector<K, 1>& eigenValues,
    \n+
    300 FieldMatrix<K, 1, 1>& eigenVectors)
    \n+
    301 {
    \n+
    302 eigenValues[0] = matrix[0][0];
    \n+
    303 if constexpr(Tag==EigenvaluesEigenvectors)
    \n+
    304 eigenVectors[0] = {1.0};
    \n+
    305 }
    \n+
    306
    \n+
    307
    \n+
    308 // 2d specialization
    \n+
    309 template <Jobs Tag, typename K>
    \n+
    310 static void eigenValuesVectorsImpl(const FieldMatrix<K, 2, 2>& matrix,
    \n+
    311 FieldVector<K, 2>& eigenValues,
    \n+
    312 FieldMatrix<K, 2, 2>& eigenVectors)
    \n+
    313 {
    \n+
    314 // Compute eigen values
    \n+
    315 Impl::eigenValues2dImpl(matrix, eigenValues);
    \n+
    316
    \n+
    317 // Compute eigenvectors by exploiting the Cayley\u2013Hamilton theorem.
    \n+
    318 // If \u03bb_1, \u03bb_2 are the eigenvalues, then (A - \u03bb_1I )(A - \u03bb_2I ) = (A - \u03bb_2I )(A - \u03bb_1I ) = 0,
    \n+
    319 // so the columns of (A - \u03bb_2I ) are annihilated by (A - \u03bb_1I ) and vice versa.
    \n+
    320 // Assuming neither matrix is zero, the columns of each must include eigenvectors
    \n+
    321 // for the other eigenvalue. (If either matrix is zero, then A is a multiple of the
    \n+
    322 // identity and any non-zero vector is an eigenvector.)
    \n+
    323 // From: https://en.wikipedia.org/wiki/Eigenvalue_algorithm#2x2_matrices
    \n+
    324 if constexpr(Tag==EigenvaluesEigenvectors) {
    \n+
    325
    \n+
    326 // Special casing for multiples of the identity
    \n+
    327 FieldMatrix<K,2,2> temp = matrix;
    \n+
    328 temp[0][0] -= eigenValues[0];
    \n+
    329 temp[1][1] -= eigenValues[0];
    \n+
    330 if(temp.infinity_norm() <= 1e-14) {
    \n+
    331 eigenVectors[0] = {1.0, 0.0};
    \n+
    332 eigenVectors[1] = {0.0, 1.0};
    \n+
    333 }
    \n+
    334 else {
    \n+
    335 // The columns of A - \u03bb_2I are eigenvectors for \u03bb_1, or zero.
    \n+
    336 // Take the column with the larger norm to avoid zero columns.
    \n+
    337 FieldVector<K,2> ev0 = {matrix[0][0]-eigenValues[1], matrix[1][0]};
    \n+
    338 FieldVector<K,2> ev1 = {matrix[0][1], matrix[1][1]-eigenValues[1]};
    \n+
    339 eigenVectors[0] = (ev0.two_norm2() >= ev1.two_norm2()) ? ev0/ev0.two_norm() : ev1/ev1.two_norm();
    \n+
    340
    \n+
    341 // The columns of A - \u03bb_1I are eigenvectors for \u03bb_2, or zero.
    \n+
    342 // Take the column with the larger norm to avoid zero columns.
    \n+
    343 ev0 = {matrix[0][0]-eigenValues[0], matrix[1][0]};
    \n+
    344 ev1 = {matrix[0][1], matrix[1][1]-eigenValues[0]};
    \n+
    345 eigenVectors[1] = (ev0.two_norm2() >= ev1.two_norm2()) ? ev0/ev0.two_norm() : ev1/ev1.two_norm();
    \n+
    346 }
    \n+
    347 }
    \n+
    348 }
    \n
    349
    \n-
    357 template<int N>
    \n-
    \n-
    358 struct At
    \n-
    359 {
    \n-
    360 template<typename Tuple>
    \n-
    361 static typename TupleAccessTraits<typename AtType<N, Tuple>::Type>::NonConstType
    \n-
    \n-
    362 get(Tuple& t)
    \n-
    363 {
    \n-
    364 return std::get<std::tuple_size<Tuple>::value - N - 1>(t);
    \n-
    365 }
    \n-
    \n-
    366
    \n-
    367 template<typename Tuple>
    \n-
    368 static typename TupleAccessTraits<typename AtType<N, Tuple>::Type>::ConstType
    \n-
    \n-
    369 get(const Tuple& t)
    \n-
    370 {
    \n-
    371 return std::get<std::tuple_size<Tuple>::value - N - 1>(t);
    \n-
    372 }
    \n-
    \n-
    373 };
    \n-
    \n+
    350 // 3d specialization
    \n+
    351 template <Jobs Tag, typename K>
    \n+
    352 static void eigenValuesVectorsImpl(const FieldMatrix<K, 3, 3>& matrix,
    \n+
    353 FieldVector<K, 3>& eigenValues,
    \n+
    354 FieldMatrix<K, 3, 3>& eigenVectors)
    \n+
    355 {
    \n+
    356 using Vector = FieldVector<K,3>;
    \n+
    357 using Matrix = FieldMatrix<K,3,3>;
    \n+
    358
    \n+
    359 //compute eigenvalues
    \n+
    360 /* Precondition the matrix by factoring out the maximum absolute
    \n+
    361 value of the components. This guards against floating-point
    \n+
    362 overflow when computing the eigenvalues.*/
    \n+
    363 using std::isnormal;
    \n+
    364 K maxAbsElement = (isnormal(matrix.infinity_norm())) ? matrix.infinity_norm() : K(1.0);
    \n+
    365 Matrix scaledMatrix = matrix / maxAbsElement;
    \n+
    366 K r = Impl::eigenValues3dImpl(scaledMatrix, eigenValues);
    \n+
    367
    \n+
    368 if constexpr(Tag==EigenvaluesEigenvectors) {
    \n+
    369 K offDiagNorm = Vector{scaledMatrix[0][1],scaledMatrix[0][2],scaledMatrix[1][2]}.two_norm2();
    \n+
    370 if (offDiagNorm <= std::numeric_limits<K>::epsilon())
    \n+
    371 {
    \n+
    372 eigenValues = {scaledMatrix[0][0], scaledMatrix[1][1], scaledMatrix[2][2]};
    \n+
    373 eigenVectors = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};
    \n
    374
    \n-
    378 template<class Tuple>
    \n-
    \n-\n-
    380 {
    \n-
    381 template<typename... Ts>
    \n-
    \n-
    382 static void apply(std::tuple<Ts...>& t)
    \n-
    383 {
    \n-
    384 Hybrid::forEach(t,[&](auto&& ti){delete ti; ti=nullptr;});
    \n-
    385 }
    \n-
    \n-
    386 };
    \n-
    \n-
    387
    \n-
    411 template<class Tuple, template<class> class Predicate, std::size_t start = 0,
    \n-
    412 std::size_t size = std::tuple_size<Tuple>::value>
    \n-
    \n-\n-
    414 public std::conditional<Predicate<typename std::tuple_element<start,
    \n-
    415 Tuple>::type>::value,
    \n-
    416 std::integral_constant<std::size_t, start>,
    \n-
    417 FirstPredicateIndex<Tuple, Predicate, start+1> >::type
    \n-
    418 {
    \n-
    419 static_assert(std::tuple_size<Tuple>::value == size, "The \\"size\\" "
    \n-
    420 "template parameter of FirstPredicateIndex is an "
    \n-
    421 "implementation detail and should never be set "
    \n-
    422 "explicitly!");
    \n-
    423 };
    \n-
    \n-
    424
    \n-
    425#ifndef DOXYGEN
    \n-
    426 template<class Tuple, template<class> class Predicate, std::size_t size>
    \n-
    427 class FirstPredicateIndex<Tuple, Predicate, size, size>
    \n-
    428 {
    \n-
    429 static_assert(AlwaysFalse<Tuple>::value, "None of the std::tuple element "
    \n-
    430 "types matches the predicate!");
    \n-
    431 };
    \n-
    432#endif // !DOXYGEN
    \n-
    433
    \n-
    443 template<class T>
    \n-
    \n-
    444 struct IsType
    \n-
    445 {
    \n-
    447 template<class U>
    \n-
    448 struct Predicate : public std::is_same<T, U> {};
    \n-
    449 };
    \n-
    \n+
    375 // Use bubble sort to jointly sort eigenvalues and eigenvectors
    \n+
    376 // such that eigenvalues are ascending
    \n+
    377 if (eigenValues[0] > eigenValues[1])
    \n+
    378 {
    \n+
    379 std::swap(eigenValues[0], eigenValues[1]);
    \n+
    380 std::swap(eigenVectors[0], eigenVectors[1]);
    \n+
    381 }
    \n+
    382 if (eigenValues[1] > eigenValues[2])
    \n+
    383 {
    \n+
    384 std::swap(eigenValues[1], eigenValues[2]);
    \n+
    385 std::swap(eigenVectors[1], eigenVectors[2]);
    \n+
    386 }
    \n+
    387 if (eigenValues[0] > eigenValues[1])
    \n+
    388 {
    \n+
    389 std::swap(eigenValues[0], eigenValues[1]);
    \n+
    390 std::swap(eigenVectors[0], eigenVectors[1]);
    \n+
    391 }
    \n+
    392 }
    \n+
    393 else {
    \n+
    394 /*Compute the eigenvectors so that the set
    \n+
    395 [evec[0], evec[1], evec[2]] is right handed and
    \n+
    396 orthonormal. */
    \n+
    397
    \n+
    398 Matrix evec(0.0);
    \n+
    399 Vector eval(eigenValues);
    \n+
    400 if(r >= 0) {
    \n+
    401 Impl::eig0(scaledMatrix, eval[2], evec[2]);
    \n+
    402 Impl::eig1(scaledMatrix, evec[2], evec[1], eval[1]);
    \n+
    403 evec[0] = Impl::crossProduct(evec[1], evec[2]);
    \n+
    404 }
    \n+
    405 else {
    \n+
    406 Impl::eig0(scaledMatrix, eval[0], evec[0]);
    \n+
    407 Impl::eig1(scaledMatrix, evec[0], evec[1], eval[1]);
    \n+
    408 evec[2] = Impl::crossProduct(evec[0], evec[1]);
    \n+
    409 }
    \n+
    410 //sort eval/evec-pairs in ascending order
    \n+
    411 using EVPair = std::pair<K, Vector>;
    \n+
    412 std::vector<EVPair> pairs;
    \n+
    413 for(std::size_t i=0; i<=2; ++i)
    \n+
    414 pairs.push_back(EVPair(eval[i], evec[i]));
    \n+
    415 auto comp = [](EVPair x, EVPair y){ return x.first < y.first; };
    \n+
    416 std::sort(pairs.begin(), pairs.end(), comp);
    \n+
    417 for(std::size_t i=0; i<=2; ++i){
    \n+
    418 eigenValues[i] = pairs[i].first;
    \n+
    419 eigenVectors[i] = pairs[i].second;
    \n+
    420 }
    \n+
    421 }
    \n+
    422 }
    \n+
    423 //The preconditioning scaled the matrix, which scales the eigenvalues. Revert the scaling.
    \n+
    424 eigenValues *= maxAbsElement;
    \n+
    425 }
    \n+
    426
    \n+
    427 // forwarding to LAPACK with corresponding tag
    \n+
    428 template <Jobs Tag, int dim, typename K>
    \n+
    429 static void eigenValuesVectorsLapackImpl(const FieldMatrix<K, dim, dim>& matrix,
    \n+
    430 FieldVector<K, dim>& eigenValues,
    \n+
    431 FieldMatrix<K, dim, dim>& eigenVectors)
    \n+
    432 {
    \n+
    433 {
    \n+
    434#if HAVE_LAPACK
    \n+
    435 /*Lapack uses a proprietary tag to determine whether both eigenvalues and
    \n+
    436 -vectors ('v') or only eigenvalues ('n') should be calculated */
    \n+
    437 const char jobz = "nv"[Tag];
    \n+
    438
    \n+
    439 const long int N = dim ;
    \n+
    440 const char uplo = 'u'; // use upper triangular matrix
    \n+
    441
    \n+
    442 // length of matrix vector, LWORK >= max(1,3*N-1)
    \n+
    443 const long int lwork = 3*N -1 ;
    \n+
    444
    \n+
    445 constexpr bool isKLapackType = std::is_same_v<K,double> || std::is_same_v<K,float>;
    \n+
    446 using LapackNumType = std::conditional_t<isKLapackType, K, double>;
    \n+
    447
    \n+
    448 // matrix to put into dsyev
    \n+
    449 LapackNumType matrixVector[dim * dim];
    \n
    450
    \n-
    464 template<class Tuple, class T, std::size_t start = 0>
    \n-
    \n-\n-
    466 public FirstPredicateIndex<Tuple, IsType<T>::template Predicate, start>
    \n-
    467 { };
    \n-
    \n-
    468
    \n-
    475 template<class Tuple, class T>
    \n-\n-
    477
    \n-
    478 template<class... Args, class T>
    \n-
    \n-
    479 struct PushBackTuple<typename std::tuple<Args...>, T>
    \n-
    480 {
    \n-
    481 typedef typename std::tuple<Args..., T> type;
    \n-
    482 };
    \n-
    \n-
    483
    \n-
    490 template<class Tuple, class T>
    \n-\n-
    492
    \n-
    493 template<class... Args, class T>
    \n-
    \n-
    494 struct PushFrontTuple<typename std::tuple<Args...>, T>
    \n-
    495 {
    \n-
    496 typedef typename std::tuple<T, Args...> type;
    \n-
    497 };
    \n-
    \n-
    498
    \n-
    511 template<
    \n-
    512 template <class, class> class F,
    \n-
    513 class Tuple,
    \n-
    514 class Seed=std::tuple<>,
    \n-
    515 int N=std::tuple_size<Tuple>::value>
    \n-
    \n-\n-
    517 {
    \n-
    518 typedef typename ReduceTuple<F, Tuple, Seed, N-1>::type Accumulated;
    \n-
    519 typedef typename std::tuple_element<N-1, Tuple>::type Value;
    \n-
    520
    \n-
    522 typedef typename F<Accumulated, Value>::type type;
    \n-
    523 };
    \n-
    \n-
    524
    \n-
    535 template<
    \n-
    536 template <class, class> class F,
    \n-
    537 class Tuple,
    \n-
    538 class Seed>
    \n-
    \n-
    539 struct ReduceTuple<F, Tuple, Seed, 0>
    \n-
    540 {
    \n-
    542 typedef Seed type;
    \n-
    543 };
    \n-
    \n-
    544
    \n-
    554 template<class Head, class Tail>
    \n-
    \n-\n-
    556 {
    \n-\n-
    559 };
    \n-
    \n-
    560
    \n-
    569 template<class Tuple>
    \n-
    \n-\n-
    571 {
    \n-\n-
    574 };
    \n-
    \n-
    575
    \n-
    577}
    \n-
    578
    \n-
    579#endif
    \n-
    Traits for type conversions and type information.
    \n-\n-
    std::add_const< T >::type & ConstType
    Definition tupleutility.hh:50
    \n-
    static void apply(std::tuple< Ts... > &t)
    Definition tupleutility.hh:382
    \n-
    T * ParameterType
    Definition tupleutility.hh:60
    \n-
    auto transformTuple(Tuple &&orig, Args &&... args) -> decltype(genericTransformTuple(orig, makeTransformTupleFunctor< TypeEvaluator >(args...)))
    Definition tupleutility.hh:292
    \n-
    T & ConstType
    Definition tupleutility.hh:66
    \n-
    ReduceTuple< F, Tuple, Seed, N-1 >::type Accumulated
    Definition tupleutility.hh:518
    \n-
    T * NonConstType
    Definition tupleutility.hh:59
    \n-
    Seed type
    Result of the reduce operation.
    Definition tupleutility.hh:542
    \n-
    std::remove_reference< T >::type * Type
    Definition tupleutility.hh:321
    \n-
    static Type apply(T &t)
    Definition tupleutility.hh:307
    \n-
    static ResultType apply()
    Definition tupleutility.hh:85
    \n-
    std::tuple< Args... > ResultType
    Definition tupleutility.hh:84
    \n-
    std::remove_reference< T >::type * Type
    Definition tupleutility.hh:332
    \n-
    TransformTupleFunctor(Args &&... args)
    Definition tupleutility.hh:241
    \n-
    std::tuple_element< std::tuple_size< Tuple >::value-N-1, Tuple >::type Type
    Definition tupleutility.hh:347
    \n-
    static Type apply(T &t)
    Definition tupleutility.hh:333
    \n-
    auto operator()(T &&t) -> decltype(this->apply(t, std::index_sequence_for< Args... >{})) const
    Definition tupleutility.hh:246
    \n-
    T & NonConstType
    Definition tupleutility.hh:67
    \n-
    T & NonConstType
    Definition tupleutility.hh:51
    \n-
    static TupleAccessTraits< typenameAtType< N, Tuple >::Type >::ConstType get(const Tuple &t)
    Definition tupleutility.hh:369
    \n-
    T & Type
    Definition tupleutility.hh:306
    \n-
    static TupleAccessTraits< typenameAtType< N, Tuple >::Type >::NonConstType get(Tuple &t)
    Definition tupleutility.hh:362
    \n-
    std::tuple< Args..., T > type
    Definition tupleutility.hh:481
    \n-
    std::tuple_element< N-1, Tuple >::type Value
    Definition tupleutility.hh:519
    \n-
    std::tuple< T, Args... > type
    Definition tupleutility.hh:496
    \n-
    ReduceTuple< JoinTuples, Tuple >::type type
    Result of the flatten operation.
    Definition tupleutility.hh:573
    \n-
    static Type apply(T &t)
    Definition tupleutility.hh:322
    \n-
    F< Accumulated, Value >::type type
    Result of the reduce operation.
    Definition tupleutility.hh:522
    \n-
    ReduceTuple< PushBackTuple, Tail, Head >::type type
    Result of the join operation.
    Definition tupleutility.hh:558
    \n-
    std::tuple< typename TE< Args >::Type... > Type
    Definition tupleutility.hh:121
    \n-
    auto genericTransformTuple(Tuple &&t, Functor &&f) -> decltype(genericTransformTupleBackend(t, f))
    Definition tupleutility.hh:186
    \n-
    decltype(auto) applyPartial(F &&f, ArgTuple &&args, std::integer_sequence< I, i... >)
    Apply function with arguments from a given tuple.
    Definition tupleutility.hh:42
    \n-
    T & ParameterType
    Definition tupleutility.hh:68
    \n-
    const std::remove_const< T >::type & ParameterType
    Definition tupleutility.hh:52
    \n-
    std::add_const< T >::type * ConstType
    Definition tupleutility.hh:58
    \n-
    TransformTupleFunctor< TE, Args... > makeTransformTupleFunctor(Args &&... args)
    Definition tupleutility.hh:254
    \n-
    constexpr void forEach(Range &&range, F &&f)
    Range based for loop.
    Definition hybridutilities.hh:256
    \n-
    STL namespace.
    \n+
    451 // copy matrix
    \n+
    452 int row = 0;
    \n+
    453 for(int i=0; i<dim; ++i)
    \n+
    454 {
    \n+
    455 for(int j=0; j<dim; ++j, ++row)
    \n+
    456 {
    \n+
    457 matrixVector[ row ] = matrix[ i ][ j ];
    \n+
    458 }
    \n+
    459 }
    \n+
    460
    \n+
    461 // working memory
    \n+
    462 LapackNumType workSpace[lwork];
    \n+
    463
    \n+
    464 // return value information
    \n+
    465 long int info = 0;
    \n+
    466 LapackNumType* ev;
    \n+
    467 if constexpr (isKLapackType){
    \n+
    468 ev = &eigenValues[0];
    \n+
    469 }else{
    \n+
    470 ev = new LapackNumType[dim];
    \n+
    471 }
    \n+
    472
    \n+
    473 // call LAPACK routine (see fmatrixev.cc)
    \n+
    474 eigenValuesLapackCall(&jobz, &uplo, &N, &matrixVector[0], &N,
    \n+
    475 ev, &workSpace[0], &lwork, &info);
    \n+
    476
    \n+
    477 if constexpr (!isKLapackType){
    \n+
    478 for(size_t i=0;i<dim;++i)
    \n+
    479 eigenValues[i] = ev[i];
    \n+
    480 delete[] ev;
    \n+
    481 }
    \n+
    482
    \n+
    483 // restore eigenvectors matrix
    \n+
    484 if (Tag==Jobs::EigenvaluesEigenvectors){
    \n+
    485 row = 0;
    \n+
    486 for(int i=0; i<dim; ++i)
    \n+
    487 {
    \n+
    488 for(int j=0; j<dim; ++j, ++row)
    \n+
    489 {
    \n+
    490 eigenVectors[ i ][ j ] = matrixVector[ row ];
    \n+
    491 }
    \n+
    492 }
    \n+
    493 }
    \n+
    494
    \n+
    495 if( info != 0 )
    \n+
    496 {
    \n+
    497 std::cerr << "For matrix " << matrix << " eigenvalue calculation failed! " << std::endl;
    \n+
    498 DUNE_THROW(InvalidStateException,"eigenValues: Eigenvalue calculation failed!");
    \n+
    499 }
    \n+
    500#else
    \n+
    501 DUNE_THROW(NotImplemented,"LAPACK not found!");
    \n+
    502#endif
    \n+
    503 }
    \n+
    504 }
    \n+
    505
    \n+
    506 // generic specialization
    \n+
    507 template <Jobs Tag, int dim, typename K>
    \n+
    508 static void eigenValuesVectorsImpl(const FieldMatrix<K, dim, dim>& matrix,
    \n+
    509 FieldVector<K, dim>& eigenValues,
    \n+
    510 FieldMatrix<K, dim, dim>& eigenVectors)
    \n+
    511 {
    \n+
    512 eigenValuesVectorsLapackImpl<Tag>(matrix,eigenValues,eigenVectors);
    \n+
    513 }
    \n+
    514 } //namespace Impl
    \n+
    515
    \n+
    523 template <int dim, typename K>
    \n+
    \n+
    524 static void eigenValues(const FieldMatrix<K, dim, dim>& matrix,
    \n+\n+
    526 {
    \n+\n+
    528 Impl::eigenValuesVectorsImpl<Impl::Jobs::OnlyEigenvalues>(matrix, eigenValues, dummy);
    \n+
    529 }
    \n+
    \n+
    530
    \n+
    539 template <int dim, typename K>
    \n+
    \n+\n+\n+
    542 FieldMatrix<K, dim, dim>& eigenVectors)
    \n+
    543 {
    \n+
    544 Impl::eigenValuesVectorsImpl<Impl::Jobs::EigenvaluesEigenvectors>(matrix, eigenValues, eigenVectors);
    \n+
    545 }
    \n+
    \n+
    546
    \n+
    554 template <int dim, typename K>
    \n+
    \n+\n+\n+
    557 {
    \n+\n+
    559 Impl::eigenValuesVectorsLapackImpl<Impl::Jobs::EigenvaluesEigenvectors>(matrix, eigenValues, dummy);
    \n+
    560 }
    \n+
    \n+
    561
    \n+
    570 template <int dim, typename K>
    \n+
    \n+\n+\n+
    573 FieldMatrix<K, dim, dim>& eigenVectors)
    \n+
    574 {
    \n+
    575 Impl::eigenValuesVectorsLapackImpl<Impl::Jobs::EigenvaluesEigenvectors>(matrix, eigenValues, eigenVectors);
    \n+
    576 }
    \n+
    \n+
    577
    \n+
    585 template <int dim, typename K, class C>
    \n+
    \n+\n+\n+
    588 {
    \n+
    589#if HAVE_LAPACK
    \n+
    590 {
    \n+
    591 const long int N = dim ;
    \n+
    592 const char jobvl = 'n';
    \n+
    593 const char jobvr = 'n';
    \n+
    594
    \n+
    595 constexpr bool isKLapackType = std::is_same_v<K,double> || std::is_same_v<K,float>;
    \n+
    596 using LapackNumType = std::conditional_t<isKLapackType, K, double>;
    \n+
    597
    \n+
    598 // matrix to put into dgeev
    \n+
    599 LapackNumType matrixVector[dim * dim];
    \n+
    600
    \n+
    601 // copy matrix
    \n+
    602 int row = 0;
    \n+
    603 for(int i=0; i<dim; ++i)
    \n+
    604 {
    \n+
    605 for(int j=0; j<dim; ++j, ++row)
    \n+
    606 {
    \n+
    607 matrixVector[ row ] = matrix[ i ][ j ];
    \n+
    608 }
    \n+
    609 }
    \n+
    610
    \n+
    611 // working memory
    \n+
    612 LapackNumType eigenR[dim];
    \n+
    613 LapackNumType eigenI[dim];
    \n+
    614 LapackNumType work[3*dim];
    \n+
    615
    \n+
    616 // return value information
    \n+
    617 long int info = 0;
    \n+
    618 const long int lwork = 3*dim;
    \n+
    619
    \n+
    620 // call LAPACK routine (see fmatrixev_ext.cc)
    \n+
    621 eigenValuesNonsymLapackCall(&jobvl, &jobvr, &N, &matrixVector[0], &N,
    \n+
    622 &eigenR[0], &eigenI[0], nullptr, &N, nullptr, &N, &work[0],
    \n+
    623 &lwork, &info);
    \n+
    624
    \n+
    625 if( info != 0 )
    \n+
    626 {
    \n+
    627 std::cerr << "For matrix " << matrix << " eigenvalue calculation failed! " << std::endl;
    \n+
    628 DUNE_THROW(InvalidStateException,"eigenValues: Eigenvalue calculation failed!");
    \n+
    629 }
    \n+
    630 for (int i=0; i<N; ++i) {
    \n+
    631 eigenValues[i].real = eigenR[i];
    \n+
    632 eigenValues[i].imag = eigenI[i];
    \n+
    633 }
    \n+
    634 }
    \n+
    635#else
    \n+
    636 DUNE_THROW(NotImplemented,"LAPACK not found!");
    \n+
    637#endif
    \n+
    638 }
    \n+
    \n+
    639 } // end namespace FMatrixHelp
    \n+
    640
    \n+
    643} // end namespace Dune
    \n+
    644#endif
    \n+
    Some useful basic math stuff.
    \n+
    Implements a vector constructed from a given type representing a field and a compile-time given size.
    \n+
    A few common exception classes.
    \n+
    Implements a matrix constructed from a given type representing a field and compile-time given number ...
    \n+
    constexpr auto max
    Function object that returns the greater of the given values.
    Definition hybridutilities.hh:484
    \n+
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    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
    \n-
    Definition tupleutility.hh:49
    \n-
    A helper template that initializes a std::tuple consisting of pointers to nullptr.
    Definition tupleutility.hh:79
    \n-
    Helper template to clone the type definition of a std::tuple with the storage types replaced by a use...
    Definition tupleutility.hh:116
    \n-
    Definition tupleutility.hh:226
    \n-
    Definition tupleutility.hh:239
    \n-
    TypeEvaluator to turn a type T into a reference to T
    Definition tupleutility.hh:305
    \n-
    TypeEvaluator to turn a type T into a pointer to T
    Definition tupleutility.hh:320
    \n-
    Type for reverse element access.
    Definition tupleutility.hh:346
    \n-
    Reverse element access.
    Definition tupleutility.hh:359
    \n-
    Deletes all objects pointed to in a std::tuple of pointers.
    Definition tupleutility.hh:380
    \n-
    Finding the index of a certain type in a std::tuple.
    Definition tupleutility.hh:418
    \n-
    Generator for predicates accepting one particular type.
    Definition tupleutility.hh:445
    \n-
    The actual predicate.
    Definition tupleutility.hh:448
    \n-
    Find the first occurrence of a type in a std::tuple.
    Definition tupleutility.hh:467
    \n-
    Helper template to append a type to a std::tuple.
    Definition tupleutility.hh:476
    \n-
    Helper template to prepend a type to a std::tuple.
    Definition tupleutility.hh:491
    \n-
    Apply reduce with meta binary function to template.
    Definition tupleutility.hh:517
    \n-
    Join two std::tuple's.
    Definition tupleutility.hh:556
    \n-
    Flatten a std::tuple of std::tuple's.
    Definition tupleutility.hh:571
    \n-
    template which always yields a false value
    Definition typetraits.hh:124
    \n+
    static void eigenValuesNonSym(const FieldMatrix< K, dim, dim > &matrix, FieldVector< C, dim > &eigenValues)
    calculates the eigenvalues of a non-symmetric field matrix
    Definition fmatrixev.hh:586
    \n+
    static void eigenValues(const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues)
    calculates the eigenvalues of a symmetric field matrix
    Definition fmatrixev.hh:524
    \n+
    static void eigenValuesLapack(const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues)
    calculates the eigenvalues of a symmetric field matrix
    Definition fmatrixev.hh:555
    \n+
    static void eigenValuesVectors(const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues, FieldMatrix< K, dim, dim > &eigenVectors)
    calculates the eigenvalues and eigenvectors of a symmetric field matrix
    Definition fmatrixev.hh:540
    \n+
    static void eigenValuesVectorsLapack(const FieldMatrix< K, dim, dim > &matrix, FieldVector< K, dim > &eigenValues, FieldMatrix< K, dim, dim > &eigenVectors)
    calculates the eigenvalues and -vectors of a symmetric field matrix
    Definition fmatrixev.hh:571
    \n+
    A dense n x m matrix.
    Definition fmatrix.hh:117
    \n+
    vector space out of a tensor product of fields.
    Definition fvector.hh:91
    \n+
    Default exception for dummy implementations.
    Definition exceptions.hh:263
    \n+
    Default exception if a function was called while the object is not in a valid state for that function...
    Definition exceptions.hh:281
    \n+
    T real_type
    export the type representing the real type of the field
    Definition ftraits.hh:30
    \n+
    static const Field pi()
    Archimedes' constant.
    Definition math.hh:48
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,520 +1,710 @@\n dune-common\u00a02.10\n Loading...\n Searching...\n No Matches\n * _\bd_\bu_\bn_\be\n * _\bc_\bo_\bm_\bm_\bo_\bn\n-tupleutility.hh\n+fmatrixev.hh\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n 3// SPDX-FileCopyrightInfo: Copyright \u00c2\u00a9 DUNE Project contributors, see file\n LICENSE.md in module root\n 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception\n-5\n-6#ifndef DUNE_TUPLE_UTILITY_HH\n-7#define DUNE_TUPLE_UTILITY_HH\n-8\n-9#include \n-10#include \n-11#include \n-12#include \n-13\n-14#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bh_\by_\bb_\br_\bi_\bd_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n-15#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bt_\by_\bp_\be_\bt_\br_\ba_\bi_\bt_\bs_\b._\bh_\bh>\n+5#ifndef DUNE_FMATRIXEIGENVALUES_HH\n+6#define DUNE_FMATRIXEIGENVALUES_HH\n+7\n+12#include \n+13#include \n+14#include \n+15#include \n 16\n-17namespace _\bD_\bu_\bn_\be {\n-18\n-41 template\n-_\b4_\b2 decltype(auto) _\ba_\bp_\bp_\bl_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl(F&& f, ArgTuple&& args, std::integer_sequence /*indices*/)\n-43 {\n-44 return f(std::get(args)...);\n-45 }\n-46\n-47 template\n-_\b4_\b8 struct _\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs\n-49 {\n-_\b5_\b0 typedef typename std::add_const::type& _\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b5_\b1 typedef T& _\bN_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b5_\b2 typedef const typename std::remove_const::type& _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bT_\by_\bp_\be;\n-53 };\n-54\n-55 template\n-_\b5_\b6 struct _\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs\n-57 {\n-_\b5_\b8 typedef typename std::add_const::type* _\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b5_\b9 typedef T* _\bN_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b6_\b0 typedef T* _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bT_\by_\bp_\be;\n-61 };\n-62\n-63 template\n-_\b6_\b4 struct _\bT_\bu_\bp_\bl_\be_\bA_\bc_\bc_\be_\bs_\bs_\bT_\br_\ba_\bi_\bt_\bs\n-65 {\n-_\b6_\b6 typedef T& _\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b6_\b7 typedef T& _\bN_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\bT_\by_\bp_\be;\n-_\b6_\b8 typedef T& _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bT_\by_\bp_\be;\n-69 };\n-70\n-78 template\n-_\b7_\b9 struct _\bN_\bu_\bl_\bl_\bP_\bo_\bi_\bn_\bt_\be_\br_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bs_\be_\br;\n-80\n-81 template\n-_\b8_\b2 struct _\bN_\bu_\bl_\bl_\bP_\bo_\bi_\bn_\bt_\be_\br_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bs_\be_\br<_\bs_\bt_\bd::tuple >\n-83 {\n-_\b8_\b4 typedef std::tuple _\bR_\be_\bs_\bu_\bl_\bt_\bT_\by_\bp_\be;\n-_\b8_\b5 static _\bR_\be_\bs_\bu_\bl_\bt_\bT_\by_\bp_\be _\ba_\bp_\bp_\bl_\by()\n-86 {\n-87 return _\bR_\be_\bs_\bu_\bl_\bt_\bT_\by_\bp_\be(static_cast(nullptr)...);\n-88 }\n-89 };\n+17#include // HAVE_LAPACK\n+18#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\be_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh_\bh>\n+19#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bv_\be_\bc_\bt_\bo_\br_\b._\bh_\bh>\n+20#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bf_\bm_\ba_\bt_\br_\bi_\bx_\b._\bh_\bh>\n+21#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bm_\ba_\bt_\bh_\b._\bh_\bh>\n+22\n+23namespace _\bD_\bu_\bn_\be {\n+24\n+30 namespace FMatrixHelp {\n+31\n+32#if HAVE_LAPACK\n+33 // defined in fmatrixev.cc\n+34 extern void eigenValuesLapackCall(\n+35 const char* jobz, const char* uplo, const long\n+36 int* n, double* a, const long int* lda, double* w,\n+37 double* work, const long int* lwork, long int* info);\n+38\n+39 extern void eigenValuesNonsymLapackCall(\n+40 const char* jobvl, const char* jobvr, const long\n+41 int* n, double* a, const long int* lda, double* wr, double* wi, double* vl,\n+42 const long int* ldvl, double* vr, const long int* ldvr, double* work,\n+43 const long int* lwork, long int* info);\n+44\n+45 extern void eigenValuesLapackCall(\n+46 const char* jobz, const char* uplo, const long\n+47 int* n, float* a, const long int* lda, float* w,\n+48 float* work, const long int* lwork, long int* info);\n+49\n+50 extern void eigenValuesNonsymLapackCall(\n+51 const char* jobvl, const char* jobvr, const long\n+52 int* n, float* a, const long int* lda, float* wr, float* wi, float* vl,\n+53 const long int* ldvl, float* vr, const long int* ldvr, float* work,\n+54 const long int* lwork, long int* info);\n+55\n+56#endif\n+57\n+58 namespace Impl {\n+59 //internal tag to activate/disable code for eigenvector calculation at\n+compile time\n+60 enum Jobs { OnlyEigenvalues=0, EigenvaluesEigenvectors=1 };\n+61\n+62 //internal dummy used if only eigenvalues are to be calculated\n+63 template\n+64 using EVDummy = FieldMatrix;\n+65\n+66 //compute the cross-product of two vectors\n+67 template\n+68 inline FieldVector crossProduct(const FieldVector& vec0, const\n+FieldVector& vec1) {\n+69 return {vec0[1]*vec1[2] - vec0[2]*vec1[1], vec0[2]*vec1[0] - vec0[0]*vec1\n+[2], vec0[0]*vec1[1] - vec0[1]*vec1[0]};\n+70 }\n+71\n+72 template \n+73 static void eigenValues2dImpl(const FieldMatrix& matrix,\n+74 FieldVector& eigenvalues)\n+75 {\n+76 using std::sqrt;\n+77 const K p = 0.5 * (matrix[0][0] + matrix [1][1]);\n+78 const K p2 = p - matrix[1][1];\n+79 K q = p2 * p2 + matrix[1][0] * matrix[0][1];\n+80 if( q < 0 && q > -1e-14 ) q = 0;\n+81 if (q < 0)\n+82 {\n+83 std::cout << matrix << std::endl;\n+84 // Complex eigenvalues are either caused by non-symmetric matrices or by\n+round-off errors\n+85 _\bD_\bU_\bN_\bE_\b__\bT_\bH_\bR_\bO_\bW(MathError, \"Complex eigenvalue detected (which this\n+implementation cannot handle).\");\n+86 }\n+87\n+88 // get square root\n+89 q = sqrt(q);\n 90\n-115 template