{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.BcLXF99K/b1/dune-common_2.10~pre20241004-2_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.BcLXF99K/b2/dune-common_2.10~pre20241004-2_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,4 +1,4 @@\n \n 590310b43ea1e00591744f32108e781c 534284 debug optional libdune-common-dev-dbgsym_2.10~pre20241004-2_armhf.deb\n 16662240b42830627fe5963345830b43 406796 libdevel optional libdune-common-dev_2.10~pre20241004-2_armhf.deb\n- 483bc6ca0c96b7a1500f4d026eeb7966 3181396 doc optional libdune-common-doc_2.10~pre20241004-2_all.deb\n+ df9e24b59657214afe0599dcf39635bb 3183480 doc optional libdune-common-doc_2.10~pre20241004-2_all.deb\n"}, {"source1": "libdune-common-doc_2.10~pre20241004-2_all.deb", "source2": "libdune-common-doc_2.10~pre20241004-2_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-10-21 20:30:17.000000 debian-binary\n--rw-r--r-- 0 0 0 28148 2024-10-21 20:30:17.000000 control.tar.xz\n--rw-r--r-- 0 0 0 3153056 2024-10-21 20:30:17.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 28032 2024-10-21 20:30:17.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 3155256 2024-10-21 20:30:17.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": "./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": "@@ -17,28 +17,30 @@\n usr/share/doc/libdune-common-doc/buildsystem/html/search.html\n usr/share/doc/libdune-common-doc/buildsystem/html/searchindex.js\n usr/share/doc/libdune-common-doc/changelog.Debian.gz\n usr/share/doc/libdune-common-doc/changelog.gz\n usr/share/doc/libdune-common-doc/copyright\n usr/share/doc/libdune-common-doc/doxygen/a00002.html\n usr/share/doc/libdune-common-doc/doxygen/a00008.html\n+usr/share/doc/libdune-common-doc/doxygen/a00008_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00011.html\n+usr/share/doc/libdune-common-doc/doxygen/a00011_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00014.html\n usr/share/doc/libdune-common-doc/doxygen/a00014_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00017.html\n+usr/share/doc/libdune-common-doc/doxygen/a00017_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00020.html\n usr/share/doc/libdune-common-doc/doxygen/a00020_source.html\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@@ -57,27 +59,29 @@\n usr/share/doc/libdune-common-doc/doxygen/a00062_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00065.html\n usr/share/doc/libdune-common-doc/doxygen/a00065_source.html\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@@ -137,77 +141,70 @@\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/a00212_source.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 usr/share/doc/libdune-common-doc/doxygen/a00260_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00263.html\n+usr/share/doc/libdune-common-doc/doxygen/a00263_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00266.html\n usr/share/doc/libdune-common-doc/doxygen/a00266_source.html\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/a00278_source.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/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@@ -217,15 +214,14 @@\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@@ -233,27 +229,29 @@\n usr/share/doc/libdune-common-doc/doxygen/a00335.html\n usr/share/doc/libdune-common-doc/doxygen/a00335_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00338.html\n usr/share/doc/libdune-common-doc/doxygen/a00338_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00341.html\n usr/share/doc/libdune-common-doc/doxygen/a00341_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00344.html\n+usr/share/doc/libdune-common-doc/doxygen/a00344_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00347.html\n usr/share/doc/libdune-common-doc/doxygen/a00347_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00350.html\n usr/share/doc/libdune-common-doc/doxygen/a00350_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00353.html\n usr/share/doc/libdune-common-doc/doxygen/a00353_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00356.html\n usr/share/doc/libdune-common-doc/doxygen/a00356_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00359.html\n usr/share/doc/libdune-common-doc/doxygen/a00359_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00362.html\n usr/share/doc/libdune-common-doc/doxygen/a00362_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00365.html\n+usr/share/doc/libdune-common-doc/doxygen/a00365_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00368.html\n usr/share/doc/libdune-common-doc/doxygen/a00368_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00371.html\n usr/share/doc/libdune-common-doc/doxygen/a00371_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00374.html\n usr/share/doc/libdune-common-doc/doxygen/a00374_source.html\n usr/share/doc/libdune-common-doc/doxygen/a00377.html\n@@ -277,15 +275,17 @@\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"}]}]}]}, {"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-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/buildsystem/html/search.html\n -rw-r--r-- 0 root (0) root (0) 12803 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/buildsystem/html/searchindex.js\n -rw-r--r-- 0 root (0) root (0) 2122 2024-10-21 20:30:17.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-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/\n -rw-r--r-- 0 root (0) root (0) 3044 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00002.html\n--rw-r--r-- 0 root (0) root (0) 4978 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008.html\n--rw-r--r-- 0 root (0) root (0) 6924 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011.html\n--rw-r--r-- 0 root (0) root (0) 6383 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014.html\n--rw-r--r-- 0 root (0) root (0) 16095 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014_source.html\n--rw-r--r-- 0 root (0) root (0) 4910 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017.html\n--rw-r--r-- 0 root (0) root (0) 7264 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020.html\n--rw-r--r-- 0 root (0) root (0) 14137 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html\n--rw-r--r-- 0 root (0) root (0) 7493 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023.html\n--rw-r--r-- 0 root (0) root (0) 31465 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html\n--rw-r--r-- 0 root (0) root (0) 5604 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026.html\n--rw-r--r-- 0 root (0) root (0) 9237 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html\n--rw-r--r-- 0 root (0) root (0) 5246 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029.html\n--rw-r--r-- 0 root (0) root (0) 9924 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html\n--rw-r--r-- 0 root (0) root (0) 13604 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032.html\n--rw-r--r-- 0 root (0) root (0) 28674 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032_source.html\n--rw-r--r-- 0 root (0) root (0) 3365 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035.html\n--rw-r--r-- 0 root (0) root (0) 10369 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html\n--rw-r--r-- 0 root (0) root (0) 5602 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038.html\n--rw-r--r-- 0 root (0) root (0) 9345 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038_source.html\n--rw-r--r-- 0 root (0) root (0) 39912 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041.html\n--rw-r--r-- 0 root (0) root (0) 14840 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html\n--rw-r--r-- 0 root (0) root (0) 4767 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044.html\n--rw-r--r-- 0 root (0) root (0) 14347 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044_source.html\n--rw-r--r-- 0 root (0) root (0) 22052 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047.html\n--rw-r--r-- 0 root (0) root (0) 46229 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html\n--rw-r--r-- 0 root (0) root (0) 8322 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050.html\n--rw-r--r-- 0 root (0) root (0) 40739 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050_source.html\n--rw-r--r-- 0 root (0) root (0) 3817 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053.html\n--rw-r--r-- 0 root (0) root (0) 6524 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053_source.html\n--rw-r--r-- 0 root (0) root (0) 81299 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056.html\n--rw-r--r-- 0 root (0) root (0) 145525 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056_source.html\n--rw-r--r-- 0 root (0) root (0) 9860 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059.html\n--rw-r--r-- 0 root (0) root (0) 20795 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059_source.html\n--rw-r--r-- 0 root (0) root (0) 14004 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062.html\n--rw-r--r-- 0 root (0) root (0) 86151 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html\n--rw-r--r-- 0 root (0) root (0) 24038 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065.html\n--rw-r--r-- 0 root (0) root (0) 42062 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html\n--rw-r--r-- 0 root (0) root (0) 13870 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068.html\n--rw-r--r-- 0 root (0) root (0) 20197 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068_source.html\n--rw-r--r-- 0 root (0) root (0) 6712 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071.html\n--rw-r--r-- 0 root (0) root (0) 11002 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071_source.html\n--rw-r--r-- 0 root (0) root (0) 33482 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077.html\n--rw-r--r-- 0 root (0) root (0) 357624 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077_source.html\n--rw-r--r-- 0 root (0) root (0) 4127 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080.html\n--rw-r--r-- 0 root (0) root (0) 21234 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083.html\n--rw-r--r-- 0 root (0) root (0) 71204 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083_source.html\n--rw-r--r-- 0 root (0) root (0) 8195 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086.html\n--rw-r--r-- 0 root (0) root (0) 144459 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086_source.html\n--rw-r--r-- 0 root (0) root (0) 5653 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089.html\n--rw-r--r-- 0 root (0) root (0) 7232 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089_source.html\n--rw-r--r-- 0 root (0) root (0) 6806 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092.html\n--rw-r--r-- 0 root (0) root (0) 12869 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092_source.html\n--rw-r--r-- 0 root (0) root (0) 6555 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095.html\n--rw-r--r-- 0 root (0) root (0) 18101 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095_source.html\n--rw-r--r-- 0 root (0) root (0) 12793 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098.html\n--rw-r--r-- 0 root (0) root (0) 124302 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098_source.html\n--rw-r--r-- 0 root (0) root (0) 6186 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101.html\n--rw-r--r-- 0 root (0) root (0) 17740 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101_source.html\n--rw-r--r-- 0 root (0) root (0) 7194 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104.html\n--rw-r--r-- 0 root (0) root (0) 151467 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104_source.html\n--rw-r--r-- 0 root (0) root (0) 17901 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107.html\n--rw-r--r-- 0 root (0) root (0) 167128 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107_source.html\n--rw-r--r-- 0 root (0) root (0) 14429 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110.html\n--rw-r--r-- 0 root (0) root (0) 51306 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110_source.html\n--rw-r--r-- 0 root (0) root (0) 5114 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113.html\n--rw-r--r-- 0 root (0) root (0) 9510 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113_source.html\n--rw-r--r-- 0 root (0) root (0) 4654 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116.html\n--rw-r--r-- 0 root (0) root (0) 7264 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116_source.html\n--rw-r--r-- 0 root (0) root (0) 7720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119.html\n--rw-r--r-- 0 root (0) root (0) 10467 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119_source.html\n--rw-r--r-- 0 root (0) root (0) 10990 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122.html\n--rw-r--r-- 0 root (0) root (0) 22882 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122_source.html\n--rw-r--r-- 0 root (0) root (0) 7355 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125.html\n--rw-r--r-- 0 root (0) root (0) 9907 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125_source.html\n--rw-r--r-- 0 root (0) root (0) 4309 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128.html\n--rw-r--r-- 0 root (0) root (0) 17896 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128_source.html\n--rw-r--r-- 0 root (0) root (0) 5124 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131.html\n--rw-r--r-- 0 root (0) root (0) 29705 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131_source.html\n--rw-r--r-- 0 root (0) root (0) 7344 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134.html\n--rw-r--r-- 0 root (0) root (0) 18649 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134_source.html\n--rw-r--r-- 0 root (0) root (0) 30299 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137.html\n--rw-r--r-- 0 root (0) root (0) 192703 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137_source.html\n--rw-r--r-- 0 root (0) root (0) 8169 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140.html\n--rw-r--r-- 0 root (0) root (0) 63827 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140_source.html\n--rw-r--r-- 0 root (0) root (0) 6780 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143.html\n--rw-r--r-- 0 root (0) root (0) 8262 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143_source.html\n--rw-r--r-- 0 root (0) root (0) 5325 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146.html\n--rw-r--r-- 0 root (0) root (0) 22981 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146_source.html\n--rw-r--r-- 0 root (0) root (0) 6400 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149.html\n--rw-r--r-- 0 root (0) root (0) 151816 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149_source.html\n--rw-r--r-- 0 root (0) root (0) 5660 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152.html\n--rw-r--r-- 0 root (0) root (0) 39763 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152_source.html\n--rw-r--r-- 0 root (0) root (0) 13174 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155.html\n--rw-r--r-- 0 root (0) root (0) 35626 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155_source.html\n--rw-r--r-- 0 root (0) root (0) 5881 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158.html\n--rw-r--r-- 0 root (0) root (0) 13121 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158_source.html\n--rw-r--r-- 0 root (0) root (0) 5662 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161.html\n--rw-r--r-- 0 root (0) root (0) 50072 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161_source.html\n--rw-r--r-- 0 root (0) root (0) 13246 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164.html\n--rw-r--r-- 0 root (0) root (0) 83988 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164_source.html\n--rw-r--r-- 0 root (0) root (0) 6997 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167.html\n--rw-r--r-- 0 root (0) root (0) 54427 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167_source.html\n--rw-r--r-- 0 root (0) root (0) 4899 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170.html\n--rw-r--r-- 0 root (0) root (0) 13459 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170_source.html\n--rw-r--r-- 0 root (0) root (0) 6381 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173.html\n--rw-r--r-- 0 root (0) root (0) 10393 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173_source.html\n--rw-r--r-- 0 root (0) root (0) 5441 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176.html\n--rw-r--r-- 0 root (0) root (0) 9255 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 5397 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179.html\n--rw-r--r-- 0 root (0) root (0) 14949 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 12424 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182.html\n--rw-r--r-- 0 root (0) root (0) 91584 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182_source.html\n--rw-r--r-- 0 root (0) root (0) 5664 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185.html\n--rw-r--r-- 0 root (0) root (0) 39917 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185_source.html\n--rw-r--r-- 0 root (0) root (0) 5346 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188.html\n--rw-r--r-- 0 root (0) root (0) 33491 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 5213 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191.html\n--rw-r--r-- 0 root (0) root (0) 15231 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191_source.html\n--rw-r--r-- 0 root (0) root (0) 16770 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194.html\n--rw-r--r-- 0 root (0) root (0) 48541 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194_source.html\n--rw-r--r-- 0 root (0) root (0) 8835 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197.html\n--rw-r--r-- 0 root (0) root (0) 10531 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197_source.html\n--rw-r--r-- 0 root (0) root (0) 7773 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200.html\n--rw-r--r-- 0 root (0) root (0) 22676 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200_source.html\n--rw-r--r-- 0 root (0) root (0) 6286 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203.html\n--rw-r--r-- 0 root (0) root (0) 21544 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203_source.html\n--rw-r--r-- 0 root (0) root (0) 8730 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206.html\n--rw-r--r-- 0 root (0) root (0) 61448 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206_source.html\n--rw-r--r-- 0 root (0) root (0) 17515 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209.html\n--rw-r--r-- 0 root (0) root (0) 45457 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209_source.html\n--rw-r--r-- 0 root (0) root (0) 5042 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212.html\n--rw-r--r-- 0 root (0) root (0) 6949 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212_source.html\n--rw-r--r-- 0 root (0) root (0) 5204 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215.html\n--rw-r--r-- 0 root (0) root (0) 29990 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215_source.html\n--rw-r--r-- 0 root (0) root (0) 8689 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218.html\n--rw-r--r-- 0 root (0) root (0) 15574 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218_source.html\n--rw-r--r-- 0 root (0) root (0) 4992 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221.html\n--rw-r--r-- 0 root (0) root (0) 31443 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221_source.html\n--rw-r--r-- 0 root (0) root (0) 3371 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224.html\n--rw-r--r-- 0 root (0) root (0) 88030 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224_source.html\n--rw-r--r-- 0 root (0) root (0) 6855 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227.html\n--rw-r--r-- 0 root (0) root (0) 112076 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227_source.html\n--rw-r--r-- 0 root (0) root (0) 60433 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230.html\n--rw-r--r-- 0 root (0) root (0) 122588 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230_source.html\n--rw-r--r-- 0 root (0) root (0) 5766 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233.html\n--rw-r--r-- 0 root (0) root (0) 16720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233_source.html\n--rw-r--r-- 0 root (0) root (0) 5979 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236.html\n--rw-r--r-- 0 root (0) root (0) 21113 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236_source.html\n--rw-r--r-- 0 root (0) root (0) 9498 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239.html\n--rw-r--r-- 0 root (0) root (0) 250587 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00239_source.html\n--rw-r--r-- 0 root (0) root (0) 4393 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242.html\n--rw-r--r-- 0 root (0) root (0) 7511 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242_source.html\n--rw-r--r-- 0 root (0) root (0) 7782 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245.html\n--rw-r--r-- 0 root (0) root (0) 12395 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245_source.html\n--rw-r--r-- 0 root (0) root (0) 3371 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248.html\n--rw-r--r-- 0 root (0) root (0) 7706 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248_source.html\n--rw-r--r-- 0 root (0) root (0) 3948 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251.html\n--rw-r--r-- 0 root (0) root (0) 4365 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254.html\n--rw-r--r-- 0 root (0) root (0) 5135 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254_source.html\n--rw-r--r-- 0 root (0) root (0) 5081 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257.html\n--rw-r--r-- 0 root (0) root (0) 7897 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257_source.html\n--rw-r--r-- 0 root (0) root (0) 5059 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260.html\n--rw-r--r-- 0 root (0) root (0) 23627 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260_source.html\n--rw-r--r-- 0 root (0) root (0) 8438 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263.html\n--rw-r--r-- 0 root (0) root (0) 9720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266.html\n--rw-r--r-- 0 root (0) root (0) 240953 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266_source.html\n--rw-r--r-- 0 root (0) root (0) 5274 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269.html\n--rw-r--r-- 0 root (0) root (0) 11329 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269_source.html\n--rw-r--r-- 0 root (0) root (0) 6661 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272.html\n--rw-r--r-- 0 root (0) root (0) 52850 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272_source.html\n--rw-r--r-- 0 root (0) root (0) 5048 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275.html\n--rw-r--r-- 0 root (0) root (0) 23174 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275_source.html\n--rw-r--r-- 0 root (0) root (0) 6157 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278.html\n--rw-r--r-- 0 root (0) root (0) 19958 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278_source.html\n--rw-r--r-- 0 root (0) root (0) 14994 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281.html\n--rw-r--r-- 0 root (0) root (0) 142940 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281_source.html\n--rw-r--r-- 0 root (0) root (0) 5324 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284.html\n--rw-r--r-- 0 root (0) root (0) 10218 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284_source.html\n--rw-r--r-- 0 root (0) root (0) 8193 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287.html\n--rw-r--r-- 0 root (0) root (0) 41652 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287_source.html\n--rw-r--r-- 0 root (0) root (0) 14827 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290.html\n--rw-r--r-- 0 root (0) root (0) 23435 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290_source.html\n--rw-r--r-- 0 root (0) root (0) 11653 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293.html\n--rw-r--r-- 0 root (0) root (0) 55283 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293_source.html\n--rw-r--r-- 0 root (0) root (0) 3383 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296.html\n--rw-r--r-- 0 root (0) root (0) 51919 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296_source.html\n--rw-r--r-- 0 root (0) root (0) 7918 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299.html\n--rw-r--r-- 0 root (0) root (0) 127860 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299_source.html\n--rw-r--r-- 0 root (0) root (0) 24240 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302.html\n--rw-r--r-- 0 root (0) root (0) 39035 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302_source.html\n--rw-r--r-- 0 root (0) root (0) 3471 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305.html\n--rw-r--r-- 0 root (0) root (0) 9186 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305_source.html\n--rw-r--r-- 0 root (0) root (0) 3473 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308.html\n--rw-r--r-- 0 root (0) root (0) 14821 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308_source.html\n--rw-r--r-- 0 root (0) root (0) 10468 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311.html\n--rw-r--r-- 0 root (0) root (0) 33173 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311_source.html\n--rw-r--r-- 0 root (0) root (0) 26302 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314.html\n--rw-r--r-- 0 root (0) root (0) 62033 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314_source.html\n--rw-r--r-- 0 root (0) root (0) 17881 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317.html\n--rw-r--r-- 0 root (0) root (0) 79928 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317_source.html\n--rw-r--r-- 0 root (0) root (0) 8833 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320.html\n--rw-r--r-- 0 root (0) root (0) 15784 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320_source.html\n--rw-r--r-- 0 root (0) root (0) 4958 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323.html\n--rw-r--r-- 0 root (0) root (0) 6603 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323_source.html\n--rw-r--r-- 0 root (0) root (0) 5355 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326.html\n--rw-r--r-- 0 root (0) root (0) 41537 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326_source.html\n--rw-r--r-- 0 root (0) root (0) 10744 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329.html\n--rw-r--r-- 0 root (0) root (0) 109175 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329_source.html\n--rw-r--r-- 0 root (0) root (0) 24717 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332.html\n--rw-r--r-- 0 root (0) root (0) 122775 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332_source.html\n--rw-r--r-- 0 root (0) root (0) 21360 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335.html\n--rw-r--r-- 0 root (0) root (0) 122172 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335_source.html\n--rw-r--r-- 0 root (0) root (0) 6585 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338.html\n--rw-r--r-- 0 root (0) root (0) 44036 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338_source.html\n--rw-r--r-- 0 root (0) root (0) 5621 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341.html\n--rw-r--r-- 0 root (0) root (0) 7109 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341_source.html\n--rw-r--r-- 0 root (0) root (0) 4124 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344.html\n--rw-r--r-- 0 root (0) root (0) 19994 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347.html\n--rw-r--r-- 0 root (0) root (0) 180715 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347_source.html\n--rw-r--r-- 0 root (0) root (0) 6611 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350.html\n--rw-r--r-- 0 root (0) root (0) 19944 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350_source.html\n--rw-r--r-- 0 root (0) root (0) 9111 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353.html\n--rw-r--r-- 0 root (0) root (0) 53122 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353_source.html\n--rw-r--r-- 0 root (0) root (0) 6676 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356.html\n--rw-r--r-- 0 root (0) root (0) 58446 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356_source.html\n--rw-r--r-- 0 root (0) root (0) 3657 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359.html\n--rw-r--r-- 0 root (0) root (0) 4978 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359_source.html\n--rw-r--r-- 0 root (0) root (0) 13224 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362.html\n--rw-r--r-- 0 root (0) root (0) 179116 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362_source.html\n--rw-r--r-- 0 root (0) root (0) 23464 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365.html\n--rw-r--r-- 0 root (0) root (0) 8504 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368.html\n--rw-r--r-- 0 root (0) root (0) 45745 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368_source.html\n--rw-r--r-- 0 root (0) root (0) 7591 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371.html\n--rw-r--r-- 0 root (0) root (0) 138694 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371_source.html\n--rw-r--r-- 0 root (0) root (0) 6031 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374.html\n--rw-r--r-- 0 root (0) root (0) 51849 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374_source.html\n--rw-r--r-- 0 root (0) root (0) 6914 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377.html\n--rw-r--r-- 0 root (0) root (0) 47730 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377_source.html\n--rw-r--r-- 0 root (0) root (0) 11615 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380.html\n--rw-r--r-- 0 root (0) root (0) 103142 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380_source.html\n--rw-r--r-- 0 root (0) root (0) 6822 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383.html\n--rw-r--r-- 0 root (0) root (0) 40313 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383_source.html\n--rw-r--r-- 0 root (0) root (0) 3648 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386.html\n--rw-r--r-- 0 root (0) root (0) 4981 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386_source.html\n--rw-r--r-- 0 root (0) root (0) 7456 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389.html\n--rw-r--r-- 0 root (0) root (0) 33695 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389_source.html\n--rw-r--r-- 0 root (0) root (0) 11466 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392.html\n--rw-r--r-- 0 root (0) root (0) 291478 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392_source.html\n--rw-r--r-- 0 root (0) root (0) 3471 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395.html\n--rw-r--r-- 0 root (0) root (0) 10170 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395_source.html\n--rw-r--r-- 0 root (0) root (0) 9140 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398.html\n--rw-r--r-- 0 root (0) root (0) 173678 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398_source.html\n--rw-r--r-- 0 root (0) root (0) 5637 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401.html\n--rw-r--r-- 0 root (0) root (0) 33707 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401_source.html\n--rw-r--r-- 0 root (0) root (0) 8765 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404.html\n--rw-r--r-- 0 root (0) root (0) 72000 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404_source.html\n--rw-r--r-- 0 root (0) root (0) 6490 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407.html\n--rw-r--r-- 0 root (0) root (0) 34021 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407_source.html\n+-rw-r--r-- 0 root (0) root (0) 9498 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 250587 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00008_source.html\n+-rw-r--r-- 0 root (0) root (0) 24717 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 122775 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00011_source.html\n+-rw-r--r-- 0 root (0) root (0) 60433 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 122588 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00014_source.html\n+-rw-r--r-- 0 root (0) root (0) 4958 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017.html\n+-rw-r--r-- 0 root (0) root (0) 6603 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00017_source.html\n+-rw-r--r-- 0 root (0) root (0) 8833 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 15784 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00020_source.html\n+-rw-r--r-- 0 root (0) root (0) 17901 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 167128 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00023_source.html\n+-rw-r--r-- 0 root (0) root (0) 5042 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026.html\n+-rw-r--r-- 0 root (0) root (0) 6949 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00026_source.html\n+-rw-r--r-- 0 root (0) root (0) 7773 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029.html\n+-rw-r--r-- 0 root (0) root (0) 22676 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00029_source.html\n+-rw-r--r-- 0 root (0) root (0) 3898 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 13584 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 94213 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00035_source.html\n+-rw-r--r-- 0 root (0) root (0) 8195 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038.html\n+-rw-r--r-- 0 root (0) root (0) 144459 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00038_source.html\n+-rw-r--r-- 0 root (0) root (0) 24240 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041.html\n+-rw-r--r-- 0 root (0) root (0) 39035 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00041_source.html\n+-rw-r--r-- 0 root (0) root (0) 3817 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044.html\n+-rw-r--r-- 0 root (0) root (0) 6524 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00044_source.html\n+-rw-r--r-- 0 root (0) root (0) 4309 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047.html\n+-rw-r--r-- 0 root (0) root (0) 17896 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00047_source.html\n+-rw-r--r-- 0 root (0) root (0) 4654 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 7264 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00050_source.html\n+-rw-r--r-- 0 root (0) root (0) 7918 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 127860 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00053_source.html\n+-rw-r--r-- 0 root (0) root (0) 14827 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056.html\n+-rw-r--r-- 0 root (0) root (0) 23435 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00056_source.html\n+-rw-r--r-- 0 root (0) root (0) 5114 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 9510 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00059_source.html\n+-rw-r--r-- 0 root (0) root (0) 30299 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062.html\n+-rw-r--r-- 0 root (0) root (0) 192703 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00062_source.html\n+-rw-r--r-- 0 root (0) root (0) 17881 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065.html\n+-rw-r--r-- 0 root (0) root (0) 79928 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00065_source.html\n+-rw-r--r-- 0 root (0) root (0) 6383 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 16095 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00068_source.html\n+-rw-r--r-- 0 root (0) root (0) 5274 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 11329 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00071_source.html\n+-rw-r--r-- 0 root (0) root (0) 8835 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074.html\n+-rw-r--r-- 0 root (0) root (0) 10531 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00074_source.html\n+-rw-r--r-- 0 root (0) root (0) 6286 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 21544 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00077_source.html\n+-rw-r--r-- 0 root (0) root (0) 8322 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080.html\n+-rw-r--r-- 0 root (0) root (0) 40739 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00080_source.html\n+-rw-r--r-- 0 root (0) root (0) 6186 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083.html\n+-rw-r--r-- 0 root (0) root (0) 17740 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00083_source.html\n+-rw-r--r-- 0 root (0) root (0) 39912 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086.html\n+-rw-r--r-- 0 root (0) root (0) 14840 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00086_source.html\n+-rw-r--r-- 0 root (0) root (0) 5766 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 16720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00089_source.html\n+-rw-r--r-- 0 root (0) root (0) 10468 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 33173 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00092_source.html\n+-rw-r--r-- 0 root (0) root (0) 4127 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00095.html\n+-rw-r--r-- 0 root (0) root (0) 6661 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 52850 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00098_source.html\n+-rw-r--r-- 0 root (0) root (0) 6818 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 100135 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00101_source.html\n+-rw-r--r-- 0 root (0) root (0) 7493 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104.html\n+-rw-r--r-- 0 root (0) root (0) 31465 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00104_source.html\n+-rw-r--r-- 0 root (0) root (0) 14994 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 142940 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00107_source.html\n+-rw-r--r-- 0 root (0) root (0) 5653 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110.html\n+-rw-r--r-- 0 root (0) root (0) 7232 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00110_source.html\n+-rw-r--r-- 0 root (0) root (0) 7264 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 14137 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00113_source.html\n+-rw-r--r-- 0 root (0) root (0) 9720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116.html\n+-rw-r--r-- 0 root (0) root (0) 240953 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00116_source.html\n+-rw-r--r-- 0 root (0) root (0) 5664 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119.html\n+-rw-r--r-- 0 root (0) root (0) 39917 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00119_source.html\n+-rw-r--r-- 0 root (0) root (0) 5441 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122.html\n+-rw-r--r-- 0 root (0) root (0) 9255 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00122_source.html\n+-rw-r--r-- 0 root (0) root (0) 5660 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125.html\n+-rw-r--r-- 0 root (0) root (0) 39763 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00125_source.html\n+-rw-r--r-- 0 root (0) root (0) 6997 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128.html\n+-rw-r--r-- 0 root (0) root (0) 54427 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00128_source.html\n+-rw-r--r-- 0 root (0) root (0) 5397 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 14949 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00131_source.html\n+-rw-r--r-- 0 root (0) root (0) 6381 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134.html\n+-rw-r--r-- 0 root (0) root (0) 10393 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00134_source.html\n+-rw-r--r-- 0 root (0) root (0) 4899 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 13459 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00137_source.html\n+-rw-r--r-- 0 root (0) root (0) 12424 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 91584 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00140_source.html\n+-rw-r--r-- 0 root (0) root (0) 13246 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143.html\n+-rw-r--r-- 0 root (0) root (0) 83988 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00143_source.html\n+-rw-r--r-- 0 root (0) root (0) 5662 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146.html\n+-rw-r--r-- 0 root (0) root (0) 50072 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00146_source.html\n+-rw-r--r-- 0 root (0) root (0) 13174 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 35626 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00149_source.html\n+-rw-r--r-- 0 root (0) root (0) 5881 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 13121 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00152_source.html\n+-rw-r--r-- 0 root (0) root (0) 6400 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155.html\n+-rw-r--r-- 0 root (0) root (0) 151816 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00155_source.html\n+-rw-r--r-- 0 root (0) root (0) 16770 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158.html\n+-rw-r--r-- 0 root (0) root (0) 48541 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00158_source.html\n+-rw-r--r-- 0 root (0) root (0) 5621 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 7109 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00161_source.html\n+-rw-r--r-- 0 root (0) root (0) 5324 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164.html\n+-rw-r--r-- 0 root (0) root (0) 10218 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00164_source.html\n+-rw-r--r-- 0 root (0) root (0) 5979 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 21113 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00167_source.html\n+-rw-r--r-- 0 root (0) root (0) 11653 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 55283 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00170_source.html\n+-rw-r--r-- 0 root (0) root (0) 21234 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 71204 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00173_source.html\n+-rw-r--r-- 0 root (0) root (0) 20534 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 80039 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 5346 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 33491 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 4393 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 7511 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00182_source.html\n+-rw-r--r-- 0 root (0) root (0) 3383 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 51919 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 5204 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 29990 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00188_source.html\n+-rw-r--r-- 0 root (0) root (0) 3365 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 10369 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 8730 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194.html\n+-rw-r--r-- 0 root (0) root (0) 61448 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00194_source.html\n+-rw-r--r-- 0 root (0) root (0) 4910 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00197.html\n+-rw-r--r-- 0 root (0) root (0) 6585 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200.html\n+-rw-r--r-- 0 root (0) root (0) 44036 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00200_source.html\n+-rw-r--r-- 0 root (0) root (0) 7194 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203.html\n+-rw-r--r-- 0 root (0) root (0) 151467 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00203_source.html\n+-rw-r--r-- 0 root (0) root (0) 5355 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206.html\n+-rw-r--r-- 0 root (0) root (0) 41537 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00206_source.html\n+-rw-r--r-- 0 root (0) root (0) 6555 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209.html\n+-rw-r--r-- 0 root (0) root (0) 18101 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00209_source.html\n+-rw-r--r-- 0 root (0) root (0) 4124 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00212.html\n+-rw-r--r-- 0 root (0) root (0) 6924 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00215.html\n+-rw-r--r-- 0 root (0) root (0) 4978 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00218.html\n+-rw-r--r-- 0 root (0) root (0) 13604 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221.html\n+-rw-r--r-- 0 root (0) root (0) 28674 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00221_source.html\n+-rw-r--r-- 0 root (0) root (0) 6712 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224.html\n+-rw-r--r-- 0 root (0) root (0) 11002 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00224_source.html\n+-rw-r--r-- 0 root (0) root (0) 24038 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227.html\n+-rw-r--r-- 0 root (0) root (0) 42062 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00227_source.html\n+-rw-r--r-- 0 root (0) root (0) 81299 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230.html\n+-rw-r--r-- 0 root (0) root (0) 145525 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00230_source.html\n+-rw-r--r-- 0 root (0) root (0) 13870 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233.html\n+-rw-r--r-- 0 root (0) root (0) 20197 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00233_source.html\n+-rw-r--r-- 0 root (0) root (0) 9860 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236.html\n+-rw-r--r-- 0 root (0) root (0) 20795 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00236_source.html\n+-rw-r--r-- 0 root (0) root (0) 14004 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242.html\n+-rw-r--r-- 0 root (0) root (0) 86151 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00242_source.html\n+-rw-r--r-- 0 root (0) root (0) 33482 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245.html\n+-rw-r--r-- 0 root (0) root (0) 357624 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00245_source.html\n+-rw-r--r-- 0 root (0) root (0) 8438 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00248.html\n+-rw-r--r-- 0 root (0) root (0) 3371 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251.html\n+-rw-r--r-- 0 root (0) root (0) 7706 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00251_source.html\n+-rw-r--r-- 0 root (0) root (0) 5081 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254.html\n+-rw-r--r-- 0 root (0) root (0) 7897 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00254_source.html\n+-rw-r--r-- 0 root (0) root (0) 4992 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257.html\n+-rw-r--r-- 0 root (0) root (0) 31443 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00257_source.html\n+-rw-r--r-- 0 root (0) root (0) 5048 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260.html\n+-rw-r--r-- 0 root (0) root (0) 23174 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00260_source.html\n+-rw-r--r-- 0 root (0) root (0) 6855 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263.html\n+-rw-r--r-- 0 root (0) root (0) 112076 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00263_source.html\n+-rw-r--r-- 0 root (0) root (0) 22052 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266.html\n+-rw-r--r-- 0 root (0) root (0) 46229 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00266_source.html\n+-rw-r--r-- 0 root (0) root (0) 5213 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269.html\n+-rw-r--r-- 0 root (0) root (0) 15231 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00269_source.html\n+-rw-r--r-- 0 root (0) root (0) 5604 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272.html\n+-rw-r--r-- 0 root (0) root (0) 9237 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00272_source.html\n+-rw-r--r-- 0 root (0) root (0) 8193 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275.html\n+-rw-r--r-- 0 root (0) root (0) 41652 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00275_source.html\n+-rw-r--r-- 0 root (0) root (0) 9164 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00278.html\n+-rw-r--r-- 0 root (0) root (0) 17515 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281.html\n+-rw-r--r-- 0 root (0) root (0) 45457 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00281_source.html\n+-rw-r--r-- 0 root (0) root (0) 3473 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284.html\n+-rw-r--r-- 0 root (0) root (0) 14821 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00284_source.html\n+-rw-r--r-- 0 root (0) root (0) 3471 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287.html\n+-rw-r--r-- 0 root (0) root (0) 9186 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00287_source.html\n+-rw-r--r-- 0 root (0) root (0) 12793 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290.html\n+-rw-r--r-- 0 root (0) root (0) 124302 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00290_source.html\n+-rw-r--r-- 0 root (0) root (0) 3948 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00293.html\n+-rw-r--r-- 0 root (0) root (0) 7355 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296.html\n+-rw-r--r-- 0 root (0) root (0) 9907 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00296_source.html\n+-rw-r--r-- 0 root (0) root (0) 7344 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299.html\n+-rw-r--r-- 0 root (0) root (0) 18649 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00299_source.html\n+-rw-r--r-- 0 root (0) root (0) 5124 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302.html\n+-rw-r--r-- 0 root (0) root (0) 29705 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00302_source.html\n+-rw-r--r-- 0 root (0) root (0) 19994 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305.html\n+-rw-r--r-- 0 root (0) root (0) 180715 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00305_source.html\n+-rw-r--r-- 0 root (0) root (0) 3657 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308.html\n+-rw-r--r-- 0 root (0) root (0) 4978 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00308_source.html\n+-rw-r--r-- 0 root (0) root (0) 6031 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311.html\n+-rw-r--r-- 0 root (0) root (0) 51849 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00311_source.html\n+-rw-r--r-- 0 root (0) root (0) 13224 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314.html\n+-rw-r--r-- 0 root (0) root (0) 179116 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00314_source.html\n+-rw-r--r-- 0 root (0) root (0) 6490 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317.html\n+-rw-r--r-- 0 root (0) root (0) 34021 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00317_source.html\n+-rw-r--r-- 0 root (0) root (0) 23464 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00320.html\n+-rw-r--r-- 0 root (0) root (0) 3471 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323.html\n+-rw-r--r-- 0 root (0) root (0) 10170 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00323_source.html\n+-rw-r--r-- 0 root (0) root (0) 6914 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326.html\n+-rw-r--r-- 0 root (0) root (0) 47730 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00326_source.html\n+-rw-r--r-- 0 root (0) root (0) 6611 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329.html\n+-rw-r--r-- 0 root (0) root (0) 19944 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00329_source.html\n+-rw-r--r-- 0 root (0) root (0) 5637 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332.html\n+-rw-r--r-- 0 root (0) root (0) 33707 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00332_source.html\n+-rw-r--r-- 0 root (0) root (0) 8765 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335.html\n+-rw-r--r-- 0 root (0) root (0) 72000 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00335_source.html\n+-rw-r--r-- 0 root (0) root (0) 7456 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338.html\n+-rw-r--r-- 0 root (0) root (0) 33695 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00338_source.html\n+-rw-r--r-- 0 root (0) root (0) 9111 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341.html\n+-rw-r--r-- 0 root (0) root (0) 53122 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00341_source.html\n+-rw-r--r-- 0 root (0) root (0) 6676 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344.html\n+-rw-r--r-- 0 root (0) root (0) 58446 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00344_source.html\n+-rw-r--r-- 0 root (0) root (0) 6822 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347.html\n+-rw-r--r-- 0 root (0) root (0) 40313 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00347_source.html\n+-rw-r--r-- 0 root (0) root (0) 3648 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350.html\n+-rw-r--r-- 0 root (0) root (0) 4981 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00350_source.html\n+-rw-r--r-- 0 root (0) root (0) 7591 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353.html\n+-rw-r--r-- 0 root (0) root (0) 138694 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00353_source.html\n+-rw-r--r-- 0 root (0) root (0) 8504 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356.html\n+-rw-r--r-- 0 root (0) root (0) 45745 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00356_source.html\n+-rw-r--r-- 0 root (0) root (0) 11615 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359.html\n+-rw-r--r-- 0 root (0) root (0) 103142 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00359_source.html\n+-rw-r--r-- 0 root (0) root (0) 9140 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362.html\n+-rw-r--r-- 0 root (0) root (0) 173678 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00362_source.html\n+-rw-r--r-- 0 root (0) root (0) 11466 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365.html\n+-rw-r--r-- 0 root (0) root (0) 291478 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00365_source.html\n+-rw-r--r-- 0 root (0) root (0) 7782 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368.html\n+-rw-r--r-- 0 root (0) root (0) 12395 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00368_source.html\n+-rw-r--r-- 0 root (0) root (0) 10744 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371.html\n+-rw-r--r-- 0 root (0) root (0) 109175 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00371_source.html\n+-rw-r--r-- 0 root (0) root (0) 8169 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374.html\n+-rw-r--r-- 0 root (0) root (0) 63827 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00374_source.html\n+-rw-r--r-- 0 root (0) root (0) 5059 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377.html\n+-rw-r--r-- 0 root (0) root (0) 23627 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00377_source.html\n+-rw-r--r-- 0 root (0) root (0) 4767 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380.html\n+-rw-r--r-- 0 root (0) root (0) 14347 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00380_source.html\n+-rw-r--r-- 0 root (0) root (0) 21360 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383.html\n+-rw-r--r-- 0 root (0) root (0) 122172 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00383_source.html\n+-rw-r--r-- 0 root (0) root (0) 5325 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386.html\n+-rw-r--r-- 0 root (0) root (0) 22981 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00386_source.html\n+-rw-r--r-- 0 root (0) root (0) 8689 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389.html\n+-rw-r--r-- 0 root (0) root (0) 15574 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00389_source.html\n+-rw-r--r-- 0 root (0) root (0) 10990 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392.html\n+-rw-r--r-- 0 root (0) root (0) 22882 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00392_source.html\n+-rw-r--r-- 0 root (0) root (0) 4365 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395.html\n+-rw-r--r-- 0 root (0) root (0) 5135 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00395_source.html\n+-rw-r--r-- 0 root (0) root (0) 6157 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398.html\n+-rw-r--r-- 0 root (0) root (0) 19958 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00398_source.html\n+-rw-r--r-- 0 root (0) root (0) 6806 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401.html\n+-rw-r--r-- 0 root (0) root (0) 12869 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00401_source.html\n+-rw-r--r-- 0 root (0) root (0) 14429 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404.html\n+-rw-r--r-- 0 root (0) root (0) 51306 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00404_source.html\n+-rw-r--r-- 0 root (0) root (0) 26302 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407.html\n+-rw-r--r-- 0 root (0) root (0) 62033 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00407_source.html\n -rw-r--r-- 0 root (0) root (0) 7123 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410.html\n -rw-r--r-- 0 root (0) root (0) 23204 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00410_source.html\n--rw-r--r-- 0 root (0) root (0) 3898 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413.html\n--rw-r--r-- 0 root (0) root (0) 9164 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416.html\n--rw-r--r-- 0 root (0) root (0) 13584 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419.html\n--rw-r--r-- 0 root (0) root (0) 94213 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419_source.html\n--rw-r--r-- 0 root (0) root (0) 6818 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422.html\n--rw-r--r-- 0 root (0) root (0) 100135 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422_source.html\n--rw-r--r-- 0 root (0) root (0) 20534 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425.html\n--rw-r--r-- 0 root (0) root (0) 80039 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425_source.html\n+-rw-r--r-- 0 root (0) root (0) 3371 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413.html\n+-rw-r--r-- 0 root (0) root (0) 88030 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00413_source.html\n+-rw-r--r-- 0 root (0) root (0) 7720 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416.html\n+-rw-r--r-- 0 root (0) root (0) 10467 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00416_source.html\n+-rw-r--r-- 0 root (0) root (0) 5602 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419.html\n+-rw-r--r-- 0 root (0) root (0) 9345 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00419_source.html\n+-rw-r--r-- 0 root (0) root (0) 6780 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422.html\n+-rw-r--r-- 0 root (0) root (0) 8262 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00422_source.html\n+-rw-r--r-- 0 root (0) root (0) 5246 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425.html\n+-rw-r--r-- 0 root (0) root (0) 9924 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00425_source.html\n -rw-r--r-- 0 root (0) root (0) 5173 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00428.html\n -rw-r--r-- 0 root (0) root (0) 49335 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00428_source.html\n -rw-r--r-- 0 root (0) root (0) 7896 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00431.html\n -rw-r--r-- 0 root (0) root (0) 5292 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00432.html\n -rw-r--r-- 0 root (0) root (0) 262467 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00433.html\n -rw-r--r-- 0 root (0) root (0) 27946 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00433.png\n -rw-r--r-- 0 root (0) root (0) 39664 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/a00434.html\n@@ -1185,15 +1185,15 @@\n -rw-r--r-- 0 root (0) root (0) 2402 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_be46aaae597ce098e36afa8d6ef4f49b_dep.png\n -rw-r--r-- 0 root (0) root (0) 4890 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_cf308425303dd5c426fac7b7f2967d96.html\n -rw-r--r-- 0 root (0) root (0) 1621 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_cf308425303dd5c426fac7b7f2967d96_dep.png\n -rw-r--r-- 0 root (0) root (0) 49658 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e151556194dc695299293609645e9437.html\n -rw-r--r-- 0 root (0) root (0) 11161 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e151556194dc695299293609645e9437_dep.png\n -rw-r--r-- 0 root (0) root (0) 3668 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html\n -rw-r--r-- 0 root (0) root (0) 45631 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/doxygen.css\n--rw-r--r-- 0 root (0) root (0) 165882 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dune-common.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 165884 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dune-common.tag.gz\n -rw-r--r-- 0 root (0) root (0) 7704 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/dynsections.js\n -rw-r--r-- 0 root (0) root (0) 56072 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/files.html\n -rw-r--r-- 0 root (0) root (0) 1145 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_0.png\n -rw-r--r-- 0 root (0) root (0) 1167 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_0_dark.png\n -rw-r--r-- 0 root (0) root (0) 1153 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_1.png\n -rw-r--r-- 0 root (0) root (0) 403 2024-10-21 20:30:17.000000 ./usr/share/doc/libdune-common-doc/doxygen/form_10.png\n -rw-r--r-- 0 root (0) root (0) 422 2024-10-21 20:30:17.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: stdthread.cc File Reference\n+dune-common: diagonalmatrix.hh File Reference\n \n \n \n \n \n \n \n@@ -70,36 +70,75 @@\n
\n \n
\n \n
\n
\n-Namespaces |\n-Functions
\n-
stdthread.cc File Reference
\n+Classes |\n+Namespaces
\n+
diagonalmatrix.hh File Reference
\n \n
\n-
#include <cstdlib>
\n+\n+

This file implements a quadratic diagonal matrix of fixed size. \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 <mutex>
\n-#include <ostream>
\n-#include <dune/common/stdthread.hh>
\n-
\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+\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+Classes

class  Dune::DiagonalMatrix< K, n >
 A diagonal matrix of static size. More...
 
struct  Dune::FieldTraits< DiagonalMatrix< K, n > >
 
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 > >
 
\n \n \n \n \n-

\n Namespaces

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

\n-Functions

void Dune::doAssertCallOnce (const char *file, int line, const char *function)
 
\n-
\n+

Detailed Description

\n+

This file implements a quadratic diagonal matrix of fixed size.

\n+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,58 @@\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-stdthread.cc File Reference\n-#include \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+#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/_\bs_\bt_\bd_\bt_\bh_\br_\be_\ba_\bd_\b._\bh_\bh>\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+_\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+\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+\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+\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-void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bo_\bA_\bs_\bs_\be_\br_\bt_\bC_\ba_\bl_\bl_\bO_\bn_\bc_\be (const char *file, int line, const char *function)\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 ===============================================================================\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: debugalign.cc File Reference\n+dune-common: float_cmp.cc File Reference\n \n \n \n \n \n \n \n@@ -70,44 +70,119 @@\n
\n \n
\n \n
\n \n-
debugalign.cc File Reference
\n+
float_cmp.cc File Reference
\n
\n
\n-
#include <cstddef>
\n+
#include "float_cmp.hh"
\n+#include <vector>
\n+#include <limits>
\n+#include <algorithm>
\n #include <cstdlib>
\n-#include <functional>
\n-#include <ios>
\n-#include <iostream>
\n-#include <utility>
\n-#include <dune/common/debugalign.hh>
\n-
\n+#include <dune/common/fvector.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+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+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

static void Dune::defaultViolatedAlignment (const char *className, std::size_t expectedAlignment, const void *address)
 default alignment violation handler
 
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
 
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", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +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-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-debugalign.cc File Reference\n-#include \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 \n-#include \n-#include \n-#include \n-#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bd_\be_\bb_\bu_\bg_\ba_\bl_\bi_\bg_\bn_\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+_\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- static void\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\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, const\n- void *address)\n-\u00a0 default alignment violation handler\n-\u00a0\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 _\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 *_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be,\n- std::size_t expectedAlignment, const void *address)\n-\u00a0 called when an alignment violation is detected\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/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: classname.hh File Reference\n+dune-common: debugalign.hh File Reference\n \n \n \n \n \n \n \n@@ -70,49 +70,380 @@\n
\n \n
\n
\n
\n \n-
classname.hh File Reference
\n+Macros |\n+Typedefs |\n+Functions |\n+Variables
\n+
debugalign.hh File Reference
\n \n
\n-\n-

A free function to provide the demangled class name of a given object or type as a string. \n-More...

\n-
#include <cstdlib>
\n-#include <memory>
\n-#include <string>
\n-#include <typeinfo>
\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

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+Classes

struct  Dune::AlignedBase< align, Impl >
 CRTP base mixin class to check alignment. More...
 
struct  Dune::IsNumber< AlignedNumberImpl::AlignedNumber< T, align > >
 
class  Dune::AlignedNumberImpl::AlignedNumber< T, align >
 aligned wrappers for arithmetic types More...
 
struct  Dune::Simd::Overloads::ScalarType< AlignedNumber< T, align > >
 
struct  Dune::Simd::Overloads::RebindType< U, AlignedNumber< T, align > >
 
struct  Dune::Simd::Overloads::LaneCount< AlignedNumber< T, align > >
 
\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+\n+\n+\n+\n+\n+\n+\n+

\n Functions

template<class T >
std::string Dune::className ()
 Provide the demangled class name of a type T as a string.
 
template<class T >
std::string Dune::className (T &&v)
 Provide the demangled class name of a given object as a string.
 
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+Variables

static constexpr auto Dune::debugAlignment = 2*alignof(std::max_align_t)
 an alignment large enough to trigger alignment errors
 
\n-

Detailed Description

\n-

A free function to provide the demangled class name of a given object or type as a string.

\n-
\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 \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,388 @@\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-classname.hh File Reference\n-A free function to provide the demangled class name of a given object or type\n-as a string. _\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 | _\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 \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 _\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+\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+\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+\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+\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+\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+\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-template\n-std::string\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be ()\n-\u00a0 Provide the demangled class name of a type T as a string.\n-\u00a0\n-template\n-std::string\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be (T &&v)\n-\u00a0 Provide the demangled class name of a given object as a string.\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-A free function to provide the demangled class name of a given object or type\n-as a string.\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+\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 ===============================================================================\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: classname.hh Source File\n+dune-common: debugalign.hh Source File\n \n \n \n \n \n \n \n@@ -74,95 +74,657 @@\n \n
\n \n
\n \n
\n-
classname.hh
\n+
debugalign.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_CLASSNAME_HH
\n-
6#define DUNE_CLASSNAME_HH
\n+
5#ifndef DUNE_DEBUGALIGN_HH
\n+
6#define DUNE_DEBUGALIGN_HH
\n
7
\n-
13#include <cstdlib>
\n-
14#include <memory>
\n-
15#include <string>
\n-
16#include <typeinfo>
\n-
17#include <type_traits>
\n-
18
\n-
19#if __has_include(<cxxabi.h>) && !DISABLE_CXA_DEMANGLE
\n-
20#define HAVE_CXA_DEMANGLE 1
\n-
21#include <cxxabi.h>
\n-
22#endif // #if HAVE_CXA_DEMANGLE
\n-
23
\n-
24namespace Dune {
\n-
25
\n-
26 namespace Impl {
\n-
27
\n-
28 inline std::string demangle(std::string name)
\n-
29 {
\n-
30#if HAVE_CXA_DEMANGLE
\n-
31 int status;
\n-
32 std::unique_ptr<char, void(*)(void*)>
\n-
33 demangled(abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status),
\n-
34 std::free);
\n-
35 if( demangled )
\n-
36 name = demangled.get();
\n-
37#endif // #if HAVE_CXA_DEMANGLE
\n-
38 return name;
\n-
39 }
\n-
40 }
\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-
44 * \\ingroup CxxUtilities
\n-
45 */
\n-
46 template <class T>
\n-
\n-
47 std::string className ()
\n-
48 {
\n-
49 typedef typename std::remove_reference<T>::type TR;
\n-
50 std::string className = Impl::demangle( typeid( TR ).name() );
\n-
51 if (std::is_const<TR>::value)
\n-
52 className += " const";
\n-
53 if (std::is_volatile<TR>::value)
\n-
54 className += " volatile";
\n-
55 if (std::is_lvalue_reference<T>::value)
\n-
56 className += "&";
\n-
57 else if (std::is_rvalue_reference<T>::value)
\n-
58 className += "&&";
\n-
59 return className;
\n-
60 }
\n-
\n-
61
\n-
63 /*
\n-
64 * \\ingroup CxxUtilities
\n-
65 */
\n-
66 template <class T>
\n-
\n-
67 std::string className ( T&& v)
\n-
68 {
\n-
69 typedef typename std::remove_reference<T>::type TR;
\n-
70 std::string className = Impl::demangle( typeid(v).name() );
\n-
71 if (std::is_const<TR>::value)
\n-
72 className += " const";
\n-
73 if (std::is_volatile<TR>::value)
\n-
74 className += " volatile";
\n-
75 return className;
\n-
76 }
\n-
\n-
77} // namespace Dune
\n-
78
\n-
79#endif // DUNE_CLASSNAME_HH
\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+
146
\n+
147 // I/O
\n+
148 template<class charT, class Traits>
\n+
149 friend std::basic_istream<charT, Traits>&
\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+
256
\n+
257#undef DUNE_ASSIGN_OP
\n+
258 };
\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+
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+
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
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
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,90 +1,701 @@\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-classname.hh\n+debugalign.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_CLASSNAME_HH\n-6#define DUNE_CLASSNAME_HH\n+5#ifndef DUNE_DEBUGALIGN_HH\n+6#define DUNE_DEBUGALIGN_HH\n 7\n-13#include \n-14#include \n-15#include \n-16#include \n-17#include \n-18\n-19#if __has_include() && !DISABLE_CXA_DEMANGLE\n-20#define HAVE_CXA_DEMANGLE 1\n-21#include \n-22#endif // #if HAVE_CXA_DEMANGLE\n-23\n-24namespace _\bD_\bu_\bn_\be {\n-25\n-26 namespace Impl {\n-27\n-28 inline std::string demangle(std::string name)\n-29 {\n-30#if HAVE_CXA_DEMANGLE\n-31 int status;\n-32 std::unique_ptr\n-33 demangled(abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status),\n-34 std::free);\n-35 if( demangled )\n-36 name = demangled.get();\n-37#endif // #if HAVE_CXA_DEMANGLE\n-38 return name;\n-39 }\n-40 }\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-44 * \\ingroup CxxUtilities\n-45 */\n-46 template \n-_\b4_\b7 std::string _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be ()\n-48 {\n-49 typedef typename std::remove_reference::type TR;\n-50 std::string _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be = Impl::demangle( typeid( TR ).name() );\n-51 if (std::is_const::value)\n-52 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \" const\";\n-53 if (std::is_volatile::value)\n-54 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \" volatile\";\n-55 if (std::is_lvalue_reference::value)\n-56 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \"&\";\n-57 else if (std::is_rvalue_reference::value)\n-58 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \"&&\";\n-59 return _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be;\n-60 }\n-61\n-63 /*\n-64 * \\ingroup CxxUtilities\n-65 */\n-66 template \n-_\b6_\b7 std::string _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be ( T&& v)\n-68 {\n-69 typedef typename std::remove_reference::type TR;\n-70 std::string _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be = Impl::demangle( typeid(v).name() );\n-71 if (std::is_const::value)\n-72 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \" const\";\n-73 if (std::is_volatile::value)\n-74 _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be += \" volatile\";\n-75 return _\bc_\bl_\ba_\bs_\bs_\bN_\ba_\bm_\be;\n-76 }\n-77} // namespace Dune\n-78\n-79#endif // DUNE_CLASSNAME_HH\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+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+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+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+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+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 _\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 ===============================================================================\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: fmatrixev.cc File Reference\n+dune-common: matvectraits.hh File Reference\n \n \n \n \n \n \n \n@@ -70,45 +70,38 @@\n
\n \n
\n \n
\n
\n-Macros
\n-
fmatrixev.cc File Reference
\n+Classes |\n+Namespaces
\n+
matvectraits.hh File Reference
\n \n
\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/fmatrixev.hh>
\n-
\n-\n-\n-\n-

