diff --git a/annotated.html b/annotated.html
index 650f503a4..711b64562 100644
--- a/annotated.html
+++ b/annotated.html
@@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classes.html b/classes.html
index 0a22ecd1d..96b4e2bdc 100644
--- a/classes.html
+++ b/classes.html
@@ -106,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json-members.html b/classnlohmann_1_1basic__json-members.html
index 147af85a0..7453f19bd 100644
--- a/classnlohmann_1_1basic__json-members.html
+++ b/classnlohmann_1_1basic__json-members.html
@@ -251,7 +251,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json.html b/classnlohmann_1_1basic__json.html
index 983e7d7f5..84c94eafd 100644
--- a/classnlohmann_1_1basic__json.html
+++ b/classnlohmann_1_1basic__json.html
@@ -725,7 +725,7 @@ class nlohmann::basic_json
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator-members.html b/classnlohmann_1_1basic__json_1_1const__iterator-members.html
index fe06e1024..2aa9f9e70 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator-members.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator-members.html
@@ -128,7 +128,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator.html b/classnlohmann_1_1basic__json_1_1const__iterator.html
index 83e59d963..56deb3179 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator.html
@@ -219,7 +219,7 @@ class nlohmann::basic_json::const_iterator
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html b/classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html
index 11529691a..7de1a0186 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html b/classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html
index 4cbb550b6..8cd8f5ac5 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html b/classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html
index 4aab0a90a..6a0c58b10 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html b/classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html
index baa6d24d9..425da4d3e 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html b/classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html
index 7e86d9d4b..5f9d2650a 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a5521515067b6597cb0b55a9c547a7a2b.html b/classnlohmann_1_1basic__json_1_1const__iterator_a5521515067b6597cb0b55a9c547a7a2b.html
index 16d8aaaa1..bc06f4fdc 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a5521515067b6597cb0b55a9c547a7a2b.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a5521515067b6597cb0b55a9c547a7a2b.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a5d4320e24fcb7df041ff2c95d976dba0.html b/classnlohmann_1_1basic__json_1_1const__iterator_a5d4320e24fcb7df041ff2c95d976dba0.html
index 4cc2087c7..7577a6a4b 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a5d4320e24fcb7df041ff2c95d976dba0.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a5d4320e24fcb7df041ff2c95d976dba0.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a5e4d98a8f95e2eccde8cd48c19efa196.html b/classnlohmann_1_1basic__json_1_1const__iterator_a5e4d98a8f95e2eccde8cd48c19efa196.html
index face3ac51..2992d0770 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a5e4d98a8f95e2eccde8cd48c19efa196.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a5e4d98a8f95e2eccde8cd48c19efa196.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a65f491b515e5967e9c0b40289e3c0ff3.html b/classnlohmann_1_1basic__json_1_1const__iterator_a65f491b515e5967e9c0b40289e3c0ff3.html
index 4131957b2..ab9e0e574 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a65f491b515e5967e9c0b40289e3c0ff3.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a65f491b515e5967e9c0b40289e3c0ff3.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a6b682f09787eff62f03493d45aa05902.html b/classnlohmann_1_1basic__json_1_1const__iterator_a6b682f09787eff62f03493d45aa05902.html
index 1071aca75..4326e73fb 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a6b682f09787eff62f03493d45aa05902.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a6b682f09787eff62f03493d45aa05902.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html b/classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html
index 7e38b82bc..899e1d091 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html b/classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html
index 123eef77a..e600beb4b 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html b/classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html
index a221a64fe..478aff851 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a7bd530bfbbc58ac77308c087120c21fa.html b/classnlohmann_1_1basic__json_1_1const__iterator_a7bd530bfbbc58ac77308c087120c21fa.html
index 7c718bfd3..a598b6a62 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a7bd530bfbbc58ac77308c087120c21fa.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a7bd530bfbbc58ac77308c087120c21fa.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html b/classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html
index dea9027f4..4e448b257 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a8be837e4d902887676dd837abe9098d3.html b/classnlohmann_1_1basic__json_1_1const__iterator_a8be837e4d902887676dd837abe9098d3.html
index c49c58cbe..83954c27c 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a8be837e4d902887676dd837abe9098d3.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a8be837e4d902887676dd837abe9098d3.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html b/classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html
index 8bf3b5ecb..b604a7673 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html b/classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html
index 47ee5ee44..d0ef4cf5d 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a9e4c6e48e3c2f3ff357ef8215b8c8fca.html b/classnlohmann_1_1basic__json_1_1const__iterator_a9e4c6e48e3c2f3ff357ef8215b8c8fca.html
index 1bfaaadfd..778f681a3 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a9e4c6e48e3c2f3ff357ef8215b8c8fca.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a9e4c6e48e3c2f3ff357ef8215b8c8fca.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html b/classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html
index 8732b6ffb..aa8cf364a 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_ab3029a1a83cf46dc28ad443bbad0c74d.html b/classnlohmann_1_1basic__json_1_1const__iterator_ab3029a1a83cf46dc28ad443bbad0c74d.html
index af1389b8b..945b11e28 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_ab3029a1a83cf46dc28ad443bbad0c74d.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_ab3029a1a83cf46dc28ad443bbad0c74d.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_ab4c0b9baaec9ebc4837158e272f6c803.html b/classnlohmann_1_1basic__json_1_1const__iterator_ab4c0b9baaec9ebc4837158e272f6c803.html
index 3060f2c52..f563ce028 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_ab4c0b9baaec9ebc4837158e272f6c803.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_ab4c0b9baaec9ebc4837158e272f6c803.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html b/classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html
index fee537b5d..c23899249 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_ac6fdaff67857f82a623e5cc253917639.html b/classnlohmann_1_1basic__json_1_1const__iterator_ac6fdaff67857f82a623e5cc253917639.html
index f9cc9e3a5..c0951f699 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_ac6fdaff67857f82a623e5cc253917639.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_ac6fdaff67857f82a623e5cc253917639.html
@@ -150,7 +150,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_ac75e80d30b6169ee2a29ec93fb4d2acd.html b/classnlohmann_1_1basic__json_1_1const__iterator_ac75e80d30b6169ee2a29ec93fb4d2acd.html
index f5cebcaf3..d73ea9d7d 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_ac75e80d30b6169ee2a29ec93fb4d2acd.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_ac75e80d30b6169ee2a29ec93fb4d2acd.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_acb6cd0ff760933afeb7f93e5207f3646.html b/classnlohmann_1_1basic__json_1_1const__iterator_acb6cd0ff760933afeb7f93e5207f3646.html
index e543f49b8..5efba51c3 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_acb6cd0ff760933afeb7f93e5207f3646.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_acb6cd0ff760933afeb7f93e5207f3646.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html b/classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html
index 0e93ffed1..33b671458 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html
@@ -149,7 +149,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html b/classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html
index bcca2ec38..56e54d2c5 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html
@@ -152,7 +152,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html b/classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html
index fbe58f9f1..4ec0e9756 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html b/classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html
index 86c96e165..ccfcac0fd 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1const__iterator_af6941c3711dabb2e64960dd57e00d201.html b/classnlohmann_1_1basic__json_1_1const__iterator_af6941c3711dabb2e64960dd57e00d201.html
index 4acf839e1..d5e75cf44 100644
--- a/classnlohmann_1_1basic__json_1_1const__iterator_af6941c3711dabb2e64960dd57e00d201.html
+++ b/classnlohmann_1_1basic__json_1_1const__iterator_af6941c3711dabb2e64960dd57e00d201.html
@@ -153,7 +153,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator-members.html b/classnlohmann_1_1basic__json_1_1iterator-members.html
index 36a3c106f..e16101fea 100644
--- a/classnlohmann_1_1basic__json_1_1iterator-members.html
+++ b/classnlohmann_1_1basic__json_1_1iterator-members.html
@@ -133,7 +133,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json_1_1iterator.html b/classnlohmann_1_1basic__json_1_1iterator.html
index b77c0e087..6e1e45d5a 100644
--- a/classnlohmann_1_1basic__json_1_1iterator.html
+++ b/classnlohmann_1_1basic__json_1_1iterator.html
@@ -271,7 +271,7 @@ class nlohmann::basic_json::iterator
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html b/classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html
index 111f68bcb..10a3f0c61 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html b/classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html
index 3b93a7094..c14529d37 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html b/classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html
index 21c8c7762..06b25aabb 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html b/classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html
index 220a89167..7b7a71ed8 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a3aae1df93a78b201d98e178c1c7d02a7.html b/classnlohmann_1_1basic__json_1_1iterator_a3aae1df93a78b201d98e178c1c7d02a7.html
index a489ecd8b..94d950ace 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a3aae1df93a78b201d98e178c1c7d02a7.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a3aae1df93a78b201d98e178c1c7d02a7.html
@@ -130,7 +130,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a3db892729714c4e7eaf60c00ee96e2e9.html b/classnlohmann_1_1basic__json_1_1iterator_a3db892729714c4e7eaf60c00ee96e2e9.html
index 78e8b02c1..bc76d1539 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a3db892729714c4e7eaf60c00ee96e2e9.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a3db892729714c4e7eaf60c00ee96e2e9.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a47fb2dbbbfaf65c0ccfa99aeaed920a1.html b/classnlohmann_1_1basic__json_1_1iterator_a47fb2dbbbfaf65c0ccfa99aeaed920a1.html
index af1fa40b2..066544fdf 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a47fb2dbbbfaf65c0ccfa99aeaed920a1.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a47fb2dbbbfaf65c0ccfa99aeaed920a1.html
@@ -139,7 +139,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html b/classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html
index a3ab9fb57..f474ba589 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html b/classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html
index d30e6a693..c5abdbccb 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a7e01532727c10f87926dac4eb8e170f4.html b/classnlohmann_1_1basic__json_1_1iterator_a7e01532727c10f87926dac4eb8e170f4.html
index 6f3217072..1c32a871d 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a7e01532727c10f87926dac4eb8e170f4.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a7e01532727c10f87926dac4eb8e170f4.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a8de46badb5b2177c85c672a71bcca017.html b/classnlohmann_1_1basic__json_1_1iterator_a8de46badb5b2177c85c672a71bcca017.html
index 43f52bb97..81e887ce0 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a8de46badb5b2177c85c672a71bcca017.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a8de46badb5b2177c85c672a71bcca017.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a8ffbf287736048e683f58306fdb8701f.html b/classnlohmann_1_1basic__json_1_1iterator_a8ffbf287736048e683f58306fdb8701f.html
index dc77766df..85a89c64d 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a8ffbf287736048e683f58306fdb8701f.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a8ffbf287736048e683f58306fdb8701f.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a97aff5d71246774267a81066460dd1cf.html b/classnlohmann_1_1basic__json_1_1iterator_a97aff5d71246774267a81066460dd1cf.html
index f5c40977c..291b02822 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a97aff5d71246774267a81066460dd1cf.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a97aff5d71246774267a81066460dd1cf.html
@@ -130,7 +130,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_a9f3940ac5fb2c6ff8045ed59b8a0866f.html b/classnlohmann_1_1basic__json_1_1iterator_a9f3940ac5fb2c6ff8045ed59b8a0866f.html
index 2d939dc3b..b4bcfae06 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_a9f3940ac5fb2c6ff8045ed59b8a0866f.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_a9f3940ac5fb2c6ff8045ed59b8a0866f.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html b/classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html
index 70c97bcc6..6ba8ab6f8 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html b/classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html
index 0ae333218..99d59fc6a 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_ac48754e4dc48d65d95294bd170dcd857.html b/classnlohmann_1_1basic__json_1_1iterator_ac48754e4dc48d65d95294bd170dcd857.html
index de83e3435..c214d88b3 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_ac48754e4dc48d65d95294bd170dcd857.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_ac48754e4dc48d65d95294bd170dcd857.html
@@ -130,7 +130,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_acbd82115f9232c3d3b5dacc78315b9da.html b/classnlohmann_1_1basic__json_1_1iterator_acbd82115f9232c3d3b5dacc78315b9da.html
index 1f8ec0c0b..e1aed5b20 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_acbd82115f9232c3d3b5dacc78315b9da.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_acbd82115f9232c3d3b5dacc78315b9da.html
@@ -141,7 +141,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html b/classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html
index c433efbe0..9f7402e9b 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html b/classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html
index 1cc9c7c57..3ff51bd48 100644
--- a/classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html
+++ b/classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html
@@ -142,7 +142,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1json__pointer-members.html b/classnlohmann_1_1basic__json_1_1json__pointer-members.html
index f9c76c203..c570a6a34 100644
--- a/classnlohmann_1_1basic__json_1_1json__pointer-members.html
+++ b/classnlohmann_1_1basic__json_1_1json__pointer-members.html
@@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json_1_1json__pointer.html b/classnlohmann_1_1basic__json_1_1json__pointer.html
index 70c17350b..3ca5c7eac 100644
--- a/classnlohmann_1_1basic__json_1_1json__pointer.html
+++ b/classnlohmann_1_1basic__json_1_1json__pointer.html
@@ -124,7 +124,7 @@ class nlohmann::basic_json::json_pointer
diff --git a/classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html b/classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html
index 1cb8c4982..d2a1ef9fd 100644
--- a/classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html
+++ b/classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html
@@ -120,7 +120,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html b/classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html
index 6d8696010..c974cecf5 100644
--- a/classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html
+++ b/classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html
@@ -146,7 +146,7 @@ domain_error: escape error: '~' must be followed with '0' or '1'
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator-members.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator-members.html
index 0d56c3a88..29a2a3039 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator-members.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator-members.html
@@ -112,7 +112,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator.html
index 030524c75..ed57e176c 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator.html
@@ -174,7 +174,7 @@ class nlohmann::basic_json::json_reverse_iterator< Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a115fae3dd8ae02669fedae0545ce1cbc.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a115fae3dd8ae02669fedae0545ce1cbc.html
index dd56b2ea4..d8940d7e6 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a115fae3dd8ae02669fedae0545ce1cbc.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a115fae3dd8ae02669fedae0545ce1cbc.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html
index 648944463..7fbd7fe62 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html
@@ -138,7 +138,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html
index ea5c8eee4..c7738b261 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html
index 1067dd02b..c2dde6aa1 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html
index c7dd59fdf..4d9bfdc96 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html
@@ -138,7 +138,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html
index b2a3718d3..f2b67eb76 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html
index 3566ef56f..1eabb379d 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html
@@ -127,7 +127,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html
index 3a29c3eb9..7a24806f1 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99ee137dab7e5c948457f6a5321b54b1.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99ee137dab7e5c948457f6a5321b54b1.html
index c5d0a4ed3..8e922b5c5 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99ee137dab7e5c948457f6a5321b54b1.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a99ee137dab7e5c948457f6a5321b54b1.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html
index 1c0582f72..acd32a339 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html
index 24e56bd6c..7c58608b9 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html
@@ -127,7 +127,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ac2634bee082633671125e909dffad40a.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ac2634bee082633671125e909dffad40a.html
index 83ffaac91..4be12ddc9 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ac2634bee082633671125e909dffad40a.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ac2634bee082633671125e909dffad40a.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_aca5116682e206dac48f8a56716a3280b.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_aca5116682e206dac48f8a56716a3280b.html
index 7245b4c1a..9a617ad4d 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_aca5116682e206dac48f8a56716a3280b.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_aca5116682e206dac48f8a56716a3280b.html
@@ -138,7 +138,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_acecae6d237fcf14c909fb42b9d2e2955.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_acecae6d237fcf14c909fb42b9d2e2955.html
index 65ec96edc..66deb60a4 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_acecae6d237fcf14c909fb42b9d2e2955.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_acecae6d237fcf14c909fb42b9d2e2955.html
@@ -138,7 +138,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad4ec2bbb8347e7aa3b58e616fd6c7f40.html b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad4ec2bbb8347e7aa3b58e616fd6c7f40.html
index 72e2abb7a..25451e149 100644
--- a/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad4ec2bbb8347e7aa3b58e616fd6c7f40.html
+++ b/classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad4ec2bbb8347e7aa3b58e616fd6c7f40.html
@@ -139,7 +139,7 @@ template<typename Base >
diff --git a/classnlohmann_1_1basic__json_a01833b332b68d9af1f7cd7a816c39e49.html b/classnlohmann_1_1basic__json_a01833b332b68d9af1f7cd7a816c39e49.html
index f89dc8797..3647a832b 100644
--- a/classnlohmann_1_1basic__json_a01833b332b68d9af1f7cd7a816c39e49.html
+++ b/classnlohmann_1_1basic__json_a01833b332b68d9af1f7cd7a816c39e49.html
@@ -316,7 +316,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a018ea61dbc973192d2ffc6bccc50696b.html b/classnlohmann_1_1basic__json_a018ea61dbc973192d2ffc6bccc50696b.html
index 8065090f5..5a1408a5d 100644
--- a/classnlohmann_1_1basic__json_a018ea61dbc973192d2ffc6bccc50696b.html
+++ b/classnlohmann_1_1basic__json_a018ea61dbc973192d2ffc6bccc50696b.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a0389c5dd86adc512e5826d7ff610f776.html b/classnlohmann_1_1basic__json_a0389c5dd86adc512e5826d7ff610f776.html
index f0e14de85..2665bc5fe 100644
--- a/classnlohmann_1_1basic__json_a0389c5dd86adc512e5826d7ff610f776.html
+++ b/classnlohmann_1_1basic__json_a0389c5dd86adc512e5826d7ff610f776.html
@@ -309,7 +309,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html b/classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html
index 2ebb7fe56..527235ca2 100644
--- a/classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html
+++ b/classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a098482190447461f47f80b99bf2519f6.html b/classnlohmann_1_1basic__json_a098482190447461f47f80b99bf2519f6.html
index 085f142cd..546eafcf6 100644
--- a/classnlohmann_1_1basic__json_a098482190447461f47f80b99bf2519f6.html
+++ b/classnlohmann_1_1basic__json_a098482190447461f47f80b99bf2519f6.html
@@ -297,7 +297,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a0a2cbbd95862a623e7dc5c37e67dead0.html b/classnlohmann_1_1basic__json_a0a2cbbd95862a623e7dc5c37e67dead0.html
index e1c2c25d0..ecf318a19 100644
--- a/classnlohmann_1_1basic__json_a0a2cbbd95862a623e7dc5c37e67dead0.html
+++ b/classnlohmann_1_1basic__json_a0a2cbbd95862a623e7dc5c37e67dead0.html
@@ -321,7 +321,7 @@ value() with null"
diff --git a/classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html b/classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html
index 1da681d39..00d8c15ca 100644
--- a/classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html
+++ b/classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html
@@ -296,7 +296,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a0d46dd5ef4992fb80f9f0d9f56f16eae.html b/classnlohmann_1_1basic__json_a0d46dd5ef4992fb80f9f0d9f56f16eae.html
index b13f1aee0..90c116a27 100644
--- a/classnlohmann_1_1basic__json_a0d46dd5ef4992fb80f9f0d9f56f16eae.html
+++ b/classnlohmann_1_1basic__json_a0d46dd5ef4992fb80f9f0d9f56f16eae.html
@@ -300,7 +300,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html b/classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html
index b4bf61fef..1a4827822 100644
--- a/classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html
+++ b/classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html
@@ -300,7 +300,7 @@ template<typename T , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_a0d96ff13001977a93d65f0a97279d316.html b/classnlohmann_1_1basic__json_a0d96ff13001977a93d65f0a97279d316.html
index 3c384f379..50bc154e4 100644
--- a/classnlohmann_1_1basic__json_a0d96ff13001977a93d65f0a97279d316.html
+++ b/classnlohmann_1_1basic__json_a0d96ff13001977a93d65f0a97279d316.html
@@ -290,7 +290,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a101cd941eb8a5c299660449c71d0e75e.html b/classnlohmann_1_1basic__json_a101cd941eb8a5c299660449c71d0e75e.html
index 0eb4dd6de..67cbb348d 100644
--- a/classnlohmann_1_1basic__json_a101cd941eb8a5c299660449c71d0e75e.html
+++ b/classnlohmann_1_1basic__json_a101cd941eb8a5c299660449c71d0e75e.html
@@ -297,7 +297,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html b/classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html
index 93d7bd27c..3c2e9616e 100644
--- a/classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html
+++ b/classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html
@@ -301,7 +301,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html b/classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html
index 2577a038f..598dc6a87 100644
--- a/classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html
+++ b/classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html
@@ -307,7 +307,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html b/classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html
index 98497554b..e95755b34 100644
--- a/classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html
+++ b/classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html
@@ -295,7 +295,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a13c4d2ab4e7ee2f92be785a7b12948ff.html b/classnlohmann_1_1basic__json_a13c4d2ab4e7ee2f92be785a7b12948ff.html
index dad6d0c10..cf3f488b1 100644
--- a/classnlohmann_1_1basic__json_a13c4d2ab4e7ee2f92be785a7b12948ff.html
+++ b/classnlohmann_1_1basic__json_a13c4d2ab4e7ee2f92be785a7b12948ff.html
@@ -338,7 +338,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a1407f91b4689bbc56d1a3c401a5bb649.html b/classnlohmann_1_1basic__json_a1407f91b4689bbc56d1a3c401a5bb649.html
index 6bf816f8b..3e19d3d5a 100644
--- a/classnlohmann_1_1basic__json_a1407f91b4689bbc56d1a3c401a5bb649.html
+++ b/classnlohmann_1_1basic__json_a1407f91b4689bbc56d1a3c401a5bb649.html
@@ -295,7 +295,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html b/classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html
index 1afc4afd4..b3ae0906f 100644
--- a/classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html
+++ b/classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html
@@ -319,7 +319,7 @@ template<typename T , std::size_t n>
diff --git a/classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html b/classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html
index b31a39514..0e86b329a 100644
--- a/classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html
+++ b/classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a19dfb04c297ffb5f0ef84abfa4a5a087.html b/classnlohmann_1_1basic__json_a19dfb04c297ffb5f0ef84abfa4a5a087.html
index cf29ccf9e..a36e62c8f 100644
--- a/classnlohmann_1_1basic__json_a19dfb04c297ffb5f0ef84abfa4a5a087.html
+++ b/classnlohmann_1_1basic__json_a19dfb04c297ffb5f0ef84abfa4a5a087.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html b/classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html
index 690f49c67..0595f4f09 100644
--- a/classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html
+++ b/classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html
@@ -275,7 +275,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a1af360cb513cc32f28e80ddd0b9d7666.html b/classnlohmann_1_1basic__json_a1af360cb513cc32f28e80ddd0b9d7666.html
index ea786369f..46f42f745 100644
--- a/classnlohmann_1_1basic__json_a1af360cb513cc32f28e80ddd0b9d7666.html
+++ b/classnlohmann_1_1basic__json_a1af360cb513cc32f28e80ddd0b9d7666.html
@@ -290,7 +290,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html b/classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html
index c8436923f..a9eab79f2 100644
--- a/classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html
+++ b/classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a20bfb2ca6d4c421c74bb3e53328cd437.html b/classnlohmann_1_1basic__json_a20bfb2ca6d4c421c74bb3e53328cd437.html
index 627efe6b5..4d26d1b7d 100644
--- a/classnlohmann_1_1basic__json_a20bfb2ca6d4c421c74bb3e53328cd437.html
+++ b/classnlohmann_1_1basic__json_a20bfb2ca6d4c421c74bb3e53328cd437.html
@@ -309,7 +309,7 @@ array: [1,2,3,4,5]
diff --git a/classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html b/classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html
index e9844fc4e..7861fe381 100644
--- a/classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html
+++ b/classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html
@@ -300,7 +300,7 @@ out of range: array index 5 is out of range
diff --git a/classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html b/classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html
index f1946277e..1419e9a2b 100644
--- a/classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html
+++ b/classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html
@@ -303,7 +303,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html b/classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html
index a27bec982..c4745ba91 100644
--- a/classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html
+++ b/classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html
@@ -291,7 +291,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a263a9ecde33a1f2ff63dcd15d5e42cb7.html b/classnlohmann_1_1basic__json_a263a9ecde33a1f2ff63dcd15d5e42cb7.html
index be9c5b570..d03b89400 100644
--- a/classnlohmann_1_1basic__json_a263a9ecde33a1f2ff63dcd15d5e42cb7.html
+++ b/classnlohmann_1_1basic__json_a263a9ecde33a1f2ff63dcd15d5e42cb7.html
@@ -335,7 +335,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html b/classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html
index 48306745f..da808ddc6 100644
--- a/classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html
+++ b/classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html
@@ -296,7 +296,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a2e26bd0b0168abb61f67ad5bcd5b9fa1.html b/classnlohmann_1_1basic__json_a2e26bd0b0168abb61f67ad5bcd5b9fa1.html
index 7846a165c..363940dc9 100644
--- a/classnlohmann_1_1basic__json_a2e26bd0b0168abb61f67ad5bcd5b9fa1.html
+++ b/classnlohmann_1_1basic__json_a2e26bd0b0168abb61f67ad5bcd5b9fa1.html
@@ -300,7 +300,7 @@ operator[] with null"
diff --git a/classnlohmann_1_1basic__json_a2f1f83aa187a56dc5ec7a7027065ac8a.html b/classnlohmann_1_1basic__json_a2f1f83aa187a56dc5ec7a7027065ac8a.html
index ed44b5e2f..a24823d5d 100644
--- a/classnlohmann_1_1basic__json_a2f1f83aa187a56dc5ec7a7027065ac8a.html
+++ b/classnlohmann_1_1basic__json_a2f1f83aa187a56dc5ec7a7027065ac8a.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html b/classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html
index 35c6af729..073cbf104 100644
--- a/classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html
+++ b/classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html
@@ -316,7 +316,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a35303ad045a06c2a79dc28ac29652e86.html b/classnlohmann_1_1basic__json_a35303ad045a06c2a79dc28ac29652e86.html
index c273b05f2..acd0e93b7 100644
--- a/classnlohmann_1_1basic__json_a35303ad045a06c2a79dc28ac29652e86.html
+++ b/classnlohmann_1_1basic__json_a35303ad045a06c2a79dc28ac29652e86.html
@@ -338,7 +338,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a363da77bc39cae041d59ee334ac4f41b.html b/classnlohmann_1_1basic__json_a363da77bc39cae041d59ee334ac4f41b.html
index 7299c9638..f5e3fadfc 100644
--- a/classnlohmann_1_1basic__json_a363da77bc39cae041d59ee334ac4f41b.html
+++ b/classnlohmann_1_1basic__json_a363da77bc39cae041d59ee334ac4f41b.html
@@ -295,7 +295,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html b/classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html
index 9b28de6e6..ca61fbac8 100644
--- a/classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html
+++ b/classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html
@@ -297,7 +297,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html b/classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html
index 657e0fdb3..5914920b1 100644
--- a/classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html
+++ b/classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html
@@ -296,7 +296,7 @@ object = {"one":"eins","two":"zwei"}
diff --git a/classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html b/classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html
index 181ef7195..1f21c3994 100644
--- a/classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html
+++ b/classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html
@@ -296,7 +296,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html b/classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html
index a68a17cb6..a5bf24c7c 100644
--- a/classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html
+++ b/classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html
@@ -301,7 +301,7 @@ range"
diff --git a/classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html b/classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html
index b2e89e072..41f658cdb 100644
--- a/classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html
+++ b/classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a43c08a393368eb674d0dcdbe301aafe3.html b/classnlohmann_1_1basic__json_a43c08a393368eb674d0dcdbe301aafe3.html
index f4a4f1eea..9c07ca0b3 100644
--- a/classnlohmann_1_1basic__json_a43c08a393368eb674d0dcdbe301aafe3.html
+++ b/classnlohmann_1_1basic__json_a43c08a393368eb674d0dcdbe301aafe3.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a45e789042a23138eba2b69f34df9fc45.html b/classnlohmann_1_1basic__json_a45e789042a23138eba2b69f34df9fc45.html
index 80ddcf251..0575d7b83 100644
--- a/classnlohmann_1_1basic__json_a45e789042a23138eba2b69f34df9fc45.html
+++ b/classnlohmann_1_1basic__json_a45e789042a23138eba2b69f34df9fc45.html
@@ -325,7 +325,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a4635e8c6d5a4599f12a76368e325acd8.html b/classnlohmann_1_1basic__json_a4635e8c6d5a4599f12a76368e325acd8.html
index f71c1f162..9e72bcc9b 100644
--- a/classnlohmann_1_1basic__json_a4635e8c6d5a4599f12a76368e325acd8.html
+++ b/classnlohmann_1_1basic__json_a4635e8c6d5a4599f12a76368e325acd8.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html b/classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html
index 86047fca4..fefe85997 100644
--- a/classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html
+++ b/classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html b/classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html
index 8ba1bb921..402c0b625 100644
--- a/classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html
+++ b/classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html
@@ -300,7 +300,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html b/classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html
index 2b1cd785b..52dcdcd87 100644
--- a/classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html
+++ b/classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html
@@ -303,7 +303,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html b/classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html
index 2e8e2ccd0..1beac27e4 100644
--- a/classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html
+++ b/classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html
@@ -300,7 +300,7 @@ incompatible ReferenceType for get_ref, actual type is number
diff --git a/classnlohmann_1_1basic__json_a51b0036310d8aa5858fecc0d91127f27.html b/classnlohmann_1_1basic__json_a51b0036310d8aa5858fecc0d91127f27.html
index e47e1bb8d..686f51f55 100644
--- a/classnlohmann_1_1basic__json_a51b0036310d8aa5858fecc0d91127f27.html
+++ b/classnlohmann_1_1basic__json_a51b0036310d8aa5858fecc0d91127f27.html
@@ -290,7 +290,7 @@ number of elements with key "three": 0
diff --git a/classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html b/classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html
index 697da00d2..3451c56a5 100644
--- a/classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html
+++ b/classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a5327abb014dec211593b00959830650e.html b/classnlohmann_1_1basic__json_a5327abb014dec211593b00959830650e.html
index 1ea8c73ff..6c2a951f3 100644
--- a/classnlohmann_1_1basic__json_a5327abb014dec211593b00959830650e.html
+++ b/classnlohmann_1_1basic__json_a5327abb014dec211593b00959830650e.html
@@ -300,7 +300,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a53771a7a4f2787125e55f64448f24ce6.html b/classnlohmann_1_1basic__json_a53771a7a4f2787125e55f64448f24ce6.html
index a8e82c190..200baea23 100644
--- a/classnlohmann_1_1basic__json_a53771a7a4f2787125e55f64448f24ce6.html
+++ b/classnlohmann_1_1basic__json_a53771a7a4f2787125e55f64448f24ce6.html
@@ -286,7 +286,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a558b345044c38a9f6ad522592cc700c8.html b/classnlohmann_1_1basic__json_a558b345044c38a9f6ad522592cc700c8.html
index 28259a991..288d693db 100644
--- a/classnlohmann_1_1basic__json_a558b345044c38a9f6ad522592cc700c8.html
+++ b/classnlohmann_1_1basic__json_a558b345044c38a9f6ad522592cc700c8.html
@@ -295,7 +295,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html b/classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html
index bde98c35a..767907fe7 100644
--- a/classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html
+++ b/classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html
@@ -301,7 +301,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html b/classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html
index 9f48e2aa0..2d15c0ef4 100644
--- a/classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html
+++ b/classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html
@@ -298,7 +298,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html b/classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html
index c441e9194..3fe77dd95 100644
--- a/classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html
+++ b/classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html
@@ -303,7 +303,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html b/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html
index cc3121879..ac7734512 100644
--- a/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html
+++ b/classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html
@@ -316,7 +316,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html b/classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html
index 51313203c..bd61cfff0 100644
--- a/classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html
+++ b/classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html
@@ -291,7 +291,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html b/classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html
index 43a61a34a..45b6ef90a 100644
--- a/classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html
+++ b/classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html
@@ -319,7 +319,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html b/classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html
index a7116c072..fa1ef7e58 100644
--- a/classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html
+++ b/classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html
@@ -315,7 +315,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a628733b45cd0e32bd59efea149f40b4b.html b/classnlohmann_1_1basic__json_a628733b45cd0e32bd59efea149f40b4b.html
index 340560ee8..31ce5c293 100644
--- a/classnlohmann_1_1basic__json_a628733b45cd0e32bd59efea149f40b4b.html
+++ b/classnlohmann_1_1basic__json_a628733b45cd0e32bd59efea149f40b4b.html
@@ -295,7 +295,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html b/classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html
index ed973b77c..a79377aa4 100644
--- a/classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html
+++ b/classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a649aef71e5d952499da7ad3b8e7c9236.html b/classnlohmann_1_1basic__json_a649aef71e5d952499da7ad3b8e7c9236.html
index 5c60a31d7..bcee31fd4 100644
--- a/classnlohmann_1_1basic__json_a649aef71e5d952499da7ad3b8e7c9236.html
+++ b/classnlohmann_1_1basic__json_a649aef71e5d952499da7ad3b8e7c9236.html
@@ -302,7 +302,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a66c051561828b2c4eeaad896a72bec99.html b/classnlohmann_1_1basic__json_a66c051561828b2c4eeaad896a72bec99.html
index 8a0300dfc..aba95e22c 100644
--- a/classnlohmann_1_1basic__json_a66c051561828b2c4eeaad896a72bec99.html
+++ b/classnlohmann_1_1basic__json_a66c051561828b2c4eeaad896a72bec99.html
@@ -291,7 +291,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a674de1ee73e6bf4843fc5dc1351fb726.html b/classnlohmann_1_1basic__json_a674de1ee73e6bf4843fc5dc1351fb726.html
index 0c269f02a..221a41849 100644
--- a/classnlohmann_1_1basic__json_a674de1ee73e6bf4843fc5dc1351fb726.html
+++ b/classnlohmann_1_1basic__json_a674de1ee73e6bf4843fc5dc1351fb726.html
@@ -300,7 +300,7 @@ out of range
diff --git a/classnlohmann_1_1basic__json_a685d9d6a8a45bfcb8455b147257cdffb.html b/classnlohmann_1_1basic__json_a685d9d6a8a45bfcb8455b147257cdffb.html
index 18b83e36f..fdf535497 100644
--- a/classnlohmann_1_1basic__json_a685d9d6a8a45bfcb8455b147257cdffb.html
+++ b/classnlohmann_1_1basic__json_a685d9d6a8a45bfcb8455b147257cdffb.html
@@ -290,7 +290,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html b/classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html
index b2cf06651..b3506026d 100644
--- a/classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html
+++ b/classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html
@@ -294,7 +294,7 @@ template<typename CompatibleNumberUnsignedType , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_a68f0a8c4618d57523384ec7ecd2f5819.html b/classnlohmann_1_1basic__json_a68f0a8c4618d57523384ec7ecd2f5819.html
index de61b2ac2..b38243c62 100644
--- a/classnlohmann_1_1basic__json_a68f0a8c4618d57523384ec7ecd2f5819.html
+++ b/classnlohmann_1_1basic__json_a68f0a8c4618d57523384ec7ecd2f5819.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a693b411d9c5ad0d168a0013cfb80b8e5.html b/classnlohmann_1_1basic__json_a693b411d9c5ad0d168a0013cfb80b8e5.html
index 9c40d3ba0..0eff1d7c4 100644
--- a/classnlohmann_1_1basic__json_a693b411d9c5ad0d168a0013cfb80b8e5.html
+++ b/classnlohmann_1_1basic__json_a693b411d9c5ad0d168a0013cfb80b8e5.html
@@ -295,7 +295,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html b/classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html
index 8c120a20d..c4eb6f8c3 100644
--- a/classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html
+++ b/classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html
@@ -303,7 +303,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html b/classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html
index de251cb17..dd9311862 100644
--- a/classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html
+++ b/classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html b/classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html
index e9ca8f551..165d9017a 100644
--- a/classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html
+++ b/classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html
@@ -292,7 +292,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html b/classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html
index ab8d51126..5d8ef3c85 100644
--- a/classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html
+++ b/classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html
@@ -297,7 +297,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html b/classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html
index aaec2e862..597c67e6f 100644
--- a/classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html
+++ b/classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html
@@ -290,7 +290,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html b/classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html
index c4b6f62f8..44acc42fc 100644
--- a/classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html
+++ b/classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html
@@ -287,7 +287,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html b/classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html
index 93b2c990c..e2db7ce2e 100644
--- a/classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html
+++ b/classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html
@@ -303,7 +303,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a7605b20debcc12fc44bd9f2075122a87.html b/classnlohmann_1_1basic__json_a7605b20debcc12fc44bd9f2075122a87.html
index c46638e9e..8704a705d 100644
--- a/classnlohmann_1_1basic__json_a7605b20debcc12fc44bd9f2075122a87.html
+++ b/classnlohmann_1_1basic__json_a7605b20debcc12fc44bd9f2075122a87.html
@@ -309,7 +309,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a76347b37f07c75049f5164053a6cf81a.html b/classnlohmann_1_1basic__json_a76347b37f07c75049f5164053a6cf81a.html
index 51d44b7e9..0788618e3 100644
--- a/classnlohmann_1_1basic__json_a76347b37f07c75049f5164053a6cf81a.html
+++ b/classnlohmann_1_1basic__json_a76347b37f07c75049f5164053a6cf81a.html
@@ -300,7 +300,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html b/classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html
index 7a27a2857..c5e8f7704 100644
--- a/classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html
+++ b/classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html
@@ -294,7 +294,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a7c3182cfabc0bdd9f3a14216fe0e8154.html b/classnlohmann_1_1basic__json_a7c3182cfabc0bdd9f3a14216fe0e8154.html
index 4d9a83781..0d025ddf1 100644
--- a/classnlohmann_1_1basic__json_a7c3182cfabc0bdd9f3a14216fe0e8154.html
+++ b/classnlohmann_1_1basic__json_a7c3182cfabc0bdd9f3a14216fe0e8154.html
@@ -293,7 +293,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a7c774ef0eceff6d06095f617e2dbd488.html b/classnlohmann_1_1basic__json_a7c774ef0eceff6d06095f617e2dbd488.html
index 6de3570b4..b8baa651f 100644
--- a/classnlohmann_1_1basic__json_a7c774ef0eceff6d06095f617e2dbd488.html
+++ b/classnlohmann_1_1basic__json_a7c774ef0eceff6d06095f617e2dbd488.html
@@ -299,7 +299,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html b/classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html
index bf29a70b3..56af652e8 100644
--- a/classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html
+++ b/classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html
@@ -301,7 +301,7 @@ out of range: key 'the fast' not found
diff --git a/classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html b/classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html
index 4f7be8170..01eb04e85 100644
--- a/classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html
+++ b/classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html
@@ -308,7 +308,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html b/classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html
index 30ac1cc6f..cab5aba7b 100644
--- a/classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html
+++ b/classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html
@@ -303,7 +303,7 @@ null != nullptr false
diff --git a/classnlohmann_1_1basic__json_a8032645ce3109a7a4899badd90fa3480.html b/classnlohmann_1_1basic__json_a8032645ce3109a7a4899badd90fa3480.html
index 91097d0f8..f6e77fcc7 100644
--- a/classnlohmann_1_1basic__json_a8032645ce3109a7a4899badd90fa3480.html
+++ b/classnlohmann_1_1basic__json_a8032645ce3109a7a4899badd90fa3480.html
@@ -298,7 +298,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a805e3f3a2f374da0e14942eec7400e40.html b/classnlohmann_1_1basic__json_a805e3f3a2f374da0e14942eec7400e40.html
index 778bcfc72..c5af5d78d 100644
--- a/classnlohmann_1_1basic__json_a805e3f3a2f374da0e14942eec7400e40.html
+++ b/classnlohmann_1_1basic__json_a805e3f3a2f374da0e14942eec7400e40.html
@@ -323,7 +323,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html b/classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html
index b6cf0f42d..ef9285e92 100644
--- a/classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html
+++ b/classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html b/classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html
index 7dae14332..26a76fa0d 100644
--- a/classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html
+++ b/classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html
@@ -311,7 +311,7 @@ template<class CompatibleArrayType , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html b/classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html
index d751e45d6..29210c94d 100644
--- a/classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html
+++ b/classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html
@@ -297,7 +297,7 @@ array = [1,2,3,4]
diff --git a/classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html b/classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html
index 8e6a251e0..38524b977 100644
--- a/classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html
+++ b/classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html
@@ -308,7 +308,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a848cbae3bd3502ffbf738320bf5eb3aa.html b/classnlohmann_1_1basic__json_a848cbae3bd3502ffbf738320bf5eb3aa.html
index fb578908d..eaf301f37 100644
--- a/classnlohmann_1_1basic__json_a848cbae3bd3502ffbf738320bf5eb3aa.html
+++ b/classnlohmann_1_1basic__json_a848cbae3bd3502ffbf738320bf5eb3aa.html
@@ -296,7 +296,7 @@ true
diff --git a/classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html b/classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html
index ebc078bb6..dd109ca96 100644
--- a/classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html
+++ b/classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html
@@ -294,7 +294,7 @@ template<typename T , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html b/classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html
index dde9877ce..86e6666bc 100644
--- a/classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html
+++ b/classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html
@@ -297,7 +297,7 @@ string = the bad
diff --git a/classnlohmann_1_1basic__json_a86a477c16dac3bdd4929fee2db394256.html b/classnlohmann_1_1basic__json_a86a477c16dac3bdd4929fee2db394256.html
index 0b57477e2..22927e272 100644
--- a/classnlohmann_1_1basic__json_a86a477c16dac3bdd4929fee2db394256.html
+++ b/classnlohmann_1_1basic__json_a86a477c16dac3bdd4929fee2db394256.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_a87499fdb56ca6f0df2242c3335c3dc9b.html b/classnlohmann_1_1basic__json_a87499fdb56ca6f0df2242c3335c3dc9b.html
index e154f7321..b0a93eb26 100644
--- a/classnlohmann_1_1basic__json_a87499fdb56ca6f0df2242c3335c3dc9b.html
+++ b/classnlohmann_1_1basic__json_a87499fdb56ca6f0df2242c3335c3dc9b.html
@@ -295,7 +295,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html b/classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html
index b97768a3f..1e15fe0a7 100644
--- a/classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html
+++ b/classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html
@@ -303,7 +303,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html b/classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html
index d2ce34149..f25b8e8eb 100644
--- a/classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html
+++ b/classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html
@@ -338,7 +338,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a8f7e67d903f918cd08261219fb47a9f0.html b/classnlohmann_1_1basic__json_a8f7e67d903f918cd08261219fb47a9f0.html
index 3d83554ae..c3050d22a 100644
--- a/classnlohmann_1_1basic__json_a8f7e67d903f918cd08261219fb47a9f0.html
+++ b/classnlohmann_1_1basic__json_a8f7e67d903f918cd08261219fb47a9f0.html
@@ -290,7 +290,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a90239431815c94b0a334f7f4c55eb859.html b/classnlohmann_1_1basic__json_a90239431815c94b0a334f7f4c55eb859.html
index 33e22ca05..d77503390 100644
--- a/classnlohmann_1_1basic__json_a90239431815c94b0a334f7f4c55eb859.html
+++ b/classnlohmann_1_1basic__json_a90239431815c94b0a334f7f4c55eb859.html
@@ -314,7 +314,7 @@ false
diff --git a/classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html b/classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html
index da57b2d04..71e777552 100644
--- a/classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html
+++ b/classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html
@@ -317,7 +317,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html b/classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html
index 3f4d266ee..7c0c36273 100644
--- a/classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html
+++ b/classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html
@@ -283,7 +283,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html b/classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html
index 63c3aa5ab..c70a7c24e 100644
--- a/classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html
+++ b/classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html
@@ -297,7 +297,7 @@ null
diff --git a/classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html b/classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html
index 18070df8a..7bb3587bc 100644
--- a/classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html
+++ b/classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html
@@ -303,7 +303,7 @@ null == nullptr true
diff --git a/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html b/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html
index 42a6c5588..b430bbffe 100644
--- a/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html
+++ b/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html
@@ -335,7 +335,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html b/classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html
index 09a1f207b..74a437f96 100644
--- a/classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html
+++ b/classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html
@@ -303,7 +303,7 @@ null == nullptr true
diff --git a/classnlohmann_1_1basic__json_a99f2e765029e51dd0fff018650f92eea.html b/classnlohmann_1_1basic__json_a99f2e765029e51dd0fff018650f92eea.html
index 51367103e..266580b57 100644
--- a/classnlohmann_1_1basic__json_a99f2e765029e51dd0fff018650f92eea.html
+++ b/classnlohmann_1_1basic__json_a99f2e765029e51dd0fff018650f92eea.html
@@ -296,7 +296,7 @@ operator[] with null"
diff --git a/classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html b/classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html
index 4602ec614..ad4734778 100644
--- a/classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html
+++ b/classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html
@@ -296,7 +296,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html b/classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html
index 4f5e689d9..32a6af96d 100644
--- a/classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html
+++ b/classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html b/classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html
index 22a352721..3260e6e6d 100644
--- a/classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html
+++ b/classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html
@@ -298,7 +298,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html b/classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html
index fdf613517..0798a451b 100644
--- a/classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html
+++ b/classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html
@@ -302,7 +302,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html b/classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html
index 93d13c354..5652b114a 100644
--- a/classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html
+++ b/classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html b/classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html
index ae9706e9d..53bd3667b 100644
--- a/classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html
+++ b/classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html
@@ -298,7 +298,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aa669d997ddc03566de5438781254b32b.html b/classnlohmann_1_1basic__json_aa669d997ddc03566de5438781254b32b.html
index 8c913664f..94ce134f6 100644
--- a/classnlohmann_1_1basic__json_aa669d997ddc03566de5438781254b32b.html
+++ b/classnlohmann_1_1basic__json_aa669d997ddc03566de5438781254b32b.html
@@ -300,7 +300,7 @@ incompatible ReferenceType for get_ref, actual type is number
diff --git a/classnlohmann_1_1basic__json_aa6fd72df1ce9f80e61012784c598456e.html b/classnlohmann_1_1basic__json_aa6fd72df1ce9f80e61012784c598456e.html
index 67f922d72..f7ca0de6a 100644
--- a/classnlohmann_1_1basic__json_aa6fd72df1ce9f80e61012784c598456e.html
+++ b/classnlohmann_1_1basic__json_aa6fd72df1ce9f80e61012784c598456e.html
@@ -302,7 +302,7 @@ operator[] with null"
diff --git a/classnlohmann_1_1basic__json_aa7205e1926d3aea98adeced91b0ff5fb.html b/classnlohmann_1_1basic__json_aa7205e1926d3aea98adeced91b0ff5fb.html
index d19ec4d4c..27ac99e84 100644
--- a/classnlohmann_1_1basic__json_aa7205e1926d3aea98adeced91b0ff5fb.html
+++ b/classnlohmann_1_1basic__json_aa7205e1926d3aea98adeced91b0ff5fb.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html b/classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html
index 64a0303cd..930988dce 100644
--- a/classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html
+++ b/classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_aaa687595d7627925fbf6d6eb97e2021e.html b/classnlohmann_1_1basic__json_aaa687595d7627925fbf6d6eb97e2021e.html
index 1cf3aba4d..30c61c139 100644
--- a/classnlohmann_1_1basic__json_aaa687595d7627925fbf6d6eb97e2021e.html
+++ b/classnlohmann_1_1basic__json_aaa687595d7627925fbf6d6eb97e2021e.html
@@ -291,7 +291,7 @@ value at key "two": 2
diff --git a/classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html b/classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html
index 33c6a6706..e3a98c805 100644
--- a/classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html
+++ b/classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html
@@ -289,7 +289,7 @@ false
diff --git a/classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html b/classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html
index 2f1217b1e..aca6c4d97 100644
--- a/classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html
+++ b/classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html
@@ -307,7 +307,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aad65e0bc388897192bf361c24c1d6dda.html b/classnlohmann_1_1basic__json_aad65e0bc388897192bf361c24c1d6dda.html
index 0e53ea273..f265df27b 100644
--- a/classnlohmann_1_1basic__json_aad65e0bc388897192bf361c24c1d6dda.html
+++ b/classnlohmann_1_1basic__json_aad65e0bc388897192bf361c24c1d6dda.html
@@ -294,7 +294,7 @@ true
diff --git a/classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html b/classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html
index 1f622b200..f1104ac5d 100644
--- a/classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html
+++ b/classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html
@@ -308,7 +308,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aae7eb3b91d7f68e86396c5c6b683445f.html b/classnlohmann_1_1basic__json_aae7eb3b91d7f68e86396c5c6b683445f.html
index ea08dd47a..0dffc4873 100644
--- a/classnlohmann_1_1basic__json_aae7eb3b91d7f68e86396c5c6b683445f.html
+++ b/classnlohmann_1_1basic__json_aae7eb3b91d7f68e86396c5c6b683445f.html
@@ -296,7 +296,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html b/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html
index 1a17fa306..7e6e8bbf8 100644
--- a/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html
+++ b/classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html
@@ -319,7 +319,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html b/classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html
index ba703b7ab..6b7a6358a 100644
--- a/classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html
+++ b/classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html
@@ -286,7 +286,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ab22c8d61eca51f0308c263487bd35f03.html b/classnlohmann_1_1basic__json_ab22c8d61eca51f0308c263487bd35f03.html
index 9e8c935b0..6d5134c66 100644
--- a/classnlohmann_1_1basic__json_ab22c8d61eca51f0308c263487bd35f03.html
+++ b/classnlohmann_1_1basic__json_ab22c8d61eca51f0308c263487bd35f03.html
@@ -290,7 +290,7 @@ true
diff --git a/classnlohmann_1_1basic__json_ab31368c0b67f8e4f291a45e6498018be.html b/classnlohmann_1_1basic__json_ab31368c0b67f8e4f291a45e6498018be.html
index 07ad64d1b..7cf285f6c 100644
--- a/classnlohmann_1_1basic__json_ab31368c0b67f8e4f291a45e6498018be.html
+++ b/classnlohmann_1_1basic__json_ab31368c0b67f8e4f291a45e6498018be.html
@@ -297,7 +297,7 @@ out of range
diff --git a/classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html b/classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html
index 6f0bcbc37..cbf379741 100644
--- a/classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html
+++ b/classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html
@@ -284,7 +284,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html b/classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html
index 368b33d35..4aa4256dd 100644
--- a/classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html
+++ b/classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html
@@ -306,7 +306,7 @@ template<class CompatibleObjectType , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_ab81f2801779e6cb9d98770860af2e39a.html b/classnlohmann_1_1basic__json_ab81f2801779e6cb9d98770860af2e39a.html
index 5870a8891..8b6b836f3 100644
--- a/classnlohmann_1_1basic__json_ab81f2801779e6cb9d98770860af2e39a.html
+++ b/classnlohmann_1_1basic__json_ab81f2801779e6cb9d98770860af2e39a.html
@@ -338,7 +338,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html b/classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html
index e364c9384..220edac12 100644
--- a/classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html
+++ b/classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html
@@ -298,7 +298,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html b/classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html
index 7d36c78db..8aba37497 100644
--- a/classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html
+++ b/classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html
@@ -278,7 +278,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html b/classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html
index 3344470ac..35f4c4120 100644
--- a/classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html
+++ b/classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html
@@ -291,7 +291,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ac5693cff1df0775cd3fbe960412cde4b.html b/classnlohmann_1_1basic__json_ac5693cff1df0775cd3fbe960412cde4b.html
index c555aca10..8fd17022b 100644
--- a/classnlohmann_1_1basic__json_ac5693cff1df0775cd3fbe960412cde4b.html
+++ b/classnlohmann_1_1basic__json_ac5693cff1df0775cd3fbe960412cde4b.html
@@ -295,7 +295,7 @@ true
diff --git a/classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html b/classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html
index 218190e5c..197deac2d 100644
--- a/classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html
+++ b/classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html
@@ -319,7 +319,7 @@ template<typename T >
diff --git a/classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html b/classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html
index 3812a3248..1acb8cc05 100644
--- a/classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html
+++ b/classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html b/classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html
index 3c6c134f0..a006403d6 100644
--- a/classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html
+++ b/classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html
@@ -302,7 +302,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html b/classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html
index 6b3380002..f8b4cc988 100644
--- a/classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html
+++ b/classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html
@@ -303,7 +303,7 @@ template<typename CompatibleNumberIntegerType , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html b/classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html
index a80f5ae45..2c1a8e003 100644
--- a/classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html
+++ b/classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html
@@ -295,7 +295,7 @@ Illustration from cppreference.com
diff --git a/classnlohmann_1_1basic__json_ad5514a7435f246fc5335856465022a7a.html b/classnlohmann_1_1basic__json_ad5514a7435f246fc5335856465022a7a.html
index cf62cd2b2..be0fee2ff 100644
--- a/classnlohmann_1_1basic__json_ad5514a7435f246fc5335856465022a7a.html
+++ b/classnlohmann_1_1basic__json_ad5514a7435f246fc5335856465022a7a.html
@@ -310,7 +310,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html b/classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html
index 66fede85e..5c418e26b 100644
--- a/classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html
+++ b/classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html
@@ -304,7 +304,7 @@ false
diff --git a/classnlohmann_1_1basic__json_ad9cd312208273fb3fb2adf1f6d8d34ae.html b/classnlohmann_1_1basic__json_ad9cd312208273fb3fb2adf1f6d8d34ae.html
index d7c10f7bf..c18282cc1 100644
--- a/classnlohmann_1_1basic__json_ad9cd312208273fb3fb2adf1f6d8d34ae.html
+++ b/classnlohmann_1_1basic__json_ad9cd312208273fb3fb2adf1f6d8d34ae.html
@@ -303,7 +303,7 @@ operator[] with null"
diff --git a/classnlohmann_1_1basic__json_ade0e56c8c320d7f342e7a5697e6d6f7e.html b/classnlohmann_1_1basic__json_ade0e56c8c320d7f342e7a5697e6d6f7e.html
index f0e85238e..fc2661bd8 100644
--- a/classnlohmann_1_1basic__json_ade0e56c8c320d7f342e7a5697e6d6f7e.html
+++ b/classnlohmann_1_1basic__json_ade0e56c8c320d7f342e7a5697e6d6f7e.html
@@ -284,7 +284,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ae336fff01f4b78e3e16e5008dc8dbc00.html b/classnlohmann_1_1basic__json_ae336fff01f4b78e3e16e5008dc8dbc00.html
index 6d393df4c..5b368845c 100644
--- a/classnlohmann_1_1basic__json_ae336fff01f4b78e3e16e5008dc8dbc00.html
+++ b/classnlohmann_1_1basic__json_ae336fff01f4b78e3e16e5008dc8dbc00.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html b/classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html
index 230602faa..54ea4e019 100644
--- a/classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html
+++ b/classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html
@@ -303,7 +303,7 @@ null != nullptr false
diff --git a/classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html b/classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html
index 2fce14e98..8d8ecd076 100644
--- a/classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html
+++ b/classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html
@@ -305,7 +305,7 @@ template<class CompatibleStringType , typename std::enable_if<
diff --git a/classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html b/classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html
index d5ff53a06..df2e49549 100644
--- a/classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html
+++ b/classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html
@@ -294,7 +294,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html b/classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html
index 7c7e932e7..00a0736ec 100644
--- a/classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html
+++ b/classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html
@@ -318,7 +318,7 @@ belong to container"
diff --git a/classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html b/classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html
index 9979e08a5..926bd0424 100644
--- a/classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html
+++ b/classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_aef496a56163710084e13612ab73e6ed2.html b/classnlohmann_1_1basic__json_aef496a56163710084e13612ab73e6ed2.html
index 39be85d10..e5ac12cc6 100644
--- a/classnlohmann_1_1basic__json_aef496a56163710084e13612ab73e6ed2.html
+++ b/classnlohmann_1_1basic__json_aef496a56163710084e13612ab73e6ed2.html
@@ -306,7 +306,7 @@ array: [1,2,3,4,5]
diff --git a/classnlohmann_1_1basic__json_af071057ebab57744f5767eb369e99d42.html b/classnlohmann_1_1basic__json_af071057ebab57744f5767eb369e99d42.html
index 3fc7d128b..baeb094f5 100644
--- a/classnlohmann_1_1basic__json_af071057ebab57744f5767eb369e99d42.html
+++ b/classnlohmann_1_1basic__json_af071057ebab57744f5767eb369e99d42.html
@@ -319,7 +319,7 @@ value() with null"
diff --git a/classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html b/classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html
index 7ab285846..aac1227f7 100644
--- a/classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html
+++ b/classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html
@@ -278,7 +278,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html b/classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html
index edd32d85f..bcd0c2f1c 100644
--- a/classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html
+++ b/classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html
@@ -271,7 +271,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html b/classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html
index 8bbe74f66..b89c826ec 100644
--- a/classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html
+++ b/classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html
@@ -264,7 +264,7 @@ template<template< typename U, typename V, typename...Args > class Obje
diff --git a/classnlohmann_1_1basic__json_af77614992e38b355b9213940051cc582.html b/classnlohmann_1_1basic__json_af77614992e38b355b9213940051cc582.html
index c224b3066..4e609e6ca 100644
--- a/classnlohmann_1_1basic__json_af77614992e38b355b9213940051cc582.html
+++ b/classnlohmann_1_1basic__json_af77614992e38b355b9213940051cc582.html
@@ -289,7 +289,7 @@ j2 = [1,2,3,4,5]
diff --git a/classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html b/classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html
index e2a20938a..34aca1650 100644
--- a/classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html
+++ b/classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html
@@ -323,7 +323,7 @@ construct with iterators from null"
diff --git a/classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html b/classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html
index 4e54a11a5..42721e7e8 100644
--- a/classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html
+++ b/classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html
@@ -337,7 +337,7 @@ initializer list"
diff --git a/classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html b/classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html
index 2657c3f7a..ba94124e0 100644
--- a/classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html
+++ b/classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html
@@ -291,7 +291,7 @@ value at key "two": 2
diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html
index e9ee84c03..07d61cd4c 100644
--- a/dir_68267d1309a1af8e8297ef4c3efbcdba.html
+++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -92,7 +92,7 @@ Files
diff --git a/functions.html b/functions.html
index f022f07d6..2ff477d7b 100644
--- a/functions.html
+++ b/functions.html
@@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_0x7e.html b/functions_0x7e.html
index 2bed24d44..94743e7c7 100644
--- a/functions_0x7e.html
+++ b/functions_0x7e.html
@@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_b.html b/functions_b.html
index 612a2b7f7..9bf347e7a 100644
--- a/functions_b.html
+++ b/functions_b.html
@@ -141,7 +141,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_c.html b/functions_c.html
index 64d941643..76e703f6e 100644
--- a/functions_c.html
+++ b/functions_c.html
@@ -153,7 +153,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_d.html b/functions_d.html
index 84f20ac31..6a5ca0d93 100644
--- a/functions_d.html
+++ b/functions_d.html
@@ -130,7 +130,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_e.html b/functions_e.html
index 9c719b02a..dbeb4a628 100644
--- a/functions_e.html
+++ b/functions_e.html
@@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_enum.html b/functions_enum.html
index 0b55dbaad..89e2f5493 100644
--- a/functions_enum.html
+++ b/functions_enum.html
@@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_f.html b/functions_f.html
index 54f5e93de..1ecd4fe74 100644
--- a/functions_f.html
+++ b/functions_f.html
@@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_func.html b/functions_func.html
index 4685cd85a..58643b8cf 100644
--- a/functions_func.html
+++ b/functions_func.html
@@ -433,7 +433,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_g.html b/functions_g.html
index dd54fbc95..6570d2876 100644
--- a/functions_g.html
+++ b/functions_g.html
@@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_i.html b/functions_i.html
index fd3382399..6187dc67d 100644
--- a/functions_i.html
+++ b/functions_i.html
@@ -171,7 +171,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_j.html b/functions_j.html
index 29fd46081..f570a1c6e 100644
--- a/functions_j.html
+++ b/functions_j.html
@@ -129,7 +129,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_k.html b/functions_k.html
index ffd7a8001..b51a4d199 100644
--- a/functions_k.html
+++ b/functions_k.html
@@ -127,7 +127,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_m.html b/functions_m.html
index 1f597b832..d858f3387 100644
--- a/functions_m.html
+++ b/functions_m.html
@@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_n.html b/functions_n.html
index de71bba86..6f33476e8 100644
--- a/functions_n.html
+++ b/functions_n.html
@@ -132,7 +132,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_o.html b/functions_o.html
index 994c657b9..211c9d57f 100644
--- a/functions_o.html
+++ b/functions_o.html
@@ -217,7 +217,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_p.html b/functions_p.html
index 1b0c41949..9e6ec1a0c 100644
--- a/functions_p.html
+++ b/functions_p.html
@@ -140,7 +140,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_r.html b/functions_r.html
index be77c2eff..b0f79d932 100644
--- a/functions_r.html
+++ b/functions_r.html
@@ -138,7 +138,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_rela.html b/functions_rela.html
index bef883136..7281d198b 100644
--- a/functions_rela.html
+++ b/functions_rela.html
@@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_s.html b/functions_s.html
index 61a01c9f9..168918e99 100644
--- a/functions_s.html
+++ b/functions_s.html
@@ -135,7 +135,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_t.html b/functions_t.html
index 40cd62fb3..096fc74f8 100644
--- a/functions_t.html
+++ b/functions_t.html
@@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_type.html b/functions_type.html
index 2a0f02c84..1d5cbc195 100644
--- a/functions_type.html
+++ b/functions_type.html
@@ -165,7 +165,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_u.html b/functions_u.html
index b10aba18c..02f49e5a5 100644
--- a/functions_u.html
+++ b/functions_u.html
@@ -126,7 +126,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/functions_v.html b/functions_v.html
index c290a73c9..cf69d4657 100644
--- a/functions_v.html
+++ b/functions_v.html
@@ -136,7 +136,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/graph_legend.html b/graph_legend.html
index cb1c9d5d5..823e8c0e2 100644
--- a/graph_legend.html
+++ b/graph_legend.html
@@ -108,7 +108,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem
diff --git a/hierarchy.html b/hierarchy.html
index f09b7b493..f46f59c3b 100644
--- a/hierarchy.html
+++ b/hierarchy.html
@@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/index.html b/index.html
index 5fa916017..c2282d6bc 100644
--- a/index.html
+++ b/index.html
@@ -179,7 +179,7 @@ access at |
diff --git a/index_8md_source.html b/index_8md_source.html
index b97c73275..747ed1a7b 100644
--- a/index_8md_source.html
+++ b/index_8md_source.html
@@ -82,7 +82,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
3 These pages contain the API documentation of JSON for Modern C++, a C++11 header-only JSON class. 7 - @link nlohmann::basic_json `basic_json` class @endlink 8 - [Functions](functions_func.html) 10 - @link nlohmann::basic_json::dump dump @endlink -- value serialization 11 - @link nlohmann::basic_json::type type @endlink -- type of the value 12 - @link nlohmann::basic_json::is_primitive is_primitive @endlink, 13 @link nlohmann::basic_json::is_structured is_structured @endlink, 14 @link nlohmann::basic_json::is_null is_null @endlink, 15 @link nlohmann::basic_json::is_boolean is_boolean @endlink, 16 @link nlohmann::basic_json::is_number is_number @endlink, 17 @link nlohmann::basic_json::is_number_integer is_number_integer @endlink, 18 @link nlohmann::basic_json::is_number_unsigned is_number_unsigned @endlink, 19 @link nlohmann::basic_json::is_number_float is_number_float @endlink, 20 @link nlohmann::basic_json::is_object is_object @endlink, 21 @link nlohmann::basic_json::is_array is_array @endlink, 22 @link nlohmann::basic_json::is_string is_string @endlink, 23 @link nlohmann::basic_json::is_discarded is_discarded @endlink -- check for value type 24 - @link nlohmann::basic_json::operator value_t() const operator value_t @endlink -- type of the value (implicit conversion) 26 - @link nlohmann::basic_json::get get @endlink -- get a value 27 - @link nlohmann::basic_json::get_ptr get_ptr @endlink -- get a value pointer 28 - @link nlohmann::basic_json::get_ref get_ref @endlink -- get a value reference 29 - @link nlohmann::basic_json::operator ValueType() const operator ValueType @endlink -- get a value (implicit conversion) 30 - lexicographical comparison operators 34 - @link nlohmann::basic_json::array_t arrays @endlink 35 - @link nlohmann::basic_json::object_t objects @endlink 36 - @link nlohmann::basic_json::string_t strings @endlink 37 - @link nlohmann::basic_json::boolean_t booleans @endlink 39 - @link nlohmann::basic_json::number_integer_t signed integers @endlink 40 - @link nlohmann::basic_json::number_unsigned_t unsigned integers @endlink 41 - @link nlohmann::basic_json::number_float_t floating-point @endlink 43 # Container function overview 45 The container functions known from STL have been extended to support the different value types from JSON. However, not all functions can be applied to all value types. Note that the signature of some functions differ between the types; for instance, `at` may be called with either a string to address a key in an object or with an integer to address a value in an array. 49 <th rowspan="2">group</td> 50 <th rowspan="2">function</td> 51 <th colspan="6">JSON value type</th> 62 <td rowspan="8">iterators</td> 64 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink</td> 65 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink</td> 66 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink</td> 67 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink</td> 68 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink</td> 69 <td class="ok_green">@link nlohmann::basic_json::begin `begin` @endlink (returns `end()`)</td> 73 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink</td> 74 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink</td> 75 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink</td> 76 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink</td> 77 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink</td> 78 <td class="ok_green">@link nlohmann::basic_json::cbegin `cbegin` @endlink (returns `cend()`)</td> 82 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 83 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 84 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 85 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 86 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 87 <td class="ok_green">@link nlohmann::basic_json::end `end` @endlink</td> 91 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 92 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 93 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 94 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 95 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 96 <td class="ok_green">@link nlohmann::basic_json::cend `cend` @endlink</td> 100 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 101 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 102 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 103 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 104 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 105 <td class="ok_green">@link nlohmann::basic_json::rbegin `rbegin` @endlink</td> 109 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 110 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 111 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 112 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 113 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 114 <td class="ok_green">@link nlohmann::basic_json::crbegin `crbegin` @endlink</td> 118 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 119 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 120 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 121 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 122 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 123 <td class="ok_green">@link nlohmann::basic_json::rend `rend` @endlink</td> 127 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 128 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 129 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 130 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 131 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 132 <td class="ok_green">@link nlohmann::basic_json::crend `crend` @endlink</td> 135 <td rowspan="4">element<br>access</td> 137 <td class="ok_green">@link nlohmann::basic_json::at(const typename object_t::key_type & key) `at` @endlink</td> 138 <td class="ok_green">@link nlohmann::basic_json::at(size_type) `at` @endlink</td> 139 <td class="nok_throws">throws `std::domain_error`</td> 140 <td class="nok_throws">throws `std::domain_error`</td> 141 <td class="nok_throws">throws `std::domain_error`</td> 142 <td class="nok_throws">throws `std::domain_error`</td> 145 <td>`operator[]`</td> 146 <td class="ok_green">@link nlohmann::basic_json::operator[](const typename object_t::key_type &key) `operator[]` @endlink</td> 147 <td class="ok_green">@link nlohmann::basic_json::operator[](size_type) `operator[]` @endlink</td> 148 <td class="nok_throws">throws `std::domain_error`</td> 149 <td class="nok_throws">throws `std::domain_error`</td> 150 <td class="nok_throws">throws `std::domain_error`</td> 151 <td class="ok_green">@link nlohmann::basic_json::operator[](const typename object_t::key_type & key) `operator[]` @endlink (creates object)<br>@link nlohmann::basic_json::operator[](size_type) `operator[]` @endlink (creates array)</td> 155 <td class="ok_green">@link nlohmann::basic_json::front `front` @endlink</td> 156 <td class="ok_green">@link nlohmann::basic_json::front `front` @endlink</td> 157 <td class="ok_green">@link nlohmann::basic_json::front `front` @endlink</td> 158 <td class="ok_green">@link nlohmann::basic_json::front `front` @endlink</td> 159 <td class="ok_green">@link nlohmann::basic_json::front `front` @endlink</td> 160 <td class="nok_throws">throws `std::out_of_range`</td> 164 <td class="ok_green">@link nlohmann::basic_json::back `back` @endlink</td> 165 <td class="ok_green">@link nlohmann::basic_json::back `back` @endlink</td> 166 <td class="ok_green">@link nlohmann::basic_json::back `back` @endlink</td> 167 <td class="ok_green">@link nlohmann::basic_json::back `back` @endlink</td> 168 <td class="ok_green">@link nlohmann::basic_json::back `back` @endlink</td> 169 <td class="nok_throws">throws `std::out_of_range`</td> 172 <td rowspan="3">capacity</td> 174 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink</td> 175 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink</td> 176 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink (returns `false`)</td> 177 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink (returns `false`)</td> 178 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink (returns `false`)</td> 179 <td class="ok_green">@link nlohmann::basic_json::empty `empty` @endlink (returns `true`)</td> 183 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink</td> 184 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink</td> 185 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink (returns `1`)</td> 186 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink (returns `1`)</td> 187 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink (returns `1`)</td> 188 <td class="ok_green">@link nlohmann::basic_json::size `size` @endlink (returns `0`)</td> 192 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink</td> 193 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink</td> 194 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink (returns `1`)</td> 195 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink (returns `1`)</td> 196 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink (returns `1`)</td> 197 <td class="ok_green">@link nlohmann::basic_json::max_size `max_size` @endlink (returns `0`)</td> 200 <td rowspan="5">modifiers</td> 202 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 203 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 204 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 205 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 206 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 207 <td class="ok_green">@link nlohmann::basic_json::clear `clear` @endlink</td> 211 <td class="nok_throws">throws `std::domain_error`</td> 212 <td class="ok_green">@link nlohmann::basic_json::insert `insert` @endlink</td> 213 <td class="nok_throws">throws `std::domain_error`</td> 214 <td class="nok_throws">throws `std::domain_error`</td> 215 <td class="nok_throws">throws `std::domain_error`</td> 216 <td class="nok_throws">throws `std::domain_error`</td> 220 <td class="ok_green">@link nlohmann::basic_json::erase `erase` @endlink</td> 221 <td class="ok_green">@link nlohmann::basic_json::erase `erase` @endlink</td> 222 <td class="ok_green">@link nlohmann::basic_json::erase `erase` @endlink (converts to null)</td> 223 <td class="ok_green">@link nlohmann::basic_json::erase `erase` @endlink (converts to null)</td> 224 <td class="ok_green">@link nlohmann::basic_json::erase `erase` @endlink (converts to null)</td> 225 <td class="nok_throws">throws</td> 229 <td class="ok_green">@link nlohmann::basic_json::push_back(const typename object_t::value_type & val) `push_back` @endlink</td> 230 <td class="ok_green">@link nlohmann::basic_json::push_back(const nlohmann::basic_json &) `push_back` @endlink</td> 231 <td class="nok_throws">throws `std::domain_error`</td> 232 <td class="nok_throws">throws `std::domain_error`</td> 233 <td class="nok_throws">throws `std::domain_error`</td> 234 <td class="ok_green">@link nlohmann::basic_json::push_back(const typename object_t::value_type & val) `push_back` @endlink (creates object)<br>@link nlohmann::basic_json::push_back(const nlohmann::basic_json &) `push_back` @endlink (creates array)</td> 238 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 239 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 240 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 241 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 242 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 243 <td class="ok_green">@link nlohmann::basic_json::swap `swap` @endlink</td> 246 <td rowspan="2">lookup</td> 248 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink (returns `end()`)</td> 249 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink</td> 250 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink (returns `end()`)</td> 251 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink (returns `end()`)</td> 252 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink (returns `end()`)</td> 253 <td class="ok_green">@link nlohmann::basic_json::find `find` @endlink (returns `end()`)</td> 257 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink (returns `0`)</td> 258 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink</td> 259 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink (returns `0`)</td> 260 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink (returns `0`)</td> 261 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink (returns `0`)</td> 262 <td class="ok_green">@link nlohmann::basic_json::count `count` @endlink (returns `0`)</td> 266 @copyright Copyright © 2013-2016 Niels Lohmann. The code is licensed under the [MIT License](http://opensource.org/licenses/MIT). 268 @author [Niels Lohmann](http://nlohmann.me) 269 @see https://github.com/nlohmann/json to download the source code
diff --git a/json_8hpp_source.html b/json_8hpp_source.html
index dafedb934..2ac2a51fe 100644
--- a/json_8hpp_source.html
+++ b/json_8hpp_source.html
@@ -83,7 +83,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
json.hpp
- 29 #ifndef NLOHMANN_JSON_HPP 30 #define NLOHMANN_JSON_HPP 42 #include <initializer_list> 52 #include <type_traits> 57 #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) 58 #pragma GCC diagnostic push 59 #pragma GCC diagnostic ignored "-Wfloat-equal" 82 struct has_mapped_type 85 template< typename C> static char test( typename C::mapped_type*); 86 template< typename C> static char (&test(...))[2]; 88 static constexpr bool value = sizeof(test<T>(0)) == 1; 95 class DecimalSeparator : public std::numpunct<char> 98 char do_decimal_point() const 178 template< typename U, typename V, typename... Args> class ObjectType = std::map, 179 template< typename U, typename... Args> class ArrayType = std::vector, 180 class StringType = std::string, 181 class BooleanType = bool, 182 class NumberIntegerType = std::int64_t, 183 class NumberUnsignedType = std::uint64_t, 184 class NumberFloatType = double, 185 template< typename U> class AllocatorType = std::allocator 229 using pointer = typename std::allocator_traits<allocator_type>::pointer; 231 using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer; 343 using object_t = ObjectType<StringType, 345 std::less<StringType>, 346 AllocatorType<std::pair< const StringType, 393 using array_t = ArrayType<basic_json, AllocatorType<basic_json>>; 735 uint16_t has_exp : 1; 737 uint16_t exp_plus : 1; 739 uint16_t exp_cap : 1; 741 uint16_t precision : 8; 748 return static_cast<value_t>(bits.type); 752 bool operator==( const value_t& rhs) const 754 return static_cast<value_t>(bits.type) == rhs; 758 type_data_t& operator=( value_t rhs) 760 bits.type = static_cast<uint16_t >(rhs); 765 type_data_t( value_t t) noexcept 767 * reinterpret_cast<uint16_t* >( this) = 0; 768 bits.type = static_cast<uint16_t >(t); 772 type_data_t() noexcept 775 bits.type = reinterpret_cast<uint16_t >(value_t::null); 780 template< typename T, typename... Args> 781 static T* create(Args&& ... args) 783 AllocatorType<T> alloc; 784 auto deleter = [&](T * object) 786 alloc.deallocate( object, 1); 788 std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); 789 alloc.construct( object. get(), std::forward<Args>(args)...); 790 return object.release(); 822 json_value() = default; 824 json_value( boolean_t v) noexcept : boolean(v) {} 836 case value_t::object: 838 object = create<object_t>(); 844 array = create<array_t>(); 848 case value_t::string: 850 string = create<string_t>( ""); 854 case value_t::boolean: 860 case value_t::number_integer: 866 case value_t::number_unsigned: 872 case value_t::number_float: 888 string = create<string_t>(value); 894 object = create<object_t>(value); 898 json_value( const array_t& value) 900 array = create<array_t>(value); 983 using parser_callback_t = std::function<bool(int depth, parse_event_t event, basic_json& parsed)>; 1033 : m_type(value_type), m_value(value_type) 1060 basic_json() = default; 1108 : m_type( value_t::object), m_value(val) 1137 template < class CompatibleObjectType, typename 1139 std::is_constructible<typename object_t::key_type, typename CompatibleObjectType::key_type>::value and 1140 std::is_constructible<basic_json, typename CompatibleObjectType::mapped_type>::value, int>::type 1147 m_value.object = create<object_t>(begin(val), end(val)); 1170 : m_type( value_t::array), m_value(val) 1199 template < class CompatibleArrayType, typename 1201 not std::is_same<CompatibleArrayType, typename basic_json_t::iterator>::value and 1202 not std::is_same<CompatibleArrayType, typename basic_json_t::const_iterator>::value and 1203 not std::is_same<CompatibleArrayType, typename basic_json_t::reverse_iterator>::value and 1204 not std::is_same<CompatibleArrayType, typename basic_json_t::const_reverse_iterator>::value and 1205 not std::is_same<CompatibleArrayType, typename array_t::iterator>::value and 1206 not std::is_same<CompatibleArrayType, typename array_t::const_iterator>::value and 1207 std::is_constructible<basic_json, typename CompatibleArrayType::value_type>::value, int>::type 1214 m_value.array = create<array_t>(begin(val), end(val)); 1239 : m_type( value_t::string), m_value(val) 1289 template < class CompatibleStringType, typename 1291 std::is_constructible<string_t, CompatibleStringType>::value, int>::type 1312 : m_type(value_t::boolean), m_value(val) 1338 template< typename T, 1339 typename std::enable_if< 1340 not (std::is_same<T, int>::value) 1341 and std::is_same<T, number_integer_t>::value 1345 : m_type(value_t::number_integer), m_value(val) 1374 : m_type(value_t::number_integer), 1375 m_value(static_cast<number_integer_t>(val)) 1403 template< typename CompatibleNumberIntegerType, typename 1405 std::is_constructible<number_integer_t, CompatibleNumberIntegerType>::value and 1406 std::numeric_limits<CompatibleNumberIntegerType>::is_integer and 1407 std::numeric_limits<CompatibleNumberIntegerType>::is_signed, 1408 CompatibleNumberIntegerType>::type 1411 : m_type(value_t::number_integer), 1412 m_value(static_cast<number_integer_t>(val)) 1432 template< typename T, 1433 typename std::enable_if< 1434 not (std::is_same<T, int>::value) 1435 and std::is_same<T, number_unsigned_t>::value 1439 : m_type(value_t::number_unsigned), m_value(val) 1462 template < typename CompatibleNumberUnsignedType, typename 1464 std::is_constructible<number_unsigned_t, CompatibleNumberUnsignedType>::value and 1465 std::numeric_limits<CompatibleNumberUnsignedType>::is_integer and 1466 !std::numeric_limits<CompatibleNumberUnsignedType>::is_signed, 1467 CompatibleNumberUnsignedType >::type 1470 : m_type(value_t::number_unsigned), 1471 m_value(static_cast<number_unsigned_t>(val)) 1499 : m_type(value_t::number_float), m_value(val) 1502 if (not std::isfinite(val)) 1504 m_type = value_t::null; 1505 m_value = json_value(); 1539 template< typename CompatibleNumberFloatType, typename = typename 1541 std::is_constructible<number_float_t, CompatibleNumberFloatType>::value and 1542 std::is_floating_point<CompatibleNumberFloatType>::value>::type 1618 bool type_deduction = true, 1619 value_t manual_type = value_t::array) 1622 bool is_an_object = true; 1626 for ( const auto& element : init) 1628 if (not element.is_array() or element.size() != 2 1629 or not element[0].is_string()) 1633 is_an_object = false; 1639 if (not type_deduction) 1642 if (manual_type == value_t::array) 1644 is_an_object = false; 1648 if (manual_type == value_t::object and not is_an_object) 1650 throw std::domain_error( "cannot create object from initializer list"); 1657 m_type = value_t::object; 1658 m_value = value_t::object; 1660 assert(m_value.object != nullptr); 1662 for ( auto& element : init) 1664 m_value.object->emplace(*(element[0].m_value.string), element[1]); 1670 m_type = value_t::array; 1671 m_value.array = create<array_t>(init); 1709 static basic_json array(std::initializer_list<basic_json> init = 1710 std::initializer_list<basic_json>()) 1712 return basic_json(init, false, value_t::array); 1749 static basic_json object(std::initializer_list<basic_json> init = 1750 std::initializer_list<basic_json>()) 1752 return basic_json(init, false, value_t::object); 1776 m_value.array = create<array_t>(cnt, val); 1813 template < class InputIT, typename 1815 std::is_same<InputIT, typename basic_json_t::iterator>::value or 1816 std::is_same<InputIT, typename basic_json_t::const_iterator>::value 1819 basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) 1822 if (first.m_object != last.m_object) 1824 throw std::domain_error( "iterators are not compatible"); 1830 case value_t::boolean: 1831 case value_t::number_float: 1832 case value_t::number_integer: 1833 case value_t::number_unsigned: 1834 case value_t::string: 1836 if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()) 1838 throw std::out_of_range( "iterators out of range"); 1851 case value_t::number_integer: 1853 assert(first.m_object != nullptr); 1854 m_value.number_integer = first.m_object->m_value.number_integer; 1858 case value_t::number_unsigned: 1860 assert(first.m_object != nullptr); 1861 m_value.number_unsigned = first.m_object->m_value.number_unsigned; 1865 case value_t::number_float: 1867 assert(first.m_object != nullptr); 1868 m_value.number_float = first.m_object->m_value.number_float; 1872 case value_t::boolean: 1874 assert(first.m_object != nullptr); 1875 m_value.boolean = first.m_object->m_value.boolean; 1879 case value_t::string: 1881 assert(first.m_object != nullptr); 1882 m_value = *first.m_object->m_value.string; 1886 case value_t::object: 1888 m_value.object = create<object_t>(first.m_it.object_iterator, last.m_it.object_iterator); 1892 case value_t::array: 1894 m_value.array = create<array_t>(first.m_it.array_iterator, last.m_it.array_iterator); 1900 assert(first.m_object != nullptr); 1901 throw std::domain_error( "cannot use construct with iterators from " + first.m_object->type_name()); 1928 * this = parser(i, cb).parse(); 1958 : m_type(other.m_type) 1962 case value_t::object: 1964 assert(other.m_value.object != nullptr); 1965 m_value = *other.m_value.object; 1969 case value_t::array: 1971 assert(other.m_value.array != nullptr); 1972 m_value = *other.m_value.array; 1976 case value_t::string: 1978 assert(other.m_value.string != nullptr); 1979 m_value = *other.m_value.string; 1983 case value_t::boolean: 1985 m_value = other.m_value.boolean; 1989 case value_t::number_integer: 1991 m_value = other.m_value.number_integer; 1995 case value_t::number_unsigned: 1997 m_value = other.m_value.number_unsigned; 2001 case value_t::number_float: 2003 m_value = other.m_value.number_float; 2033 : m_type( std::move(other.m_type)), 2034 m_value( std::move(other.m_value)) 2037 other.m_type = value_t::null; 2065 std::is_nothrow_move_constructible<value_t>::value and 2066 std::is_nothrow_move_assignable<value_t>::value and 2067 std::is_nothrow_move_constructible<json_value>::value and 2068 std::is_nothrow_move_assignable<json_value>::value 2072 swap(m_type, other.m_type); 2073 swap(m_value, other.m_value); 2096 case value_t::object: 2098 AllocatorType<object_t> alloc; 2099 alloc.destroy(m_value.object); 2100 alloc.deallocate(m_value.object, 1); 2104 case value_t::array: 2106 AllocatorType<array_t> alloc; 2107 alloc.destroy(m_value.array); 2108 alloc.deallocate(m_value.array, 1); 2112 case value_t::string: 2114 AllocatorType<string_t> alloc; 2115 alloc.destroy(m_value.string); 2116 alloc.deallocate(m_value.string, 1); 2163 std::stringstream ss; 2167 dump(ss, true, static_cast<unsigned int>(indent)); 2227 return is_null() or is_string() or is_boolean() or is_number(); 2254 return is_array() or is_object(); 2276 return m_type == value_t::null; 2298 return m_type == value_t::boolean; 2328 return is_number_integer() or is_number_float(); 2357 return m_type == value_t::number_integer or m_type == value_t::number_unsigned; 2385 return m_type == value_t::number_unsigned; 2413 return m_type == value_t::number_float; 2435 return m_type == value_t::object; 2457 return m_type == value_t::array; 2479 return m_type == value_t::string; 2506 return m_type == value_t::discarded; 2540 template < class T, typename 2542 std::is_convertible<typename object_t::key_type, typename T::key_type>::value and 2543 std::is_convertible<basic_json_t, typename T::mapped_type>::value 2545 T get_impl(T*) const 2549 assert(m_value.object != nullptr); 2550 return T(m_value.object->begin(), m_value.object->end()); 2554 throw std::domain_error( "type must be object, but is " + type_name()); 2563 assert(m_value.object != nullptr); 2564 return *(m_value.object); 2568 throw std::domain_error( "type must be object, but is " + type_name()); 2573 template < class T, typename 2575 std::is_convertible<basic_json_t, typename T::value_type>::value and 2576 not std::is_same<basic_json_t, typename T::value_type>::value and 2577 not std::is_arithmetic<T>::value and 2578 not std::is_convertible<std::string, T>::value and 2579 not has_mapped_type<T>::value 2581 T get_impl(T*) const 2586 assert(m_value.array != nullptr); 2587 std::transform(m_value.array->begin(), m_value.array->end(), 2588 std::inserter(to_vector, to_vector.end()), [](basic_json i) 2590 return i. get< typename T::value_type>(); 2596 throw std::domain_error( "type must be array, but is " + type_name()); 2601 template < class T, typename 2603 std::is_convertible<basic_json_t, T>::value and 2604 not std::is_same<basic_json_t, T>::value 2606 std::vector<T> get_impl(std::vector<T>*) const 2610 std::vector<T> to_vector; 2611 assert(m_value.array != nullptr); 2612 to_vector.reserve(m_value.array->size()); 2613 std::transform(m_value.array->begin(), m_value.array->end(), 2614 std::inserter(to_vector, to_vector.end()), [](basic_json i) 2622 throw std::domain_error( "type must be array, but is " + type_name()); 2627 template < class T, typename 2629 std::is_same<basic_json, typename T::value_type>::value and 2630 not has_mapped_type<T>::value 2632 T get_impl(T*) const 2636 assert(m_value.array != nullptr); 2637 return T(m_value.array->begin(), m_value.array->end()); 2641 throw std::domain_error( "type must be array, but is " + type_name()); 2650 assert(m_value.array != nullptr); 2651 return *(m_value.array); 2655 throw std::domain_error( "type must be array, but is " + type_name()); 2660 template < typename T, typename 2662 std::is_convertible<string_t, T>::value 2664 T get_impl(T*) const 2668 assert(m_value.string != nullptr); 2669 return *m_value.string; 2673 throw std::domain_error( "type must be string, but is " + type_name()); 2678 template< typename T, typename 2680 std::is_arithmetic<T>::value 2682 T get_impl(T*) const 2686 case value_t::number_integer: 2688 return static_cast<T >(m_value.number_integer); 2691 case value_t::number_unsigned: 2693 return static_cast<T >(m_value.number_unsigned); 2696 case value_t::number_float: 2698 return static_cast<T >(m_value.number_float); 2703 throw std::domain_error( "type must be number, but is " + type_name()); 2713 : throw std::domain_error( "type must be boolean, but is " + type_name()); 2719 return is_object() ? m_value.object : nullptr; 2725 return is_object() ? m_value.object : nullptr; 2731 return is_array() ? m_value.array : nullptr; 2735 constexpr const array_t* get_impl_ptr( const array_t*) const noexcept 2737 return is_array() ? m_value.array : nullptr; 2743 return is_string() ? m_value.string : nullptr; 2749 return is_string() ? m_value.string : nullptr; 2755 return is_boolean() ? &m_value.boolean : nullptr; 2761 return is_boolean() ? &m_value.boolean : nullptr; 2767 return is_number_integer() ? &m_value.number_integer : nullptr; 2773 return is_number_integer() ? &m_value.number_integer : nullptr; 2779 return is_number_unsigned() ? &m_value.number_unsigned : nullptr; 2785 return is_number_unsigned() ? &m_value.number_unsigned : nullptr; 2791 return is_number_float() ? &m_value.number_float : nullptr; 2797 return is_number_float() ? &m_value.number_float : nullptr; 2811 template< typename ReferenceType, typename ThisType> 2812 static ReferenceType get_ref_impl(ThisType& obj) 2815 using PointerType = typename std::add_pointer<ReferenceType>::type; 2816 auto ptr = obj.template get_ptr<PointerType>(); 2824 throw std::domain_error( "incompatible ReferenceType for get_ref, actual type is " + 2867 template< typename ValueType, typename 2869 not std::is_pointer<ValueType>::value 2871 ValueType get() const 2873 return get_impl(static_cast<ValueType*>( nullptr)); 2902 template< typename PointerType, typename 2904 std::is_pointer<PointerType>::value 2906 PointerType get() noexcept 2909 return get_ptr<PointerType>(); 2916 template< typename PointerType, typename 2918 std::is_pointer<PointerType>::value 2920 constexpr const PointerType get() const noexcept 2923 return get_ptr<PointerType>(); 2951 template< typename PointerType, typename 2953 std::is_pointer<PointerType>::value 2958 return get_impl_ptr(static_cast<PointerType>( nullptr)); 2965 template< typename PointerType, typename 2967 std::is_pointer<PointerType>::value 2968 and std::is_const<typename std::remove_pointer<PointerType>::type>::value 2970 constexpr const PointerType get_ptr() const noexcept 2973 return get_impl_ptr(static_cast<const PointerType>( nullptr)); 3002 template< typename ReferenceType, typename 3004 std::is_reference<ReferenceType>::value 3009 return get_ref_impl<ReferenceType>(*this); 3016 template< typename ReferenceType, typename 3018 std::is_reference<ReferenceType>::value 3019 and std::is_const<typename std::remove_reference<ReferenceType>::type>::value 3024 return get_ref_impl<ReferenceType>(*this); 3055 template < typename ValueType, typename 3057 not std::is_pointer<ValueType>::value 3058 and not std::is_same<ValueType, typename string_t::value_type>::value 3059 #ifndef _MSC_VER // Fix for issue #167 operator<< abiguity under VS2015 3060 and not std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value 3063 operator ValueType() const 3066 return get<ValueType>(); 3108 assert(m_value.array != nullptr); 3109 return m_value.array->at(idx); 3111 catch (std::out_of_range&) 3114 throw std::out_of_range( "array index " + std::to_string(idx) + " is out of range"); 3119 throw std::domain_error( "cannot use at() with " + type_name()); 3152 assert(m_value.array != nullptr); 3153 return m_value.array->at(idx); 3155 catch (std::out_of_range&) 3158 throw std::out_of_range( "array index " + std::to_string(idx) + " is out of range"); 3163 throw std::domain_error( "cannot use at() with " + type_name()); 3200 assert(m_value.object != nullptr); 3201 return m_value.object->at(key); 3203 catch (std::out_of_range&) 3206 throw std::out_of_range( "key '" + key + "' not found"); 3211 throw std::domain_error( "cannot use at() with " + type_name()); 3248 assert(m_value.object != nullptr); 3249 return m_value.object->at(key); 3251 catch (std::out_of_range&) 3254 throw std::out_of_range( "key '" + key + "' not found"); 3259 throw std::domain_error( "cannot use at() with " + type_name()); 3293 m_type = value_t::array; 3294 m_value. array = create<array_t>(); 3301 assert(m_value.array != nullptr); 3302 for ( size_t i = m_value.array->size(); i <= idx; ++i) 3304 m_value.array->push_back(basic_json()); 3307 return m_value.array->operator[](idx); 3311 throw std::domain_error( "cannot use operator[] with " + type_name()); 3339 assert(m_value.array != nullptr); 3340 return m_value.array->operator[](idx); 3344 throw std::domain_error( "cannot use operator[] with " + type_name()); 3380 m_type = value_t::object; 3381 m_value. object = create<object_t>(); 3387 assert(m_value.object != nullptr); 3388 return m_value.object->operator[](key); 3392 throw std::domain_error( "cannot use operator[] with " + type_name()); 3428 assert(m_value.object != nullptr); 3429 assert(m_value.object->find(key) != m_value.object->end()); 3430 return m_value.object->find(key)->second; 3434 throw std::domain_error( "cannot use operator[] with " + type_name()); 3465 template< typename T, std:: size_t n> 3468 return operator[](static_cast<const T>(key)); 3500 template< typename T, std:: size_t n> 3503 return operator[](static_cast<const T>(key)); 3533 template< typename T> 3539 m_type = value_t::object; 3540 m_value = value_t::object; 3546 assert(m_value.object != nullptr); 3547 return m_value.object->operator[](key); 3551 throw std::domain_error( "cannot use operator[] with " + type_name()); 3582 template< typename T> 3588 assert(m_value.object != nullptr); 3589 assert(m_value.object->find(key) != m_value.object->end()); 3590 return m_value.object->find(key)->second; 3594 throw std::domain_error( "cannot use operator[] with " + type_name()); 3633 return ptr.get_unchecked( this); 3660 return ptr.get_unchecked( this); 3685 return ptr.get_checked( this); 3710 return ptr.get_checked( this); 3761 template < class ValueType, typename 3763 std::is_convertible<basic_json_t, ValueType>::value 3765 ValueType value( const typename object_t::key_type& key, ValueType default_value) const 3771 const auto it = find(key); 3778 return default_value; 3783 throw std::domain_error( "cannot use value() with " + type_name()); 3791 string_t value( const typename object_t::key_type& key, const char* default_value) const 3793 return value(key, string_t(default_value)); 3924 template < class InteratorType, typename 3926 std::is_same<InteratorType, typename basic_json_t::iterator>::value or 3927 std::is_same<InteratorType, typename basic_json_t::const_iterator>::value 3933 if ( this != pos.m_object) 3935 throw std::domain_error( "iterator does not fit current value"); 3938 InteratorType result = end(); 3942 case value_t::boolean: 3943 case value_t::number_float: 3944 case value_t::number_integer: 3945 case value_t::number_unsigned: 3946 case value_t::string: 3948 if (not pos.m_it.primitive_iterator.is_begin()) 3950 throw std::out_of_range( "iterator out of range"); 3955 delete m_value.string; 3956 m_value.string = nullptr; 3959 m_type = value_t::null; 3963 case value_t::object: 3965 assert(m_value.object != nullptr); 3966 result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); 3970 case value_t::array: 3972 assert(m_value.array != nullptr); 3973 result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); 3979 throw std::domain_error( "cannot use erase() with " + type_name()); 4032 template < class InteratorType, typename 4034 std::is_same<InteratorType, typename basic_json_t::iterator>::value or 4035 std::is_same<InteratorType, typename basic_json_t::const_iterator>::value 4038 InteratorType erase(InteratorType first, InteratorType last) 4041 if ( this != first.m_object or this != last.m_object) 4043 throw std::domain_error( "iterators do not fit current value"); 4046 InteratorType result = end(); 4050 case value_t::boolean: 4051 case value_t::number_float: 4052 case value_t::number_integer: 4053 case value_t::number_unsigned: 4054 case value_t::string: 4056 if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()) 4058 throw std::out_of_range( "iterators out of range"); 4063 delete m_value.string; 4064 m_value.string = nullptr; 4067 m_type = value_t::null; 4071 case value_t::object: 4073 assert(m_value.object != nullptr); 4074 result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, 4075 last.m_it.object_iterator); 4079 case value_t::array: 4081 assert(m_value.array != nullptr); 4082 result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, 4083 last.m_it.array_iterator); 4089 throw std::domain_error( "cannot use erase() with " + type_name()); 4130 assert(m_value.object != nullptr); 4131 return m_value.object->erase(key); 4135 throw std::domain_error( "cannot use erase() with " + type_name()); 4170 throw std::out_of_range( "index out of range"); 4173 assert(m_value.array != nullptr); 4174 m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); 4178 throw std::domain_error( "cannot use erase() with " + type_name()); 4211 auto result = end(); 4215 assert(m_value.object != nullptr); 4216 result.m_it.object_iterator = m_value.object->find(key); 4228 auto result = cend(); 4232 assert(m_value.object != nullptr); 4233 result.m_it.object_iterator = m_value.object->find(key); 4260 assert(not is_object() or m_value.object != nullptr); 4261 return is_object() ? m_value.object->count(key) : 0; 4549 template< typename IteratorType> class iteration_proxy; 4565 return iteration_proxy<iterator>(cont); 4573 return iteration_proxy<const_iterator>(cont); 4629 case value_t::array: 4631 assert(m_value.array != nullptr); 4632 return m_value.array->empty(); 4635 case value_t::object: 4637 assert(m_value.object != nullptr); 4638 return m_value.object->empty(); 4692 case value_t::array: 4694 assert(m_value.array != nullptr); 4695 return m_value.array->size(); 4698 case value_t::object: 4700 assert(m_value.object != nullptr); 4701 return m_value.object->size(); 4752 case value_t::array: 4754 assert(m_value.array != nullptr); 4755 return m_value.array->max_size(); 4758 case value_t::object: 4760 assert(m_value.object != nullptr); 4761 return m_value.object->max_size(); 4811 case value_t::number_integer: 4813 m_value.number_integer = 0; 4817 case value_t::number_unsigned: 4819 m_value.number_unsigned = 0; 4823 case value_t::number_float: 4825 m_value.number_float = 0.0; 4829 case value_t::boolean: 4831 m_value.boolean = false; 4835 case value_t::string: 4837 assert(m_value.string != nullptr); 4838 m_value.string->clear(); 4842 case value_t::array: 4844 assert(m_value.array != nullptr); 4845 m_value.array->clear(); 4849 case value_t::object: 4851 assert(m_value.object != nullptr); 4852 m_value.object->clear(); 4886 if (not(is_null() or is_array())) 4888 throw std::domain_error( "cannot use push_back() with " + type_name()); 4894 m_type = value_t::array; 4895 m_value = value_t::array; 4899 assert(m_value.array != nullptr); 4900 m_value.array->push_back(std::move(val)); 4902 val.m_type = value_t::null; 4911 push_back(std::move(val)); 4922 if (not(is_null() or is_array())) 4924 throw std::domain_error( "cannot use push_back() with " + type_name()); 4930 m_type = value_t::array; 4931 m_value = value_t::array; 4935 assert(m_value.array != nullptr); 4936 m_value.array->push_back(val); 4972 if (not(is_null() or is_object())) 4974 throw std::domain_error( "cannot use push_back() with " + type_name()); 4980 m_type = value_t::object; 4981 m_value = value_t::object; 4985 assert(m_value.object != nullptr); 4986 m_value.object->insert(val); 4996 return operator[](val.first); 5027 if (pos.m_object != this) 5029 throw std::domain_error( "iterator does not fit current value"); 5034 assert(m_value.array != nullptr); 5035 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); 5040 throw std::domain_error( "cannot use insert() with " + type_name()); 5050 return insert(pos, val); 5083 if (pos.m_object != this) 5085 throw std::domain_error( "iterator does not fit current value"); 5090 assert(m_value.array != nullptr); 5091 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); 5096 throw std::domain_error( "cannot use insert() with " + type_name()); 5135 throw std::domain_error( "cannot use insert() with " + type_name()); 5139 if (pos.m_object != this) 5141 throw std::domain_error( "iterator does not fit current value"); 5144 if (first.m_object != last.m_object) 5146 throw std::domain_error( "iterators do not fit"); 5149 if (first.m_object == this or last.m_object == this) 5151 throw std::domain_error( "passed iterators may not belong to container"); 5156 assert(m_value.array != nullptr); 5157 result.m_it.array_iterator = m_value.array->insert( 5158 pos.m_it.array_iterator, 5159 first.m_it.array_iterator, 5160 last.m_it.array_iterator); 5193 throw std::domain_error( "cannot use insert() with " + type_name()); 5197 if (pos.m_object != this) 5199 throw std::domain_error( "iterator does not fit current value"); 5204 assert(m_value.array != nullptr); 5205 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); 5227 std::is_nothrow_move_constructible<value_t>::value and 5228 std::is_nothrow_move_assignable<value_t>::value and 5229 std::is_nothrow_move_constructible<json_value>::value and 5230 std::is_nothrow_move_assignable<json_value>::value 5233 std::swap(m_type, other.m_type); 5234 std::swap(m_value, other.m_value); 5262 assert(m_value.array != nullptr); 5263 std::swap(*(m_value.array), other); 5267 throw std::domain_error( "cannot use swap() with " + type_name()); 5296 assert(m_value.object != nullptr); 5297 std::swap(*(m_value.object), other); 5301 throw std::domain_error( "cannot use swap() with " + type_name()); 5330 assert(m_value.string != nullptr); 5331 std::swap(*(m_value.string), other); 5335 throw std::domain_error( "cannot use swap() with " + type_name()); 5361 static constexpr std::array<uint8_t, 8> order = {{ 5374 if (lhs == value_t::discarded or rhs == value_t::discarded) 5379 return order[ static_cast<std::size_t >(lhs)] < order[static_cast<std::size_t>(rhs)]; 5408 const auto lhs_type = lhs.type(); 5409 const auto rhs_type = rhs.type(); 5411 if (lhs_type == rhs_type) 5415 case value_t::array: 5417 assert(lhs.m_value.array != nullptr); 5418 assert(rhs.m_value.array != nullptr); 5419 return *lhs.m_value.array == *rhs.m_value.array; 5421 case value_t::object: 5423 assert(lhs.m_value.object != nullptr); 5424 assert(rhs.m_value.object != nullptr); 5425 return *lhs.m_value.object == *rhs.m_value.object; 5431 case value_t::string: 5433 assert(lhs.m_value.string != nullptr); 5434 assert(rhs.m_value.string != nullptr); 5435 return *lhs.m_value.string == *rhs.m_value.string; 5437 case value_t::boolean: 5439 return lhs.m_value.boolean == rhs.m_value.boolean; 5441 case value_t::number_integer: 5443 return lhs.m_value.number_integer == rhs.m_value.number_integer; 5445 case value_t::number_unsigned: 5447 return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; 5449 case value_t::number_float: 5451 return lhs.m_value.number_float == rhs.m_value.number_float; 5459 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float) 5461 return static_cast<number_float_t>(lhs.m_value.number_integer) == rhs.m_value.number_float; 5463 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer) 5465 return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_integer); 5467 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float) 5469 return static_cast<number_float_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_float; 5471 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned) 5473 return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_unsigned); 5475 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer) 5477 return static_cast<number_integer_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; 5479 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned) 5481 return lhs.m_value.number_integer == static_cast<number_integer_t>(rhs.m_value.number_unsigned); 5537 return not (lhs == rhs); 5569 return not v.is_null(); 5598 const auto lhs_type = lhs.type(); 5599 const auto rhs_type = rhs.type(); 5601 if (lhs_type == rhs_type) 5605 case value_t::array: 5607 assert(lhs.m_value.array != nullptr); 5608 assert(rhs.m_value.array != nullptr); 5609 return *lhs.m_value.array < *rhs.m_value.array; 5611 case value_t::object: 5613 assert(lhs.m_value.object != nullptr); 5614 assert(rhs.m_value.object != nullptr); 5615 return *lhs.m_value.object < *rhs.m_value.object; 5621 case value_t::string: 5623 assert(lhs.m_value.string != nullptr); 5624 assert(rhs.m_value.string != nullptr); 5625 return *lhs.m_value.string < *rhs.m_value.string; 5627 case value_t::boolean: 5629 return lhs.m_value.boolean < rhs.m_value.boolean; 5631 case value_t::number_integer: 5633 return lhs.m_value.number_integer < rhs.m_value.number_integer; 5635 case value_t::number_unsigned: 5637 return lhs.m_value.number_unsigned < rhs.m_value.number_unsigned; 5639 case value_t::number_float: 5641 return lhs.m_value.number_float < rhs.m_value.number_float; 5649 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float) 5651 return static_cast<number_float_t>(lhs.m_value.number_integer) < rhs.m_value.number_float; 5653 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer) 5655 return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_integer); 5657 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float) 5659 return static_cast<number_float_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_float; 5661 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned) 5663 return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_unsigned); 5665 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned) 5667 return lhs.m_value.number_integer < static_cast<number_integer_t>(rhs.m_value.number_unsigned); 5669 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer) 5671 return static_cast<number_integer_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; 5677 return operator<(lhs_type, rhs_type); 5699 return not (rhs < lhs); 5721 return not (lhs <= rhs); 5743 return not (lhs < rhs); 5778 friend std::ostream& operator<<(std::ostream& o, const basic_json& j) 5781 const bool pretty_print = (o.width() > 0); 5782 const auto indentation = (pretty_print ? o.width() : 0); 5788 j. dump(o, pretty_print, static_cast<unsigned int>(indentation)); 5796 friend std::ostream& operator>>( const basic_json& j, std::ostream& o) 5837 return parser(s, cb). parse(); 5866 return parser(i, cb). parse(); 5874 return parser(i, cb). parse(); 5902 j = parser(i). parse(); 5912 j = parser(i). parse(); 5925 string_t type_name() const noexcept 5931 case value_t::object: 5933 case value_t::array: 5935 case value_t::string: 5937 case value_t::boolean: 5939 case value_t::discarded: 5954 static std::size_t extra_space( const string_t& s) noexcept 5956 std::size_t result = 0; 5958 for ( const auto& c : s) 5977 if (c >= 0x00 and c <= 0x1f) 6005 const auto space = extra_space(s); 6012 string_t result(s.size() + space, '\\'); 6013 std::size_t pos = 0; 6015 for ( const auto& c : s) 6022 result[pos + 1] = '"'; 6038 result[pos + 1] = 'b'; 6046 result[pos + 1] = 'f'; 6054 result[pos + 1] = 'n'; 6062 result[pos + 1] = 'r'; 6070 result[pos + 1] = 't'; 6077 if (c >= 0x00 and c <= 0x1f) 6081 auto hexify = []( const char v) -> char 6083 return (v < 10) ? ( '0' + v) : ( 'a' + v - 10); 6088 { 'u', '0', '0', hexify(c >> 4), hexify(c & 0x0f) 6126 void dump(std::ostream& o, 6127 const bool pretty_print, 6128 const unsigned int indent_step, 6129 const unsigned int current_indent = 0) const 6132 unsigned int new_indent = current_indent; 6136 case value_t::object: 6138 assert(m_value.object != nullptr); 6140 if (m_value.object->empty()) 6151 new_indent += indent_step; 6155 for ( auto i = m_value.object->cbegin(); i != m_value.object->cend(); ++i) 6157 if (i != m_value.object->cbegin()) 6159 o << (pretty_print ? ",\n" : ","); 6161 o << string_t(new_indent, ' ') << "\"" 6162 << escape_string(i->first) << "\":" 6163 << (pretty_print ? " " : ""); 6164 i->second.dump(o, pretty_print, indent_step, new_indent); 6170 new_indent -= indent_step; 6174 o << string_t(new_indent, ' ') + "}"; 6178 case value_t::array: 6180 assert(m_value.array != nullptr); 6182 if (m_value.array->empty()) 6193 new_indent += indent_step; 6197 for ( auto i = m_value.array->cbegin(); i != m_value.array->cend(); ++i) 6199 if (i != m_value.array->cbegin()) 6201 o << (pretty_print ? ",\n" : ","); 6204 i->dump(o, pretty_print, indent_step, new_indent); 6210 new_indent -= indent_step; 6214 o << string_t(new_indent, ' ') << "]"; 6218 case value_t::string: 6220 assert(m_value.string != nullptr); 6221 o << string_t( "\"") << escape_string(*m_value.string) << "\""; 6225 case value_t::boolean: 6227 o << (m_value.boolean ? "true" : "false"); 6231 case value_t::number_integer: 6233 o << m_value.number_integer; 6237 case value_t::number_unsigned: 6239 o << m_value.number_unsigned; 6243 case value_t::number_float: 6246 if (m_type.bits.parsed) 6249 if (m_type.bits.has_exp) 6256 if (m_type.bits.exp_cap) 6258 len = snprintf(buf, sizeof(buf), "%.*E", 6259 m_type.bits.precision, m_value.number_float) + 1; 6263 len = snprintf(buf, sizeof(buf), "%.*e", 6264 m_type.bits.precision, m_value.number_float) + 1; 6268 if (not m_type.bits.exp_plus) 6270 if (len > static_cast<int>( sizeof(buf))) 6274 for ( int i = 0; i < len; i++) 6278 for (; i + 1 < len; i++) 6280 buf[i] = buf[i + 1]; 6291 std::stringstream ss; 6292 ss.imbue(std::locale(std::locale(), new DecimalSeparator)); 6293 ss << std::setprecision(m_type.bits.precision) 6294 << std::fixed << m_value.number_float; 6300 if (m_value.number_float == 0) 6303 o << (std::signbit(m_value.number_float) ? "-0.0" : "0.0"); 6312 std::stringstream ss; 6313 ss.imbue(std::locale(std::locale(), new DecimalSeparator)); 6314 ss << std::setprecision(std::numeric_limits<double>::digits10) 6315 << m_value.number_float; 6322 case value_t::discarded: 6342 type_data_t m_type = value_t::null; 6345 json_value m_value = {}; 6362 class primitive_iterator_t 6366 void set_begin() noexcept 6372 void set_end() noexcept 6378 constexpr bool is_begin() const noexcept 6380 return (m_it == begin_value); 6384 constexpr bool is_end() const noexcept 6386 return (m_it == end_value); 6406 difference_type m_it = std::numeric_limits<std::ptrdiff_t>::denorm_min(); 6416 struct internal_iterator 6419 typename object_t::iterator object_iterator; 6421 typename array_t::iterator array_iterator; 6423 primitive_iterator_t primitive_iterator; 6426 internal_iterator() noexcept 6427 : object_iterator(), array_iterator(), primitive_iterator() 6432 template< typename IteratorType> 6433 class iteration_proxy 6437 class iteration_proxy_internal 6441 IteratorType anchor; 6443 size_t array_index = 0; 6446 explicit iteration_proxy_internal(IteratorType it) noexcept 6451 iteration_proxy_internal& operator*() 6457 iteration_proxy_internal& operator++() 6466 bool operator!= ( const iteration_proxy_internal& o) const 6468 return anchor != o.anchor; 6474 assert(anchor.m_object != nullptr); 6476 switch (anchor.m_object->type()) 6479 case value_t::array: 6481 return std::to_string(array_index); 6485 case value_t::object: 6487 return anchor.key(); 6499 typename IteratorType::reference value() const 6501 return anchor.value(); 6506 typename IteratorType::reference container; 6510 explicit iteration_proxy( typename IteratorType::reference cont) 6515 iteration_proxy_internal begin() noexcept 6517 return iteration_proxy_internal(container.begin()); 6521 iteration_proxy_internal end() noexcept 6523 return iteration_proxy_internal(container.end()); 6541 class const_iterator : public std::iterator<std::random_access_iterator_tag, const basic_json> 6544 friend class basic_json; 6565 assert(m_object != nullptr); 6567 switch (m_object->m_type) 6571 m_it.object_iterator = typename object_t::iterator(); 6577 m_it.array_iterator = typename array_t::iterator(); 6583 m_it.primitive_iterator = primitive_iterator_t(); 6591 : m_object(other.m_object) 6593 assert(m_object != nullptr); 6595 switch (m_object->m_type) 6599 m_it.object_iterator = other.m_it.object_iterator; 6605 m_it.array_iterator = other.m_it.array_iterator; 6611 m_it.primitive_iterator = other.m_it.primitive_iterator; 6619 : m_object(other.m_object), m_it(other.m_it) 6624 std::is_nothrow_move_constructible<pointer>::value and 6625 std::is_nothrow_move_assignable<pointer>::value and 6626 std::is_nothrow_move_constructible<internal_iterator>::value and 6627 std::is_nothrow_move_assignable<internal_iterator>::value 6630 std::swap(m_object, other.m_object); 6631 std::swap(m_it, other.m_it); 6637 void set_begin() noexcept 6639 assert(m_object != nullptr); 6641 switch (m_object->m_type) 6645 assert(m_object->m_value.object != nullptr); 6646 m_it.object_iterator = m_object->m_value.object->begin(); 6652 assert(m_object->m_value.array != nullptr); 6653 m_it.array_iterator = m_object->m_value.array->begin(); 6660 m_it.primitive_iterator.set_end(); 6666 m_it.primitive_iterator.set_begin(); 6673 void set_end() noexcept 6675 assert(m_object != nullptr); 6677 switch (m_object->m_type) 6681 assert(m_object->m_value.object != nullptr); 6682 m_it.object_iterator = m_object->m_value.object->end(); 6688 assert(m_object->m_value.array != nullptr); 6689 m_it.array_iterator = m_object->m_value.array->end(); 6695 m_it.primitive_iterator.set_end(); 6705 assert(m_object != nullptr); 6707 switch (m_object->m_type) 6711 assert(m_object->m_value.object); 6712 assert(m_it.object_iterator != m_object->m_value.object->end()); 6713 return m_it.object_iterator->second; 6718 assert(m_object->m_value.array); 6719 assert(m_it.array_iterator != m_object->m_value.array->end()); 6720 return *m_it.array_iterator; 6725 throw std::out_of_range( "cannot get value"); 6730 if (m_it.primitive_iterator.is_begin()) 6736 throw std::out_of_range( "cannot get value"); 6745 assert(m_object != nullptr); 6747 switch (m_object->m_type) 6751 assert(m_object->m_value.object); 6752 assert(m_it.object_iterator != m_object->m_value.object->end()); 6753 return &(m_it.object_iterator->second); 6758 assert(m_object->m_value.array); 6759 assert(m_it.array_iterator != m_object->m_value.array->end()); 6760 return &*m_it.array_iterator; 6765 if (m_it.primitive_iterator.is_begin()) 6771 throw std::out_of_range( "cannot get value"); 6780 auto result = * this; 6788 assert(m_object != nullptr); 6790 switch (m_object->m_type) 6794 ++m_it.object_iterator; 6800 ++m_it.array_iterator; 6806 ++m_it.primitive_iterator; 6817 auto result = * this; 6825 assert(m_object != nullptr); 6827 switch (m_object->m_type) 6831 --m_it.object_iterator; 6837 --m_it.array_iterator; 6843 --m_it.primitive_iterator; 6855 if (m_object != other.m_object) 6857 throw std::domain_error( "cannot compare iterators of different containers"); 6860 assert(m_object != nullptr); 6862 switch (m_object->m_type) 6866 return (m_it.object_iterator == other.m_it.object_iterator); 6871 return (m_it.array_iterator == other.m_it.array_iterator); 6876 return (m_it.primitive_iterator == other.m_it.primitive_iterator); 6884 return not operator==(other); 6891 if (m_object != other.m_object) 6893 throw std::domain_error( "cannot compare iterators of different containers"); 6896 assert(m_object != nullptr); 6898 switch (m_object->m_type) 6902 throw std::domain_error( "cannot compare order of object iterators"); 6907 return (m_it.array_iterator < other.m_it.array_iterator); 6912 return (m_it.primitive_iterator < other.m_it.primitive_iterator); 6920 return not other.operator < (*this); 6926 return not operator<=(other); 6932 return not operator<(other); 6938 assert(m_object != nullptr); 6940 switch (m_object->m_type) 6944 throw std::domain_error( "cannot use offsets with object iterators"); 6949 m_it.array_iterator += i; 6955 m_it.primitive_iterator += i; 6966 return operator+=(-i); 6972 auto result = * this; 6980 auto result = * this; 6988 assert(m_object != nullptr); 6990 switch (m_object->m_type) 6994 throw std::domain_error( "cannot use offsets with object iterators"); 6999 return m_it.array_iterator - other.m_it.array_iterator; 7004 return m_it.primitive_iterator - other.m_it.primitive_iterator; 7012 assert(m_object != nullptr); 7014 switch (m_object->m_type) 7018 throw std::domain_error( "cannot use operator[] for object iterators"); 7023 return *(m_it.array_iterator + n); 7028 throw std::out_of_range( "cannot get value"); 7033 if (m_it.primitive_iterator == -n) 7039 throw std::out_of_range( "cannot get value"); 7046 typename object_t::key_type key() const 7048 assert(m_object != nullptr); 7050 if (m_object->is_object()) 7052 return m_it.object_iterator->first; 7056 throw std::domain_error( "cannot use key() for non-object iterators"); 7070 internal_iterator m_it = internal_iterator(); 7107 std::is_nothrow_move_constructible<pointer>::value and 7108 std::is_nothrow_move_assignable<pointer>::value and 7109 std::is_nothrow_move_constructible<internal_iterator>::value and 7110 std::is_nothrow_move_assignable<internal_iterator>::value 7113 base_iterator::operator=(other); 7120 return const_cast<reference>(base_iterator::operator*()); 7126 return const_cast<pointer>(base_iterator::operator->()); 7133 base_iterator::operator++(); 7140 base_iterator::operator++(); 7148 base_iterator::operator--(); 7155 base_iterator::operator--(); 7162 base_iterator::operator+=(i); 7169 base_iterator::operator-=(i); 7176 auto result = * this; 7184 auto result = * this; 7192 return base_iterator::operator-(other); 7198 return const_cast<reference>(base_iterator::operator[](n)); 7204 return const_cast<reference>(base_iterator::value()); 7225 template< typename Base> 7247 return base_iterator::operator++(1); 7253 base_iterator::operator++(); 7260 return base_iterator::operator--(1); 7266 base_iterator::operator--(); 7273 base_iterator::operator+=(i); 7280 auto result = * this; 7288 auto result = * this; 7296 return this->base() - other.base(); 7302 return *(this->operator+(n)); 7306 typename object_t::key_type key() const 7308 auto it = --this->base(); 7315 auto it = --this->base(); 7316 return it.operator * (); 7337 enum class token_type 7356 using lexer_char_t = unsigned char; 7359 explicit lexer( const string_t& s) noexcept 7360 : m_stream( nullptr), m_buffer(s) 7362 m_content = reinterpret_cast<const lexer_char_t* >(s.c_str()); 7363 assert(m_content != nullptr); 7364 m_start = m_cursor = m_content; 7365 m_limit = m_content + s.size(); 7369 explicit lexer(std::istream* s) noexcept 7370 : m_stream(s), m_buffer() 7372 assert(m_stream != nullptr); 7373 getline(*m_stream, m_buffer); 7374 m_content = reinterpret_cast<const lexer_char_t* >(m_buffer.c_str()); 7375 assert(m_content != nullptr); 7376 m_start = m_cursor = m_content; 7377 m_limit = m_content + m_buffer.size(); 7384 lexer( const lexer&) = delete; 7385 lexer operator=( const lexer&) = delete; 7402 static string_t to_unicode( const std::size_t codepoint1, 7403 const std::size_t codepoint2 = 0) 7406 std::size_t codepoint = codepoint1; 7409 if (codepoint1 >= 0xD800 and codepoint1 <= 0xDBFF) 7412 if (codepoint2 >= 0xDC00 and codepoint2 <= 0xDFFF) 7426 throw std::invalid_argument( "missing or wrong low surrogate"); 7432 if (codepoint < 0x80) 7435 result.append(1, static_cast<typename string_t::value_type>(codepoint)); 7437 else if (codepoint <= 0x7ff) 7440 result.append(1, static_cast<typename string_t::value_type>(0xC0 | ((codepoint >> 6) & 0x1F))); 7441 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7443 else if (codepoint <= 0xffff) 7446 result.append(1, static_cast<typename string_t::value_type>(0xE0 | ((codepoint >> 12) & 0x0F))); 7447 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F))); 7448 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7450 else if (codepoint <= 0x10ffff) 7453 result.append(1, static_cast<typename string_t::value_type>(0xF0 | ((codepoint >> 18) & 0x07))); 7454 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 12) & 0x3F))); 7455 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F))); 7456 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7460 throw std::out_of_range( "code points above 0x10FFFF are invalid"); 7467 static std::string token_type_name(token_type t) 7471 case token_type::uninitialized: 7472 return "<uninitialized>"; 7473 case token_type::literal_true: 7474 return "true literal"; 7475 case token_type::literal_false: 7476 return "false literal"; 7477 case token_type::literal_null: 7478 return "null literal"; 7479 case token_type::value_string: 7480 return "string literal"; 7481 case token_type::value_number: 7482 return "number literal"; 7483 case token_type::begin_array: 7485 case token_type::begin_object: 7487 case token_type::end_array: 7489 case token_type::end_object: 7491 case token_type::name_separator: 7493 case token_type::value_separator: 7495 case token_type::parse_error: 7496 return "<parse error>"; 7497 case token_type::end_of_input: 7498 return "end of input"; 7502 return "unknown token"; 7517 token_type scan() noexcept 7524 assert(m_start != nullptr); 7529 unsigned int yyaccept = 0; 7530 static const unsigned char yybm[] = 7532 0, 0, 0, 0, 0, 0, 0, 0, 7533 0, 32, 32, 0, 0, 32, 0, 0, 7534 128, 128, 128, 128, 128, 128, 128, 128, 7535 128, 128, 128, 128, 128, 128, 128, 128, 7536 160, 128, 0, 128, 128, 128, 128, 128, 7537 128, 128, 128, 128, 128, 128, 128, 128, 7538 192, 192, 192, 192, 192, 192, 192, 192, 7539 192, 192, 128, 128, 128, 128, 128, 128, 7540 128, 128, 128, 128, 128, 128, 128, 128, 7541 128, 128, 128, 128, 128, 128, 128, 128, 7542 128, 128, 128, 128, 128, 128, 128, 128, 7543 128, 128, 128, 128, 0, 128, 128, 128, 7544 128, 128, 128, 128, 128, 128, 128, 128, 7545 128, 128, 128, 128, 128, 128, 128, 128, 7546 128, 128, 128, 128, 128, 128, 128, 128, 7547 128, 128, 128, 128, 128, 128, 128, 128, 7548 128, 128, 128, 128, 128, 128, 128, 128, 7549 128, 128, 128, 128, 128, 128, 128, 128, 7550 128, 128, 128, 128, 128, 128, 128, 128, 7551 128, 128, 128, 128, 128, 128, 128, 128, 7552 128, 128, 128, 128, 128, 128, 128, 128, 7553 128, 128, 128, 128, 128, 128, 128, 128, 7554 128, 128, 128, 128, 128, 128, 128, 128, 7555 128, 128, 128, 128, 128, 128, 128, 128, 7556 128, 128, 128, 128, 128, 128, 128, 128, 7557 128, 128, 128, 128, 128, 128, 128, 128, 7558 128, 128, 128, 128, 128, 128, 128, 128, 7559 128, 128, 128, 128, 128, 128, 128, 128, 7560 128, 128, 128, 128, 128, 128, 128, 128, 7561 128, 128, 128, 128, 128, 128, 128, 128, 7562 128, 128, 128, 128, 128, 128, 128, 128, 7563 128, 128, 128, 128, 128, 128, 128, 128, 7565 if ((m_limit - m_cursor) < 5) 7570 if (yybm[0 + yych] & 32) 7572 goto basic_json_parser_6; 7582 goto basic_json_parser_2; 7586 goto basic_json_parser_4; 7588 goto basic_json_parser_9; 7594 goto basic_json_parser_4; 7598 goto basic_json_parser_10; 7600 goto basic_json_parser_12; 7609 goto basic_json_parser_4; 7613 goto basic_json_parser_13; 7615 goto basic_json_parser_15; 7621 goto basic_json_parser_17; 7625 goto basic_json_parser_19; 7627 goto basic_json_parser_4; 7639 goto basic_json_parser_21; 7643 goto basic_json_parser_4; 7645 goto basic_json_parser_23; 7651 goto basic_json_parser_24; 7655 goto basic_json_parser_4; 7657 goto basic_json_parser_25; 7666 goto basic_json_parser_26; 7668 goto basic_json_parser_4; 7674 goto basic_json_parser_28; 7678 goto basic_json_parser_30; 7680 goto basic_json_parser_4; 7684 basic_json_parser_2: 7687 return token_type::end_of_input; 7689 basic_json_parser_4: 7691 basic_json_parser_5: 7693 return token_type::parse_error; 7695 basic_json_parser_6: 7697 if (m_limit <= m_cursor) 7702 if (yybm[0 + yych] & 32) 7704 goto basic_json_parser_6; 7709 basic_json_parser_9: 7711 yych = *(m_marker = ++m_cursor); 7714 goto basic_json_parser_5; 7716 goto basic_json_parser_32; 7717 basic_json_parser_10: 7720 return token_type::value_separator; 7722 basic_json_parser_12: 7726 goto basic_json_parser_5; 7730 goto basic_json_parser_13; 7734 goto basic_json_parser_15; 7736 goto basic_json_parser_5; 7737 basic_json_parser_13: 7739 yych = *(m_marker = ++m_cursor); 7744 goto basic_json_parser_37; 7751 goto basic_json_parser_38; 7755 goto basic_json_parser_38; 7758 basic_json_parser_14: 7760 return token_type::value_number; 7762 basic_json_parser_15: 7764 m_marker = ++m_cursor; 7765 if ((m_limit - m_cursor) < 3) 7770 if (yybm[0 + yych] & 64) 7772 goto basic_json_parser_15; 7778 goto basic_json_parser_37; 7780 goto basic_json_parser_14; 7786 goto basic_json_parser_38; 7790 goto basic_json_parser_38; 7792 goto basic_json_parser_14; 7794 basic_json_parser_17: 7797 return token_type::name_separator; 7799 basic_json_parser_19: 7802 return token_type::begin_array; 7804 basic_json_parser_21: 7807 return token_type::end_array; 7809 basic_json_parser_23: 7811 yych = *(m_marker = ++m_cursor); 7814 goto basic_json_parser_39; 7816 goto basic_json_parser_5; 7817 basic_json_parser_24: 7819 yych = *(m_marker = ++m_cursor); 7822 goto basic_json_parser_40; 7824 goto basic_json_parser_5; 7825 basic_json_parser_25: 7827 yych = *(m_marker = ++m_cursor); 7830 goto basic_json_parser_41; 7832 goto basic_json_parser_5; 7833 basic_json_parser_26: 7836 return token_type::begin_object; 7838 basic_json_parser_28: 7841 return token_type::end_object; 7843 basic_json_parser_30: 7845 yych = *(m_marker = ++m_cursor); 7848 goto basic_json_parser_42; 7850 goto basic_json_parser_5; 7851 basic_json_parser_31: 7853 if (m_limit <= m_cursor) 7858 basic_json_parser_32: 7859 if (yybm[0 + yych] & 128) 7861 goto basic_json_parser_31; 7865 goto basic_json_parser_33; 7869 goto basic_json_parser_34; 7871 goto basic_json_parser_36; 7872 basic_json_parser_33: 7873 m_cursor = m_marker; 7876 goto basic_json_parser_5; 7880 goto basic_json_parser_14; 7882 basic_json_parser_34: 7885 return token_type::value_string; 7887 basic_json_parser_36: 7889 if (m_limit <= m_cursor) 7900 goto basic_json_parser_31; 7904 goto basic_json_parser_33; 7906 goto basic_json_parser_31; 7914 goto basic_json_parser_33; 7916 goto basic_json_parser_31; 7922 goto basic_json_parser_31; 7924 goto basic_json_parser_33; 7934 goto basic_json_parser_31; 7938 goto basic_json_parser_31; 7940 goto basic_json_parser_33; 7948 goto basic_json_parser_31; 7950 goto basic_json_parser_33; 7956 goto basic_json_parser_31; 7960 goto basic_json_parser_43; 7962 goto basic_json_parser_33; 7966 basic_json_parser_37: 7970 goto basic_json_parser_33; 7974 goto basic_json_parser_44; 7976 goto basic_json_parser_33; 7977 basic_json_parser_38: 7983 goto basic_json_parser_46; 7985 goto basic_json_parser_33; 7991 goto basic_json_parser_46; 7995 goto basic_json_parser_33; 7999 goto basic_json_parser_47; 8001 goto basic_json_parser_33; 8003 basic_json_parser_39: 8007 goto basic_json_parser_49; 8009 goto basic_json_parser_33; 8010 basic_json_parser_40: 8014 goto basic_json_parser_50; 8016 goto basic_json_parser_33; 8017 basic_json_parser_41: 8021 goto basic_json_parser_51; 8023 goto basic_json_parser_33; 8024 basic_json_parser_42: 8028 goto basic_json_parser_52; 8030 goto basic_json_parser_33; 8031 basic_json_parser_43: 8033 if (m_limit <= m_cursor) 8042 goto basic_json_parser_33; 8046 goto basic_json_parser_54; 8048 goto basic_json_parser_33; 8054 goto basic_json_parser_54; 8058 goto basic_json_parser_33; 8062 goto basic_json_parser_54; 8064 goto basic_json_parser_33; 8066 basic_json_parser_44: 8068 m_marker = ++m_cursor; 8069 if ((m_limit - m_cursor) < 3) 8078 goto basic_json_parser_14; 8082 goto basic_json_parser_44; 8084 goto basic_json_parser_14; 8090 goto basic_json_parser_38; 8094 goto basic_json_parser_38; 8096 goto basic_json_parser_14; 8098 basic_json_parser_46: 8102 goto basic_json_parser_33; 8106 goto basic_json_parser_33; 8108 basic_json_parser_47: 8110 if (m_limit <= m_cursor) 8117 goto basic_json_parser_14; 8121 goto basic_json_parser_47; 8123 goto basic_json_parser_14; 8124 basic_json_parser_49: 8128 goto basic_json_parser_55; 8130 goto basic_json_parser_33; 8131 basic_json_parser_50: 8135 goto basic_json_parser_56; 8137 goto basic_json_parser_33; 8138 basic_json_parser_51: 8142 goto basic_json_parser_58; 8144 goto basic_json_parser_33; 8145 basic_json_parser_52: 8150 basic_json_parser_54: 8152 if (m_limit <= m_cursor) 8161 goto basic_json_parser_33; 8165 goto basic_json_parser_60; 8167 goto basic_json_parser_33; 8173 goto basic_json_parser_60; 8177 goto basic_json_parser_33; 8181 goto basic_json_parser_60; 8183 goto basic_json_parser_33; 8185 basic_json_parser_55: 8189 goto basic_json_parser_61; 8191 goto basic_json_parser_33; 8192 basic_json_parser_56: 8195 return token_type::literal_null; 8197 basic_json_parser_58: 8200 return token_type::literal_true; 8202 basic_json_parser_60: 8204 if (m_limit <= m_cursor) 8213 goto basic_json_parser_33; 8217 goto basic_json_parser_63; 8219 goto basic_json_parser_33; 8225 goto basic_json_parser_63; 8229 goto basic_json_parser_33; 8233 goto basic_json_parser_63; 8235 goto basic_json_parser_33; 8237 basic_json_parser_61: 8240 return token_type::literal_false; 8242 basic_json_parser_63: 8244 if (m_limit <= m_cursor) 8253 goto basic_json_parser_33; 8257 goto basic_json_parser_31; 8259 goto basic_json_parser_33; 8265 goto basic_json_parser_31; 8269 goto basic_json_parser_33; 8273 goto basic_json_parser_31; 8275 goto basic_json_parser_33; 8282 void yyfill() noexcept 8284 if (m_stream == nullptr or not * m_stream) 8289 const auto offset_start = m_start - m_content; 8290 const auto offset_marker = m_marker - m_start; 8291 const auto offset_cursor = m_cursor - m_start; 8293 m_buffer.erase(0, static_cast<size_t>(offset_start)); 8295 assert(m_stream != nullptr); 8296 std::getline(*m_stream, line); 8297 m_buffer += "\n" + line; 8299 m_content = reinterpret_cast<const lexer_char_t* >(m_buffer.c_str()); 8300 assert(m_content != nullptr); 8301 m_start = m_content; 8302 m_marker = m_start + offset_marker; 8303 m_cursor = m_start + offset_cursor; 8304 m_limit = m_start + m_buffer.size() - 1; 8310 assert(m_start != nullptr); 8311 return string_t(reinterpret_cast<typename string_t::const_pointer>(m_start), 8312 static_cast<size_t>(m_cursor - m_start)); 8339 result.reserve(static_cast<size_t>(m_cursor - m_start - 2)); 8342 for ( const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i) 8398 auto codepoint = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer>(i + 1), 8399 4).c_str(), nullptr, 16); 8402 if (codepoint >= 0xD800 and codepoint <= 0xDBFF) 8405 if ((i + 6 >= m_limit) or * (i + 5) != '\\' or * (i + 6) != 'u') 8407 throw std::invalid_argument( "missing low surrogate"); 8411 auto codepoint2 = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer> 8412 (i + 7), 4).c_str(), nullptr, 16); 8413 result += to_unicode(codepoint, codepoint2); 8420 result += to_unicode(codepoint); 8432 result.append(1, static_cast<typename string_t::value_type>(*i)); 8459 long double str_to_float_t( long double* , char** endptr) const 8461 return std::strtold(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8479 double str_to_float_t( double* , char** endptr) const 8481 return std::strtod(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8499 float str_to_float_t( float* , char** endptr) const 8501 return std::strtof(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8531 void get_number(basic_json& result) const 8533 assert(m_start != nullptr); 8535 const lexer::lexer_char_t* curptr = m_start; 8538 result.m_type.bits.parsed = true; 8543 uint8_t found_radix_point = 0; 8544 uint8_t precision = 0; 8558 type = value_t::number_integer; 8559 max = static_cast<uint64_t >(std::numeric_limits<number_integer_t>::max()) + 1; 8564 type = value_t::number_unsigned; 8565 max = static_cast<uint64_t >(std::numeric_limits<number_unsigned_t>::max()); 8573 for (; curptr < m_cursor; curptr++) 8576 if (*curptr < '0' || *curptr > '9') 8581 type = value_t::number_float; 8585 found_radix_point = 0xFF; 8590 type = value_t::number_float; 8591 result.m_type.bits.has_exp = true; 8594 result.m_type.bits.exp_cap = (*curptr == 'E'); 8597 result.m_type.bits.exp_plus = (*(++curptr) == '+'); 8602 if (type != value_t::number_float) 8605 auto temp = value * 10 + *curptr - 0x30; 8608 if (temp < value || temp > max) 8611 type = value_t::number_float; 8624 result.m_type.bits.precision = precision & found_radix_point; 8627 if (type == value_t::number_unsigned) 8629 result.m_value.number_unsigned = value; 8631 else if (type == value_t::number_integer) 8638 result.m_value.number_float = str_to_float_t(static_cast<number_float_t*>( nullptr), NULL); 8642 result.m_type = type; 8647 std::istream* m_stream = nullptr; 8651 const lexer_char_t* m_content = nullptr; 8653 const lexer_char_t* m_start = nullptr; 8655 const lexer_char_t* m_marker = nullptr; 8657 const lexer_char_t* m_cursor = nullptr; 8659 const lexer_char_t* m_limit = nullptr; 8672 : callback(cb), m_lexer(s) 8680 : callback(cb), m_lexer(&_is) 8689 basic_json result = parse_internal( true); 8691 expect(lexer::token_type::end_of_input); 8700 basic_json parse_internal( bool keep) 8702 auto result = basic_json(value_t::discarded); 8706 case lexer::token_type::begin_object: 8708 if (keep and (not callback or (keep = callback(depth++, parse_event_t::object_start, result)))) 8711 result.m_type = value_t::object; 8712 result.m_value = json_value(value_t::object); 8719 if (last_token == lexer::token_type::end_object) 8722 if (keep and callback and not callback(--depth, parse_event_t::object_end, result)) 8724 result = basic_json(value_t::discarded); 8730 unexpect(lexer::token_type::value_separator); 8736 if (last_token == lexer::token_type::value_separator) 8742 expect(lexer::token_type::value_string); 8743 const auto key = m_lexer.get_string(); 8745 bool keep_tag = false; 8751 keep_tag = callback(depth, parse_event_t::key, k); 8761 expect(lexer::token_type::name_separator); 8765 auto value = parse_internal(keep); 8766 if (keep and keep_tag and not value.is_discarded()) 8768 result[key] = std::move(value); 8771 while (last_token == lexer::token_type::value_separator); 8774 expect(lexer::token_type::end_object); 8776 if (keep and callback and not callback(--depth, parse_event_t::object_end, result)) 8778 result = basic_json(value_t::discarded); 8784 case lexer::token_type::begin_array: 8786 if (keep and (not callback or (keep = callback(depth++, parse_event_t::array_start, result)))) 8789 result.m_type = value_t::array; 8790 result.m_value = json_value(value_t::array); 8797 if (last_token == lexer::token_type::end_array) 8800 if (callback and not callback(--depth, parse_event_t::array_end, result)) 8802 result = basic_json(value_t::discarded); 8808 unexpect(lexer::token_type::value_separator); 8814 if (last_token == lexer::token_type::value_separator) 8820 auto value = parse_internal(keep); 8821 if (keep and not value.is_discarded()) 8823 result.push_back(std::move(value)); 8826 while (last_token == lexer::token_type::value_separator); 8829 expect(lexer::token_type::end_array); 8831 if (keep and callback and not callback(--depth, parse_event_t::array_end, result)) 8833 result = basic_json(value_t::discarded); 8839 case lexer::token_type::literal_null: 8842 result.m_type = value_t::null; 8846 case lexer::token_type::value_string: 8848 const auto s = m_lexer.get_string(); 8850 result = basic_json(s); 8854 case lexer::token_type::literal_true: 8857 result.m_type = value_t::boolean; 8858 result.m_value = true; 8862 case lexer::token_type::literal_false: 8865 result.m_type = value_t::boolean; 8866 result.m_value = false; 8870 case lexer::token_type::value_number: 8872 m_lexer.get_number(result); 8880 unexpect(last_token); 8884 if (keep and callback and not callback(depth, parse_event_t::value, result)) 8886 result = basic_json(value_t::discarded); 8892 typename lexer::token_type get_token() noexcept 8894 last_token = m_lexer.scan(); 8898 void expect( typename lexer::token_type t) const 8900 if (t != last_token) 8902 std::string error_msg = "parse error - unexpected "; 8903 error_msg += (last_token == lexer::token_type::parse_error ? ( "'" + m_lexer.get_token() + "'") : 8904 lexer::token_type_name(last_token)); 8905 error_msg += "; expected " + lexer::token_type_name(t); 8906 throw std::invalid_argument(error_msg); 8910 void unexpect( typename lexer::token_type t) const 8912 if (t == last_token) 8914 std::string error_msg = "parse error - unexpected "; 8915 error_msg += (last_token == lexer::token_type::parse_error ? ( "'" + m_lexer.get_token() + "'") : 8916 lexer::token_type_name(last_token)); 8917 throw std::invalid_argument(error_msg); 8927 typename lexer::token_type last_token = lexer::token_type::uninitialized; 8943 friend class basic_json; 8969 : reference_tokens(split(s)) 8982 for ( const auto& reference_token : reference_tokens) 8984 switch (result->m_type) 8988 if (reference_token == "0") 8991 result = &result->operator[](0); 8996 result = &result->operator[](reference_token); 9001 case value_t::object: 9004 result = &result->operator[](reference_token); 9008 case value_t::array: 9011 result = &result->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9024 throw std::domain_error( "invalid value to unflatten"); 9047 for ( const auto& reference_token : reference_tokens) 9049 switch (ptr->m_type) 9051 case value_t::object: 9054 ptr = &ptr->operator[](reference_token); 9058 case value_t::array: 9061 if (reference_token.size() > 1 and reference_token[0] == '0') 9063 throw std::domain_error( "array index must not begin with '0'"); 9066 if (reference_token == "-") 9069 ptr = &ptr->operator[](ptr->m_value.array->size()); 9074 ptr = &ptr->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9081 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9091 for ( const auto& reference_token : reference_tokens) 9093 switch (ptr->m_type) 9095 case value_t::object: 9098 ptr = &ptr-> at(reference_token); 9102 case value_t::array: 9104 if (reference_token == "-") 9107 throw std::out_of_range( "array index '-' (" + 9108 std::to_string(ptr->m_value.array->size()) + 9109 ") is out of range"); 9113 if (reference_token.size() > 1 and reference_token[0] == '0') 9115 throw std::domain_error( "array index must not begin with '0'"); 9119 ptr = &ptr->at(static_cast<size_t>(std::stoi(reference_token))); 9125 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9143 for ( const auto& reference_token : reference_tokens) 9145 switch (ptr->m_type) 9147 case value_t::object: 9150 ptr = &ptr->operator[](reference_token); 9154 case value_t::array: 9156 if (reference_token == "-") 9159 throw std::out_of_range( "array index '-' (" + 9160 std::to_string(ptr->m_value.array->size()) + 9161 ") is out of range"); 9165 if (reference_token.size() > 1 and reference_token[0] == '0') 9167 throw std::domain_error( "array index must not begin with '0'"); 9171 ptr = &ptr->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9177 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9187 for ( const auto& reference_token : reference_tokens) 9189 switch (ptr->m_type) 9191 case value_t::object: 9194 ptr = &ptr-> at(reference_token); 9198 case value_t::array: 9200 if (reference_token == "-") 9203 throw std::out_of_range( "array index '-' (" + 9204 std::to_string(ptr->m_value.array->size()) + 9205 ") is out of range"); 9209 if (reference_token.size() > 1 and reference_token[0] == '0') 9211 throw std::domain_error( "array index must not begin with '0'"); 9215 ptr = &ptr->at(static_cast<size_t>(std::stoi(reference_token))); 9221 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9230 std::vector<std::string> split(std::string reference_string) 9232 std::vector<std::string> result; 9235 if (reference_string.empty()) 9241 if (reference_string[0] != '/') 9243 throw std::domain_error( "JSON pointer must be empty or begin with '/'"); 9251 size_t slash = reference_string.find_first_of( "/", 1), 9260 slash = reference_string.find_first_of( "/", start)) 9264 auto reference_token = reference_string.substr(start, slash - start); 9267 for ( size_t pos = reference_token.find_first_of( "~"); 9268 pos != std::string::npos; 9269 pos = reference_token.find_first_of( "~", pos + 1)) 9271 assert(reference_token[pos] == '~'); 9274 if (pos == reference_token.size() - 1 or 9275 (reference_token[pos + 1] != '0' and 9276 reference_token[pos + 1] != '1')) 9278 throw std::domain_error( "escape error: '~' must be followed with '0' or '1'"); 9283 replace_substring(reference_token, "~1", "/"); 9285 replace_substring(reference_token, "~0", "~"); 9288 result.push_back(reference_token); 9309 static void replace_substring(std::string& s, 9310 const std::string& f, 9311 const std::string& t) 9313 assert(not f.empty()); 9316 size_t pos = s.find(f); 9317 pos != std::string::npos; 9318 s.replace(pos, f.size(), t), 9319 pos = s.find(f, pos + t.size()) 9330 static void flatten( const std::string reference_string, 9331 const basic_json& value, 9334 switch (value.m_type) 9336 case value_t::array: 9338 if (value.m_value.array->empty()) 9341 result[reference_string] = nullptr; 9346 for ( size_t i = 0; i < value.m_value.array->size(); ++i) 9348 flatten(reference_string + "/" + std::to_string(i), 9349 value.m_value.array->operator[](i), result); 9355 case value_t::object: 9357 if (value.m_value.object->empty()) 9360 result[reference_string] = nullptr; 9365 for ( const auto& element : *value.m_value.object) 9368 std::string key(element.first); 9369 replace_substring(key, "~", "~0"); 9370 replace_substring(key, "/", "~1"); 9372 flatten(reference_string + "/" + key, 9373 element.second, result); 9382 result[reference_string] = value; 9393 static basic_json unflatten( const basic_json& value) 9397 throw std::domain_error( "only objects can be unflattened"); 9403 for ( const auto& element : *value.m_value.object) 9405 if (not element.second.is_primitive()) 9407 throw std::domain_error( "values in object must be primitive"); 9415 json_pointer(element.first).get_and_create(result) = element.second; 9423 const std::vector<std::string> reference_tokens {}; 9457 basic_json result(value_t::object); 9458 json_pointer::flatten( "", * this, result); 9491 return json_pointer::unflatten(* this); 9529 is_nothrow_move_constructible<nlohmann::json>::value and 9530 is_nothrow_move_assignable<nlohmann::json>::value 9548 const auto& h = hash<nlohmann::json::string_t>(); 9566 inline nlohmann::json operator "" _json( const char* s, std::size_t) 9582 #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) 9583 #pragma GCC diagnostic pop const_iterator(pointer object) noexcept constructor for a given JSON instance
+ 29 #ifndef NLOHMANN_JSON_HPP 30 #define NLOHMANN_JSON_HPP 42 #include <initializer_list> 52 #include <type_traits> 57 #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) 58 #pragma GCC diagnostic push 59 #pragma GCC diagnostic ignored "-Wfloat-equal" 82 struct has_mapped_type 85 template< typename C> static char test( typename C::mapped_type*); 86 template< typename C> static char (&test(...))[2]; 88 static constexpr bool value = sizeof(test<T>(0)) == 1; 95 class DecimalSeparator : public std::numpunct<char> 98 char do_decimal_point() const 178 template< typename U, typename V, typename... Args> class ObjectType = std::map, 179 template< typename U, typename... Args> class ArrayType = std::vector, 180 class StringType = std::string, 181 class BooleanType = bool, 182 class NumberIntegerType = std::int64_t, 183 class NumberUnsignedType = std::uint64_t, 184 class NumberFloatType = double, 185 template< typename U> class AllocatorType = std::allocator 229 using pointer = typename std::allocator_traits<allocator_type>::pointer; 231 using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer; 343 using object_t = ObjectType<StringType, 345 std::less<StringType>, 346 AllocatorType<std::pair< const StringType, 393 using array_t = ArrayType<basic_json, AllocatorType<basic_json>>; 735 uint16_t has_exp : 1; 737 uint16_t exp_plus : 1; 739 uint16_t exp_cap : 1; 741 uint16_t precision : 8; 748 return static_cast<value_t>(bits.type); 752 bool operator==( const value_t& rhs) const 754 return static_cast<value_t>(bits.type) == rhs; 758 type_data_t& operator=( value_t rhs) 760 bits.type = static_cast<uint16_t >(rhs); 765 type_data_t( value_t t) noexcept 767 * reinterpret_cast<uint16_t* >( this) = 0; 768 bits.type = static_cast<uint16_t >(t); 772 type_data_t() noexcept 775 bits.type = reinterpret_cast<uint16_t >(value_t::null); 780 template< typename T, typename... Args> 781 static T* create(Args&& ... args) 783 AllocatorType<T> alloc; 784 auto deleter = [&](T * object) 786 alloc.deallocate( object, 1); 788 std::unique_ptr<T, decltype(deleter)> object(alloc.allocate(1), deleter); 789 alloc.construct( object. get(), std::forward<Args>(args)...); 790 return object.release(); 822 json_value() = default; 824 json_value( boolean_t v) noexcept : boolean(v) {} 836 case value_t::object: 838 object = create<object_t>(); 844 array = create<array_t>(); 848 case value_t::string: 850 string = create<string_t>( ""); 854 case value_t::boolean: 860 case value_t::number_integer: 866 case value_t::number_unsigned: 872 case value_t::number_float: 888 string = create<string_t>(value); 894 object = create<object_t>(value); 898 json_value( const array_t& value) 900 array = create<array_t>(value); 983 using parser_callback_t = std::function<bool(int depth, parse_event_t event, basic_json& parsed)>; 1033 : m_type(value_type), m_value(value_type) 1060 basic_json() = default; 1108 : m_type( value_t::object), m_value(val) 1137 template < class CompatibleObjectType, typename 1139 std::is_constructible<typename object_t::key_type, typename CompatibleObjectType::key_type>::value and 1140 std::is_constructible<basic_json, typename CompatibleObjectType::mapped_type>::value, int>::type 1147 m_value.object = create<object_t>(begin(val), end(val)); 1170 : m_type( value_t::array), m_value(val) 1199 template < class CompatibleArrayType, typename 1201 not std::is_same<CompatibleArrayType, typename basic_json_t::iterator>::value and 1202 not std::is_same<CompatibleArrayType, typename basic_json_t::const_iterator>::value and 1203 not std::is_same<CompatibleArrayType, typename basic_json_t::reverse_iterator>::value and 1204 not std::is_same<CompatibleArrayType, typename basic_json_t::const_reverse_iterator>::value and 1205 not std::is_same<CompatibleArrayType, typename array_t::iterator>::value and 1206 not std::is_same<CompatibleArrayType, typename array_t::const_iterator>::value and 1207 std::is_constructible<basic_json, typename CompatibleArrayType::value_type>::value, int>::type 1214 m_value.array = create<array_t>(begin(val), end(val)); 1239 : m_type( value_t::string), m_value(val) 1289 template < class CompatibleStringType, typename 1291 std::is_constructible<string_t, CompatibleStringType>::value, int>::type 1312 : m_type(value_t::boolean), m_value(val) 1338 template< typename T, 1339 typename std::enable_if< 1340 not (std::is_same<T, int>::value) 1341 and std::is_same<T, number_integer_t>::value 1345 : m_type(value_t::number_integer), m_value(val) 1374 : m_type(value_t::number_integer), 1375 m_value(static_cast<number_integer_t>(val)) 1403 template< typename CompatibleNumberIntegerType, typename 1405 std::is_constructible<number_integer_t, CompatibleNumberIntegerType>::value and 1406 std::numeric_limits<CompatibleNumberIntegerType>::is_integer and 1407 std::numeric_limits<CompatibleNumberIntegerType>::is_signed, 1408 CompatibleNumberIntegerType>::type 1411 : m_type(value_t::number_integer), 1412 m_value(static_cast<number_integer_t>(val)) 1432 template< typename T, 1433 typename std::enable_if< 1434 not (std::is_same<T, int>::value) 1435 and std::is_same<T, number_unsigned_t>::value 1439 : m_type(value_t::number_unsigned), m_value(val) 1462 template < typename CompatibleNumberUnsignedType, typename 1464 std::is_constructible<number_unsigned_t, CompatibleNumberUnsignedType>::value and 1465 std::numeric_limits<CompatibleNumberUnsignedType>::is_integer and 1466 !std::numeric_limits<CompatibleNumberUnsignedType>::is_signed, 1467 CompatibleNumberUnsignedType >::type 1470 : m_type(value_t::number_unsigned), 1471 m_value(static_cast<number_unsigned_t>(val)) 1499 : m_type(value_t::number_float), m_value(val) 1502 if (not std::isfinite(val)) 1504 m_type = value_t::null; 1505 m_value = json_value(); 1539 template< typename CompatibleNumberFloatType, typename = typename 1541 std::is_constructible<number_float_t, CompatibleNumberFloatType>::value and 1542 std::is_floating_point<CompatibleNumberFloatType>::value>::type 1618 bool type_deduction = true, 1619 value_t manual_type = value_t::array) 1622 bool is_an_object = true; 1626 for ( const auto& element : init) 1628 if (not element.is_array() or element.size() != 2 1629 or not element[0].is_string()) 1633 is_an_object = false; 1639 if (not type_deduction) 1642 if (manual_type == value_t::array) 1644 is_an_object = false; 1648 if (manual_type == value_t::object and not is_an_object) 1650 throw std::domain_error( "cannot create object from initializer list"); 1657 m_type = value_t::object; 1658 m_value = value_t::object; 1660 assert(m_value.object != nullptr); 1662 for ( auto& element : init) 1664 m_value.object->emplace(*(element[0].m_value.string), element[1]); 1670 m_type = value_t::array; 1671 m_value.array = create<array_t>(init); 1709 static basic_json array(std::initializer_list<basic_json> init = 1710 std::initializer_list<basic_json>()) 1712 return basic_json(init, false, value_t::array); 1749 static basic_json object(std::initializer_list<basic_json> init = 1750 std::initializer_list<basic_json>()) 1752 return basic_json(init, false, value_t::object); 1776 m_value.array = create<array_t>(cnt, val); 1813 template < class InputIT, typename 1815 std::is_same<InputIT, typename basic_json_t::iterator>::value or 1816 std::is_same<InputIT, typename basic_json_t::const_iterator>::value 1819 basic_json(InputIT first, InputIT last) : m_type(first.m_object->m_type) 1822 if (first.m_object != last.m_object) 1824 throw std::domain_error( "iterators are not compatible"); 1830 case value_t::boolean: 1831 case value_t::number_float: 1832 case value_t::number_integer: 1833 case value_t::number_unsigned: 1834 case value_t::string: 1836 if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()) 1838 throw std::out_of_range( "iterators out of range"); 1851 case value_t::number_integer: 1853 assert(first.m_object != nullptr); 1854 m_value.number_integer = first.m_object->m_value.number_integer; 1858 case value_t::number_unsigned: 1860 assert(first.m_object != nullptr); 1861 m_value.number_unsigned = first.m_object->m_value.number_unsigned; 1865 case value_t::number_float: 1867 assert(first.m_object != nullptr); 1868 m_value.number_float = first.m_object->m_value.number_float; 1872 case value_t::boolean: 1874 assert(first.m_object != nullptr); 1875 m_value.boolean = first.m_object->m_value.boolean; 1879 case value_t::string: 1881 assert(first.m_object != nullptr); 1882 m_value = *first.m_object->m_value.string; 1886 case value_t::object: 1888 m_value.object = create<object_t>(first.m_it.object_iterator, last.m_it.object_iterator); 1892 case value_t::array: 1894 m_value.array = create<array_t>(first.m_it.array_iterator, last.m_it.array_iterator); 1900 assert(first.m_object != nullptr); 1901 throw std::domain_error( "cannot use construct with iterators from " + first.m_object->type_name()); 1928 * this = parser(i, cb).parse(); 1958 : m_type(other.m_type) 1962 case value_t::object: 1964 assert(other.m_value.object != nullptr); 1965 m_value = *other.m_value.object; 1969 case value_t::array: 1971 assert(other.m_value.array != nullptr); 1972 m_value = *other.m_value.array; 1976 case value_t::string: 1978 assert(other.m_value.string != nullptr); 1979 m_value = *other.m_value.string; 1983 case value_t::boolean: 1985 m_value = other.m_value.boolean; 1989 case value_t::number_integer: 1991 m_value = other.m_value.number_integer; 1995 case value_t::number_unsigned: 1997 m_value = other.m_value.number_unsigned; 2001 case value_t::number_float: 2003 m_value = other.m_value.number_float; 2033 : m_type( std::move(other.m_type)), 2034 m_value( std::move(other.m_value)) 2037 other.m_type = value_t::null; 2065 std::is_nothrow_move_constructible<value_t>::value and 2066 std::is_nothrow_move_assignable<value_t>::value and 2067 std::is_nothrow_move_constructible<json_value>::value and 2068 std::is_nothrow_move_assignable<json_value>::value 2072 swap(m_type, other.m_type); 2073 swap(m_value, other.m_value); 2096 case value_t::object: 2098 AllocatorType<object_t> alloc; 2099 alloc.destroy(m_value.object); 2100 alloc.deallocate(m_value.object, 1); 2104 case value_t::array: 2106 AllocatorType<array_t> alloc; 2107 alloc.destroy(m_value.array); 2108 alloc.deallocate(m_value.array, 1); 2112 case value_t::string: 2114 AllocatorType<string_t> alloc; 2115 alloc.destroy(m_value.string); 2116 alloc.deallocate(m_value.string, 1); 2163 std::stringstream ss; 2167 dump(ss, true, static_cast<unsigned int>(indent)); 2227 return is_null() or is_string() or is_boolean() or is_number(); 2254 return is_array() or is_object(); 2276 return m_type == value_t::null; 2298 return m_type == value_t::boolean; 2328 return is_number_integer() or is_number_float(); 2357 return m_type == value_t::number_integer or m_type == value_t::number_unsigned; 2385 return m_type == value_t::number_unsigned; 2413 return m_type == value_t::number_float; 2435 return m_type == value_t::object; 2457 return m_type == value_t::array; 2479 return m_type == value_t::string; 2506 return m_type == value_t::discarded; 2540 template < class T, typename 2542 std::is_convertible<typename object_t::key_type, typename T::key_type>::value and 2543 std::is_convertible<basic_json_t, typename T::mapped_type>::value 2545 T get_impl(T*) const 2549 assert(m_value.object != nullptr); 2550 return T(m_value.object->begin(), m_value.object->end()); 2554 throw std::domain_error( "type must be object, but is " + type_name()); 2563 assert(m_value.object != nullptr); 2564 return *(m_value.object); 2568 throw std::domain_error( "type must be object, but is " + type_name()); 2573 template < class T, typename 2575 std::is_convertible<basic_json_t, typename T::value_type>::value and 2576 not std::is_same<basic_json_t, typename T::value_type>::value and 2577 not std::is_arithmetic<T>::value and 2578 not std::is_convertible<std::string, T>::value and 2579 not has_mapped_type<T>::value 2581 T get_impl(T*) const 2586 assert(m_value.array != nullptr); 2587 std::transform(m_value.array->begin(), m_value.array->end(), 2588 std::inserter(to_vector, to_vector.end()), [](basic_json i) 2590 return i. get< typename T::value_type>(); 2596 throw std::domain_error( "type must be array, but is " + type_name()); 2601 template < class T, typename 2603 std::is_convertible<basic_json_t, T>::value and 2604 not std::is_same<basic_json_t, T>::value 2606 std::vector<T> get_impl(std::vector<T>*) const 2610 std::vector<T> to_vector; 2611 assert(m_value.array != nullptr); 2612 to_vector.reserve(m_value.array->size()); 2613 std::transform(m_value.array->begin(), m_value.array->end(), 2614 std::inserter(to_vector, to_vector.end()), [](basic_json i) 2622 throw std::domain_error( "type must be array, but is " + type_name()); 2627 template < class T, typename 2629 std::is_same<basic_json, typename T::value_type>::value and 2630 not has_mapped_type<T>::value 2632 T get_impl(T*) const 2636 assert(m_value.array != nullptr); 2637 return T(m_value.array->begin(), m_value.array->end()); 2641 throw std::domain_error( "type must be array, but is " + type_name()); 2650 assert(m_value.array != nullptr); 2651 return *(m_value.array); 2655 throw std::domain_error( "type must be array, but is " + type_name()); 2660 template < typename T, typename 2662 std::is_convertible<string_t, T>::value 2664 T get_impl(T*) const 2668 assert(m_value.string != nullptr); 2669 return *m_value.string; 2673 throw std::domain_error( "type must be string, but is " + type_name()); 2678 template< typename T, typename 2680 std::is_arithmetic<T>::value 2682 T get_impl(T*) const 2686 case value_t::number_integer: 2688 return static_cast<T >(m_value.number_integer); 2691 case value_t::number_unsigned: 2693 return static_cast<T >(m_value.number_unsigned); 2696 case value_t::number_float: 2698 return static_cast<T >(m_value.number_float); 2703 throw std::domain_error( "type must be number, but is " + type_name()); 2713 : throw std::domain_error( "type must be boolean, but is " + type_name()); 2719 return is_object() ? m_value.object : nullptr; 2725 return is_object() ? m_value.object : nullptr; 2731 return is_array() ? m_value.array : nullptr; 2735 constexpr const array_t* get_impl_ptr( const array_t*) const noexcept 2737 return is_array() ? m_value.array : nullptr; 2743 return is_string() ? m_value.string : nullptr; 2749 return is_string() ? m_value.string : nullptr; 2755 return is_boolean() ? &m_value.boolean : nullptr; 2761 return is_boolean() ? &m_value.boolean : nullptr; 2767 return is_number_integer() ? &m_value.number_integer : nullptr; 2773 return is_number_integer() ? &m_value.number_integer : nullptr; 2779 return is_number_unsigned() ? &m_value.number_unsigned : nullptr; 2785 return is_number_unsigned() ? &m_value.number_unsigned : nullptr; 2791 return is_number_float() ? &m_value.number_float : nullptr; 2797 return is_number_float() ? &m_value.number_float : nullptr; 2811 template< typename ReferenceType, typename ThisType> 2812 static ReferenceType get_ref_impl(ThisType& obj) 2815 using PointerType = typename std::add_pointer<ReferenceType>::type; 2816 auto ptr = obj.template get_ptr<PointerType>(); 2824 throw std::domain_error( "incompatible ReferenceType for get_ref, actual type is " + 2867 template< typename ValueType, typename 2869 not std::is_pointer<ValueType>::value 2871 ValueType get() const 2873 return get_impl(static_cast<ValueType*>( nullptr)); 2902 template< typename PointerType, typename 2904 std::is_pointer<PointerType>::value 2906 PointerType get() noexcept 2909 return get_ptr<PointerType>(); 2916 template< typename PointerType, typename 2918 std::is_pointer<PointerType>::value 2920 constexpr const PointerType get() const noexcept 2923 return get_ptr<PointerType>(); 2951 template< typename PointerType, typename 2953 std::is_pointer<PointerType>::value 2958 return get_impl_ptr(static_cast<PointerType>( nullptr)); 2965 template< typename PointerType, typename 2967 std::is_pointer<PointerType>::value 2968 and std::is_const<typename std::remove_pointer<PointerType>::type>::value 2970 constexpr const PointerType get_ptr() const noexcept 2973 return get_impl_ptr(static_cast<const PointerType>( nullptr)); 3002 template< typename ReferenceType, typename 3004 std::is_reference<ReferenceType>::value 3009 return get_ref_impl<ReferenceType>(*this); 3016 template< typename ReferenceType, typename 3018 std::is_reference<ReferenceType>::value 3019 and std::is_const<typename std::remove_reference<ReferenceType>::type>::value 3024 return get_ref_impl<ReferenceType>(*this); 3055 template < typename ValueType, typename 3057 not std::is_pointer<ValueType>::value 3058 and not std::is_same<ValueType, typename string_t::value_type>::value 3059 #ifndef _MSC_VER // Fix for issue #167 operator<< abiguity under VS2015 3060 and not std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>::value 3063 operator ValueType() const 3066 return get<ValueType>(); 3108 assert(m_value.array != nullptr); 3109 return m_value.array->at(idx); 3111 catch (std::out_of_range&) 3114 throw std::out_of_range( "array index " + std::to_string(idx) + " is out of range"); 3119 throw std::domain_error( "cannot use at() with " + type_name()); 3152 assert(m_value.array != nullptr); 3153 return m_value.array->at(idx); 3155 catch (std::out_of_range&) 3158 throw std::out_of_range( "array index " + std::to_string(idx) + " is out of range"); 3163 throw std::domain_error( "cannot use at() with " + type_name()); 3200 assert(m_value.object != nullptr); 3201 return m_value.object->at(key); 3203 catch (std::out_of_range&) 3206 throw std::out_of_range( "key '" + key + "' not found"); 3211 throw std::domain_error( "cannot use at() with " + type_name()); 3248 assert(m_value.object != nullptr); 3249 return m_value.object->at(key); 3251 catch (std::out_of_range&) 3254 throw std::out_of_range( "key '" + key + "' not found"); 3259 throw std::domain_error( "cannot use at() with " + type_name()); 3293 m_type = value_t::array; 3294 m_value. array = create<array_t>(); 3301 assert(m_value.array != nullptr); 3302 for ( size_t i = m_value.array->size(); i <= idx; ++i) 3304 m_value.array->push_back(basic_json()); 3307 return m_value.array->operator[](idx); 3311 throw std::domain_error( "cannot use operator[] with " + type_name()); 3339 assert(m_value.array != nullptr); 3340 return m_value.array->operator[](idx); 3344 throw std::domain_error( "cannot use operator[] with " + type_name()); 3380 m_type = value_t::object; 3381 m_value. object = create<object_t>(); 3387 assert(m_value.object != nullptr); 3388 return m_value.object->operator[](key); 3392 throw std::domain_error( "cannot use operator[] with " + type_name()); 3428 assert(m_value.object != nullptr); 3429 assert(m_value.object->find(key) != m_value.object->end()); 3430 return m_value.object->find(key)->second; 3434 throw std::domain_error( "cannot use operator[] with " + type_name()); 3465 template< typename T, std:: size_t n> 3468 return operator[](static_cast<const T>(key)); 3500 template< typename T, std:: size_t n> 3503 return operator[](static_cast<const T>(key)); 3533 template< typename T> 3539 m_type = value_t::object; 3540 m_value = value_t::object; 3546 assert(m_value.object != nullptr); 3547 return m_value.object->operator[](key); 3551 throw std::domain_error( "cannot use operator[] with " + type_name()); 3582 template< typename T> 3588 assert(m_value.object != nullptr); 3589 assert(m_value.object->find(key) != m_value.object->end()); 3590 return m_value.object->find(key)->second; 3594 throw std::domain_error( "cannot use operator[] with " + type_name()); 3633 return ptr.get_unchecked( this); 3660 return ptr.get_unchecked( this); 3685 return ptr.get_checked( this); 3710 return ptr.get_checked( this); 3761 template < class ValueType, typename 3763 std::is_convertible<basic_json_t, ValueType>::value 3765 ValueType value( const typename object_t::key_type& key, ValueType default_value) const 3771 const auto it = find(key); 3778 return default_value; 3783 throw std::domain_error( "cannot use value() with " + type_name()); 3791 string_t value( const typename object_t::key_type& key, const char* default_value) const 3793 return value(key, string_t(default_value)); 3924 template < class InteratorType, typename 3926 std::is_same<InteratorType, typename basic_json_t::iterator>::value or 3927 std::is_same<InteratorType, typename basic_json_t::const_iterator>::value 3933 if ( this != pos.m_object) 3935 throw std::domain_error( "iterator does not fit current value"); 3938 InteratorType result = end(); 3942 case value_t::boolean: 3943 case value_t::number_float: 3944 case value_t::number_integer: 3945 case value_t::number_unsigned: 3946 case value_t::string: 3948 if (not pos.m_it.primitive_iterator.is_begin()) 3950 throw std::out_of_range( "iterator out of range"); 3955 delete m_value.string; 3956 m_value.string = nullptr; 3959 m_type = value_t::null; 3963 case value_t::object: 3965 assert(m_value.object != nullptr); 3966 result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); 3970 case value_t::array: 3972 assert(m_value.array != nullptr); 3973 result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); 3979 throw std::domain_error( "cannot use erase() with " + type_name()); 4032 template < class InteratorType, typename 4034 std::is_same<InteratorType, typename basic_json_t::iterator>::value or 4035 std::is_same<InteratorType, typename basic_json_t::const_iterator>::value 4038 InteratorType erase(InteratorType first, InteratorType last) 4041 if ( this != first.m_object or this != last.m_object) 4043 throw std::domain_error( "iterators do not fit current value"); 4046 InteratorType result = end(); 4050 case value_t::boolean: 4051 case value_t::number_float: 4052 case value_t::number_integer: 4053 case value_t::number_unsigned: 4054 case value_t::string: 4056 if (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end()) 4058 throw std::out_of_range( "iterators out of range"); 4063 delete m_value.string; 4064 m_value.string = nullptr; 4067 m_type = value_t::null; 4071 case value_t::object: 4073 assert(m_value.object != nullptr); 4074 result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, 4075 last.m_it.object_iterator); 4079 case value_t::array: 4081 assert(m_value.array != nullptr); 4082 result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, 4083 last.m_it.array_iterator); 4089 throw std::domain_error( "cannot use erase() with " + type_name()); 4130 assert(m_value.object != nullptr); 4131 return m_value.object->erase(key); 4135 throw std::domain_error( "cannot use erase() with " + type_name()); 4170 throw std::out_of_range( "index out of range"); 4173 assert(m_value.array != nullptr); 4174 m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); 4178 throw std::domain_error( "cannot use erase() with " + type_name()); 4211 auto result = end(); 4215 assert(m_value.object != nullptr); 4216 result.m_it.object_iterator = m_value.object->find(key); 4228 auto result = cend(); 4232 assert(m_value.object != nullptr); 4233 result.m_it.object_iterator = m_value.object->find(key); 4260 assert(not is_object() or m_value.object != nullptr); 4261 return is_object() ? m_value.object->count(key) : 0; 4549 template< typename IteratorType> class iteration_proxy; 4565 return iteration_proxy<iterator>(cont); 4573 return iteration_proxy<const_iterator>(cont); 4629 case value_t::array: 4631 assert(m_value.array != nullptr); 4632 return m_value.array->empty(); 4635 case value_t::object: 4637 assert(m_value.object != nullptr); 4638 return m_value.object->empty(); 4692 case value_t::array: 4694 assert(m_value.array != nullptr); 4695 return m_value.array->size(); 4698 case value_t::object: 4700 assert(m_value.object != nullptr); 4701 return m_value.object->size(); 4752 case value_t::array: 4754 assert(m_value.array != nullptr); 4755 return m_value.array->max_size(); 4758 case value_t::object: 4760 assert(m_value.object != nullptr); 4761 return m_value.object->max_size(); 4811 case value_t::number_integer: 4813 m_value.number_integer = 0; 4817 case value_t::number_unsigned: 4819 m_value.number_unsigned = 0; 4823 case value_t::number_float: 4825 m_value.number_float = 0.0; 4829 case value_t::boolean: 4831 m_value.boolean = false; 4835 case value_t::string: 4837 assert(m_value.string != nullptr); 4838 m_value.string->clear(); 4842 case value_t::array: 4844 assert(m_value.array != nullptr); 4845 m_value.array->clear(); 4849 case value_t::object: 4851 assert(m_value.object != nullptr); 4852 m_value.object->clear(); 4886 if (not(is_null() or is_array())) 4888 throw std::domain_error( "cannot use push_back() with " + type_name()); 4894 m_type = value_t::array; 4895 m_value = value_t::array; 4899 assert(m_value.array != nullptr); 4900 m_value.array->push_back(std::move(val)); 4902 val.m_type = value_t::null; 4911 push_back(std::move(val)); 4922 if (not(is_null() or is_array())) 4924 throw std::domain_error( "cannot use push_back() with " + type_name()); 4930 m_type = value_t::array; 4931 m_value = value_t::array; 4935 assert(m_value.array != nullptr); 4936 m_value.array->push_back(val); 4972 if (not(is_null() or is_object())) 4974 throw std::domain_error( "cannot use push_back() with " + type_name()); 4980 m_type = value_t::object; 4981 m_value = value_t::object; 4985 assert(m_value.object != nullptr); 4986 m_value.object->insert(val); 4996 return operator[](val.first); 5027 if (pos.m_object != this) 5029 throw std::domain_error( "iterator does not fit current value"); 5034 assert(m_value.array != nullptr); 5035 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, val); 5040 throw std::domain_error( "cannot use insert() with " + type_name()); 5050 return insert(pos, val); 5083 if (pos.m_object != this) 5085 throw std::domain_error( "iterator does not fit current value"); 5090 assert(m_value.array != nullptr); 5091 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); 5096 throw std::domain_error( "cannot use insert() with " + type_name()); 5135 throw std::domain_error( "cannot use insert() with " + type_name()); 5139 if (pos.m_object != this) 5141 throw std::domain_error( "iterator does not fit current value"); 5144 if (first.m_object != last.m_object) 5146 throw std::domain_error( "iterators do not fit"); 5149 if (first.m_object == this or last.m_object == this) 5151 throw std::domain_error( "passed iterators may not belong to container"); 5156 assert(m_value.array != nullptr); 5157 result.m_it.array_iterator = m_value.array->insert( 5158 pos.m_it.array_iterator, 5159 first.m_it.array_iterator, 5160 last.m_it.array_iterator); 5193 throw std::domain_error( "cannot use insert() with " + type_name()); 5197 if (pos.m_object != this) 5199 throw std::domain_error( "iterator does not fit current value"); 5204 assert(m_value.array != nullptr); 5205 result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, ilist); 5227 std::is_nothrow_move_constructible<value_t>::value and 5228 std::is_nothrow_move_assignable<value_t>::value and 5229 std::is_nothrow_move_constructible<json_value>::value and 5230 std::is_nothrow_move_assignable<json_value>::value 5233 std::swap(m_type, other.m_type); 5234 std::swap(m_value, other.m_value); 5262 assert(m_value.array != nullptr); 5263 std::swap(*(m_value.array), other); 5267 throw std::domain_error( "cannot use swap() with " + type_name()); 5296 assert(m_value.object != nullptr); 5297 std::swap(*(m_value.object), other); 5301 throw std::domain_error( "cannot use swap() with " + type_name()); 5330 assert(m_value.string != nullptr); 5331 std::swap(*(m_value.string), other); 5335 throw std::domain_error( "cannot use swap() with " + type_name()); 5361 static constexpr std::array<uint8_t, 8> order = {{ 5374 if (lhs == value_t::discarded or rhs == value_t::discarded) 5379 return order[ static_cast<std::size_t >(lhs)] < order[static_cast<std::size_t>(rhs)]; 5408 const auto lhs_type = lhs.type(); 5409 const auto rhs_type = rhs.type(); 5411 if (lhs_type == rhs_type) 5415 case value_t::array: 5417 assert(lhs.m_value.array != nullptr); 5418 assert(rhs.m_value.array != nullptr); 5419 return *lhs.m_value.array == *rhs.m_value.array; 5421 case value_t::object: 5423 assert(lhs.m_value.object != nullptr); 5424 assert(rhs.m_value.object != nullptr); 5425 return *lhs.m_value.object == *rhs.m_value.object; 5431 case value_t::string: 5433 assert(lhs.m_value.string != nullptr); 5434 assert(rhs.m_value.string != nullptr); 5435 return *lhs.m_value.string == *rhs.m_value.string; 5437 case value_t::boolean: 5439 return lhs.m_value.boolean == rhs.m_value.boolean; 5441 case value_t::number_integer: 5443 return lhs.m_value.number_integer == rhs.m_value.number_integer; 5445 case value_t::number_unsigned: 5447 return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; 5449 case value_t::number_float: 5451 return lhs.m_value.number_float == rhs.m_value.number_float; 5459 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float) 5461 return static_cast<number_float_t>(lhs.m_value.number_integer) == rhs.m_value.number_float; 5463 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer) 5465 return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_integer); 5467 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float) 5469 return static_cast<number_float_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_float; 5471 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned) 5473 return lhs.m_value.number_float == static_cast<number_float_t>(rhs.m_value.number_unsigned); 5475 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer) 5477 return static_cast<number_integer_t>(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; 5479 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned) 5481 return lhs.m_value.number_integer == static_cast<number_integer_t>(rhs.m_value.number_unsigned); 5537 return not (lhs == rhs); 5569 return not v.is_null(); 5598 const auto lhs_type = lhs.type(); 5599 const auto rhs_type = rhs.type(); 5601 if (lhs_type == rhs_type) 5605 case value_t::array: 5607 assert(lhs.m_value.array != nullptr); 5608 assert(rhs.m_value.array != nullptr); 5609 return *lhs.m_value.array < *rhs.m_value.array; 5611 case value_t::object: 5613 assert(lhs.m_value.object != nullptr); 5614 assert(rhs.m_value.object != nullptr); 5615 return *lhs.m_value.object < *rhs.m_value.object; 5621 case value_t::string: 5623 assert(lhs.m_value.string != nullptr); 5624 assert(rhs.m_value.string != nullptr); 5625 return *lhs.m_value.string < *rhs.m_value.string; 5627 case value_t::boolean: 5629 return lhs.m_value.boolean < rhs.m_value.boolean; 5631 case value_t::number_integer: 5633 return lhs.m_value.number_integer < rhs.m_value.number_integer; 5635 case value_t::number_unsigned: 5637 return lhs.m_value.number_unsigned < rhs.m_value.number_unsigned; 5639 case value_t::number_float: 5641 return lhs.m_value.number_float < rhs.m_value.number_float; 5649 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_float) 5651 return static_cast<number_float_t>(lhs.m_value.number_integer) < rhs.m_value.number_float; 5653 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_integer) 5655 return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_integer); 5657 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float) 5659 return static_cast<number_float_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_float; 5661 else if (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned) 5663 return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_unsigned); 5665 else if (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned) 5667 return lhs.m_value.number_integer < static_cast<number_integer_t>(rhs.m_value.number_unsigned); 5669 else if (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer) 5671 return static_cast<number_integer_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; 5677 return operator<(lhs_type, rhs_type); 5699 return not (rhs < lhs); 5721 return not (lhs <= rhs); 5743 return not (lhs < rhs); 5778 friend std::ostream& operator<<(std::ostream& o, const basic_json& j) 5781 const bool pretty_print = (o.width() > 0); 5782 const auto indentation = (pretty_print ? o.width() : 0); 5788 j. dump(o, pretty_print, static_cast<unsigned int>(indentation)); 5796 friend std::ostream& operator>>( const basic_json& j, std::ostream& o) 5837 return parser(s, cb). parse(); 5866 return parser(i, cb). parse(); 5874 return parser(i, cb). parse(); 5902 j = parser(i). parse(); 5912 j = parser(i). parse(); 5925 string_t type_name() const noexcept 5931 case value_t::object: 5933 case value_t::array: 5935 case value_t::string: 5937 case value_t::boolean: 5939 case value_t::discarded: 5954 static std::size_t extra_space( const string_t& s) noexcept 5956 std::size_t result = 0; 5958 for ( const auto& c : s) 5977 if (c >= 0x00 and c <= 0x1f) 6005 const auto space = extra_space(s); 6012 string_t result(s.size() + space, '\\'); 6013 std::size_t pos = 0; 6015 for ( const auto& c : s) 6022 result[pos + 1] = '"'; 6038 result[pos + 1] = 'b'; 6046 result[pos + 1] = 'f'; 6054 result[pos + 1] = 'n'; 6062 result[pos + 1] = 'r'; 6070 result[pos + 1] = 't'; 6077 if (c >= 0x00 and c <= 0x1f) 6081 auto hexify = []( const char v) -> char 6083 return (v < 10) ? ( '0' + v) : ( 'a' + v - 10); 6088 { 'u', '0', '0', hexify(c >> 4), hexify(c & 0x0f) 6126 void dump(std::ostream& o, 6127 const bool pretty_print, 6128 const unsigned int indent_step, 6129 const unsigned int current_indent = 0) const 6132 unsigned int new_indent = current_indent; 6136 case value_t::object: 6138 assert(m_value.object != nullptr); 6140 if (m_value.object->empty()) 6151 new_indent += indent_step; 6155 for ( auto i = m_value.object->cbegin(); i != m_value.object->cend(); ++i) 6157 if (i != m_value.object->cbegin()) 6159 o << (pretty_print ? ",\n" : ","); 6161 o << string_t(new_indent, ' ') << "\"" 6162 << escape_string(i->first) << "\":" 6163 << (pretty_print ? " " : ""); 6164 i->second.dump(o, pretty_print, indent_step, new_indent); 6170 new_indent -= indent_step; 6174 o << string_t(new_indent, ' ') + "}"; 6178 case value_t::array: 6180 assert(m_value.array != nullptr); 6182 if (m_value.array->empty()) 6193 new_indent += indent_step; 6197 for ( auto i = m_value.array->cbegin(); i != m_value.array->cend(); ++i) 6199 if (i != m_value.array->cbegin()) 6201 o << (pretty_print ? ",\n" : ","); 6204 i->dump(o, pretty_print, indent_step, new_indent); 6210 new_indent -= indent_step; 6214 o << string_t(new_indent, ' ') << "]"; 6218 case value_t::string: 6220 assert(m_value.string != nullptr); 6221 o << string_t( "\"") << escape_string(*m_value.string) << "\""; 6225 case value_t::boolean: 6227 o << (m_value.boolean ? "true" : "false"); 6231 case value_t::number_integer: 6233 o << m_value.number_integer; 6237 case value_t::number_unsigned: 6239 o << m_value.number_unsigned; 6243 case value_t::number_float: 6246 if (m_type.bits.parsed) 6249 if (m_type.bits.has_exp) 6256 if (m_type.bits.exp_cap) 6258 len = snprintf(buf, sizeof(buf), "%.*E", 6259 m_type.bits.precision, m_value.number_float) + 1; 6263 len = snprintf(buf, sizeof(buf), "%.*e", 6264 m_type.bits.precision, m_value.number_float) + 1; 6268 if (not m_type.bits.exp_plus) 6270 if (len > static_cast<int>( sizeof(buf))) 6274 for ( int i = 0; i < len; i++) 6278 for (; i + 1 < len; i++) 6280 buf[i] = buf[i + 1]; 6291 std::stringstream ss; 6292 ss.imbue(std::locale(std::locale(), new DecimalSeparator)); 6293 ss << std::setprecision(m_type.bits.precision) 6294 << std::fixed << m_value.number_float; 6300 if (m_value.number_float == 0) 6303 o << (std::signbit(m_value.number_float) ? "-0.0" : "0.0"); 6312 std::stringstream ss; 6313 ss.imbue(std::locale(std::locale(), new DecimalSeparator)); 6314 ss << std::setprecision(std::numeric_limits<double>::digits10) 6315 << m_value.number_float; 6322 case value_t::discarded: 6342 type_data_t m_type = value_t::null; 6345 json_value m_value = {}; 6362 class primitive_iterator_t 6366 void set_begin() noexcept 6372 void set_end() noexcept 6378 constexpr bool is_begin() const noexcept 6380 return (m_it == begin_value); 6384 constexpr bool is_end() const noexcept 6386 return (m_it == end_value); 6406 difference_type m_it = std::numeric_limits<std::ptrdiff_t>::denorm_min(); 6416 struct internal_iterator 6419 typename object_t::iterator object_iterator; 6421 typename array_t::iterator array_iterator; 6423 primitive_iterator_t primitive_iterator; 6426 internal_iterator() noexcept 6427 : object_iterator(), array_iterator(), primitive_iterator() 6432 template< typename IteratorType> 6433 class iteration_proxy 6437 class iteration_proxy_internal 6441 IteratorType anchor; 6443 size_t array_index = 0; 6446 explicit iteration_proxy_internal(IteratorType it) noexcept 6451 iteration_proxy_internal& operator*() 6457 iteration_proxy_internal& operator++() 6466 bool operator!= ( const iteration_proxy_internal& o) const 6468 return anchor != o.anchor; 6474 assert(anchor.m_object != nullptr); 6476 switch (anchor.m_object->type()) 6479 case value_t::array: 6481 return std::to_string(array_index); 6485 case value_t::object: 6487 return anchor.key(); 6499 typename IteratorType::reference value() const 6501 return anchor.value(); 6506 typename IteratorType::reference container; 6510 explicit iteration_proxy( typename IteratorType::reference cont) 6515 iteration_proxy_internal begin() noexcept 6517 return iteration_proxy_internal(container.begin()); 6521 iteration_proxy_internal end() noexcept 6523 return iteration_proxy_internal(container.end()); 6541 class const_iterator : public std::iterator<std::random_access_iterator_tag, const basic_json> 6544 friend class basic_json; 6565 assert(m_object != nullptr); 6567 switch (m_object->m_type) 6571 m_it.object_iterator = typename object_t::iterator(); 6577 m_it.array_iterator = typename array_t::iterator(); 6583 m_it.primitive_iterator = primitive_iterator_t(); 6591 : m_object(other.m_object) 6593 assert(m_object != nullptr); 6595 switch (m_object->m_type) 6599 m_it.object_iterator = other.m_it.object_iterator; 6605 m_it.array_iterator = other.m_it.array_iterator; 6611 m_it.primitive_iterator = other.m_it.primitive_iterator; 6619 : m_object(other.m_object), m_it(other.m_it) 6624 std::is_nothrow_move_constructible<pointer>::value and 6625 std::is_nothrow_move_assignable<pointer>::value and 6626 std::is_nothrow_move_constructible<internal_iterator>::value and 6627 std::is_nothrow_move_assignable<internal_iterator>::value 6630 std::swap(m_object, other.m_object); 6631 std::swap(m_it, other.m_it); 6637 void set_begin() noexcept 6639 assert(m_object != nullptr); 6641 switch (m_object->m_type) 6645 assert(m_object->m_value.object != nullptr); 6646 m_it.object_iterator = m_object->m_value.object->begin(); 6652 assert(m_object->m_value.array != nullptr); 6653 m_it.array_iterator = m_object->m_value.array->begin(); 6660 m_it.primitive_iterator.set_end(); 6666 m_it.primitive_iterator.set_begin(); 6673 void set_end() noexcept 6675 assert(m_object != nullptr); 6677 switch (m_object->m_type) 6681 assert(m_object->m_value.object != nullptr); 6682 m_it.object_iterator = m_object->m_value.object->end(); 6688 assert(m_object->m_value.array != nullptr); 6689 m_it.array_iterator = m_object->m_value.array->end(); 6695 m_it.primitive_iterator.set_end(); 6705 assert(m_object != nullptr); 6707 switch (m_object->m_type) 6711 assert(m_object->m_value.object); 6712 assert(m_it.object_iterator != m_object->m_value.object->end()); 6713 return m_it.object_iterator->second; 6718 assert(m_object->m_value.array); 6719 assert(m_it.array_iterator != m_object->m_value.array->end()); 6720 return *m_it.array_iterator; 6725 throw std::out_of_range( "cannot get value"); 6730 if (m_it.primitive_iterator.is_begin()) 6736 throw std::out_of_range( "cannot get value"); 6745 assert(m_object != nullptr); 6747 switch (m_object->m_type) 6751 assert(m_object->m_value.object); 6752 assert(m_it.object_iterator != m_object->m_value.object->end()); 6753 return &(m_it.object_iterator->second); 6758 assert(m_object->m_value.array); 6759 assert(m_it.array_iterator != m_object->m_value.array->end()); 6760 return &*m_it.array_iterator; 6765 if (m_it.primitive_iterator.is_begin()) 6771 throw std::out_of_range( "cannot get value"); 6780 auto result = * this; 6788 assert(m_object != nullptr); 6790 switch (m_object->m_type) 6794 ++m_it.object_iterator; 6800 ++m_it.array_iterator; 6806 ++m_it.primitive_iterator; 6817 auto result = * this; 6825 assert(m_object != nullptr); 6827 switch (m_object->m_type) 6831 --m_it.object_iterator; 6837 --m_it.array_iterator; 6843 --m_it.primitive_iterator; 6855 if (m_object != other.m_object) 6857 throw std::domain_error( "cannot compare iterators of different containers"); 6860 assert(m_object != nullptr); 6862 switch (m_object->m_type) 6866 return (m_it.object_iterator == other.m_it.object_iterator); 6871 return (m_it.array_iterator == other.m_it.array_iterator); 6876 return (m_it.primitive_iterator == other.m_it.primitive_iterator); 6884 return not operator==(other); 6891 if (m_object != other.m_object) 6893 throw std::domain_error( "cannot compare iterators of different containers"); 6896 assert(m_object != nullptr); 6898 switch (m_object->m_type) 6902 throw std::domain_error( "cannot compare order of object iterators"); 6907 return (m_it.array_iterator < other.m_it.array_iterator); 6912 return (m_it.primitive_iterator < other.m_it.primitive_iterator); 6920 return not other.operator < (*this); 6926 return not operator<=(other); 6932 return not operator<(other); 6938 assert(m_object != nullptr); 6940 switch (m_object->m_type) 6944 throw std::domain_error( "cannot use offsets with object iterators"); 6949 m_it.array_iterator += i; 6955 m_it.primitive_iterator += i; 6966 return operator+=(-i); 6972 auto result = * this; 6980 auto result = * this; 6988 assert(m_object != nullptr); 6990 switch (m_object->m_type) 6994 throw std::domain_error( "cannot use offsets with object iterators"); 6999 return m_it.array_iterator - other.m_it.array_iterator; 7004 return m_it.primitive_iterator - other.m_it.primitive_iterator; 7012 assert(m_object != nullptr); 7014 switch (m_object->m_type) 7018 throw std::domain_error( "cannot use operator[] for object iterators"); 7023 return *(m_it.array_iterator + n); 7028 throw std::out_of_range( "cannot get value"); 7033 if (m_it.primitive_iterator == -n) 7039 throw std::out_of_range( "cannot get value"); 7046 typename object_t::key_type key() const 7048 assert(m_object != nullptr); 7050 if (m_object->is_object()) 7052 return m_it.object_iterator->first; 7056 throw std::domain_error( "cannot use key() for non-object iterators"); 7070 internal_iterator m_it = internal_iterator(); 7107 std::is_nothrow_move_constructible<pointer>::value and 7108 std::is_nothrow_move_assignable<pointer>::value and 7109 std::is_nothrow_move_constructible<internal_iterator>::value and 7110 std::is_nothrow_move_assignable<internal_iterator>::value 7113 base_iterator::operator=(other); 7120 return const_cast<reference>(base_iterator::operator*()); 7126 return const_cast<pointer>(base_iterator::operator->()); 7133 base_iterator::operator++(); 7140 base_iterator::operator++(); 7148 base_iterator::operator--(); 7155 base_iterator::operator--(); 7162 base_iterator::operator+=(i); 7169 base_iterator::operator-=(i); 7176 auto result = * this; 7184 auto result = * this; 7192 return base_iterator::operator-(other); 7198 return const_cast<reference>(base_iterator::operator[](n)); 7204 return const_cast<reference>(base_iterator::value()); 7225 template< typename Base> 7247 return base_iterator::operator++(1); 7253 base_iterator::operator++(); 7260 return base_iterator::operator--(1); 7266 base_iterator::operator--(); 7273 base_iterator::operator+=(i); 7280 auto result = * this; 7288 auto result = * this; 7296 return this->base() - other.base(); 7302 return *(this->operator+(n)); 7306 typename object_t::key_type key() const 7308 auto it = --this->base(); 7315 auto it = --this->base(); 7316 return it.operator * (); 7337 enum class token_type 7356 using lexer_char_t = unsigned char; 7359 explicit lexer( const string_t& s) noexcept 7360 : m_stream( nullptr), m_buffer(s) 7362 m_content = reinterpret_cast<const lexer_char_t* >(s.c_str()); 7363 assert(m_content != nullptr); 7364 m_start = m_cursor = m_content; 7365 m_limit = m_content + s.size(); 7369 explicit lexer(std::istream* s) noexcept 7370 : m_stream(s), m_buffer() 7372 assert(m_stream != nullptr); 7373 getline(*m_stream, m_buffer); 7374 m_content = reinterpret_cast<const lexer_char_t* >(m_buffer.c_str()); 7375 assert(m_content != nullptr); 7376 m_start = m_cursor = m_content; 7377 m_limit = m_content + m_buffer.size(); 7384 lexer( const lexer&) = delete; 7385 lexer operator=( const lexer&) = delete; 7402 static string_t to_unicode( const std::size_t codepoint1, 7403 const std::size_t codepoint2 = 0) 7406 std::size_t codepoint = codepoint1; 7409 if (codepoint1 >= 0xD800 and codepoint1 <= 0xDBFF) 7412 if (codepoint2 >= 0xDC00 and codepoint2 <= 0xDFFF) 7426 throw std::invalid_argument( "missing or wrong low surrogate"); 7432 if (codepoint < 0x80) 7435 result.append(1, static_cast<typename string_t::value_type>(codepoint)); 7437 else if (codepoint <= 0x7ff) 7440 result.append(1, static_cast<typename string_t::value_type>(0xC0 | ((codepoint >> 6) & 0x1F))); 7441 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7443 else if (codepoint <= 0xffff) 7446 result.append(1, static_cast<typename string_t::value_type>(0xE0 | ((codepoint >> 12) & 0x0F))); 7447 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F))); 7448 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7450 else if (codepoint <= 0x10ffff) 7453 result.append(1, static_cast<typename string_t::value_type>(0xF0 | ((codepoint >> 18) & 0x07))); 7454 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 12) & 0x3F))); 7455 result.append(1, static_cast<typename string_t::value_type>(0x80 | ((codepoint >> 6) & 0x3F))); 7456 result.append(1, static_cast<typename string_t::value_type>(0x80 | (codepoint & 0x3F))); 7460 throw std::out_of_range( "code points above 0x10FFFF are invalid"); 7467 static std::string token_type_name(token_type t) 7471 case token_type::uninitialized: 7472 return "<uninitialized>"; 7473 case token_type::literal_true: 7474 return "true literal"; 7475 case token_type::literal_false: 7476 return "false literal"; 7477 case token_type::literal_null: 7478 return "null literal"; 7479 case token_type::value_string: 7480 return "string literal"; 7481 case token_type::value_number: 7482 return "number literal"; 7483 case token_type::begin_array: 7485 case token_type::begin_object: 7487 case token_type::end_array: 7489 case token_type::end_object: 7491 case token_type::name_separator: 7493 case token_type::value_separator: 7495 case token_type::parse_error: 7496 return "<parse error>"; 7497 case token_type::end_of_input: 7498 return "end of input"; 7502 return "unknown token"; 7517 token_type scan() noexcept 7524 assert(m_start != nullptr); 7529 unsigned int yyaccept = 0; 7530 static const unsigned char yybm[] = 7532 0, 0, 0, 0, 0, 0, 0, 0, 7533 0, 32, 32, 0, 0, 32, 0, 0, 7534 128, 128, 128, 128, 128, 128, 128, 128, 7535 128, 128, 128, 128, 128, 128, 128, 128, 7536 160, 128, 0, 128, 128, 128, 128, 128, 7537 128, 128, 128, 128, 128, 128, 128, 128, 7538 192, 192, 192, 192, 192, 192, 192, 192, 7539 192, 192, 128, 128, 128, 128, 128, 128, 7540 128, 128, 128, 128, 128, 128, 128, 128, 7541 128, 128, 128, 128, 128, 128, 128, 128, 7542 128, 128, 128, 128, 128, 128, 128, 128, 7543 128, 128, 128, 128, 0, 128, 128, 128, 7544 128, 128, 128, 128, 128, 128, 128, 128, 7545 128, 128, 128, 128, 128, 128, 128, 128, 7546 128, 128, 128, 128, 128, 128, 128, 128, 7547 128, 128, 128, 128, 128, 128, 128, 128, 7548 128, 128, 128, 128, 128, 128, 128, 128, 7549 128, 128, 128, 128, 128, 128, 128, 128, 7550 128, 128, 128, 128, 128, 128, 128, 128, 7551 128, 128, 128, 128, 128, 128, 128, 128, 7552 128, 128, 128, 128, 128, 128, 128, 128, 7553 128, 128, 128, 128, 128, 128, 128, 128, 7554 128, 128, 128, 128, 128, 128, 128, 128, 7555 128, 128, 128, 128, 128, 128, 128, 128, 7556 128, 128, 128, 128, 128, 128, 128, 128, 7557 128, 128, 128, 128, 128, 128, 128, 128, 7558 128, 128, 128, 128, 128, 128, 128, 128, 7559 128, 128, 128, 128, 128, 128, 128, 128, 7560 128, 128, 128, 128, 128, 128, 128, 128, 7561 128, 128, 128, 128, 128, 128, 128, 128, 7562 128, 128, 128, 128, 128, 128, 128, 128, 7563 128, 128, 128, 128, 128, 128, 128, 128, 7565 if ((m_limit - m_cursor) < 5) 7570 if (yybm[0 + yych] & 32) 7572 goto basic_json_parser_6; 7582 goto basic_json_parser_2; 7586 goto basic_json_parser_4; 7588 goto basic_json_parser_9; 7594 goto basic_json_parser_4; 7598 goto basic_json_parser_10; 7600 goto basic_json_parser_12; 7609 goto basic_json_parser_4; 7613 goto basic_json_parser_13; 7615 goto basic_json_parser_15; 7621 goto basic_json_parser_17; 7625 goto basic_json_parser_19; 7627 goto basic_json_parser_4; 7639 goto basic_json_parser_21; 7643 goto basic_json_parser_4; 7645 goto basic_json_parser_23; 7651 goto basic_json_parser_24; 7655 goto basic_json_parser_4; 7657 goto basic_json_parser_25; 7666 goto basic_json_parser_26; 7668 goto basic_json_parser_4; 7674 goto basic_json_parser_28; 7678 goto basic_json_parser_30; 7680 goto basic_json_parser_4; 7684 basic_json_parser_2: 7687 return token_type::end_of_input; 7689 basic_json_parser_4: 7691 basic_json_parser_5: 7693 return token_type::parse_error; 7695 basic_json_parser_6: 7697 if (m_limit <= m_cursor) 7702 if (yybm[0 + yych] & 32) 7704 goto basic_json_parser_6; 7709 basic_json_parser_9: 7711 yych = *(m_marker = ++m_cursor); 7714 goto basic_json_parser_5; 7716 goto basic_json_parser_32; 7717 basic_json_parser_10: 7720 return token_type::value_separator; 7722 basic_json_parser_12: 7726 goto basic_json_parser_5; 7730 goto basic_json_parser_13; 7734 goto basic_json_parser_15; 7736 goto basic_json_parser_5; 7737 basic_json_parser_13: 7739 yych = *(m_marker = ++m_cursor); 7744 goto basic_json_parser_37; 7751 goto basic_json_parser_38; 7755 goto basic_json_parser_38; 7758 basic_json_parser_14: 7760 return token_type::value_number; 7762 basic_json_parser_15: 7764 m_marker = ++m_cursor; 7765 if ((m_limit - m_cursor) < 3) 7770 if (yybm[0 + yych] & 64) 7772 goto basic_json_parser_15; 7778 goto basic_json_parser_37; 7780 goto basic_json_parser_14; 7786 goto basic_json_parser_38; 7790 goto basic_json_parser_38; 7792 goto basic_json_parser_14; 7794 basic_json_parser_17: 7797 return token_type::name_separator; 7799 basic_json_parser_19: 7802 return token_type::begin_array; 7804 basic_json_parser_21: 7807 return token_type::end_array; 7809 basic_json_parser_23: 7811 yych = *(m_marker = ++m_cursor); 7814 goto basic_json_parser_39; 7816 goto basic_json_parser_5; 7817 basic_json_parser_24: 7819 yych = *(m_marker = ++m_cursor); 7822 goto basic_json_parser_40; 7824 goto basic_json_parser_5; 7825 basic_json_parser_25: 7827 yych = *(m_marker = ++m_cursor); 7830 goto basic_json_parser_41; 7832 goto basic_json_parser_5; 7833 basic_json_parser_26: 7836 return token_type::begin_object; 7838 basic_json_parser_28: 7841 return token_type::end_object; 7843 basic_json_parser_30: 7845 yych = *(m_marker = ++m_cursor); 7848 goto basic_json_parser_42; 7850 goto basic_json_parser_5; 7851 basic_json_parser_31: 7853 if (m_limit <= m_cursor) 7858 basic_json_parser_32: 7859 if (yybm[0 + yych] & 128) 7861 goto basic_json_parser_31; 7865 goto basic_json_parser_33; 7869 goto basic_json_parser_34; 7871 goto basic_json_parser_36; 7872 basic_json_parser_33: 7873 m_cursor = m_marker; 7876 goto basic_json_parser_5; 7880 goto basic_json_parser_14; 7882 basic_json_parser_34: 7885 return token_type::value_string; 7887 basic_json_parser_36: 7889 if (m_limit <= m_cursor) 7900 goto basic_json_parser_31; 7904 goto basic_json_parser_33; 7906 goto basic_json_parser_31; 7914 goto basic_json_parser_33; 7916 goto basic_json_parser_31; 7922 goto basic_json_parser_31; 7924 goto basic_json_parser_33; 7934 goto basic_json_parser_31; 7938 goto basic_json_parser_31; 7940 goto basic_json_parser_33; 7948 goto basic_json_parser_31; 7950 goto basic_json_parser_33; 7956 goto basic_json_parser_31; 7960 goto basic_json_parser_43; 7962 goto basic_json_parser_33; 7966 basic_json_parser_37: 7970 goto basic_json_parser_33; 7974 goto basic_json_parser_44; 7976 goto basic_json_parser_33; 7977 basic_json_parser_38: 7983 goto basic_json_parser_46; 7985 goto basic_json_parser_33; 7991 goto basic_json_parser_46; 7995 goto basic_json_parser_33; 7999 goto basic_json_parser_47; 8001 goto basic_json_parser_33; 8003 basic_json_parser_39: 8007 goto basic_json_parser_49; 8009 goto basic_json_parser_33; 8010 basic_json_parser_40: 8014 goto basic_json_parser_50; 8016 goto basic_json_parser_33; 8017 basic_json_parser_41: 8021 goto basic_json_parser_51; 8023 goto basic_json_parser_33; 8024 basic_json_parser_42: 8028 goto basic_json_parser_52; 8030 goto basic_json_parser_33; 8031 basic_json_parser_43: 8033 if (m_limit <= m_cursor) 8042 goto basic_json_parser_33; 8046 goto basic_json_parser_54; 8048 goto basic_json_parser_33; 8054 goto basic_json_parser_54; 8058 goto basic_json_parser_33; 8062 goto basic_json_parser_54; 8064 goto basic_json_parser_33; 8066 basic_json_parser_44: 8068 m_marker = ++m_cursor; 8069 if ((m_limit - m_cursor) < 3) 8078 goto basic_json_parser_14; 8082 goto basic_json_parser_44; 8084 goto basic_json_parser_14; 8090 goto basic_json_parser_38; 8094 goto basic_json_parser_38; 8096 goto basic_json_parser_14; 8098 basic_json_parser_46: 8102 goto basic_json_parser_33; 8106 goto basic_json_parser_33; 8108 basic_json_parser_47: 8110 if (m_limit <= m_cursor) 8117 goto basic_json_parser_14; 8121 goto basic_json_parser_47; 8123 goto basic_json_parser_14; 8124 basic_json_parser_49: 8128 goto basic_json_parser_55; 8130 goto basic_json_parser_33; 8131 basic_json_parser_50: 8135 goto basic_json_parser_56; 8137 goto basic_json_parser_33; 8138 basic_json_parser_51: 8142 goto basic_json_parser_58; 8144 goto basic_json_parser_33; 8145 basic_json_parser_52: 8150 basic_json_parser_54: 8152 if (m_limit <= m_cursor) 8161 goto basic_json_parser_33; 8165 goto basic_json_parser_60; 8167 goto basic_json_parser_33; 8173 goto basic_json_parser_60; 8177 goto basic_json_parser_33; 8181 goto basic_json_parser_60; 8183 goto basic_json_parser_33; 8185 basic_json_parser_55: 8189 goto basic_json_parser_61; 8191 goto basic_json_parser_33; 8192 basic_json_parser_56: 8195 return token_type::literal_null; 8197 basic_json_parser_58: 8200 return token_type::literal_true; 8202 basic_json_parser_60: 8204 if (m_limit <= m_cursor) 8213 goto basic_json_parser_33; 8217 goto basic_json_parser_63; 8219 goto basic_json_parser_33; 8225 goto basic_json_parser_63; 8229 goto basic_json_parser_33; 8233 goto basic_json_parser_63; 8235 goto basic_json_parser_33; 8237 basic_json_parser_61: 8240 return token_type::literal_false; 8242 basic_json_parser_63: 8244 if (m_limit <= m_cursor) 8253 goto basic_json_parser_33; 8257 goto basic_json_parser_31; 8259 goto basic_json_parser_33; 8265 goto basic_json_parser_31; 8269 goto basic_json_parser_33; 8273 goto basic_json_parser_31; 8275 goto basic_json_parser_33; 8282 void yyfill() noexcept 8284 if (m_stream == nullptr or not * m_stream) 8289 const auto offset_start = m_start - m_content; 8290 const auto offset_marker = m_marker - m_start; 8291 const auto offset_cursor = m_cursor - m_start; 8293 m_buffer.erase(0, static_cast<size_t>(offset_start)); 8295 assert(m_stream != nullptr); 8296 std::getline(*m_stream, line); 8297 m_buffer += "\n" + line; 8299 m_content = reinterpret_cast<const lexer_char_t* >(m_buffer.c_str()); 8300 assert(m_content != nullptr); 8301 m_start = m_content; 8302 m_marker = m_start + offset_marker; 8303 m_cursor = m_start + offset_cursor; 8304 m_limit = m_start + m_buffer.size() - 1; 8310 assert(m_start != nullptr); 8311 return string_t(reinterpret_cast<typename string_t::const_pointer>(m_start), 8312 static_cast<size_t>(m_cursor - m_start)); 8339 result.reserve(static_cast<size_t>(m_cursor - m_start - 2)); 8342 for ( const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i) 8398 auto codepoint = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer>(i + 1), 8399 4).c_str(), nullptr, 16); 8402 if (codepoint >= 0xD800 and codepoint <= 0xDBFF) 8405 if ((i + 6 >= m_limit) or * (i + 5) != '\\' or * (i + 6) != 'u') 8407 throw std::invalid_argument( "missing low surrogate"); 8411 auto codepoint2 = std::strtoul(std::string(reinterpret_cast<typename string_t::const_pointer> 8412 (i + 7), 4).c_str(), nullptr, 16); 8413 result += to_unicode(codepoint, codepoint2); 8420 result += to_unicode(codepoint); 8432 result.append(1, static_cast<typename string_t::value_type>(*i)); 8459 long double str_to_float_t( long double* , char** endptr) const 8461 return std::strtold(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8479 double str_to_float_t( double* , char** endptr) const 8481 return std::strtod(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8499 float str_to_float_t( float* , char** endptr) const 8501 return std::strtof(reinterpret_cast<typename string_t::const_pointer>(m_start), endptr); 8531 void get_number(basic_json& result) const 8533 assert(m_start != nullptr); 8535 const lexer::lexer_char_t* curptr = m_start; 8538 result.m_type.bits.parsed = true; 8543 uint8_t found_radix_point = 0; 8544 uint8_t precision = 0; 8558 type = value_t::number_integer; 8559 max = static_cast<uint64_t >(std::numeric_limits<number_integer_t>::max()) + 1; 8564 type = value_t::number_unsigned; 8565 max = static_cast<uint64_t >(std::numeric_limits<number_unsigned_t>::max()); 8573 for (; curptr < m_cursor; curptr++) 8576 if (*curptr < '0' || *curptr > '9') 8581 type = value_t::number_float; 8585 found_radix_point = 0xFF; 8590 type = value_t::number_float; 8591 result.m_type.bits.has_exp = true; 8594 result.m_type.bits.exp_cap = (*curptr == 'E'); 8597 result.m_type.bits.exp_plus = (*(++curptr) == '+'); 8602 if (type != value_t::number_float) 8605 auto temp = value * 10 + *curptr - 0x30; 8608 if (temp < value || temp > max) 8611 type = value_t::number_float; 8624 result.m_type.bits.precision = precision & found_radix_point; 8627 if (type == value_t::number_unsigned) 8629 result.m_value.number_unsigned = value; 8631 else if (type == value_t::number_integer) 8638 result.m_value.number_float = str_to_float_t(static_cast<number_float_t*>( nullptr), NULL); 8642 result.m_type = type; 8647 std::istream* m_stream = nullptr; 8651 const lexer_char_t* m_content = nullptr; 8653 const lexer_char_t* m_start = nullptr; 8655 const lexer_char_t* m_marker = nullptr; 8657 const lexer_char_t* m_cursor = nullptr; 8659 const lexer_char_t* m_limit = nullptr; 8672 : callback(cb), m_lexer(s) 8680 : callback(cb), m_lexer(&_is) 8689 basic_json result = parse_internal( true); 8691 expect(lexer::token_type::end_of_input); 8700 basic_json parse_internal( bool keep) 8702 auto result = basic_json(value_t::discarded); 8706 case lexer::token_type::begin_object: 8708 if (keep and (not callback or (keep = callback(depth++, parse_event_t::object_start, result)))) 8711 result.m_type = value_t::object; 8712 result.m_value = json_value(value_t::object); 8719 if (last_token == lexer::token_type::end_object) 8722 if (keep and callback and not callback(--depth, parse_event_t::object_end, result)) 8724 result = basic_json(value_t::discarded); 8730 unexpect(lexer::token_type::value_separator); 8736 if (last_token == lexer::token_type::value_separator) 8742 expect(lexer::token_type::value_string); 8743 const auto key = m_lexer.get_string(); 8745 bool keep_tag = false; 8751 keep_tag = callback(depth, parse_event_t::key, k); 8761 expect(lexer::token_type::name_separator); 8765 auto value = parse_internal(keep); 8766 if (keep and keep_tag and not value.is_discarded()) 8768 result[key] = std::move(value); 8771 while (last_token == lexer::token_type::value_separator); 8774 expect(lexer::token_type::end_object); 8776 if (keep and callback and not callback(--depth, parse_event_t::object_end, result)) 8778 result = basic_json(value_t::discarded); 8784 case lexer::token_type::begin_array: 8786 if (keep and (not callback or (keep = callback(depth++, parse_event_t::array_start, result)))) 8789 result.m_type = value_t::array; 8790 result.m_value = json_value(value_t::array); 8797 if (last_token == lexer::token_type::end_array) 8800 if (callback and not callback(--depth, parse_event_t::array_end, result)) 8802 result = basic_json(value_t::discarded); 8808 unexpect(lexer::token_type::value_separator); 8814 if (last_token == lexer::token_type::value_separator) 8820 auto value = parse_internal(keep); 8821 if (keep and not value.is_discarded()) 8823 result.push_back(std::move(value)); 8826 while (last_token == lexer::token_type::value_separator); 8829 expect(lexer::token_type::end_array); 8831 if (keep and callback and not callback(--depth, parse_event_t::array_end, result)) 8833 result = basic_json(value_t::discarded); 8839 case lexer::token_type::literal_null: 8842 result.m_type = value_t::null; 8846 case lexer::token_type::value_string: 8848 const auto s = m_lexer.get_string(); 8850 result = basic_json(s); 8854 case lexer::token_type::literal_true: 8857 result.m_type = value_t::boolean; 8858 result.m_value = true; 8862 case lexer::token_type::literal_false: 8865 result.m_type = value_t::boolean; 8866 result.m_value = false; 8870 case lexer::token_type::value_number: 8872 m_lexer.get_number(result); 8880 unexpect(last_token); 8884 if (keep and callback and not callback(depth, parse_event_t::value, result)) 8886 result = basic_json(value_t::discarded); 8892 typename lexer::token_type get_token() noexcept 8894 last_token = m_lexer.scan(); 8898 void expect( typename lexer::token_type t) const 8900 if (t != last_token) 8902 std::string error_msg = "parse error - unexpected "; 8903 error_msg += (last_token == lexer::token_type::parse_error ? ( "'" + m_lexer.get_token() + "'") : 8904 lexer::token_type_name(last_token)); 8905 error_msg += "; expected " + lexer::token_type_name(t); 8906 throw std::invalid_argument(error_msg); 8910 void unexpect( typename lexer::token_type t) const 8912 if (t == last_token) 8914 std::string error_msg = "parse error - unexpected "; 8915 error_msg += (last_token == lexer::token_type::parse_error ? ( "'" + m_lexer.get_token() + "'") : 8916 lexer::token_type_name(last_token)); 8917 throw std::invalid_argument(error_msg); 8927 typename lexer::token_type last_token = lexer::token_type::uninitialized; 8943 friend class basic_json; 8969 : reference_tokens(split(s)) 8982 for ( const auto& reference_token : reference_tokens) 8984 switch (result->m_type) 8988 if (reference_token == "0") 8991 result = &result->operator[](0); 8996 result = &result->operator[](reference_token); 9001 case value_t::object: 9004 result = &result->operator[](reference_token); 9008 case value_t::array: 9011 result = &result->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9024 throw std::domain_error( "invalid value to unflatten"); 9047 for ( const auto& reference_token : reference_tokens) 9049 switch (ptr->m_type) 9051 case value_t::object: 9054 ptr = &ptr->operator[](reference_token); 9058 case value_t::array: 9061 if (reference_token.size() > 1 and reference_token[0] == '0') 9063 throw std::domain_error( "array index must not begin with '0'"); 9066 if (reference_token == "-") 9069 ptr = &ptr->operator[](ptr->m_value.array->size()); 9074 ptr = &ptr->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9081 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9091 for ( const auto& reference_token : reference_tokens) 9093 switch (ptr->m_type) 9095 case value_t::object: 9098 ptr = &ptr-> at(reference_token); 9102 case value_t::array: 9104 if (reference_token == "-") 9107 throw std::out_of_range( "array index '-' (" + 9108 std::to_string(ptr->m_value.array->size()) + 9109 ") is out of range"); 9113 if (reference_token.size() > 1 and reference_token[0] == '0') 9115 throw std::domain_error( "array index must not begin with '0'"); 9119 ptr = &ptr->at(static_cast<size_t>(std::stoi(reference_token))); 9125 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9143 for ( const auto& reference_token : reference_tokens) 9145 switch (ptr->m_type) 9147 case value_t::object: 9150 ptr = &ptr->operator[](reference_token); 9154 case value_t::array: 9156 if (reference_token == "-") 9159 throw std::out_of_range( "array index '-' (" + 9160 std::to_string(ptr->m_value.array->size()) + 9161 ") is out of range"); 9165 if (reference_token.size() > 1 and reference_token[0] == '0') 9167 throw std::domain_error( "array index must not begin with '0'"); 9171 ptr = &ptr->operator[]( static_cast<size_t>(std::stoi(reference_token))); 9177 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9187 for ( const auto& reference_token : reference_tokens) 9189 switch (ptr->m_type) 9191 case value_t::object: 9194 ptr = &ptr-> at(reference_token); 9198 case value_t::array: 9200 if (reference_token == "-") 9203 throw std::out_of_range( "array index '-' (" + 9204 std::to_string(ptr->m_value.array->size()) + 9205 ") is out of range"); 9209 if (reference_token.size() > 1 and reference_token[0] == '0') 9211 throw std::domain_error( "array index must not begin with '0'"); 9215 ptr = &ptr->at(static_cast<size_t>(std::stoi(reference_token))); 9221 throw std::out_of_range( "unresolved reference token '" + reference_token + "'"); 9230 static std::vector<std::string> split(std::string reference_string) 9232 std::vector<std::string> result; 9235 if (reference_string.empty()) 9241 if (reference_string[0] != '/') 9243 throw std::domain_error( "JSON pointer must be empty or begin with '/'"); 9251 size_t slash = reference_string.find_first_of( "/", 1), 9260 slash = reference_string.find_first_of( "/", start)) 9264 auto reference_token = reference_string.substr(start, slash - start); 9267 for ( size_t pos = reference_token.find_first_of( "~"); 9268 pos != std::string::npos; 9269 pos = reference_token.find_first_of( "~", pos + 1)) 9271 assert(reference_token[pos] == '~'); 9274 if (pos == reference_token.size() - 1 or 9275 (reference_token[pos + 1] != '0' and 9276 reference_token[pos + 1] != '1')) 9278 throw std::domain_error( "escape error: '~' must be followed with '0' or '1'"); 9283 replace_substring(reference_token, "~1", "/"); 9285 replace_substring(reference_token, "~0", "~"); 9288 result.push_back(reference_token); 9309 static void replace_substring(std::string& s, 9310 const std::string& f, 9311 const std::string& t) 9313 assert(not f.empty()); 9316 size_t pos = s.find(f); 9317 pos != std::string::npos; 9318 s.replace(pos, f.size(), t), 9319 pos = s.find(f, pos + t.size()) 9330 static void flatten( const std::string reference_string, 9331 const basic_json& value, 9334 switch (value.m_type) 9336 case value_t::array: 9338 if (value.m_value.array->empty()) 9341 result[reference_string] = nullptr; 9346 for ( size_t i = 0; i < value.m_value.array->size(); ++i) 9348 flatten(reference_string + "/" + std::to_string(i), 9349 value.m_value.array->operator[](i), result); 9355 case value_t::object: 9357 if (value.m_value.object->empty()) 9360 result[reference_string] = nullptr; 9365 for ( const auto& element : *value.m_value.object) 9368 std::string key(element.first); 9369 replace_substring(key, "~", "~0"); 9370 replace_substring(key, "/", "~1"); 9372 flatten(reference_string + "/" + key, 9373 element.second, result); 9382 result[reference_string] = value; 9393 static basic_json unflatten( const basic_json& value) 9397 throw std::domain_error( "only objects can be unflattened"); 9403 for ( const auto& element : *value.m_value.object) 9405 if (not element.second.is_primitive()) 9407 throw std::domain_error( "values in object must be primitive"); 9415 json_pointer(element.first).get_and_create(result) = element.second; 9423 const std::vector<std::string> reference_tokens {}; 9457 basic_json result(value_t::object); 9458 json_pointer::flatten( "", * this, result); 9491 return json_pointer::unflatten(* this); 9529 is_nothrow_move_constructible<nlohmann::json>::value and 9530 is_nothrow_move_assignable<nlohmann::json>::value 9548 const auto& h = hash<nlohmann::json::string_t>(); 9566 inline nlohmann::json operator "" _json( const char* s, std::size_t) 9582 #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) 9583 #pragma GCC diagnostic pop const_iterator(pointer object) noexcept constructor for a given JSON instance
friend bool operator<=(const_reference lhs, const_reference rhs) noexcept comparison: less than or equal
basic_json(const value_t value_type) create an empty value with a given type
basic_json(const array_t &val) create an array (explicit)
@@ -306,7 +306,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/namespacemembers.html b/namespacemembers.html
index 981f869f0..8cb5b0527 100644
--- a/namespacemembers.html
+++ b/namespacemembers.html
@@ -94,7 +94,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/namespacemembers_type.html b/namespacemembers_type.html
index 7703ecae9..dd6b8693f 100644
--- a/namespacemembers_type.html
+++ b/namespacemembers_type.html
@@ -94,7 +94,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/namespacenlohmann.html b/namespacenlohmann.html
index 757d0ab36..456f686ef 100644
--- a/namespacenlohmann.html
+++ b/namespacenlohmann.html
@@ -116,7 +116,7 @@ Typedefs |
diff --git a/namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html b/namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html
index 3e1ad0119..77243f34a 100644
--- a/namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html
+++ b/namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html
@@ -108,7 +108,7 @@ Classes
diff --git a/namespacenlohmann_a2bfd99e845a2e5cd90aeaf1b1431f474.html b/namespacenlohmann_a2bfd99e845a2e5cd90aeaf1b1431f474.html
index ceefb5d04..79b9c3981 100644
--- a/namespacenlohmann_a2bfd99e845a2e5cd90aeaf1b1431f474.html
+++ b/namespacenlohmann_a2bfd99e845a2e5cd90aeaf1b1431f474.html
@@ -111,7 +111,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/structstd_1_1hash_3_01nlohmann_1_1json_01_4-members.html b/structstd_1_1hash_3_01nlohmann_1_1json_01_4-members.html
index 042ae143f..65c17fe86 100644
--- a/structstd_1_1hash_3_01nlohmann_1_1json_01_4-members.html
+++ b/structstd_1_1hash_3_01nlohmann_1_1json_01_4-members.html
@@ -98,7 +98,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
diff --git a/structstd_1_1hash_3_01nlohmann_1_1json_01_4.html b/structstd_1_1hash_3_01nlohmann_1_1json_01_4.html
index 04ce959f4..1d08fcbb1 100644
--- a/structstd_1_1hash_3_01nlohmann_1_1json_01_4.html
+++ b/structstd_1_1hash_3_01nlohmann_1_1json_01_4.html
@@ -115,7 +115,7 @@ struct std::hash< nlohmann::json >
diff --git a/structstd_1_1hash_3_01nlohmann_1_1json_01_4_afd03f6ad53db22868ca4163a8200b2f9.html b/structstd_1_1hash_3_01nlohmann_1_1json_01_4_afd03f6ad53db22868ca4163a8200b2f9.html
index 36ee90a21..2871e222b 100644
--- a/structstd_1_1hash_3_01nlohmann_1_1json_01_4_afd03f6ad53db22868ca4163a8200b2f9.html
+++ b/structstd_1_1hash_3_01nlohmann_1_1json_01_4_afd03f6ad53db22868ca4163a8200b2f9.html
@@ -122,7 +122,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');