\n-Macros

#define DUNE_FMATRIXEIGENVALUES_CC
 
\n-

Macro Definition Documentation

\n-\n-

◆ DUNE_FMATRIXEIGENVALUES_CC

\n \n-
\n-
\n- \n- \n- \n- \n-
#define DUNE_FMATRIXEIGENVALUES_CC
\n-
\n+

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

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

Go to the source code of this file.

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

\n+Classes

struct  Dune::DenseMatVecTraits< T >
 
\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+
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,23 @@\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-fmatrixev.cc File Reference\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_\bm_\ba_\bt_\br_\bi_\bx_\be_\bv_\b._\bh_\bh>\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bF_\bM_\bA_\bT_\bR_\bI_\bX_\bE_\bI_\bG_\bE_\bN_\bV_\bA_\bL_\bU_\bE_\bS_\b__\bC_\bC\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+_\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 \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_F\bFM\bMA\bAT\bTR\bRI\bIX\bXE\bEI\bIG\bGE\bEN\bNV\bVA\bAL\bLU\bUE\bES\bS_\b_C\bCC\bC *\b**\b**\b**\b**\b*\n-#define DUNE_FMATRIXEIGENVALUES_CC\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 ===============================================================================\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: streamoperators.hh File Reference\n+dune-common: dotproduct.hh File Reference\n \n \n \n \n \n \n \n@@ -70,52 +70,55 @@\n
\n \n
\n \n
\n \n-
streamoperators.hh File Reference
\n+
dotproduct.hh File Reference
\n
\n
\n \n-

Implementation of stream operators for std::array and std::tuple. \n+

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

\n-
#include <array>
\n-#include <tuple>
\n-#include <utility>
\n-#include <dune/common/hybridutilities.hh>
\n+
#include "ftraits.hh"
\n+#include "typetraits.hh"
\n
\n

Go to the source code of this file.

\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 > >
 
\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 Functions

template<typename Stream , typename... Ts>
Stream & Dune::operator<< (Stream &stream, const std::tuple< Ts... > &t)
 Print a std::tuple.
 
template<typename Stream , typename... Ts>
Stream & Dune::operator>> (Stream &stream, std::tuple< Ts... > &t)
 Read a std::tuple.
 
template<typename Stream , typename T , std::size_t N>
Stream & Dune::operator<< (Stream &stream, const std::array< T, N > &a)
 Print a std::array.
 
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-

Implementation of stream operators for std::array and std::tuple.

\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
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,48 @@\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-streamoperators.hh File Reference\n-Implementation of stream operators for std::array and std::tuple. _\bM_\bo_\br_\be_\b._\b._\b.\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+_\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 _\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+\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-Stream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (Stream &stream, const std::tuple< Ts... > &t)\n-\u00a0 Print a std::tuple.\n-\u00a0\n-template\n-Stream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b> (Stream &stream, std::tuple< Ts... > &t)\n-\u00a0 Read a std::tuple.\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-Stream &\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b< (Stream &stream, const std::array< T, N > &a)\n-\u00a0 Print a std::array.\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-Implementation of stream operators for std::array and std::tuple.\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+ Author\n+ J\u00c3\u00b6 Fahlke, Matthias Wohlmuth\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: streamoperators.hh Source File\n+dune-common: dotproduct.hh Source File\n \n \n \n \n \n \n \n@@ -74,83 +74,82 @@\n \n
\n \n
\n
\n
\n-
streamoperators.hh
\n+
dotproduct.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_STREAMOPERATORS_HH
\n-
7#define DUNE_STREAMOPERATORS_HH
\n-
8
\n-
13#include <array>
\n-
14#include <tuple>
\n-
15#include <utility>
\n-
16
\n-\n-
18
\n-
19namespace Dune
\n-
20{
\n-
27 template<typename Stream, typename... Ts>
\n-
\n-
28 inline Stream& operator<<(Stream& stream, const std::tuple<Ts...>& t)
\n-
29 {
\n-
30 stream<<"[";
\n-
31 if(sizeof...(Ts)>0)
\n-
32 {
\n-
33 Hybrid::forEach(std::make_index_sequence<sizeof...(Ts)-1>{},
\n-
34 [&](auto i){stream<<std::get<i>(t)<<",";});
\n-
35 stream<<std::get<sizeof...(Ts)-1>(t);
\n-
36 }
\n-
37 stream<<"]";
\n-
38 return stream;
\n-
39 }
\n-
\n-
40
\n-
42 template<typename Stream, typename... Ts>
\n-
\n-
43 inline Stream& operator>>(Stream& stream, std::tuple<Ts...>& t)
\n-
44 {
\n-
45 Hybrid::forEach(std::make_index_sequence<sizeof...(Ts)>{},
\n-
46 [&](auto i){stream>>std::get<i>(t);});
\n-
47 return stream;
\n-
48 }
\n-
\n-
49
\n-
51 template<typename Stream, typename T, std::size_t N>
\n-
\n-
52 inline Stream& operator<<(Stream& stream, const std::array<T,N>& a)
\n-
53 {
\n-
54 stream<<"[";
\n-
55 if(N>0)
\n-
56 {
\n-
57 for(std::size_t i=0; i<N-1; ++i)
\n-
58 stream<<a[i]<<",";
\n-
59 stream<<a[N-1];
\n-
60 }
\n-
61 stream<<"]";
\n-
62 return stream;
\n-
63 }
\n-
\n-
64
\n-
67} // end namespace Dune
\n-
68
\n-
69#endif
\n-\n-
Stream & operator>>(Stream &stream, std::tuple< Ts... > &t)
Read a std::tuple.
Definition streamoperators.hh:43
\n-
constexpr void forEach(Range &&range, F &&f)
Range based for loop.
Definition hybridutilities.hh:256
\n-
std::ostream & operator<<(std::ostream &s, const bigunsignedint< k > &x)
Definition bigunsignedint.hh:278
\n+
5#ifndef DUNE_DOTPRODUCT_HH
\n+
6#define DUNE_DOTPRODUCT_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
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
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,81 +1,99 @@\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-streamoperators.hh\n+dotproduct.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_STREAMOPERATORS_HH\n-7#define DUNE_STREAMOPERATORS_HH\n-8\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/_\bh_\by_\bb_\br_\bi_\bd_\bu_\bt_\bi_\bl_\bi_\bt_\bi_\be_\bs_\b._\bh_\bh>\n-18\n-19namespace _\bD_\bu_\bn_\be\n-20{\n-27 template\n-_\b2_\b8 inline Stream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(Stream& stream, const std::tuple& t)\n-29 {\n-30 stream<<\"[\";\n-31 if(sizeof...(Ts)>0)\n-32 {\n-33 _\bH_\by_\bb_\br_\bi_\bd_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh(std::make_index_sequence{},\n-34 [&](auto i){stream<(t)<<\",\";});\n-35 stream<(t);\n-36 }\n-37 stream<<\"]\";\n-38 return stream;\n-39 }\n-40\n-42 template\n-_\b4_\b3 inline Stream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(Stream& stream, std::tuple& t)\n-44 {\n-45 _\bH_\by_\bb_\br_\bi_\bd_\b:_\b:_\bf_\bo_\br_\bE_\ba_\bc_\bh(std::make_index_sequence{},\n-46 [&](auto i){stream>>std::get(t);});\n-47 return stream;\n-48 }\n-49\n-51 template\n-_\b5_\b2 inline Stream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(Stream& stream, const std::array& a)\n-53 {\n-54 stream<<\"[\";\n-55 if(N>0)\n-56 {\n-57 for(std::size_t i=0; i_\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:_\bf_\bo_\br_\bE_\ba_\bc_\bh\n-constexpr void forEach(Range &&range, F &&f)\n-Range based for loop.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn hybridutilities.hh:256\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+5#ifndef DUNE_DOTPRODUCT_HH\n+6#define DUNE_DOTPRODUCT_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 _\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 ===============================================================================\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: mallocallocator.hh File Reference\n+dune-common: fmatrix.hh File Reference\n \n \n \n \n \n \n \n@@ -73,54 +73,103 @@\n
\n \n
\n \n-
mallocallocator.hh File Reference
\n+ \n
\n
\n \n-

Allocators that use malloc/free. \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 <exception>
\n-#include <cstdlib>
\n-#include <new>
\n-#include <utility>
\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
\n

Go to the source code of this file.

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

\n Classes

class  Dune::MallocAllocator< T >
 Allocators implementation which simply calls malloc/free. More...
struct  Dune::DenseMatVecTraits< FieldMatrix< K, ROWS, COLS > >
 
struct  Dune::MallocAllocator< T >::rebind< U >
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+\n+\n+\n

\n Functions

template<class T >
constexpr bool Dune::operator== (const MallocAllocator< T > &, const MallocAllocator< T > &)
 check whether allocators are equivalent
 
template<class T >
constexpr bool Dune::operator!= (const MallocAllocator< T > &, const MallocAllocator< T > &)
 check whether allocators are not equivalent
 
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

Detailed Description

\n-

Allocators that use malloc/free.

\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 Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,117 @@\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-mallocallocator.hh File Reference\n-Allocators that use malloc/free. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \n-#include \n-#include \n-#include \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 _\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:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 Allocators implementation which simply calls malloc/free. _\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_\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-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd_\b<_\b _\bU_\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_\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-constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b= (const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T > &, const\n- _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T > &)\n-\u00a0 check whether allocators are equivalent\n-\u00a0\n-template\n-constexpr bool\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b= (const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T > &, const\n- _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T > &)\n-\u00a0 check whether allocators are not equivalent\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-Allocators that use malloc/free.\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: mallocallocator.hh Source File\n+dune-common: fmatrix.hh Source File\n \n \n \n \n \n \n \n@@ -74,162 +74,896 @@\n \n
\n \n
\n
\n
\n-
mallocallocator.hh
\n+
fmatrix.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_MALLOC_ALLOCATOR_HH
\n-
6#define DUNE_MALLOC_ALLOCATOR_HH
\n+
5#ifndef DUNE_FMATRIX_HH
\n+
6#define DUNE_FMATRIX_HH
\n
7
\n-
8#include <exception>
\n-
9#include <cstdlib>
\n-
10#include <new>
\n-
11#include <utility>
\n-
12
\n-
17namespace Dune
\n-
18{
\n-
23 template <class T>
\n-
\n-\n-
25 public:
\n-
26 typedef std::size_t size_type;
\n-
27 typedef std::ptrdiff_t difference_type;
\n-
28 typedef T* pointer;
\n-
29 typedef const T* const_pointer;
\n-
30 typedef T& reference;
\n-
31 typedef const T& const_reference;
\n-
32 typedef T value_type;
\n-
\n-
33 template <class U> struct rebind {
\n-\n-
35 };
\n-
\n+
8#include <cmath>
\n+
9#include <cstddef>
\n+
10#include <iostream>
\n+
11#include <algorithm>
\n+
12#include <initializer_list>
\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+
33
\n+
34 using value_type = typename M::value_type;
\n+
35 using size_type = typename M::size_type;
\n
36
\n-
38 MallocAllocator() noexcept {}
\n-
40 template <class U>
\n-\n-
43 ~MallocAllocator() noexcept {}
\n-
44
\n-
\n-\n-
46 {
\n-
47 return &x;
\n-
48 }
\n-
\n-
\n-\n-
50 {
\n-
51 return &x;
\n-
52 }
\n-
\n-
53
\n-
\n-\n-
56 [[maybe_unused]] const void* hint = 0)
\n-
57 {
\n-
58 if (n > this->max_size())
\n-
59 throw std::bad_alloc();
\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 pointer ret = static_cast<pointer>(std::malloc(n * sizeof(T)));
\n-
62 if (!ret)
\n-
63 throw std::bad_alloc();
\n-
64 return ret;
\n-
65 }
\n-
\n-
66
\n-
\n-
68 void deallocate(pointer p, [[maybe_unused]] size_type n)
\n-
69 {
\n-
70 std::free(p);
\n-
71 }
\n-
\n-
72
\n-
\n-
74 size_type max_size() const noexcept
\n-
75 {
\n-
76 return size_type(-1) / sizeof(T);
\n-
77 }
\n-
\n-
78
\n-
\n-
80 void construct(pointer p, const T& val)
\n-
81 {
\n-
82 ::new((void*)p)T(val);
\n-
83 }
\n-
\n-
84
\n-
86 template<typename ... Args>
\n-
\n-
87 void construct(pointer p, Args&&... args)
\n-
88 {
\n-
89 ::new((void *)p)T(std::forward<Args>(args) ...);
\n-
90 }
\n-
\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 p->~T();
\n-
96 }
\n-
\n-
97 };
\n-
\n-
98
\n-
100 template<class T>
\n-
101 constexpr bool
\n-
\n-\n-
103 {
\n-
104 return true;
\n-
105 }
\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-
108 template<class T>
\n-
109 constexpr bool
\n-
\n-\n-
111 {
\n-
112 return false;
\n-
113 }
\n-
\n-
114}
\n-
115
\n-
116#endif // DUNE_MALLOC_ALLOCATOR_HH
\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+
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-
Allocators implementation which simply calls malloc/free.
Definition mallocallocator.hh:24
\n-
~MallocAllocator() noexcept
cleanup this allocator
Definition mallocallocator.hh:43
\n-
T * pointer
Definition mallocallocator.hh:28
\n-
void construct(pointer p, const T &val)
copy-construct an object of type T (i.e. make a placement new on p)
Definition mallocallocator.hh:80
\n-
MallocAllocator() noexcept
create a new MallocAllocator
Definition mallocallocator.hh:38
\n-
MallocAllocator(const MallocAllocator< U > &) noexcept
copy construct from an other MallocAllocator, possibly for a different result type
Definition mallocallocator.hh:41
\n-
std::size_t size_type
Definition mallocallocator.hh:26
\n-
std::ptrdiff_t difference_type
Definition mallocallocator.hh:27
\n-
void deallocate(pointer p, size_type n)
deallocate n objects of type T at address p
Definition mallocallocator.hh:68
\n-
T value_type
Definition mallocallocator.hh:32
\n-
const_pointer address(const_reference x) const
Definition mallocallocator.hh:49
\n-
const T & const_reference
Definition mallocallocator.hh:31
\n-
void destroy(pointer p)
destroy an object of type T (i.e. call the destructor)
Definition mallocallocator.hh:93
\n-
pointer allocate(size_type n, const void *hint=0)
allocate n objects of type T
Definition mallocallocator.hh:55
\n-
pointer address(reference x) const
Definition mallocallocator.hh:45
\n-
void construct(pointer p, Args &&... args)
construct an object of type T from variadic parameters
Definition mallocallocator.hh:87
\n-
T & reference
Definition mallocallocator.hh:30
\n-
size_type max_size() const noexcept
max size for allocate
Definition mallocallocator.hh:74
\n-
const T * const_pointer
Definition mallocallocator.hh:29
\n-
Definition mallocallocator.hh:33
\n-
MallocAllocator< U > other
Definition mallocallocator.hh:34
\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
\n \n
\n Generated by \"doxygen\"/ 1.9.8\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,195 +1,1061 @@\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-mallocallocator.hh\n+fmatrix.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_MALLOC_ALLOCATOR_HH\n-6#define DUNE_MALLOC_ALLOCATOR_HH\n+5#ifndef DUNE_FMATRIX_HH\n+6#define DUNE_FMATRIX_HH\n 7\n-8#include \n-9#include \n-10#include \n-11#include \n-12\n-17namespace _\bD_\bu_\bn_\be\n-18{\n-23 template \n-_\b2_\b4 class _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br {\n-25 public:\n-_\b2_\b6 typedef std::size_t _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be;\n-_\b2_\b7 typedef std::ptrdiff_t _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be_\b__\bt_\by_\bp_\be;\n-_\b2_\b8 typedef T* _\bp_\bo_\bi_\bn_\bt_\be_\br;\n-_\b2_\b9 typedef const T* _\bc_\bo_\bn_\bs_\bt_\b__\bp_\bo_\bi_\bn_\bt_\be_\br;\n-_\b3_\b0 typedef T& _\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b3_\b1 typedef const T& _\bc_\bo_\bn_\bs_\bt_\b__\br_\be_\bf_\be_\br_\be_\bn_\bc_\be;\n-_\b3_\b2 typedef T _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b3_\b3 template struct _\br_\be_\bb_\bi_\bn_\bd {\n-_\b3_\b4 typedef _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bU_\b> _\bo_\bt_\bh_\be_\br;\n-35 };\n+8#include \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/_\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+33\n+34 using value_type = typename M::value_type;\n+35 using size_type = typename M::size_type;\n 36\n-_\b3_\b8 _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br() noexcept {}\n-40 template \n-_\b4_\b1 _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br(const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bU_\b>&) noexcept {}\n-_\b4_\b3 _\b~_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br() noexcept {}\n-44\n-_\b4_\b5 _\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\n-46 {\n-47 return &x;\n-48 }\n-_\b4_\b9 _\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\n-50 {\n-51 return &x;\n-52 }\n-53\n-_\b5_\b5 _\bp_\bo_\bi_\bn_\bt_\be_\br _\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n,\n-56 [[maybe_unused]] const void* hint = 0)\n-57 {\n-58 if (n > this->_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be())\n-59 throw std::bad_alloc();\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 _\bp_\bo_\bi_\bn_\bt_\be_\br ret = static_cast<_\bp_\bo_\bi_\bn_\bt_\be_\br>(std::malloc(n * sizeof(T)));\n-62 if (!ret)\n-63 throw std::bad_alloc();\n-64 return ret;\n-65 }\n-66\n-_\b6_\b8 void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be(_\bp_\bo_\bi_\bn_\bt_\be_\br p, [[maybe_unused]] _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be n)\n-69 {\n-70 std::free(p);\n-71 }\n-72\n-_\b7_\b4 _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be _\bm_\ba_\bx_\b__\bs_\bi_\bz_\be() const noexcept\n-75 {\n-76 return _\bs_\bi_\bz_\be_\b__\bt_\by_\bp_\be(-1) / sizeof(T);\n-77 }\n-78\n-_\b8_\b0 void _\bc_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt(_\bp_\bo_\bi_\bn_\bt_\be_\br p, const T& val)\n-81 {\n-82 ::new((void*)p)T(val);\n-83 }\n-84\n-86 template\n-_\b8_\b7 void _\bc_\bo_\bn_\bs_\bt_\br_\bu_\bc_\bt(_\bp_\bo_\bi_\bn_\bt_\be_\br p, Args&&... args)\n-88 {\n-89 ::new((void *)p)T(std::forward(args) ...);\n-90 }\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_\b3 void _\bd_\be_\bs_\bt_\br_\bo_\by(_\bp_\bo_\bi_\bn_\bt_\be_\br p)\n-94 {\n-95 p->~T();\n-96 }\n-97 };\n-98\n-100 template\n-101 constexpr bool\n-_\b1_\b0_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b> &, const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b> &)\n-103 {\n-104 return true;\n-105 }\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-108 template\n-109 constexpr bool\n-_\b1_\b1_\b0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b> &, const _\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b> &)\n-111 {\n-112 return false;\n-113 }\n-114}\n-115\n-116#endif // DUNE_MALLOC_ALLOCATOR_HH\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+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:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-Allocators implementation which simply calls malloc/free.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:24\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\b~_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-~MallocAllocator() noexcept\n-cleanup this allocator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:43\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\be_\br\n-T * pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:28\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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 T &val)\n-copy-construct an object of type T (i.e. make a placement new on p)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:80\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-MallocAllocator() noexcept\n-create a new MallocAllocator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:38\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-MallocAllocator(const MallocAllocator< U > &) noexcept\n-copy construct from an other MallocAllocator, possibly for a different result\n-type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:41\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:26\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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, size_type n)\n-deallocate n objects of type T at address p\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:68\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:32\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:49\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:31\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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 of type T (i.e. call the destructor)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:93\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be\n-pointer allocate(size_type n, const void *hint=0)\n-allocate n objects of type T\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:55\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:45\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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, Args &&... args)\n-construct an object of type T from variadic parameters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:87\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bf_\be_\br_\be_\bn_\bc_\be\n-T & reference\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:30\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx_\b__\bs_\bi_\bz_\be\n-size_type max_size() const noexcept\n-max size for allocate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:74\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:29\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b:_\b:_\br_\be_\bb_\bi_\bn_\bd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:33\n-_\bD_\bu_\bn_\be_\b:_\b:_\bM_\ba_\bl_\bl_\bo_\bc_\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-MallocAllocator< U > other\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn mallocallocator.hh:34\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 ===============================================================================\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: filledarray.hh File Reference\n+dune-common: conditional.hh File Reference\n \n \n \n \n \n \n \n@@ -72,42 +72,33 @@\n
  • dune
  • common
  • \n
    \n
    \n
    \n \n-
    filledarray.hh File Reference
    \n+
    conditional.hh File Reference
    \n
    \n
    \n \n-

    Utility to generate an array with a certain value. \n-More...

    \n-
    #include <array>
    \n-#include <cstddef>
    \n-#include <utility>
    \n-#include <dune/common/indices.hh>
    \n-
    \n

    Go to the source code of this file.

    \n \n \n \n \n \n

    \n Namespaces

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

    \n Functions

    template<std::size_t n, class T >
    constexpr std::array< T, n > Dune::filledArray (const T &t)
     Return an array filled with the provided value.
     
    template<typename T1 , typename T2 >
    const T1 Dune::cond (bool b, const T1 &v1, const T2 &v2)
     conditional evaluate
     
    \n-

    Detailed Description

    \n-

    Utility to generate an array with a certain value.

    \n-
    \n+\n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,20 @@\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-filledarray.hh File Reference\n-Utility to generate an array with a certain value. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \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+conditional.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 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-constexpr std::array< T, n >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bl_\be_\bd_\bA_\br_\br_\ba_\by (const T &t)\n-\u00a0 Return an array filled with the provided value.\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-*\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 to generate an array with a certain value.\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: filledarray.hh Source File\n+dune-common: conditional.hh Source File\n \n \n \n \n \n \n \n@@ -74,51 +74,38 @@\n \n
    \n \n
    \n \n
    \n-
    filledarray.hh
    \n+
    conditional.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+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-
    6#ifndef DUNE_COMMON_FILLED_ARRAY_HH
    \n-
    7#define DUNE_COMMON_FILLED_ARRAY_HH
    \n+
    6namespace Dune
    \n+
    7{
    \n
    8
    \n-
    13#include <array>
    \n-
    14#include <cstddef>
    \n-
    15#include <utility>
    \n-
    16
    \n-\n-
    18
    \n-
    19namespace Dune
    \n-
    20{
    \n-
    27
    \n-
    32 template<std::size_t n, class T>
    \n-
    \n-
    33 constexpr std::array<T, n> filledArray(const T& t)
    \n-
    34 {
    \n-
    35 return unpackIntegerSequence([&](auto... i) {
    \n-
    36 return std::array<T, n>{((void)(i),t)...};
    \n-
    37 }, std::make_index_sequence<n>{});
    \n-
    38 }
    \n-
    \n-
    39
    \n-
    42} // end namespace Dune
    \n-
    43
    \n-
    44#endif // DUNE_COMMON_FILLED_ARRAY_HH
    \n-\n-
    constexpr std::array< T, n > filledArray(const T &t)
    Return an array filled with the provided value.
    Definition filledarray.hh:33
    \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+
    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
    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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,52 +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-filledarray.hh\n+conditional.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+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-6#ifndef DUNE_COMMON_FILLED_ARRAY_HH\n-7#define DUNE_COMMON_FILLED_ARRAY_HH\n+6namespace _\bD_\bu_\bn_\be\n+7{\n 8\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/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n-18\n-19namespace _\bD_\bu_\bn_\be\n-20{\n-27\n-32 template\n-_\b3_\b3 constexpr std::array _\bf_\bi_\bl_\bl_\be_\bd_\bA_\br_\br_\ba_\by(const T& t)\n-34 {\n-35 return _\bu_\bn_\bp_\ba_\bc_\bk_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be([&](auto... i) {\n-36 return std::array{((void)(i),t)...};\n-37 }, std::make_index_sequence{});\n-38 }\n-39\n-42} // end namespace Dune\n-43\n-44#endif // DUNE_COMMON_FILLED_ARRAY_HH\n-_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh\n-_\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bl_\be_\bd_\bA_\br_\br_\ba_\by\n-constexpr std::array< T, n > filledArray(const T &t)\n-Return an array filled with the provided value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn filledarray.hh:33\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+27 template\n+_\b2_\b8 const T1 _\bc_\bo_\bn_\bd(bool b, const T1 & v1, const T2 & v2)\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 _\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 ===============================================================================\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: ios_state.hh File Reference\n+dune-common: tuplevector.hh File Reference\n \n \n \n \n \n \n \n@@ -71,40 +71,60 @@\n \n
    \n \n
    \n \n-
    ios_state.hh File Reference
    \n+Namespaces |\n+Functions
    \n+
    tuplevector.hh File Reference
    \n \n
    \n \n-

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

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

    \n-
    #include <ios>
    \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

    Go to the source code of this file.

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

    \n Classes

    class  Dune::ios_base_all_saver
     Utility class for storing and resetting stream attributes. More...
    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+Functions

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

    Detailed Description

    \n-

    Utility class for storing and resetting stream attributes.

    \n-
    Author
    Markus Blatt
    \n+

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

    \n+
    Author
    Carsten Gr\u00e4ser
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +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-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\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+_\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 _\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_\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+ 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+\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+\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 class for storing and resetting stream attributes.\n+Provides the TupleVector class that augments std::tuple by operator[].\n Author\n- Markus Blatt\n+ Carsten Gr\u00c3\u00a4ser\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: ios_state.hh Source File\n+dune-common: tuplevector.hh Source File\n \n \n \n \n \n \n \n@@ -74,55 +74,141 @@\n \n
    \n \n
    \n
    \n
    \n-
    ios_state.hh
    \n+
    tuplevector.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_IOS_STATE_HH
    \n-
    6#define DUNE_COMMON_IOS_STATE_HH
    \n+
    5#ifndef DUNE_COMMON_TUPLEVECTOR_HH
    \n+
    6#define DUNE_COMMON_TUPLEVECTOR_HH
    \n
    7
    \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+
    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+
    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-
    Utility class for storing and resetting stream attributes.
    Definition ios_state.hh:34
    \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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,60 +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-ios_state.hh\n+tuplevector.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_IOS_STATE_HH\n-6#define DUNE_COMMON_IOS_STATE_HH\n+5#ifndef DUNE_COMMON_TUPLEVECTOR_HH\n+6#define DUNE_COMMON_TUPLEVECTOR_HH\n 7\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+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+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:_\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+_\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 ===============================================================================\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: typelist.hh File Reference\n+dune-common: parametertree.cc File Reference\n \n \n \n \n \n \n \n@@ -69,89 +69,27 @@\n \n
    \n \n
    \n
    \n
    \n- \n-
    typelist.hh File Reference
    \n+
    parametertree.cc File Reference
    \n
    \n
    \n-
    #include <type_traits>
    \n-#include <tuple>
    \n-#include <utility>
    \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

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

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

    \n-Functions

    template<class... T>
    constexpr auto Dune::uniqueTypeList (TypeList< T... > list)
     Remove duplicates from a Dune::TypeList.
     
    \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
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,70 +1,19 @@\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 | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-typelist.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-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bM_\be_\bt_\ba_\bT_\by_\bp_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 A type that refers to another 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_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b _\b>\n-\u00a0 Check if given type is a TypeList. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b<_\b _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0 Check if given type is a TypeList. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bs_\bE_\bm_\bp_\bt_\by_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b _\b>\n-\u00a0 Check if given type is an empty TypeList. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bS_\bi_\bz_\be_\b<_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bS_\bi_\bz_\be_\b<_\b _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0 Get size of TypeList. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bi_\b,_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bE_\bl_\be_\bm_\be_\bn_\bt_\b<_\b _\bi_\b,_\b _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b<_\b _\bT_\b._\b._\b._\b _\b>_\b _\b>\n-\u00a0 Get element of TypeList. _\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-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt = std::tuple< _\bM_\be_\bt_\ba_\bT_\by_\bp_\be< T >... >\n-\u00a0 A simple type list.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bE_\bn_\bt_\br_\by_\b__\bt = typename _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\bE_\bl_\be_\bm_\be_\bn_\bt< i, T >::type\n-\u00a0 Shortcut for TypeListElement::type;.\n-\u00a0\n-template class Target, class TL >\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bU_\bn_\bp_\ba_\bc_\bk_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b__\bt = typename Impl::UnpackTypeList< Target, TL >::\n- type\n-\u00a0 Unpack _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt.\n-\u00a0\n-template class Target, class... T>\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bU_\bn_\bi_\bq_\bu_\be_\bT_\by_\bp_\be_\bs_\b__\bt = typename Impl::UniqueTypesHelper< Target,\n- _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt< T... > >::type\n-\u00a0 Remove duplicates from a list of types.\n-\u00a0\n-template\n-using\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bU_\bn_\bi_\bq_\bu_\be_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt_\b__\bt = typename Impl::UniqueTypesHelper< _\bT_\by_\bp_\be_\bL_\bi_\bs_\bt,\n- NonUniqueTypeList >::type\n-\u00a0 Remove duplicates from a _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt.\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:_\bu_\bn_\bi_\bq_\bu_\be_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt (_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt< T... > list)\n-\u00a0 Remove duplicates from a _\bD_\bu_\bn_\be_\b:_\b:_\bT_\by_\bp_\be_\bL_\bi_\bs_\bt.\n-\u00a0\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 ===============================================================================\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: metis.hh File Reference\n+dune-common: poolallocator.hh File Reference\n \n \n \n \n \n \n \n@@ -69,19 +69,87 @@\n \n
    \n \n
    \n \n
    \n-
    metis.hh File Reference
    \n+ \n+
    poolallocator.hh File Reference
    \n
    \n
    \n \n+

    An stl-compliant pool allocator. \n+More...

    \n+
    #include <numeric>
    \n+#include <typeinfo>
    \n+#include <iostream>
    \n+#include <cassert>
    \n+#include <new>
    \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+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+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+

    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 \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,10 +1,77 @@\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-metis.hh File Reference\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 _\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+\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+\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 ===============================================================================\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: metis.hh Source File\n+dune-common: poolallocator.hh Source File\n \n \n \n \n \n \n \n@@ -74,62 +74,519 @@\n \n
    \n \n
    \n \n
    \n-
    metis.hh
    \n+
    poolallocator.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_METIS_HH
    \n-
    6#define DUNE_METIS_HH
    \n+
    5#ifndef DUNE_COMMON_POOLALLOCATOR_HH
    \n+
    6#define DUNE_COMMON_POOLALLOCATOR_HH
    \n
    7
    \n-
    15#if HAVE_METIS
    \n-
    16
    \n-
    17#if HAVE_SCOTCH_METIS
    \n-
    18extern "C" {
    \n-
    19 #include <scotch.h>
    \n-
    20}
    \n-
    21#endif
    \n-
    22
    \n-
    23extern "C" {
    \n-
    24 #include <metis.h>
    \n-
    25}
    \n-
    26
    \n-
    27#if HAVE_SCOTCH_METIS && !defined(SCOTCH_METIS_RETURN) && !defined(METIS_OK)
    \n-
    28 // NOTE: scotchmetis does not define a return type for METIS functions
    \n-
    29 #define METIS_OK 1
    \n-
    30#endif
    \n-
    31
    \n-
    32namespace Dune::Metis {
    \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#if defined(REALTYPEWIDTH) || defined(SCOTCH_METIS_DATATYPES)
    \n-
    35 using real_t = ::real_t;
    \n-
    36#else
    \n-
    37 using real_t = double;
    \n-
    38#endif
    \n-
    39
    \n-
    40#if defined(IDXTYPEWIDTH) || defined(SCOTCH_METIS_DATATYPES)
    \n-
    41 using idx_t = ::idx_t;
    \n-
    42#elif HAVE_SCOTCH_METIS
    \n-
    43 using idx_t = SCOTCH_Num;
    \n-
    44#else
    \n-
    45 using idx_t = int;
    \n-
    46#endif
    \n-
    47
    \n-
    48} // end namespace Dune::Metis
    \n-
    49
    \n-
    50#endif // HAVE_METIS
    \n-
    51#endif // DUNE_METIS_HH
    \n-
    typename FieldTraits< Type >::real_type real_t
    Convenient access to FieldTraits<Type>::real_type.
    Definition typetraits.hh:301
    \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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,59 +1,597 @@\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-metis.hh\n+poolallocator.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_METIS_HH\n-6#define DUNE_METIS_HH\n+5#ifndef DUNE_COMMON_POOLALLOCATOR_HH\n+6#define DUNE_COMMON_POOLALLOCATOR_HH\n 7\n-15#if HAVE_METIS\n-16\n-17#if HAVE_SCOTCH_METIS\n-18extern \"C\" {\n-19 #include \n-20}\n-21#endif\n-22\n-23extern \"C\" {\n-24 #include \n-25}\n-26\n-27#if HAVE_SCOTCH_METIS && !defined(SCOTCH_METIS_RETURN) && !defined(METIS_OK)\n-28 // NOTE: scotchmetis does not define a return type for METIS functions\n-29 #define METIS_OK 1\n-30#endif\n-31\n-32namespace Dune::Metis {\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#if defined(REALTYPEWIDTH) || defined(SCOTCH_METIS_DATATYPES)\n-35 using _\br_\be_\ba_\bl_\b__\bt = ::real_t;\n-36#else\n-37 using _\br_\be_\ba_\bl_\b__\bt = double;\n-38#endif\n-39\n-40#if defined(IDXTYPEWIDTH) || defined(SCOTCH_METIS_DATATYPES)\n-41 using idx_t = ::idx_t;\n-42#elif HAVE_SCOTCH_METIS\n-43 using idx_t = SCOTCH_Num;\n-44#else\n-45 using idx_t = int;\n-46#endif\n-47\n-48} // end namespace Dune::Metis\n-49\n-50#endif // HAVE_METIS\n-51#endif // DUNE_METIS_HH\n-_\bD_\bu_\bn_\be_\b:_\b:_\br_\be_\ba_\bl_\b__\bt\n-typename FieldTraits< Type >::real_type real_t\n-Convenient access to FieldTraits::real_type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn typetraits.hh:301\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 ===============================================================================\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: promotiontraits.hh File Reference\n+dune-common: bitsetvector.hh File Reference\n \n \n \n \n \n \n \n@@ -72,41 +72,58 @@\n
  • dune
  • common
  • \n \n \n
    \n \n-
    promotiontraits.hh File Reference
    \n+
    bitsetvector.hh File Reference
    \n
    \n
    \n \n-

    Compute type of the result of an arithmetic operation involving two different number types. \n+

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

    \n-
    #include <utility>
    \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
    \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 Classes

    struct  Dune::PromotionTraits< T1, T2 >
     Compute type of the result of an arithmetic operation involving two different number types. More...
    class  Dune::BitSetVectorConstReference< block_size, Alloc >
     A proxy class that acts as a const reference to a single bitset in a BitSetVector. More...
     
    struct  Dune::PromotionTraits< T1, T1 >
    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...
     
    \n \n \n \n \n

    \n Namespaces

    namespace  Dune
     Dune namespace.
     
    \n

    Detailed Description

    \n-

    Compute type of the result of an arithmetic operation involving two different number types.

    \n-
    Author
    Matthias Wohlmuth
    \n+

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

    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,48 @@\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-promotiontraits.hh File Reference\n-Compute type of the result of an arithmetic operation involving two different\n-number types. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \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+#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:_\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>\n-\u00a0 Compute type of the result of an arithmetic operation involving two\n- different number types. _\bM_\bo_\br_\be_\b._\b._\b.\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-struct \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b1_\b,_\b _\bT_\b1_\b _\b>\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 \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-Compute type of the result of an arithmetic operation involving two different\n-number types.\n- Author\n- Matthias Wohlmuth\n+Efficient implementation of a dynamic array of static arrays of booleans.\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: promotiontraits.hh Source File\n+dune-common: bitsetvector.hh Source File\n \n \n \n \n \n \n \n@@ -74,49 +74,759 @@\n \n
    \n \n
    \n
    \n
    \n-
    promotiontraits.hh
    \n+
    bitsetvector.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_PROMOTIONTRAITS_HH
    \n-
    6#define DUNE_PROMOTIONTRAITS_HH
    \n+
    5#ifndef DUNE_BLOCK_BITFIELD_HH
    \n+
    6#define DUNE_BLOCK_BITFIELD_HH
    \n
    7
    \n-
    8#include <utility>
    \n-
    9
    \n-
    10namespace Dune {
    \n-
    25 template <typename T1, typename T2>
    \n-
    \n-\n-
    27 {
    \n-
    28 typedef decltype(std::declval<T1>()+std::declval<T2>()) PromotedType;
    \n-
    29 };
    \n-
    \n-
    30
    \n-
    31 // Specialization for the case of two equal types
    \n-
    32 // One should think that the generic template should handle this case as well.
    \n-
    33 // However, the fvectortest.cc unit test fails without it if ENABLE_GMP is set.
    \n-
    34 template <typename T1>
    \n-
    35 struct PromotionTraits<T1,T1> { typedef T1 PromotedType; };
    \n-
    36
    \n-
    38} // end namespace
    \n-
    39
    \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-
    41#endif // DUNE_PROMOTIONTRAITS_HH
    \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+
    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+
    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+
    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+
    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+
    #define DUNE_THROW(E, m)
    Definition exceptions.hh:218
    \n
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Compute type of the result of an arithmetic operation involving two different number types.
    Definition promotiontraits.hh:27
    \n-
    decltype(std::declval< T1 >()+std::declval< T2 >()) PromotedType
    Definition promotiontraits.hh:28
    \n-
    T1 PromotedType
    Definition promotiontraits.hh:35
    \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
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,52 +1,903 @@\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-promotiontraits.hh\n+bitsetvector.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_PROMOTIONTRAITS_HH\n-6#define DUNE_PROMOTIONTRAITS_HH\n+5#ifndef DUNE_BLOCK_BITFIELD_HH\n+6#define DUNE_BLOCK_BITFIELD_HH\n 7\n-8#include \n-9\n-10namespace _\bD_\bu_\bn_\be {\n-25 template \n-_\b2_\b6 struct _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-27 {\n-_\b2_\b8 typedef decltype(std::declval()+std::declval()) _\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be;\n-29 };\n-30\n-31 // Specialization for the case of two equal types\n-32 // One should think that the generic template should handle this case as\n-well.\n-33 // However, the fvectortest.cc unit test fails without it if ENABLE_GMP is\n-set.\n-34 template \n-_\b3_\b5 struct _\bP_\br_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs { typedef T1 _\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be; };\n-36\n-38} // end namespace\n-39\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-41#endif // DUNE_PROMOTIONTRAITS_HH\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+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; i\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+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+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+_\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:_\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-_\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_\bo_\bm_\bo_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bT_\b1_\b,_\b _\bT_\b1_\b _\b>_\b:_\b:_\bP_\br_\bo_\bm_\bo_\bt_\be_\bd_\bT_\by_\bp_\be\n-T1 PromotedType\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn promotiontraits.hh:35\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 ===============================================================================\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: version.hh File Reference\n+dune-common: indices.hh File Reference\n \n \n \n \n \n \n \n@@ -70,675 +70,132 @@\n
    \n \n
    \n
    \n
    \n
    \n-Macros
    \n-
    version.hh File Reference
    \n+Namespaces |\n+Typedefs |\n+Functions |\n+Variables
    \n+
    indices.hh File Reference
    \n \n
    \n-\n-

    Various macros to work with Dune module version numbers. \n-More...

    \n-
    #include <dune-common-config.hh>
    \n+
    #include <cstddef>
    \n+#include <stdexcept>
    \n+#include <type_traits>
    \n+#include <utility>
    \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-Macros

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

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

    template<std::size_t i>
    using Dune::index_constant = std::integral_constant< std::size_t, i >
     An index constant with value i.
     
    \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.
     
    \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\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.
     
    \n-

    Detailed Description

    \n-

    Various macros to work with Dune module version numbers.

    \n-

    Macro Definition Documentation

    \n-\n-

    ◆ DUNE_MODULE_VERSION_ID

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

    Compute a unique uint id for the given module.

    \n-

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

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

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

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

    ◆ DUNE_VERSION_EQUAL

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_EQUAL_REV

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_GT

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_GT_REV

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_GTE

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_GTE_REV

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_ID

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_JOIN

    \n-\n-
    \n-
    \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n-
    #define DUNE_VERSION_JOIN( module,
     type 
    )   module ## _VERSION_ ## type
    \n-
    \n-\n-

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_LT

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_LT_REV

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_LTE

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

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

    \n-

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

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

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

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

    ◆ DUNE_VERSION_LTE_REV

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

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

    \n-

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

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

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

    \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,306 +1,117 @@\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-version.hh File Reference\n-Various macros to work with Dune module version numbers. _\bM_\bo_\br_\be_\b._\b._\b.\n-#include \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+#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-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module, type)\u00a0\u00a0\u00a0module ## _VERSION_ ## type\n-\u00a0 Constructs the preprocessor name used in config.h to hold version\n- numbers.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bE_\bQ_\bU_\bA_\bL(module, major, minor)\n-\u00a0 True if 'module' has the version major.minor.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bE_\bQ_\bU_\bA_\bL_\b__\bR_\bE_\bV(module, major, minor, revision)\n-\u00a0 True if 'module' has the version major.minor.revision.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE(module, major, minor)\n-\u00a0 True if 'module' has the version major.minor or greater.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bL_\bT(module, major, minor)\u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE\n- (module,major,minor)\n-\u00a0 True if 'module' has a version less than major.minor.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT(module, major, minor)\n-\u00a0 True if 'module' has a version greater than major.minor.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bL_\bT_\bE(module, major, minor)\u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT\n- (module,major,minor)\n-\u00a0 True if 'module' has a version less than or equal to major.minor.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE_\b__\bR_\bE_\bV(module, major, minor, revision)\n-\u00a0 True if 'module' has the version major.minor.revision or greater.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bL_\bT_\b__\bR_\bE_\bV(module, major, minor, revision)\u00a0\u00a0\u00a0 !\n- _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE_\b__\bR_\bE_\bV(module,major,minor,revision)\n-\u00a0 True if 'module' has a version lower than major.minor.revision.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\b__\bR_\bE_\bV(module, major, minor, revision)\n-\u00a0 True if 'module' has a greater version than major.minor.revision.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bL_\bT_\bE_\b__\bR_\bE_\bV(module, major, minor, revision)\u00a0\u00a0\u00a0 !\n- _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\b__\bR_\bE_\bV(module,major,minor,revision)\n-\u00a0 True if 'module' has a version lower or equal to major.minor.revision.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bI_\bD(major, minor, revision)\u00a0\u00a0\u00a0 ((unsigned int)((major <<\n- 24) + (minor << 16) + revision))\n-\u00a0 Compute a unique uint id from the major, minor, and revision numbers.\n-\u00a0\n-#define\u00a0 _\bD_\bU_\bN_\bE_\b__\bM_\bO_\bD_\bU_\bL_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bI_\bD(module)\u00a0\u00a0\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bI_\bD( _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n- (module,MAJOR), _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MINOR), _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n- (module,REVISION) )\n-\u00a0 Compute a unique uint id for the given module.\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-Various macros to work with Dune module version numbers.\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_M\bMO\bOD\bDU\bUL\bLE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_I\bID\bD *\b**\b**\b**\b**\b*\n- \u00a0\u00a0\u00a0 _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bI_\bD\n- ( _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR),\n-#define DUNE_MODULE_VERSION_ID ( \u00a0 module ) _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MINOR),\n- _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,REVISION)\n- )\n-Compute a unique uint id for the given module.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_E\bEQ\bQU\bUA\bAL\bL *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_EQUAL ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && \\\n-(_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MINOR) == minor))\n-_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-#define DUNE_VERSION_JOIN(module, type)\n-Constructs the preprocessor name used in config.h to hold version numbers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn version.hh:30\n-True if 'module' has the version major.minor.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_E\bEQ\bQU\bUA\bAL\bL_\b_R\bRE\bEV\bV *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_EQUAL_REV ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-( _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bE_\bQ_\bU_\bA_\bL(module,major,minor) && \\\n-(_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,REVISION) == revision))\n-_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bE_\bQ_\bU_\bA_\bL\n-#define DUNE_VERSION_EQUAL(module, major, minor)\n-True if 'module' has the version major.minor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn version.hh:46\n-True if 'module' has the version major.minor.revision.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_G\bGT\bT *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_GT ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) > major) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) > minor)))\n-True if 'module' has a version greater than major.minor.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_G\bGT\bT_\b_R\bRE\bEV\bV *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_GT_REV ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) > major) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) > minor)) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) == minor) \\\n-&& (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,REVISION) > revision)))\n-True if 'module' has a greater version than major.minor.revision.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_G\bGT\bTE\bE *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_GTE ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) > major) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) >= minor)))\n-True if 'module' has the version major.minor or greater.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_G\bGT\bTE\bE_\b_R\bRE\bEV\bV *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_GTE_REV ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) > major) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) > minor)) \\\n-|| ((_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,MAJOR) == major) && (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN\n-(module,MINOR) == minor) \\\n-&& (_\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bJ_\bO_\bI_\bN(module,REVISION) >= revision)))\n-True if 'module' has the version major.minor.revision or greater.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_I\bID\bD *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_ID ( \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- ) \u00a0\u00a0\u00a0 ((unsigned int)((major << 24) + (minor << 16) +\n- revision))\n-Compute a unique uint id from the major, minor, and revision numbers.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_J\bJO\bOI\bIN\bN *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_JOIN ( \u00a0 module,\n- \u00a0 type\u00a0\n- ) \u00a0\u00a0\u00a0module ## _VERSION_ ## type\n-Constructs the preprocessor name used in config.h to hold version numbers.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n- Parameters\n- module The name of the _\bD_\bu_\bn_\be module\n- type The version number type, one of MAJOR, MINOR, or REVISION\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_L\bLT\bT *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_LT ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor\u00a0\n- ) \u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE(module,major,minor)\n-True if 'module' has a version less than major.minor.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_L\bLT\bT_\b_R\bRE\bEV\bV *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_LT_REV ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- ) \u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\bE_\b__\bR_\bE_\bV\n- (module,major,minor,revision)\n-True if 'module' has a version lower than major.minor.revision.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_L\bLT\bTE\bE *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_LTE ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor\u00a0\n- ) \u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT(module,major,minor)\n-True if 'module' has a version less than or equal to major.minor.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0D\bDU\bUN\bNE\bE_\b_V\bVE\bER\bRS\bSI\bIO\bON\bN_\b_L\bLT\bTE\bE_\b_R\bRE\bEV\bV *\b**\b**\b**\b**\b*\n-#define DUNE_VERSION_LTE_REV ( \u00a0 module,\n- \u00a0 major,\n- \u00a0 minor,\n- \u00a0 revision\u00a0\n- ) \u00a0\u00a0\u00a0 ! _\bD_\bU_\bN_\bE_\b__\bV_\bE_\bR_\bS_\bI_\bO_\bN_\b__\bG_\bT_\b__\bR_\bE_\bV\n- (module,major,minor,revision)\n-True if 'module' has a version lower or equal to major.minor.revision.\n-For the DUNE core modules you need to use the following module names:\n- * DUNE_COMMON for dune-common\n- * DUNE_GRID for dune-grid\n- * DUNE_GEOMETRY for dune-geometry\n- * DUNE_ISTL for dune-istl\n- * DUNE_LOCALFUNCTIONS for dune-localfunctions\n-For external DUNE modules, you should capitalize the name and replace '-' by\n-underscores. For example for the module foo-bar you need to use FOO_BAR as\n-module name in the context of this macro.\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+\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+\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+\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: version.hh Source File\n+dune-common: indices.hh Source File\n \n \n \n \n \n \n \n@@ -74,99 +74,191 @@\n \n
    \n \n
    \n
    \n
    \n-
    version.hh
    \n+
    indices.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_VERSION_HH
    \n-
    6#define DUNE_VERSION_HH
    \n-
    7
    \n-
    8#include <dune-common-config.hh> // DUNE_[MODULE]_VERSION_[TYPE]
    \n-
    9
    \n-
    30#define DUNE_VERSION_JOIN(module,type) module ## _VERSION_ ## type
    \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-
    \n-
    46#define DUNE_VERSION_EQUAL(module,major,minor) \\
    \n-
    47 ((DUNE_VERSION_JOIN(module,MAJOR) == major) && \\
    \n-
    48 (DUNE_VERSION_JOIN(module,MINOR) == minor))
    \n-
    \n-
    49
    \n-
    \n-
    64#define DUNE_VERSION_EQUAL_REV(module,major,minor,revision) \\
    \n-
    65 ( DUNE_VERSION_EQUAL(module,major,minor) && \\
    \n-
    66 (DUNE_VERSION_JOIN(module,REVISION) == revision))
    \n-
    \n-
    67
    \n-
    \n-
    82#define DUNE_VERSION_GTE(module,major,minor) \\
    \n-
    83 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\
    \n-
    84 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) >= minor)))
    \n-
    \n-
    85
    \n-
    \n-
    100#define DUNE_VERSION_LT(module,major,minor) \\
    \n-
    101 ! DUNE_VERSION_GTE(module,major,minor)
    \n-
    \n-
    102
    \n-
    \n-
    117#define DUNE_VERSION_GT(module,major,minor) \\
    \n-
    118 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\
    \n-
    119 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)))
    \n-
    \n-
    120
    \n-
    \n-
    135#define DUNE_VERSION_LTE(module,major,minor) \\
    \n-
    136 ! DUNE_VERSION_GT(module,major,minor)
    \n-
    \n-
    137
    \n-
    \n-
    152#define DUNE_VERSION_GTE_REV(module,major,minor,revision) \\
    \n-
    153 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\
    \n-
    154 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \\
    \n-
    155 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \\
    \n-
    156 && (DUNE_VERSION_JOIN(module,REVISION) >= revision)))
    \n-
    \n-
    157
    \n-
    \n-
    172#define DUNE_VERSION_LT_REV(module,major,minor,revision) \\
    \n-
    173 ! DUNE_VERSION_GTE_REV(module,major,minor,revision)
    \n-
    \n-
    174
    \n-
    \n-
    189#define DUNE_VERSION_GT_REV(module,major,minor,revision) \\
    \n-
    190 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\
    \n-
    191 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \\
    \n-
    192 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \\
    \n-
    193 && (DUNE_VERSION_JOIN(module,REVISION) > revision)))
    \n-
    \n-
    194
    \n-
    \n-
    209#define DUNE_VERSION_LTE_REV(module,major,minor,revision) \\
    \n-
    210 ! DUNE_VERSION_GT_REV(module,major,minor,revision)
    \n-
    \n-
    211
    \n-
    \n-
    226#define DUNE_VERSION_ID(major,minor,revision) \\
    \n-
    227 ((unsigned int)((major << 24) + (minor << 16) + revision))
    \n-
    \n-
    228
    \n-
    \n-
    243#define DUNE_MODULE_VERSION_ID(module) \\
    \n-
    244 DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )
    \n-
    \n-
    245
    \n-
    246#endif
    \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+
    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+
    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+
    101
    \n+
    103 inline constexpr index_constant<17> _17 = {};
    \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+
    Dune namespace.
    Definition alignedallocator.hh:13
    \n+
    constexpr Base power(Base m, Exponent p)
    Power method for integer exponents.
    Definition math.hh:75
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,76 +1,249 @@\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-version.hh\n+indices.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_VERSION_HH\n-6#define DUNE_VERSION_HH\n-7\n-8#include // DUNE_[MODULE]_VERSION_[TYPE]\n-9\n-_\b3_\b0#define DUNE_VERSION_JOIN(module,type) module ## _VERSION_ ## type\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-_\b4_\b6#define DUNE_VERSION_EQUAL(module,major,minor) \\\n-47 ((DUNE_VERSION_JOIN(module,MAJOR) == major) && \\\n-48 (DUNE_VERSION_JOIN(module,MINOR) == minor))\n-49\n-_\b6_\b4#define DUNE_VERSION_EQUAL_REV(module,major,minor,revision) \\\n-65 ( DUNE_VERSION_EQUAL(module,major,minor) && \\\n-66 (DUNE_VERSION_JOIN(module,REVISION) == revision))\n-67\n-_\b8_\b2#define DUNE_VERSION_GTE(module,major,minor) \\\n-83 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\\n-84 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) >= minor)))\n-85\n-_\b1_\b0_\b0#define DUNE_VERSION_LT(module,major,minor) \\\n-101 ! DUNE_VERSION_GTE(module,major,minor)\n-102\n-_\b1_\b1_\b7#define DUNE_VERSION_GT(module,major,minor) \\\n-118 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\\n-119 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) > minor)))\n-120\n-_\b1_\b3_\b5#define DUNE_VERSION_LTE(module,major,minor) \\\n-136 ! DUNE_VERSION_GT(module,major,minor)\n-137\n-_\b1_\b5_\b2#define DUNE_VERSION_GTE_REV(module,major,minor,revision) \\\n-153 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\\n-154 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) > minor)) \\\n-155 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) == minor) \\\n-156 && (DUNE_VERSION_JOIN(module,REVISION) >= revision)))\n-157\n-_\b1_\b7_\b2#define DUNE_VERSION_LT_REV(module,major,minor,revision) \\\n-173 ! DUNE_VERSION_GTE_REV(module,major,minor,revision)\n-174\n-_\b1_\b8_\b9#define DUNE_VERSION_GT_REV(module,major,minor,revision) \\\n-190 ((DUNE_VERSION_JOIN(module,MAJOR) > major) \\\n-191 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) > minor)) \\\n-192 || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN\n-(module,MINOR) == minor) \\\n-193 && (DUNE_VERSION_JOIN(module,REVISION) > revision)))\n-194\n-_\b2_\b0_\b9#define DUNE_VERSION_LTE_REV(module,major,minor,revision) \\\n-210 ! DUNE_VERSION_GT_REV(module,major,minor,revision)\n-211\n-_\b2_\b2_\b6#define DUNE_VERSION_ID(major,minor,revision) \\\n-227 ((unsigned int)((major << 24) + (minor << 16) + revision))\n-228\n-_\b2_\b4_\b3#define DUNE_MODULE_VERSION_ID(module) \\\n-244 DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN\n-(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )\n-245\n-246#endif\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+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+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+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+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+_\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 ===============================================================================\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: iteratorrange.hh File Reference\n+dune-common: vc.hh File Reference\n \n \n \n \n \n \n \n@@ -69,35 +69,25 @@\n \n
    \n \n
    \n \n
    \n- \n-
    iteratorrange.hh File Reference
    \n+
    vc.hh File Reference
    \n
    \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-Classes

    class  Dune::IteratorRange< Iterator >
     Simple range between a begin and an end iterator. More...
     
    \n-\n-\n-\n-\n-

    \n-Namespaces

    namespace  Dune
     Dune namespace.
     
    \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,19 +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\n-iteratorrange.hh File Reference\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-class \u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b<_\b _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\b _\b>\n-\u00a0 Simple range between a begin and an end iterator. _\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+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/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: iteratorrange.hh Source File\n+dune-common: vc.hh Source File\n \n \n \n \n \n \n \n@@ -74,84 +74,38 @@\n \n
    \n \n
    \n \n
    \n-
    iteratorrange.hh
    \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#ifndef DUNE_COMMON_ITERATORRANGE_HH
    \n-
    6#define DUNE_COMMON_ITERATORRANGE_HH
    \n-
    7
    \n-
    8namespace Dune {
    \n-
    9
    \n-
    11
    \n-
    20 template<typename Iterator>
    \n-
    \n-\n-
    22 {
    \n-
    23
    \n-
    24 public:
    \n-
    25
    \n-
    27 typedef Iterator iterator;
    \n-
    28
    \n-
    30
    \n-
    33 typedef Iterator const_iterator;
    \n-
    34
    \n-
    \n-
    36 IteratorRange(const Iterator& begin, const Iterator& end)
    \n-
    37 : _begin(begin)
    \n-
    38 , _end(end)
    \n-
    39 {}
    \n-
    \n-
    40
    \n-
    \n-\n-
    43 {}
    \n-
    \n-
    44
    \n-
    \n-\n-
    47 {
    \n-
    48 return _begin;
    \n-
    49 }
    \n-
    \n-
    50
    \n-
    \n-
    52 iterator end() const
    \n-
    53 {
    \n-
    54 return _end;
    \n-
    55 }
    \n-
    \n-
    56
    \n-
    57 private:
    \n-
    58
    \n-
    59 Iterator _begin;
    \n-
    60 Iterator _end;
    \n-
    61
    \n-
    62 };
    \n-
    \n-
    63
    \n-
    64}
    \n-
    65
    \n-
    66#endif // DUNE_COMMON_ITERATORRANGE_HH
    \n-
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    Simple range between a begin and an end iterator.
    Definition iteratorrange.hh:22
    \n-
    iterator begin() const
    Returns an iterator pointing to the begin of the range.
    Definition iteratorrange.hh:46
    \n-
    Iterator const_iterator
    The iterator belonging to this range.
    Definition iteratorrange.hh:33
    \n-
    iterator end() const
    Returns an iterator pointing past the end of the range.
    Definition iteratorrange.hh:52
    \n-
    IteratorRange()
    Default constructor, relies on iterators being default-constructible.
    Definition iteratorrange.hh:42
    \n-
    Iterator iterator
    The iterator belonging to this range.
    Definition iteratorrange.hh:27
    \n-
    IteratorRange(const Iterator &begin, const Iterator &end)
    Constructs an iterator range on [begin,end).
    Definition iteratorrange.hh:36
    \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+
    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,90 +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-iteratorrange.hh\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#ifndef DUNE_COMMON_ITERATORRANGE_HH\n-6#define DUNE_COMMON_ITERATORRANGE_HH\n-7\n-8namespace _\bD_\bu_\bn_\be {\n-9\n-11\n-20 template\n-_\b2_\b1 class _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be\n-22 {\n-23\n-24 public:\n-25\n-_\b2_\b7 typedef Iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-28\n-30\n-_\b3_\b3 typedef Iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-34\n-_\b3_\b6 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be(const Iterator& _\bb_\be_\bg_\bi_\bn, const Iterator& _\be_\bn_\bd)\n-37 : _begin(_\bb_\be_\bg_\bi_\bn)\n-38 , _end(_\be_\bn_\bd)\n-39 {}\n-40\n-_\b4_\b2 _\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be()\n-43 {}\n-44\n-_\b4_\b6 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const\n-47 {\n-48 return _begin;\n-49 }\n-50\n-_\b5_\b2 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const\n-53 {\n-54 return _end;\n-55 }\n-56\n-57 private:\n-58\n-59 Iterator _begin;\n-60 Iterator _end;\n-61\n-62 };\n-63\n-64}\n-65\n-66#endif // DUNE_COMMON_ITERATORRANGE_HH\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_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be\n-Simple range between a begin and an end iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:22\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin() const\n-Returns an iterator pointing to the begin of the range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:46\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator const_iterator\n-The iterator belonging to this range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:33\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\be_\bn_\bd\n-iterator end() const\n-Returns an iterator pointing past the end of the range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:52\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be\n-IteratorRange()\n-Default constructor, relies on iterators being default-constructible.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:42\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Iterator iterator\n-The iterator belonging to this range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:27\n-_\bD_\bu_\bn_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bR_\ba_\bn_\bg_\be\n-IteratorRange(const Iterator &begin, const Iterator &end)\n-Constructs an iterator range on [begin,end).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iteratorrange.hh:36\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+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/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: integersequence.hh File Reference\n+dune-common: matrixconcepts.hh File Reference\n \n \n \n \n \n \n \n@@ -70,117 +70,29 @@\n
    \n \n
    \n
    \n
    \n \n-
    integersequence.hh File Reference
    \n+Namespaces
    \n+
    matrixconcepts.hh File Reference
    \n \n
    \n-
    #include <algorithm>
    \n-#include <array>
    \n-#include <cassert>
    \n-#include <functional>
    \n+
    #include <utility>
    \n #include <type_traits>
    \n-#include <utility>
    \n-#include <dune/common/indices.hh>
    \n+#include <dune/common/std/type_traits.hh>
    \n
    \n

    Go to the source code of this file.

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

    \n-Functions

    template<std::size_t pos, class T , T... II, std::enable_if_t<(!(pos >=sizeof...(II))), int > = 0>
    constexpr auto Dune::get (std::integer_sequence< T, II... >, std::integral_constant< std::size_t, pos >={})
     Return the entry at position pos of the given sequence.
     
    template<class T , T... II>
    constexpr T Dune::get (std::integer_sequence< T, II... >, std::size_t pos)
     Return the entry at position pos of the given sequence.
     
    template<class T , T I0, T... II>
    constexpr std::integral_constant< T, I0 > Dune::front (std::integer_sequence< T, I0, II... >)
     Return the first entry of the sequence.
     
    template<class T , T... II, std::enable_if_t<(sizeof...(II) > 0), int > = 0>
    constexpr auto Dune::back (std::integer_sequence< T, II... > seq)
     Return the last entry of the sequence.
     
    template<class T , T I0, T... II>
    constexpr std::integral_constant< T, I0 > Dune::head (std::integer_sequence< T, I0, II... >)
     For a sequence [head,tail...) return the single head element.
     
    template<class T , T I0, T... II>
    constexpr std::integer_sequence< T, II... > Dune::tail (std::integer_sequence< T, I0, II... >)
     For a sequence [head,tail...) return the tail sequence.
     
    template<auto I0, class T , T... II>
    constexpr std::integer_sequence< T, T(I0), II... > Dune::push_front (std::integer_sequence< T, II... >, std::integral_constant< T, I0 >={})
     Append an index I0 to the front of the sequence.
     
    template<auto IN, class T , T... II>
    constexpr std::integer_sequence< T, II..., T(IN)> Dune::push_back (std::integer_sequence< T, II... >, std::integral_constant< T, IN >={})
     Append an index IN to the back of the sequence.
     
    template<class T , T... II>
    constexpr std::integral_constant< std::size_t, sizeof...(II)> Dune::size (std::integer_sequence< T, II... >)
     Return the size of the sequence.
     
    template<class T , T... II>
    constexpr std::bool_constant<(sizeof...(II)==0)> Dune::empty (std::integer_sequence< T, II... >)
     Checks whether the sequence is empty.
     
    template<class T , T... II, class Compare >
    constexpr auto Dune::sorted (std::integer_sequence< T, II... > seq, Compare comp)
     Sort a given sequence by the comparator comp.
     
    template<class T , T... II>
    constexpr auto Dune::sorted (std::integer_sequence< T, II... > seq)
     Sort a given sequence by less-than comparison.
     
    template<class T , T... II, T value>
    constexpr std::bool_constant<((II==value)||...)> Dune::contains (std::integer_sequence< T, II... >, std::integral_constant< T, value >)
     Checks whether or not a given sequence contains a value.
     
    template<class T , T... II, T... JJ>
    constexpr auto Dune::difference (std::integer_sequence< T, II... > iSeq, std::integer_sequence< T, JJ... > jSeq)
     Return the elements from the sequence [II...) which are not found in the sequence [JJ...).
     
    template<std::size_t N, class T , T... JJ, std::enable_if_t<(N >=sizeof...(JJ)), int > = 0>
    constexpr auto Dune::difference (std::integer_sequence< T, JJ... > jSeq)
     Return the elements from the sequence [0,1,...N) which are not found in the sequence [JJ...).
     
    template<class S , S... II, class T , T... JJ, std::enable_if_t<(sizeof...(II)==sizeof...(JJ)), int > = 0, class ST = std::common_type_t<S,T>>
    constexpr std::is_same< std::integer_sequence< bool, true,(ST(II)==ST(JJ))... >, std::integer_sequence< bool,(ST(II)==ST(JJ))..., true > > Dune::equal (std::integer_sequence< S, II... >, std::integer_sequence< T, JJ... >)
     Checks whether two sequences are identical.
     
    template<class S , S... II, class T , T... JJ, std::enable_if_t<(sizeof...(II) !=sizeof...(JJ)), int > = 0>
    constexpr std::bool_constant< false > Dune::equal (std::integer_sequence< S, II... >, std::integer_sequence< T, JJ... >)
     Sequences are unequal if not of the same length.
     
    template<template< auto > class Filter, class T >
    constexpr auto Dune::filter (std::integer_sequence< T > jSeq)
     
    template<template< auto > class Filter, class T , T J0, T... JJ>
    constexpr auto Dune::filter (std::integer_sequence< T, J0, JJ... > jSeq)
     
    template<class Filter , class T >
    constexpr auto Dune::filter (Filter, std::integer_sequence< T > jSeq)
     
    template<class Filter , class T , T J0, T... JJ>
    constexpr auto Dune::filter (Filter f, std::integer_sequence< T, J0, JJ... > jSeq)
     
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,152 +1,18 @@\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-integersequence.hh File Reference\n-#include \n-#include \n-#include \n-#include \n-#include \n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+matrixconcepts.hh File Reference\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 \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 _\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-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template=sizeof...(II))), int > = 0>\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bt (std::integer_sequence< T,\n- II... >, std::integral_constant< std::\n- size_t, pos >={})\n-\u00a0 Return the entry at position pos of the\n- given sequence.\n-\u00a0\n-template\n- constexpr T\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bg_\be_\bt (std::integer_sequence< T,\n- II... >, std::size_t pos)\n-\u00a0 Return the entry at position pos of the\n- given sequence.\n-\u00a0\n-template\n-constexpr std::integral_constant< T, I0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\br_\bo_\bn_\bt (std::integer_sequence< T,\n- >\u00a0 I0, II... >)\n-\u00a0 Return the first entry of the sequence.\n-\u00a0\n-template 0), int > = 0>\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bb_\ba_\bc_\bk (std::integer_sequence< T,\n- II... > seq)\n-\u00a0 Return the last entry of the sequence.\n-\u00a0\n-template\n-constexpr std::integral_constant< T, I0 _\bD_\bu_\bn_\be_\b:_\b:_\bh_\be_\ba_\bd (std::integer_sequence< T,\n- >\u00a0 I0, II... >)\n-\u00a0 For a sequence [head,tail...) return\n- the single head element.\n-\u00a0\n-template\n- constexpr std::integer_sequence< T, _\bD_\bu_\bn_\be_\b:_\b:_\bt_\ba_\bi_\bl (std::integer_sequence< T,\n- II... >\u00a0 I0, II... >)\n-\u00a0 For a sequence [head,tail...) return\n- the tail sequence.\n-\u00a0\n-template\n- constexpr std::integer_sequence< T, T _\bD_\bu_\bn_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt (std::\n- (I0), II... >\u00a0 integer_sequence< T, II... >, std::\n- integral_constant< T, I0 >={})\n-\u00a0 Append an index I0 to the front of the\n- sequence.\n-\u00a0\n-template\n- constexpr std::integer_sequence< T, _\bD_\bu_\bn_\be_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk (std::integer_sequence<\n- II..., T(IN)>\u00a0 T, II... >, std::integral_constant< T,\n- IN >={})\n-\u00a0 Append an index IN to the back of the\n- sequence.\n-\u00a0\n-template\n-constexpr std::integral_constant< std:: _\bD_\bu_\bn_\be_\b:_\b:_\bs_\bi_\bz_\be (std::integer_sequence< T,\n- size_t, sizeof...(II)>\u00a0 II... >)\n-\u00a0 Return the size of the sequence.\n-\u00a0\n-template\n-constexpr std::bool_constant<(sizeof... _\bD_\bu_\bn_\be_\b:_\b:_\be_\bm_\bp_\bt_\by (std::integer_sequence< T,\n- (II)==0)>\u00a0 II... >)\n-\u00a0 Checks whether the sequence is empty.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bs_\bo_\br_\bt_\be_\bd (std::integer_sequence< T,\n- II... > seq, Compare comp)\n-\u00a0 Sort a given sequence by the comparator\n- comp.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bs_\bo_\br_\bt_\be_\bd (std::integer_sequence< T,\n- II... > seq)\n-\u00a0 Sort a given sequence by less-than\n- comparison.\n-\u00a0\n-template\n- constexpr std::bool_constant<( _\bD_\bu_\bn_\be_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs (std::integer_sequence<\n- (II==value)||...)>\u00a0 T, II... >, std::integral_constant< T,\n- value >)\n-\u00a0 Checks whether or not a given sequence\n- contains a value.\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be (std::\n- integer_sequence< T, II... > iSeq,\n- std::integer_sequence< T, JJ... > jSeq)\n- Return the elements from the sequence\n-\u00a0 [II...) which are not found in the\n- sequence [JJ...).\n-\u00a0\n-template=sizeof...\n-(JJ)), int > = 0>\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be (std::\n- integer_sequence< T, JJ... > jSeq)\n- Return the elements from the sequence\n-\u00a0 [0,1,...N) which are not found in the\n- sequence [JJ...).\n-\u00a0\n-template = 0, class ST = std::common_type_t>\n- constexpr std::is_same< std::\n- integer_sequence< bool, true,(ST\n- (II)==ST(JJ))... >, std:: _\bD_\bu_\bn_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl (std::integer_sequence< S,\n- integer_sequence< bool,(ST(II)==ST II... >, std::integer_sequence< T,\n- (JJ))..., true > >\u00a0 JJ... >)\n-\u00a0 Checks whether two sequences are\n- identical.\n-\u00a0\n-template = 0>\n- constexpr std::bool_constant< false >\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl (std::integer_sequence< S,\n- II... >, std::integer_sequence< T,\n- JJ... >)\n-\u00a0 Sequences are unequal if not of the\n- same length.\n-\u00a0\n-template class Filter, class T >\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bt_\be_\br (std::integer_sequence< T\n- > jSeq)\n-\u00a0\n-template class Filter, class T , T J0, T... JJ>\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bt_\be_\br (std::integer_sequence< T,\n- J0, JJ... > jSeq)\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bt_\be_\br (Filter, std::\n- integer_sequence< T > jSeq)\n-\u00a0\n-template\n- constexpr auto\u00a0 _\bD_\bu_\bn_\be_\b:_\b:_\bf_\bi_\bl_\bt_\be_\br (Filter f, std::\n- integer_sequence< T, J0, JJ... > jSeq)\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/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: integersequence.hh Source File\n+dune-common: matrixconcepts.hh Source File\n \n \n \n \n \n \n \n@@ -74,241 +74,109 @@\n \n
    \n \n
    \n
    \n
    \n-
    integersequence.hh
    \n+
    matrixconcepts.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_INTEGERSEQUENCE_HH
    \n-
    6#define DUNE_COMMON_INTEGERSEQUENCE_HH
    \n+
    5#ifndef DUNE_COMMON_MATRIXCONCEPTS_HH
    \n+
    6#define DUNE_COMMON_MATRIXCONCEPTS_HH
    \n
    7
    \n-
    8#include <algorithm>
    \n-
    9#include <array>
    \n-
    10#include <cassert>
    \n-
    11#include <functional>
    \n-
    12#include <type_traits>
    \n-
    13#include <utility>
    \n+
    8
    \n+
    9
    \n+
    10#include <utility>
    \n+
    11#include <type_traits>
    \n+
    12
    \n+\n
    14
    \n-\n+
    15
    \n
    16
    \n
    17namespace Dune {
    \n
    18
    \n-
    20template <std::size_t pos, class T, T... II,
    \n-
    21 std::enable_if_t<(!(pos >= sizeof...(II))), int> = 0>
    \n-
    \n-
    22constexpr auto get (std::integer_sequence<T,II...>, std::integral_constant<std::size_t,pos> = {})
    \n-
    23{
    \n-
    24 constexpr T entry = std::array<T,sizeof...(II)>{II...}[pos];
    \n-
    25 return std::integral_constant<T,entry>{};
    \n-
    26}
    \n-
    \n-
    27
    \n-
    29template <class T, T... II>
    \n-
    \n-
    30constexpr T get (std::integer_sequence<T,II...>, std::size_t pos)
    \n-
    31{
    \n-
    32 assert(pos < sizeof...(II));
    \n-
    33 return std::array<T,sizeof...(II)>{II...}[pos];
    \n-
    34}
    \n-
    \n-
    35
    \n-
    37template <class T, T I0, T... II>
    \n-
    38constexpr std::integral_constant<T,I0>
    \n-
    39front (std::integer_sequence<T,I0,II...>) { return {}; }
    \n-
    40
    \n-
    42template <class T, T... II,
    \n-
    43 std::enable_if_t<(sizeof...(II) > 0), int> = 0>
    \n-
    \n-
    44constexpr auto back (std::integer_sequence<T,II...> seq)
    \n-
    45{
    \n-
    46 return get<sizeof...(II)-1>(seq);
    \n-
    47}
    \n-
    \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
    \n-
    51template <class T, T I0, T... II>
    \n-
    52constexpr std::integral_constant<T,I0>
    \n-
    53head (std::integer_sequence<T,I0,II...>) { return {}; }
    \n-
    54
    \n-
    56template <class T, T I0, T... II>
    \n-
    57constexpr std::integer_sequence<T,II...>
    \n-
    58tail (std::integer_sequence<T,I0,II...>) { return {}; }
    \n-
    59
    \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+
    56
    \n+
    57
    \n+
    58 template<class T>
    \n+
    59 class IsFieldMatrix : public std::false_type {};
    \n
    60
    \n-
    62template <auto I0, class T, T... II>
    \n-
    63constexpr std::integer_sequence<T,T(I0),II...>
    \n-
    64push_front (std::integer_sequence<T,II...>, std::integral_constant<T,I0> = {}) { return {}; }
    \n-
    65
    \n-
    67template <auto IN, class T, T... II>
    \n-
    68constexpr std::integer_sequence<T,II...,T(IN)>
    \n-
    69push_back (std::integer_sequence<T,II...>, std::integral_constant<T,IN> = {}) { return {}; }
    \n-
    70
    \n-
    71
    \n-
    73template <class T, T... II>
    \n-
    74constexpr std::integral_constant<std::size_t,sizeof...(II)>
    \n-
    75size (std::integer_sequence<T,II...>) { return {}; }
    \n-
    76
    \n-
    78template <class T, T... II>
    \n-
    79constexpr std::bool_constant<(sizeof...(II) == 0)>
    \n-
    80empty (std::integer_sequence<T,II...>) { return {}; }
    \n-
    81
    \n-
    82namespace Impl {
    \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+
    82
    \n
    83
    \n-
    84// constexpr version of swap for older compilers
    \n-
    85template <class T>
    \n-
    86constexpr void swapImpl (T& a, T& b)
    \n-
    87{
    \n-
    88 T c = a; a = b; b = c;
    \n-
    89}
    \n-
    90
    \n-
    91// constexpr quick sort implementation
    \n-
    92template <class T, std::size_t N, class Compare>
    \n-
    93constexpr void sortImpl (std::array<T, N>& array, Compare comp, std::size_t left = 0, std::size_t right = N)
    \n-
    94{
    \n-
    95 // based on https://stackoverflow.com/a/40030044
    \n-
    96 if (left < right) {
    \n-
    97 std::size_t m = left;
    \n-
    98 for (std::size_t i = left + 1; i < right; ++i)
    \n-
    99 if (comp(array[i], array[left]))
    \n-
    100 swapImpl(array[++m], array[i]);
    \n-
    101 swapImpl(array[left], array[m]);
    \n-
    102 sortImpl(array, comp, left, m);
    \n-
    103 sortImpl(array, comp, m + 1, right);
    \n-
    104 }
    \n-
    105}
    \n-
    106
    \n-
    107// return the sorted array
    \n-
    108template <class T, std::size_t N, class Compare>
    \n-
    109constexpr std::array<T, N> sortedImpl (std::array<T, N> array, Compare comp)
    \n-
    110{
    \n-
    111 sortImpl(array, comp);
    \n-
    112 return array;
    \n-
    113}
    \n-
    114
    \n-
    115} // end namespace Impl
    \n-
    116
    \n-
    118template <class T, T... II, class Compare>
    \n-
    \n-
    119constexpr auto sorted (std::integer_sequence<T,II...> seq, Compare comp)
    \n-
    120{
    \n-
    121 constexpr auto sorted = Impl::sortedImpl(std::array<T,sizeof...(II)>{II...}, comp);
    \n-
    122 return unpackIntegerSequence([&](auto... i) {
    \n-
    123 return std::integer_sequence<T,sorted[i]...>{};
    \n-
    124 }, std::make_index_sequence<sizeof...(II)>{});
    \n-
    125}
    \n-
    \n-
    126
    \n-
    128template <class T, T... II>
    \n-
    \n-
    129constexpr auto sorted (std::integer_sequence<T,II...> seq)
    \n-
    130{
    \n-
    131 return sorted(seq, std::less<T>{});
    \n-
    132}
    \n-
    \n-
    133
    \n-
    135template <class T, T... II, T value>
    \n-
    136constexpr std::bool_constant<((II == value) || ...)>
    \n-
    137contains (std::integer_sequence<T,II...>, std::integral_constant<T,value>) { return {}; }
    \n-
    138
    \n-
    139
    \n-
    141template <class T, T... II, T... JJ>
    \n-
    \n-
    142constexpr auto difference (std::integer_sequence<T,II...> iSeq, std::integer_sequence<T,JJ...> jSeq)
    \n-
    143{
    \n-
    144 if constexpr(iSeq.size() == 0 || jSeq.size() == 0)
    \n-
    145 return iSeq;
    \n-
    146 else {
    \n-
    147 constexpr auto I0 = head(iSeq);
    \n-
    148 if constexpr(!contains(jSeq,I0))
    \n-
    149 return push_front<I0.value>(difference(tail(iSeq),jSeq));
    \n-
    150 else
    \n-
    151 return difference(tail(iSeq),jSeq);
    \n-
    152 }
    \n-
    153}
    \n-
    \n-
    154
    \n-
    156template <std::size_t N, class T, T... JJ,
    \n-
    157 std::enable_if_t<(N >= sizeof...(JJ)), int> = 0>
    \n-
    \n-
    158constexpr auto difference (std::integer_sequence<T,JJ...> jSeq)
    \n-
    159{
    \n-
    160 return difference(std::make_integer_sequence<T,N>{}, jSeq);
    \n-
    161}
    \n-
    \n-
    162
    \n-
    163
    \n-
    165template <class S, S... II, class T, T... JJ,
    \n-
    166 std::enable_if_t<(sizeof...(II) == sizeof...(JJ)), int> = 0,
    \n-
    167 class ST = std::common_type_t<S,T>>
    \n-
    168constexpr std::is_same<std::integer_sequence<bool,true,(ST(II) == ST(JJ))...>,
    \n-
    169 std::integer_sequence<bool,(ST(II) == ST(JJ))...,true>>
    \n-
    170equal (std::integer_sequence<S,II...>, std::integer_sequence<T,JJ...>) { return {}; }
    \n-
    171
    \n-
    173template <class S, S... II, class T, T... JJ,
    \n-
    174 std::enable_if_t<(sizeof...(II) != sizeof...(JJ)), int> = 0>
    \n-
    175constexpr std::bool_constant<false>
    \n-
    176equal (std::integer_sequence<S,II...>, std::integer_sequence<T,JJ...>) { return {}; }
    \n-
    177
    \n-
    178
    \n-
    179template <template <auto> class Filter, class T>
    \n-
    180constexpr auto filter (std::integer_sequence<T> jSeq) { return jSeq; }
    \n-
    181
    \n-
    184template <template <auto> class Filter, class T, T J0, T... JJ>
    \n-
    \n-
    185constexpr auto filter (std::integer_sequence<T,J0,JJ...> jSeq)
    \n-
    186{
    \n-
    187 if constexpr(Filter<J0>::value)
    \n-
    188 return push_front(filter<Filter>(tail(jSeq)), head(jSeq));
    \n-
    189 else
    \n-
    190 return filter<Filter>(tail(jSeq));
    \n-
    191}
    \n-
    \n-
    192
    \n-
    193template <class Filter, class T>
    \n-
    194constexpr auto filter (Filter, std::integer_sequence<T> jSeq) { return jSeq; }
    \n-
    195
    \n-
    198template <class Filter, class T, T J0, T... JJ>
    \n-
    \n-
    199constexpr auto filter (Filter f, std::integer_sequence<T,J0,JJ...> jSeq)
    \n-
    200{
    \n-
    201 constexpr auto jHead = head(jSeq);
    \n-
    202 if constexpr(f(jHead))
    \n-
    203 return push_front(filter(f, tail(jSeq)), jHead);
    \n-
    204 else
    \n-
    205 return filter(f, tail(jSeq));
    \n-
    206}
    \n-
    \n-
    207
    \n-
    208} // end namespace Dune
    \n-
    209
    \n-
    210#endif // DUNE_COMMON_INTEGERSEQUENCE_HH
    \n-\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+
    84
    \n+
    85} // namespace Dune::Impl
    \n+
    86
    \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
    Dune namespace.
    Definition alignedallocator.hh:13
    \n-
    constexpr auto sorted(std::integer_sequence< T, II... > seq, Compare comp)
    Sort a given sequence by the comparator comp.
    Definition integersequence.hh:119
    \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-
    constexpr std::integer_sequence< T, T(I0), II... > push_front(std::integer_sequence< T, II... >, std::integral_constant< T, I0 >={})
    Append an index I0 to the front of the sequence.
    Definition integersequence.hh:64
    \n-
    constexpr std::bool_constant<(sizeof...(II)==0)> empty(std::integer_sequence< T, II... >)
    Checks whether the sequence is empty.
    Definition integersequence.hh:80
    \n-
    constexpr std::integral_constant< T, I0 > front(std::integer_sequence< T, I0, II... >)
    Return the first entry of the sequence.
    Definition integersequence.hh:39
    \n-
    constexpr std::integer_sequence< T, II... > tail(std::integer_sequence< T, I0, II... >)
    For a sequence [head,tail...) return the tail sequence.
    Definition integersequence.hh:58
    \n-
    constexpr auto filter(std::integer_sequence< T > jSeq)
    Definition integersequence.hh:180
    \n-
    constexpr std::bool_constant<((II==value)||...)> contains(std::integer_sequence< T, II... >, std::integral_constant< T, value >)
    Checks whether or not a given sequence contains a value.
    Definition integersequence.hh:137
    \n-
    constexpr std::is_same< std::integer_sequence< bool, true,(ST(II)==ST(JJ))... >, std::integer_sequence< bool,(ST(II)==ST(JJ))..., true > > equal(std::integer_sequence< S, II... >, std::integer_sequence< T, JJ... >)
    Checks whether two sequences are identical.
    Definition integersequence.hh:170
    \n-
    constexpr auto back(std::integer_sequence< T, II... > seq)
    Return the last entry of the sequence.
    Definition integersequence.hh:44
    \n-
    constexpr std::integral_constant< T, I0 > head(std::integer_sequence< T, I0, II... >)
    For a sequence [head,tail...) return the single head element.
    Definition integersequence.hh:53
    \n-
    constexpr auto difference(std::integer_sequence< T, II... > iSeq, std::integer_sequence< T, JJ... > jSeq)
    Return the elements from the sequence [II...) which are not found in the sequence [JJ....
    Definition integersequence.hh:142
    \n-
    constexpr auto get(std::integer_sequence< T, II... >, std::integral_constant< std::size_t, pos >={})
    Return the entry at position pos of the given sequence.
    Definition integersequence.hh:22
    \n
    \n \n
    \n Generated by \"doxygen\"/ 1.9.8\n
    \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,288 +1,113 @@\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-integersequence.hh\n+matrixconcepts.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_INTEGERSEQUENCE_HH\n-6#define DUNE_COMMON_INTEGERSEQUENCE_HH\n+5#ifndef DUNE_COMMON_MATRIXCONCEPTS_HH\n+6#define DUNE_COMMON_MATRIXCONCEPTS_HH\n 7\n-8#include \n-9#include \n-10#include \n-11#include \n-12#include \n-13#include \n+8\n+9\n+10#include \n+11#include \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-15#include <_\bd_\bu_\bn_\be_\b/_\bc_\bo_\bm_\bm_\bo_\bn_\b/_\bi_\bn_\bd_\bi_\bc_\be_\bs_\b._\bh_\bh>\n+15\n 16\n 17namespace _\bD_\bu_\bn_\be {\n 18\n-20template = sizeof...(II))), int> = 0>\n-_\b2_\b2constexpr auto _\bg_\be_\bt (std::integer_sequence, std::\n-integral_constant = {})\n-23{\n-24 constexpr T entry = std::array{II...}[pos];\n-25 return std::integral_constant{};\n-26}\n-27\n-29template \n-_\b3_\b0constexpr T _\bg_\be_\bt (std::integer_sequence, std::size_t pos)\n-31{\n-32 assert(pos < sizeof...(II));\n-33 return std::array{II...}[pos];\n-34}\n-35\n-37template \n-38constexpr std::integral_constant\n-_\b3_\b9_\bf_\br_\bo_\bn_\bt (std::integer_sequence) { return {}; }\n-40\n-42template 0), int> = 0>\n-_\b4_\b4constexpr auto _\bb_\ba_\bc_\bk (std::integer_sequence seq)\n-45{\n-46 return _\bg_\be_\bt(seq);\n-47}\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\n-51template \n-52constexpr std::integral_constant\n-_\b5_\b3_\bh_\be_\ba_\bd (std::integer_sequence) { return {}; }\n-54\n-56template \n-57constexpr std::integer_sequence\n-_\b5_\b8_\bt_\ba_\bi_\bl (std::integer_sequence) { return {}; }\n-59\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+56\n+57\n+58 template\n+59 class IsFieldMatrix : public std::false_type {};\n 60\n-62template \n-63constexpr std::integer_sequence\n-_\b6_\b4_\bp_\bu_\bs_\bh_\b__\bf_\br_\bo_\bn_\bt (std::integer_sequence, std::integral_constant =\n-{}) { return {}; }\n-65\n-67template \n-68constexpr std::integer_sequence\n-_\b6_\b9_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk (std::integer_sequence, std::integral_constant = {})\n-{ return {}; }\n-70\n-71\n-73template \n-74constexpr std::integral_constant\n-_\b7_\b5_\bs_\bi_\bz_\be (std::integer_sequence) { return {}; }\n-76\n-78template \n-79constexpr std::bool_constant<(sizeof...(II) == 0)>\n-_\b8_\b0_\be_\bm_\bp_\bt_\by (std::integer_sequence) { return {}; }\n-81\n-82namespace Impl {\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+82\n 83\n-84// constexpr version of swap for older compilers\n-85template \n-86constexpr void swapImpl (T& a, T& b)\n-87{\n-88 T c = a; a = b; b = c;\n-89}\n-90\n-91// constexpr quick sort implementation\n-92template \n-93constexpr void sortImpl (std::array& array, Compare comp, std::size_t\n-left = 0, std::size_t right = N)\n-94{\n-95 // based on https://stackoverflow.com/a/40030044\n-96 if (left < right) {\n-97 std::size_t m = left;\n-98 for (std::size_t i = left + 1; i < right; ++i)\n-99 if (comp(array[i], array[left]))\n-100 swapImpl(array[++m], array[i]);\n-101 swapImpl(array[left], array[m]);\n-102 sortImpl(array, comp, left, m);\n-103 sortImpl(array, comp, m + 1, right);\n-104 }\n-105}\n-106\n-107// return the sorted array\n-108template \n-109constexpr std::array sortedImpl (std::array array, Compare comp)\n-110{\n-111 sortImpl(array, comp);\n-112 return array;\n-113}\n-114\n-115} // end namespace Impl\n-116\n-118template \n-_\b1_\b1_\b9constexpr auto _\bs_\bo_\br_\bt_\be_\bd (std::integer_sequence seq, Compare comp)\n-120{\n-121 constexpr auto _\bs_\bo_\br_\bt_\be_\bd = Impl::sortedImpl(std::array\n-{II...}, comp);\n-122 return _\bu_\bn_\bp_\ba_\bc_\bk_\bI_\bn_\bt_\be_\bg_\be_\br_\bS_\be_\bq_\bu_\be_\bn_\bc_\be([&](auto... i) {\n-123 return std::integer_sequence{};\n-124 }, std::make_index_sequence{});\n-125}\n-126\n-128template \n-_\b1_\b2_\b9constexpr auto _\bs_\bo_\br_\bt_\be_\bd (std::integer_sequence seq)\n-130{\n-131 return _\bs_\bo_\br_\bt_\be_\bd(seq, std::less{});\n-132}\n-133\n-135template \n-136constexpr std::bool_constant<((II == value) || ...)>\n-_\b1_\b3_\b7_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs (std::integer_sequence, std::integral_constant)\n-{ return {}; }\n-138\n-139\n-141template \n-_\b1_\b4_\b2constexpr auto _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be (std::integer_sequence iSeq, std::\n-integer_sequence jSeq)\n-143{\n-144 if constexpr(iSeq.size() == 0 || jSeq.size() == 0)\n-145 return iSeq;\n-146 else {\n-147 constexpr auto I0 = _\bh_\be_\ba_\bd(iSeq);\n-148 if constexpr(!_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(jSeq,I0))\n-149 return push_front(_\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be(_\bt_\ba_\bi_\bl(iSeq),jSeq));\n-150 else\n-151 return _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be(_\bt_\ba_\bi_\bl(iSeq),jSeq);\n-152 }\n-153}\n-154\n-156template = sizeof...(JJ)), int> = 0>\n-_\b1_\b5_\b8constexpr auto _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be (std::integer_sequence jSeq)\n-159{\n-160 return _\bd_\bi_\bf_\bf_\be_\br_\be_\bn_\bc_\be(std::make_integer_sequence{}, jSeq);\n-161}\n-162\n-163\n-165template = 0,\n-167 class ST = std::common_type_t>\n-168constexpr std::is_same,\n-169 std::integer_sequence>\n-_\b1_\b7_\b0_\be_\bq_\bu_\ba_\bl (std::integer_sequence, std::integer_sequence)\n-{ return {}; }\n-171\n-173template = 0>\n-175constexpr std::bool_constant\n-_\b1_\b7_\b6_\be_\bq_\bu_\ba_\bl (std::integer_sequence, std::integer_sequence)\n-{ return {}; }\n-177\n-178\n-179template