diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index ad9820fcb..5dfb74b51 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,7 +1,7 @@
# Contribution Guidelines
Thank you for your interest in contributing to this project! What began as an exercise to explore the exciting features
-of C++11 has evolved into a [widely-used](https://json.nlohmann.me/home/customers/) JSON library. I truly appreciate all
+of C++11 has evolved into a [widely used](https://json.nlohmann.me/home/customers/) JSON library. I truly appreciate all
the contributions from the community, whether it's proposing features, identifying bugs, or fixing mistakes! To ensure
that our collaboration is efficient and effective, please follow these guidelines.
@@ -21,7 +21,7 @@ Clearly describe the issue:
- If it is a bug, please describe how to **reproduce** it. If possible, attach a _complete example_ which demonstrates
the error. Please also state what you **expected** to happen instead of the error.
-- If you propose a change or addition, try to give an **example** how the improved code could look like or how to use
+- If you propose a change or addition, try to give an **example** what the improved code could look like or how to use
it.
- If you found a compilation error, please tell us which **compiler** (version and operating system) you used and paste
the (relevant part of) the error messages to the ticket.
@@ -66,21 +66,21 @@ certification that he or she has the right to submit the patch for inclusion int
### Describe your changes
-This library is primarily maintained as a spare-time project. As such, I can not make any guarantee how quickly changes
+This library is primarily maintained as a spare-time project. As such, I cannot make any guarantee how quickly changes
are merged and released. Therefore, it is very important to make the review as smooth as possible by explaining not only
_what_ you changed, but _why_. This rationale can be very valuable down the road when improvements or bugs are discussed
years later.
-### Reference existing issues
+### Reference an existing issue
[Link a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue)
-to clarify that a fix is forthcoming and which issue can be closed after merging. Only few cases (e.g., fixing typos)
-don’t require prior discussions.
+to clarify that a fix is forthcoming and which issue can be closed after merging. Only a few cases (e.g., fixing typos)
+do not require prior discussions.
### Write tests
The library has an extensive test suite that currently covers [100 %](https://coveralls.io/github/nlohmann/json) of the
-library's code. These test are crucial to maintain API stability and give future contributors confidence that they do
+library's code. These tests are crucial to maintain API stability and give future contributors confidence that they do
not accidentally break things. As Titus Winters aptly put it:
> If you liked it, you should have put a test on it.
@@ -118,14 +118,14 @@ exception into account.
#### Coverage
If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code
-coverage report as artifact to the “Ubuntu” workflow.
+coverage report as an artifact to the “Ubuntu” workflow.
### Update the documentation
The [main documentation](https://json.nlohmann.me) of the library is generated from the files
[`docs/mkdocs/docs`](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs). This folder contains dedicated
pages for [certain features](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/features), a list of
-[all exceptions](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs/home/exceptions.md), and an
+[all exceptions](https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs/home/exceptions.md), and
[extensive API documentation](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/api) with details on every
public API function.
@@ -136,7 +136,7 @@ make install_venv -C docs/mkdocs
make serve -C docs/mkdocs
```
-The documentation will then available at . See the documentation of
+The documentation will then be available at . See the documentation of
[mkdocs](https://www.mkdocs.org) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for more
information.
@@ -184,8 +184,8 @@ API of the 3.x.y version is broken. This includes:
Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.
Breaking changes may be introduced when they are guarded with a feature macro such as
-[`JSON_USE_IMPLICIT_CONVERSIONS`](https://json.nlohmann.me/api/macros/json_use_implicit_conversions/) which allows to
-selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using
+[`JSON_USE_IMPLICIT_CONVERSIONS`](https://json.nlohmann.me/api/macros/json_use_implicit_conversions/) which allows
+selectively changing the behavior of the library. In next steps, the current behavior can then be deprecated. Using
feature macros then allows users to test their code against the library in the next major release.
### Break C++11 language conformance
@@ -211,7 +211,7 @@ The following areas really need contribution and are always welcomed:
- Extending the **continuous integration** toward more exotic compilers such as Android NDK, Intel's Compiler, or the
bleeding-edge versions Clang.
- Improving the efficiency of the **JSON parser**. The current parser is implemented as a naive recursive descent parser
- with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That
+ with hand-coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That
said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep
the parser inside the `json.hpp` header, and I am not aware of approaches similar to [`re2c`](http://re2c.org) for
parsing.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 4bb90e753..537095324 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,4 +1,4 @@
-[Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.]
+[Describe your pull request here. Please read the text below the line and make sure you follow the checklist.]
- [ ] The changes are described in detail, both the what and why.
- [ ] If applicable, an [existing issue](https://github.com/nlohmann/json/issues) is referenced.
diff --git a/FILES.md b/FILES.md
index a7a35f7f2..91326ab6a 100644
--- a/FILES.md
+++ b/FILES.md
@@ -92,7 +92,7 @@ Further documentation:
### `.github/dependabot.yml`
-The configuration of [dependabot](https://github.com/dependabot) which ensures the dependencies (GitHub actions and Python packages used in the CI) remain up-to-date.
+The configuration of [dependabot](https://github.com/dependabot) which ensures the dependencies (GitHub actions and Python packages used in the CI) remain up to date.
Further documentation:
@@ -185,7 +185,7 @@ Further documentation:
### `.reuse/dep5`
-The file defines the licenses of certain third-party component in the repository. The root `Makefile` contains a target `reuse` that checks for compliance.
+The file defines the licenses of certain third-party components in the repository. The root `Makefile` contains a target `reuse` that checks for compliance.
Further documentation:
@@ -212,7 +212,7 @@ Further information:
### `LICENSES`
-A folder that contains every license of all licenses files (library and third-party code).
+A folder that contains every license of all license files (library and third-party code).
Further documentation:
diff --git a/README.md b/README.md
index f97afeb41..50d5c8c31 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@
- [Examples](#examples)
- [Read JSON from a file](#read-json-from-a-file)
- [Creating `json` objects from JSON literals](#creating-json-objects-from-json-literals)
- - [JSON as first-class data type](#json-as-first-class-data-type)
+ - [JSON as a first-class data type](#json-as-a-first-class-data-type)
- [Serialization / Deserialization](#serialization--deserialization)
- [STL-like access](#stl-like-access)
- [Conversion from STL containers](#conversion-from-stl-containers)
@@ -57,7 +57,7 @@
There are myriads of [JSON](https://json.org) libraries out there, and each may even have its reason to exist. Our class had these design goals:
-- **Intuitive syntax**. In languages such as Python, JSON feels like a first class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the [examples below](#examples) and you'll know what I mean.
+- **Intuitive syntax**. In languages such as Python, JSON feels like a first-class data type. We used all the operator magic of modern C++ to achieve the same feeling in your code. Check out the [examples below](#examples) and you'll know what I mean.
- **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular [package managers](https://json.nlohmann.me/integration/package_managers/).
@@ -107,7 +107,7 @@ Thanks everyone!
:bug: If you found a **bug**, please check the [**FAQ**](https://json.nlohmann.me/home/faq/) if it is a known issue or the result of a design decision. Please also have a look at the [**issue list**](https://github.com/nlohmann/json/issues) before you [**create a new issue**](https://github.com/nlohmann/json/issues/new/choose). Please provide as much information as possible to help us understand and reproduce your issue.
-There is also a [**docset**](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for the documentation browsers [Dash](https://kapeli.com/dash), [Velocity](https://velocity.silverlakesoftware.com), and [Zeal](https://zealdocs.org) that contains the full [documentation](https://json.nlohmann.me) as offline resource.
+There is also a [**docset**](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for the documentation browsers [Dash](https://kapeli.com/dash), [Velocity](https://velocity.silverlakesoftware.com), and [Zeal](https://zealdocs.org) that contains the full [documentation](https://json.nlohmann.me) as an offline resource.
## Quick reference
@@ -136,7 +136,7 @@ There is also a [**docset**](https://github.com/Kapeli/Dash-User-Contributions/t
Here are some examples to give you an idea how to use the class.
-Beside the examples below, you may want to:
+Besides the examples below, you may want to:
→ Check the [documentation](https://json.nlohmann.me/)\
→ Browse the [standalone example files](https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/examples)\
@@ -195,7 +195,7 @@ json ex3 = {
};
```
-### JSON as first-class data type
+### JSON as a first-class data type
Here are some examples to give you an idea how to use the class.
@@ -224,13 +224,13 @@ With this library, you could write:
// create an empty structure (null)
json j;
-// add a number that is stored as double (note the implicit conversion of j to an object)
+// add a number stored as double (note the implicit conversion of j to an object)
j["pi"] = 3.141;
-// add a Boolean that is stored as bool
+// add a Boolean stored as bool
j["happy"] = true;
-// add a string that is stored as std::string
+// add a string stored as std::string
j["name"] = "Niels";
// add another null object by passing nullptr
@@ -239,7 +239,7 @@ j["nothing"] = nullptr;
// add an object inside the object
j["answer"]["everything"] = 42;
-// add an array that is stored as std::vector (using an initializer list)
+// add an array stored as std::vector (using an initializer list)
j["list"] = { 1, 0, 2 };
// add another object (using an initializer list of pairs)
@@ -349,7 +349,7 @@ std::cout << j_string << " == " << serialized_string << std::endl;
Note the library only supports UTF-8. When you store strings with different encodings in the library, calling [`dump()`](https://json.nlohmann.me/api/basic_json/dump/) may throw an exception unless `json::error_handler_t::replace` or `json::error_handler_t::ignore` are used as error handlers.
-#### To/from streams (e.g. files, string streams)
+#### To/from streams (e.g., files, string streams)
You can also use streams to serialize and deserialize:
@@ -382,7 +382,7 @@ Please note that setting the exception bit for `failbit` is inappropriate for th
#### Read from iterator range
-You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose `value_type` is an integral type of 1, 2 or 4 bytes, which will be interpreted as UTF-8, UTF-16 and UTF-32 respectively. For instance, a `std::vector`, or a `std::list`:
+You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose `value_type` is an integral type of 1, 2, or 4 bytes, which will be interpreted as UTF-8, UTF-16, and UTF-32 respectively. For instance, a `std::vector`, or a `std::list`:
```cpp
std::vector v = {'t', 'r', 'u', 'e'};
@@ -486,7 +486,7 @@ To implement your own SAX handler, proceed as follows:
2. Create an object of your SAX interface class, e.g. `my_sax`.
3. Call `bool json::sax_parse(input, &my_sax)`; where the first parameter can be any input like a string or an input stream and the second parameter is a pointer to your SAX interface.
-Note the `sax_parse` function only returns a `bool` indicating the result of the last executed SAX event. It does not return a `json` value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error - it is up to you what to do with the exception object passed to your `parse_error` implementation. Internally, the SAX interface is used for the DOM parser (class `json_sax_dom_parser`) as well as the acceptor (`json_sax_acceptor`), see file [`json_sax.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/detail/input/json_sax.hpp).
+Note the `sax_parse` function only returns a `bool` indicating the result of the last executed SAX event. It does not return a `json` value - it is up to you to decide what to do with the SAX events. Furthermore, no exceptions are thrown in case of a parse error -- it is up to you what to do with the exception object passed to your `parse_error` implementation. Internally, the SAX interface is used for the DOM parser (class `json_sax_dom_parser`) as well as the acceptor (`json_sax_acceptor`), see file [`json_sax.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/detail/input/json_sax.hpp).
### STL-like access
@@ -618,7 +618,7 @@ json j_umset(c_umset); // both entries for "one" are used
// maybe ["one", "two", "one", "four"]
```
-Likewise, any associative key-value containers (`std::map`, `std::multimap`, `std::unordered_map`, `std::unordered_multimap`) whose keys can construct an `std::string` and whose values can be used to construct JSON values (see examples above) can be used to create a JSON object. Note that in case of multimaps only one key is used in the JSON object and the value depends on the internal order of the STL container.
+Likewise, any associative key-value containers (`std::map`, `std::multimap`, `std::unordered_map`, `std::unordered_multimap`) whose keys can construct an `std::string` and whose values can be used to construct JSON values (see examples above) can be used to create a JSON object. Note that in case of multimaps, only one key is used in the JSON object and the value depends on the internal order of the STL container.
```cpp
std::map c_map { {"one", 1}, {"two", 2}, {"three", 3} };
@@ -640,7 +640,7 @@ json j_ummap(c_ummap); // only one entry for key "three" is used
### JSON Pointer and JSON Patch
-The library supports **JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) as alternative means to address structured values. On top of this, **JSON Patch** ([RFC 6902](https://tools.ietf.org/html/rfc6902)) allows describing differences between two JSON values - effectively allowing patch and diff operations known from Unix.
+The library supports **JSON Pointer** ([RFC 6901](https://tools.ietf.org/html/rfc6901)) as an alternative means to address structured values. On top of this, **JSON Patch** ([RFC 6902](https://tools.ietf.org/html/rfc6902)) allows describing differences between two JSON values -- effectively allowing patch and diff operations known from Unix.
```cpp
// a JSON value
@@ -873,7 +873,7 @@ namespace ns {
This requires a bit more advanced technique. But first, let's see how this conversion mechanism works:
-The library uses **JSON Serializers** to convert types to json.
+The library uses **JSON Serializers** to convert types to JSON.
The default serializer for `nlohmann::json` is `nlohmann::adl_serializer` (ADL means [Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)).
It is implemented like this (simplified):
@@ -923,7 +923,7 @@ namespace nlohmann {
#### How can I use `get()` for non-default constructible/non-copyable types?
-There is a way, if your type is [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible). You will need to specialize the `adl_serializer` as well, but with a special `from_json` overload:
+There is a way if your type is [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible). You will need to specialize the `adl_serializer` as well, but with a special `from_json` overload:
```cpp
struct move_only_type {
@@ -1012,7 +1012,7 @@ struct bad_serializer
### Specializing enum conversion
-By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later de-serialized JSON data may be undefined or a different enum value than was originally intended.
+By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be undefined or a different enum value than was originally intended.
It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:
@@ -1168,7 +1168,7 @@ Please note:
The code compiles successfully with [Android NDK](https://developer.android.com/ndk/index.html?hl=ml), Revision 9 - 11 (and possibly later) and [CrystaX's Android NDK](https://www.crystax.net/en/android/ndk) version 10.
-- For GCC running on MinGW or Android SDK, the error `'to_string' is not a member of 'std'` (or similarly, for `strtod` or `strtof`) may occur. Note this is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to [this site](https://tehsausage.com/mingw-to-string) and [this discussion](https://github.com/nlohmann/json/issues/136) for information on how to fix this bug. For Android NDK using `APP_STL := gnustl_static`, please refer to [this discussion](https://github.com/nlohmann/json/issues/219).
+- For GCC running on MinGW or Android SDK, the error `'to_string' is not a member of 'std'` (or similarly, for `strtod` or `strtof`) may occur. Note this is not an issue with the code, but rather with the compiler itself. On Android, see above to build with a newer environment. For MinGW, please refer to [this site](https://tehsausage.com/mingw-to-string) and [this discussion](https://github.com/nlohmann/json/issues/136) for information on how to fix this bug. For Android NDK using `APP_STL := gnustl_static`, please refer to [this discussion](https://github.com/nlohmann/json/issues/219).
- Unsupported versions of GCC and Clang are rejected by `#error` directives. This can be switched off by defining `JSON_SKIP_UNSUPPORTED_COMPILER_CHECK`. Note that you can expect no support in this case.
@@ -1187,7 +1187,7 @@ using json = nlohmann::json;
to the files you want to process JSON and set the necessary switches to enable C++11 (e.g., `-std=c++11` for GCC and Clang).
-You can further use file [`include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json_fwd.hpp) for forward-declarations. The installation of json_fwd.hpp (as part of cmake's install step), can be achieved by setting `-DJSON_MultipleHeaders=ON`.
+You can further use file [`include/nlohmann/json_fwd.hpp`](https://github.com/nlohmann/json/blob/develop/include/nlohmann/json_fwd.hpp) for forward-declarations. The installation of `json_fwd.hpp` (as part of cmake's install step) can be achieved by setting `-DJSON_MultipleHeaders=ON`.
### CMake
@@ -1249,7 +1249,7 @@ FetchContent_MakeAvailable(json)
target_link_libraries(foo PRIVATE nlohmann_json::nlohmann_json)
```
-**Note**: It is recommended to use the URL approach described above which is supported as of version 3.10.0. See
+**Note**: It is recommended to use the URL approach described above, which is supported as of version 3.10.0. See
for more information.
#### Supporting Both
@@ -1371,13 +1371,13 @@ I deeply appreciate the help of the following people.
9. [Florian Weber](https://github.com/Florianjw) fixed a bug in and improved the performance of the comparison operators.
10. [Eric Cornelius](https://github.com/EricMCornelius) pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping.
11. [易思龙](https://github.com/likebeta) implemented a conversion from anonymous enums.
-12. [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual studio.
+12. [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual Studio.
13. [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types.
14. [Caio Luppi](https://github.com/caiovlp) fixed a bug in the Unicode handling.
15. [dariomt](https://github.com/dariomt) fixed some typos in the examples.
16. [Daniel Frey](https://github.com/d-frey) cleaned up some pointers and implemented exception-safe memory allocation.
17. [Colin Hirsch](https://github.com/ColinH) took care of a small namespace issue.
-18. [Huu Nguyen](https://github.com/whoshuu) correct a variable name in the documentation.
+18. [Huu Nguyen](https://github.com/whoshuu) corrected a variable name in the documentation.
19. [Silverweed](https://github.com/silverweed) overloaded `parse()` to accept an rvalue reference.
20. [dariomt](https://github.com/dariomt) fixed a subtlety in MSVC type support and implemented the `get_ref()` function to get a reference to stored values.
21. [ZahlGraf](https://github.com/ZahlGraf) added a workaround that allows compilation using Android NDK.
@@ -1412,7 +1412,7 @@ I deeply appreciate the help of the following people.
50. [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning.
51. [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check.
52. [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one.
-53. [Daniel599](https://github.com/Daniel599) helped to get Travis execute the tests with Clang's sanitizers.
+53. [Daniel599](https://github.com/Daniel599) helped to get Travis to execute the tests with Clang's sanitizers.
54. [Jonathan Lee](https://github.com/vjon) fixed an example in the README file.
55. [gnzlbg](https://github.com/gnzlbg) supported the implementation of user-defined types.
56. [Alexej Harm](https://github.com/qis) helped to get the user-defined types working with Visual Studio.
@@ -1433,7 +1433,7 @@ I deeply appreciate the help of the following people.
71. [Vincent Thiery](https://github.com/vthiery) maintains a package for the Conan package manager.
72. [Steffen](https://github.com/koemeet) fixed a potential issue with MSVC and `std::min`.
73. [Mike Tzou](https://github.com/Chocobo1) fixed some typos.
-74. [amrcode](https://github.com/amrcode) noted a misleading documentation about comparison of floats.
+74. [amrcode](https://github.com/amrcode) noted misleading documentation about comparison of floats.
75. [Oleg Endo](https://github.com/olegendo) reduced the memory consumption by replacing `` with ``.
76. [dan-42](https://github.com/dan-42) cleaned up the CMake files to simplify including/reusing of the library.
77. [Nikita Ofitserov](https://github.com/himikof) allowed for moving values from initializer lists.
@@ -1460,13 +1460,13 @@ I deeply appreciate the help of the following people.
98. [Vadim Evard](https://github.com/Pipeliner) fixed a Markdown issue in the README.
99. [zerodefect](https://github.com/zerodefect) fixed a compiler warning.
100. [Kert](https://github.com/kaidokert) allowed to template the string type in the serialization and added the possibility to override the exceptional behavior.
-101. [mark-99](https://github.com/mark-99) helped fixing an ICC error.
+101. [mark-99](https://github.com/mark-99) helped fix an ICC error.
102. [Patrik Huber](https://github.com/patrikhuber) fixed links in the README file.
103. [johnfb](https://github.com/johnfb) found a bug in the implementation of CBOR's indefinite length strings.
104. [Paul Fultz II](https://github.com/pfultz2) added a note on the cget package manager.
105. [Wilson Lin](https://github.com/wla80) made the integration section of the README more concise.
106. [RalfBielig](https://github.com/ralfbielig) detected and fixed a memory leak in the parser callback.
-107. [agrianius](https://github.com/agrianius) allowed to dump JSON to an alternative string type.
+107. [agrianius](https://github.com/agrianius) allowed dumping JSON to an alternative string type.
108. [Kevin Tonon](https://github.com/ktonon) overworked the C++11 compiler checks in CMake.
109. [Axel Huebl](https://github.com/ax3l) simplified a CMake check and added support for the [Spack package manager](https://spack.io).
110. [Carlos O'Ryan](https://github.com/coryan) fixed a typo.
@@ -1515,12 +1515,12 @@ I deeply appreciate the help of the following people.
153. [Ivor Wanders](https://github.com/iwanders) helped to reduce the CMake requirement to version 3.1.
154. [njlr](https://github.com/njlr) updated the Buckaroo instructions.
155. [Lion](https://github.com/lieff) fixed a compilation issue with GCC 7 on CentOS.
-156. [Isaac Nickaein](https://github.com/nickaein) improved the integer serialization performance and implemented the `contains()` function.
+156. [Isaac Nickaein](https://github.com/nickaein) improved the integer serialization performance and implemented the `contains()` function.
157. [past-due](https://github.com/past-due) suppressed an unfixable warning.
158. [Elvis Oric](https://github.com/elvisoric) improved Meson support.
159. [Matěj Plch](https://github.com/Afforix) fixed an example in the README.
160. [Mark Beckwith](https://github.com/wythe) fixed a typo.
-161. [scinart](https://github.com/scinart) fixed bug in the serializer.
+161. [scinart](https://github.com/scinart) fixed a bug in the serializer.
162. [Patrick Boettcher](https://github.com/pboettch) implemented `push_back()` and `pop_back()` for JSON Pointers.
163. [Bruno Oliveira](https://github.com/nicoddemus) added support for Conda.
164. [Michele Caini](https://github.com/skypjack) fixed links in the README.
@@ -1562,7 +1562,7 @@ I deeply appreciate the help of the following people.
200. [Alexander “weej” Jones](https://github.com/alex-weej) fixed an example in the README.
201. [Antoine Cœur](https://github.com/Coeur) fixed some typos in the documentation.
202. [jothepro](https://github.com/jothepro) updated links to the Hunter package.
-203. [Dave Lee](https://github.com/kastiglione) fixed link in the README.
+203. [Dave Lee](https://github.com/kastiglione) fixed a link in the README.
204. [Joël Lamotte](https://github.com/Klaim) added instruction for using Build2's package manager.
205. [Paul Jurczak](https://github.com/pauljurczak) fixed an example in the README.
206. [Sonu Lohani](https://github.com/sonulohani) fixed a warning.
@@ -1605,7 +1605,7 @@ I deeply appreciate the help of the following people.
243. [raduteo](https://github.com/raduteo) fixed a warning.
244. [David Pfahler](https://github.com/theShmoo) added the possibility to compile the library without I/O support.
245. [Morten Fyhn Amundsen](https://github.com/mortenfyhn) fixed a typo.
-246. [jpl-mac](https://github.com/jpl-mac) allowed to treat the library as a system header in CMake.
+246. [jpl-mac](https://github.com/jpl-mac) allowed treating the library as a system header in CMake.
247. [Jason Dsouza](https://github.com/jasmcaus) fixed the indentation of the CMake file.
248. [offa](https://github.com/offa) added a link to Conan Center to the documentation.
249. [TotalCaesar659](https://github.com/TotalCaesar659) updated the links in the documentation to use HTTPS.
@@ -1647,7 +1647,7 @@ I deeply appreciate the help of the following people.
285. [Wolf Vollprecht](https://github.com/wolfv) added the `patch_inplace` function.
286. [Jake Zimmerman](https://github.com/jez) highlighted common usage patterns in the README file.
287. [NN](https://github.com/NN---) added the Visual Studio output directory to `.gitignore`.
-288. [Romain Reignier](https://github.com/romainreignier) improved the performance the vector output adapter.
+288. [Romain Reignier](https://github.com/romainreignier) improved the performance of the vector output adapter.
289. [Mike](https://github.com/Mike-Leo-Smith) fixed the `std::iterator_traits`.
290. [Richard Hozák](https://github.com/zxey) added macro `JSON_NO_ENUM` to disable default enum conversions.
291. [vakokako](https://github.com/vakokako) fixed tests when compiling with C++20.
@@ -1694,9 +1694,9 @@ I deeply appreciate the help of the following people.
332. [taro](https://github.com/tarolling) fixed a typo in the `CODEOWNERS` file.
333. [Ikko Eltociear Ashimine](https://github.com/eltociear) fixed a typo.
334. [Felix Yan](https://github.com/felixonmars) fixed a typo in the README.
-335. [HO-COOH](https://github.com/HO-COOH) fixed a parentheses in the documentation.
+335. [HO-COOH](https://github.com/HO-COOH) fixed a parenthesis in the documentation.
336. [Ivor Wanders](https://github.com/iwanders) fixed the examples to catch exception by `const&`.
-337. [miny1233](https://github.com/miny1233) fixed a parentheses in the documentation.
+337. [miny1233](https://github.com/miny1233) fixed a parenthesis in the documentation.
338. [tomalakgeretkal](https://github.com/tomalakgeretkal) fixed a compilation error.
339. [alferov](https://github.com/ALF-ONE) fixed a compilation error.
340. [Craig Scott](https://github.com/craigscott-crascit) fixed a deprecation warning in CMake.
@@ -1779,7 +1779,7 @@ The library itself consists of a single header file licensed under the MIT licen
The library supports **Unicode input** as follows:
-- Only **UTF-8** encoded input is supported which is the default encoding for JSON according to [RFC 8259](https://tools.ietf.org/html/rfc8259.html#section-8.1).
+- Only **UTF-8** encoded input is supported, which is the default encoding for JSON according to [RFC 8259](https://tools.ietf.org/html/rfc8259.html#section-8.1).
- `std::u16string` and `std::u32string` can be parsed, assuming UTF-16 and UTF-32 encoding, respectively. These encodings are not supported when reading from files or other input containers.
- Other encodings such as Latin-1 or ISO 8859-1 are **not** supported and will yield parse or serialization errors.
- [Unicode noncharacters](https://www.unicode.org/faq/private_use.html#nonchar1) will not be replaced by the library.
diff --git a/docs/mkdocs/docs/api/adl_serializer/index.md b/docs/mkdocs/docs/api/adl_serializer/index.md
index 95f35cddf..e83b66dec 100644
--- a/docs/mkdocs/docs/api/adl_serializer/index.md
+++ b/docs/mkdocs/docs/api/adl_serializer/index.md
@@ -8,7 +8,7 @@ struct adl_serializer;
Serializer that uses ADL ([Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)) to choose
`to_json`/`from_json` functions from the types' namespaces.
-It is implemented similar to
+It is implemented similarly to
```cpp
template
diff --git a/docs/mkdocs/docs/api/basic_json/basic_json.md b/docs/mkdocs/docs/api/basic_json/basic_json.md
index 71def92a5..83c50007e 100644
--- a/docs/mkdocs/docs/api/basic_json/basic_json.md
+++ b/docs/mkdocs/docs/api/basic_json/basic_json.md
@@ -74,7 +74,7 @@ basic_json(basic_json&& other) noexcept;
- **boolean**: `boolean_t` / `bool` can be used.
- **binary**: `binary_t` / `std::vector` may be used; unfortunately because string literals cannot be
distinguished from binary character arrays by the C++ type system, all types compatible with `const char*` will be
- directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a
+ directed to the string constructor instead. This is both for backwards compatibility and due to the fact that a
binary type is not a standard JSON type.
See the examples below.
diff --git a/docs/mkdocs/docs/api/basic_json/empty.md b/docs/mkdocs/docs/api/basic_json/empty.md
index 26bf6e9aa..8d566738d 100644
--- a/docs/mkdocs/docs/api/basic_json/empty.md
+++ b/docs/mkdocs/docs/api/basic_json/empty.md
@@ -4,7 +4,7 @@
bool empty() const noexcept;
```
-Checks if a JSON value has no elements (i.e. whether its [`size()`](size.md) is `0`).
+Checks if a JSON value has no elements (i.e., whether its [`size()`](size.md) is `0`).
## Return value
diff --git a/docs/mkdocs/docs/api/basic_json/insert.md b/docs/mkdocs/docs/api/basic_json/insert.md
index 2f809f015..160b0d434 100644
--- a/docs/mkdocs/docs/api/basic_json/insert.md
+++ b/docs/mkdocs/docs/api/basic_json/insert.md
@@ -29,11 +29,11 @@ void insert(const_iterator first, const_iterator last);
For all cases where an element is added to an **array**, a reallocation can happen, in which case all iterators
(including the [`end()`](end.md) iterator) and all references to the elements are invalidated. Otherwise, only the
[`end()`](end.md) iterator is invalidated. Also, any iterator or reference after the insertion point will point to the
-same index which is now a different value.
+same index, which is now a different value.
For [`ordered_json`](../ordered_json.md), also adding an element to an **object** can yield a reallocation which again
invalidates all iterators and all references. Also, any iterator or reference after the insertion point will point to
-the same index which is now a different value.
+the same index, which is now a different value.
## Parameters
diff --git a/docs/mkdocs/docs/api/basic_json/json_base_class_t.md b/docs/mkdocs/docs/api/basic_json/json_base_class_t.md
index 75752049f..dfe5f1cb7 100644
--- a/docs/mkdocs/docs/api/basic_json/json_base_class_t.md
+++ b/docs/mkdocs/docs/api/basic_json/json_base_class_t.md
@@ -16,7 +16,7 @@ Examples of such functionality might be metadata, additional member functions (e
#### Default type
-The default value for `CustomBaseClass` is `void`. In this case an
+The default value for `CustomBaseClass` is `void`. In this case, an
[empty base class](https://en.cppreference.com/w/cpp/language/ebo) is used and no additional functionality is injected.
#### Limitations
diff --git a/docs/mkdocs/docs/api/macros/nlohmann_define_derived_type.md b/docs/mkdocs/docs/api/macros/nlohmann_define_derived_type.md
index d9c9e0422..d33bc1eeb 100644
--- a/docs/mkdocs/docs/api/macros/nlohmann_define_derived_type.md
+++ b/docs/mkdocs/docs/api/macros/nlohmann_define_derived_type.md
@@ -79,7 +79,7 @@ template
void from_json(const BasicJsonType&, type&);
```
-Macros 3 and 6 add one function to the namespace which takes care of the serialization only:
+Macros 3 and 6 add one function to the namespace, which takes care of the serialization only:
```cpp
template
diff --git a/docs/mkdocs/docs/api/macros/nlohmann_define_type_intrusive.md b/docs/mkdocs/docs/api/macros/nlohmann_define_type_intrusive.md
index 32fb68ee2..b95d26799 100644
--- a/docs/mkdocs/docs/api/macros/nlohmann_define_type_intrusive.md
+++ b/docs/mkdocs/docs/api/macros/nlohmann_define_type_intrusive.md
@@ -46,7 +46,7 @@ template
friend void from_json(const BasicJsonType&, type&); // except (3)
```
-See examples below for the concrete generated code.
+See the examples below for the concrete generated code.
## Notes
diff --git a/docs/mkdocs/docs/api/macros/nlohmann_define_type_non_intrusive.md b/docs/mkdocs/docs/api/macros/nlohmann_define_type_non_intrusive.md
index 2bbf0a690..c3e2721c0 100644
--- a/docs/mkdocs/docs/api/macros/nlohmann_define_type_non_intrusive.md
+++ b/docs/mkdocs/docs/api/macros/nlohmann_define_type_non_intrusive.md
@@ -46,7 +46,7 @@ template
void from_json(const BasicJsonType&, type&); // except (3)
```
-See examples below for the concrete generated code.
+See the examples below for the concrete generated code.
## Notes
diff --git a/docs/mkdocs/docs/api/macros/nlohmann_json_serialize_enum.md b/docs/mkdocs/docs/api/macros/nlohmann_json_serialize_enum.md
index c54f9195f..adaceae8d 100644
--- a/docs/mkdocs/docs/api/macros/nlohmann_json_serialize_enum.md
+++ b/docs/mkdocs/docs/api/macros/nlohmann_json_serialize_enum.md
@@ -4,8 +4,8 @@
#define NLOHMANN_JSON_SERIALIZE_ENUM(type, conversion...)
```
-By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an
-enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be
+By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If
+an enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be
undefined or a different enum value than was originally intended.
The `NLOHMANN_JSON_SERIALIZE_ENUM` allows to define a user-defined serialization for every enumerator.
diff --git a/docs/mkdocs/docs/api/ordered_json.md b/docs/mkdocs/docs/api/ordered_json.md
index f4062d13d..b28fe36f6 100644
--- a/docs/mkdocs/docs/api/ordered_json.md
+++ b/docs/mkdocs/docs/api/ordered_json.md
@@ -11,7 +11,7 @@ This type preserves the insertion order of object keys.
The type is based on [`ordered_map`](ordered_map.md) which in turn uses a `std::vector` to store object elements.
Therefore, adding object elements can yield a reallocation in which case all iterators (including the
[`end()`](basic_json/end.md) iterator) and all references to the elements are invalidated. Also, any iterator or
-reference after the insertion point will point to the same index which is now a different value.
+reference after the insertion point will point to the same index, which is now a different value.
## Examples
diff --git a/docs/mkdocs/docs/features/binary_formats/cbor.md b/docs/mkdocs/docs/features/binary_formats/cbor.md
index 2d0a1dae1..a4240ffad 100644
--- a/docs/mkdocs/docs/features/binary_formats/cbor.md
+++ b/docs/mkdocs/docs/features/binary_formats/cbor.md
@@ -1,7 +1,7 @@
# CBOR
-The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely
-small code size, fairly small message size, and extensibility without the need for version negotiation.
+The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of
+extremely small code sizes, fairly small message size, and extensibility without the need for version negotiation.
!!! abstract "References"
diff --git a/docs/mkdocs/docs/features/binary_values.md b/docs/mkdocs/docs/features/binary_values.md
index 149eaaa5e..260d67b54 100644
--- a/docs/mkdocs/docs/features/binary_values.md
+++ b/docs/mkdocs/docs/features/binary_values.md
@@ -1,7 +1,7 @@
# Binary Values
The library implements several [binary formats](binary_formats/index.md) that encode JSON in an efficient way. Most of
-these formats support binary values; that is, values that have semantics define outside the library and only define a
+these formats support binary values; that is, values that have semantics defined outside the library and only define a
sequence of bytes to be stored.
JSON itself does not have a binary value. As such, binary values are an extension that this library implements to store
@@ -189,7 +189,7 @@ as an array of uint8 values. The library implements this translation.
### BSON
-[BSON](binary_formats/bson.md) supports binary values and subtypes. If a subtype is given, it is used and added as
+[BSON](binary_formats/bson.md) supports binary values and subtypes. If a subtype is given, it is used and added as an
unsigned 8-bit integer. If no subtype is given, the generic binary subtype 0x00 is used.
??? example
@@ -274,7 +274,7 @@ byte array.
[MessagePack](binary_formats/messagepack.md) supports binary values and subtypes. If a subtype is given, the ext family
is used. The library will choose the smallest representation among fixext1, fixext2, fixext4, fixext8, ext8, ext16, and
-ext32. The subtype is then added as signed 8-bit integer.
+ext32. The subtype is then added as a signed 8-bit integer.
If no subtype is given, the bin family (bin8, bin16, bin32) is used.
diff --git a/docs/mkdocs/docs/features/enum_conversion.md b/docs/mkdocs/docs/features/enum_conversion.md
index 6bb3edbd3..58d353a0c 100644
--- a/docs/mkdocs/docs/features/enum_conversion.md
+++ b/docs/mkdocs/docs/features/enum_conversion.md
@@ -1,8 +1,8 @@
# Specializing enum conversion
-By default, enum values are serialized to JSON as integers. In some cases this could result in undesired behavior. If an
-enum is modified or re-ordered after data has been serialized to JSON, the later deserialized JSON data may be
-undefined or a different enum value than was originally intended.
+By default, enum values are serialized to JSON as integers. In some cases, this could result in undesired behavior. If
+the integer values of any enum values are changed after data using those enum values has been serialized to JSON, then
+deserializing that JSON would result in a different enum value being restored, or the value not being found at all.
It is possible to more precisely specify how a given enum is mapped to and from JSON as shown below:
diff --git a/docs/mkdocs/docs/features/iterators.md b/docs/mkdocs/docs/features/iterators.md
index ca303cb4a..6d8afc7f5 100644
--- a/docs/mkdocs/docs/features/iterators.md
+++ b/docs/mkdocs/docs/features/iterators.md
@@ -37,7 +37,7 @@ When iterating over objects, values are ordered with respect to the `object_comp
The reason for the order is the lexicographic ordering of the object keys "one", "three", "two".
-### Access object key during iteration
+### Access object keys during iteration
The JSON iterators have two member functions, `key()` and `value()` to access the object key and stored value, respectively. When calling `key()` on a non-object iterator, an [invalid_iterator.207](../home/exceptions.md#jsonexceptioninvalid_iterator207) exception is thrown.
diff --git a/docs/mkdocs/docs/features/namespace.md b/docs/mkdocs/docs/features/namespace.md
index 460cb3be5..ca541809d 100644
--- a/docs/mkdocs/docs/features/namespace.md
+++ b/docs/mkdocs/docs/features/namespace.md
@@ -64,7 +64,7 @@ configurations – to be used in cases where the linker would otherwise output u
To do so, define [`NLOHMANN_JSON_NAMESPACE_NO_VERSION`](../api/macros/nlohmann_json_namespace_no_version.md) to `1`.
-This applies to version 3.11.2 and above only, versions 3.11.0 and 3.11.1 can apply the technique described in the next
+This applies to version 3.11.2 and above only; versions 3.11.0 and 3.11.1 can apply the technique described in the next
section to emulate the effect of the `NLOHMANN_JSON_NAMESPACE_NO_VERSION` macro.
!!! danger "Use at your own risk"
diff --git a/docs/mkdocs/docs/home/exceptions.md b/docs/mkdocs/docs/home/exceptions.md
index ea43e5975..cfa4f57a2 100644
--- a/docs/mkdocs/docs/home/exceptions.md
+++ b/docs/mkdocs/docs/home/exceptions.md
@@ -520,7 +520,7 @@ The order of object iterators cannot be compared, because JSON objects are unord
### json.exception.invalid_iterator.214
-Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to `begin()`.
+Cannot retrieve value from iterator: The iterator either refers to a null value, or it refers to a primitive type (number, boolean, or string), but does not match the iterator returned by `begin()`.
!!! failure "Example message"
diff --git a/docs/mkdocs/docs/home/faq.md b/docs/mkdocs/docs/home/faq.md
index 6a5ca3960..74709bac6 100644
--- a/docs/mkdocs/docs/home/faq.md
+++ b/docs/mkdocs/docs/home/faq.md
@@ -67,7 +67,7 @@ The library supports **Unicode input** as follows:
- The strings stored in the library are UTF-8 encoded. When using the default string type (`std::string`), note that its length/size functions return the number of stored bytes rather than the number of characters or glyphs.
- When you store strings with different encodings in the library, calling [`dump()`](https://nlohmann.github.io/json/classnlohmann_1_1basic__json_a50ec80b02d0f3f51130d4abb5d1cfdc5.html#a50ec80b02d0f3f51130d4abb5d1cfdc5) may throw an exception unless `json::error_handler_t::replace` or `json::error_handler_t::ignore` are used as error handlers.
-In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows where Latin-1 or ISO 8859-1 is often the standard encoding.
+In most cases, the parser is right to complain, because the input is not UTF-8 encoded. This is especially true for Microsoft Windows, where Latin-1 or ISO 8859-1 is often the standard encoding.
### Wide string handling
diff --git a/docs/mkdocs/docs/home/releases.md b/docs/mkdocs/docs/home/releases.md
index af4f3e615..c7b343ca3 100644
--- a/docs/mkdocs/docs/home/releases.md
+++ b/docs/mkdocs/docs/home/releases.md
@@ -1071,7 +1071,7 @@ This release combines a lot of small fixes and improvements. The release is back
- Improved the performance of the serialization by avoiding the re-creation of a locale object.
- Fixed two MSVC warnings. Compiling the test suite with `/Wall` now only warns about non-inlined functions (C4710) and the deprecation of the constructor from input-stream (C4996).
- Some project internals:
- -
The project has qualified for the [Core Infrastructure Initiative Best Practices Badge](https://bestpractices.coreinfrastructure.org/projects/289). While most requirements where already satisfied, some led to a more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the [contribution guidelines document](https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md) how to communicate security issues privately.
+ -
The project has qualified for the [Core Infrastructure Initiative Best Practices Badge](https://bestpractices.coreinfrastructure.org/projects/289). While most requirements where already satisfied, some led to more explicit documentation of quality-ensuring procedures. For instance, static analysis is now executed with every commit on the build server. Furthermore, the [contribution guidelines document](https://github.com/nlohmann/json/blob/develop/.github/CONTRIBUTING.md) how to communicate security issues privately.
- The test suite has been overworked and split into several files to allow for faster compilation and analysis. The execute the test suite, simply execute `make check`.
- The continuous integration with [Travis](https://travis-ci.org/nlohmann/json) was extended with Clang versions 3.6.0 to 3.8.1 and now includes 18 different compiler/OS combinations.
- An 11-day run of [American fuzzy lop](http://lcamtuf.coredump.cx/afl/) checked 962 million inputs on the parser and found no issue.
diff --git a/include/nlohmann/detail/conversions/from_json.hpp b/include/nlohmann/detail/conversions/from_json.hpp
index adb461c7a..ebd4d393a 100644
--- a/include/nlohmann/detail/conversions/from_json.hpp
+++ b/include/nlohmann/detail/conversions/from_json.hpp
@@ -398,7 +398,7 @@ inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
}
// overload for arithmetic types, not chosen for basic_json template arguments
-// (BooleanType, etc..); note: Is it really necessary to provide explicit
+// (BooleanType, etc.); note: Is it really necessary to provide explicit
// overloads for boolean_t etc. in case of a custom BooleanType which is not
// an arithmetic type?
template < typename BasicJsonType, typename ArithmeticType,
diff --git a/include/nlohmann/detail/conversions/to_chars.hpp b/include/nlohmann/detail/conversions/to_chars.hpp
index 743104174..3c663cf65 100644
--- a/include/nlohmann/detail/conversions/to_chars.hpp
+++ b/include/nlohmann/detail/conversions/to_chars.hpp
@@ -130,7 +130,7 @@ struct diyfp // f * 2^e
// p_lo = p0_lo + (Q << 32)
//
// But in this particular case here, the full p_lo is not required.
- // Effectively we only need to add the highest bit in p_lo to p_hi (and
+ // Effectively, we only need to add the highest bit in p_lo to p_hi (and
// Q_hi + 1 does not overflow).
Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up
@@ -220,7 +220,7 @@ boundaries compute_boundaries(FloatType value)
// Compute the boundaries m- and m+ of the floating-point value
// v = f * 2^e.
//
- // Determine v- and v+, the floating-point predecessor and successor if v,
+ // Determine v- and v+, the floating-point predecessor and successor of v,
// respectively.
//
// v- = v - 2^e if f != 2^(p-1) or e == e_min (A)
@@ -375,7 +375,7 @@ inline cached_power get_cached_power_for_binary_exponent(int e)
// (A smaller distance gamma-alpha would require a larger table.)
// NB:
- // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34.
+ // Actually, this function returns c, such that -60 <= e_c + e + 64 <= -34.
constexpr int kCachedPowersMinDecExp = -300;
constexpr int kCachedPowersDecStep = 8;
@@ -687,8 +687,8 @@ inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent,
decimal_exponent += n;
- // We may now just stop. But instead look if the buffer could be
- // decremented to bring V closer to w.
+ // We may now just stop. But instead, it looks as if the buffer
+ // could be decremented to bring V closer to w.
//
// pow10 = 10^n is now 1 ulp in the decimal representation V.
// The rounding procedure works with diyfp's with an implicit
@@ -1095,7 +1095,7 @@ char* to_chars(char* first, const char* last, FloatType value)
// Compute v = buffer * 10^decimal_exponent.
// The decimal digits are stored in the buffer, which needs to be interpreted
// as an unsigned decimal integer.
- // len is the length of the buffer, i.e. the number of decimal digits.
+ // len is the length of the buffer, i.e., the number of decimal digits.
int len = 0;
int decimal_exponent = 0;
dtoa_impl::grisu2(first, len, decimal_exponent, value);
diff --git a/include/nlohmann/detail/exceptions.hpp b/include/nlohmann/detail/exceptions.hpp
index 5ebfb6578..2740e4c2b 100644
--- a/include/nlohmann/detail/exceptions.hpp
+++ b/include/nlohmann/detail/exceptions.hpp
@@ -30,7 +30,7 @@
// emitted in every translation unit. This issue cannot be fixed with a
// header-only library as there is no implementation file to move these
// functions to. As a result, we suppress this warning here to avoid client
-// code to stumble over this. See https://github.com/nlohmann/json/issues/4087
+// code stumbling over this. See https://github.com/nlohmann/json/issues/4087
// for a discussion.
#if defined(__clang__)
#pragma clang diagnostic push
diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp
index bb233a5e0..3d62ff277 100644
--- a/include/nlohmann/detail/input/binary_reader.hpp
+++ b/include/nlohmann/detail/input/binary_reader.hpp
@@ -334,7 +334,7 @@ class binary_reader
return get_number(input_format_t::bson, value) && sax->number_unsigned(value);
}
- default: // anything else not supported (yet)
+ default: // anything else is not supported (yet)
{
std::array cr{{}};
static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
@@ -731,7 +731,7 @@ class binary_reader
case 0xD2:
case 0xD3:
case 0xD4:
- case 0xD8: // tagged item (1 bytes follow)
+ case 0xD8: // tagged item (1 byte follows)
case 0xD9: // tagged item (2 bytes follow)
case 0xDA: // tagged item (4 bytes follow)
case 0xDB: // tagged item (8 bytes follow)
@@ -783,7 +783,7 @@ class binary_reader
case cbor_tag_handler_t::store:
{
binary_t b;
- // use binary subtype and store in binary container
+ // use binary subtype and store in a binary container
switch (current)
{
case 0xD8:
@@ -852,7 +852,7 @@ class binary_reader
const auto byte1 = static_cast(byte1_raw);
const auto byte2 = static_cast(byte2_raw);
- // code from RFC 7049, Appendix D, Figure 3:
+ // Code from RFC 7049, Appendix D, Figure 3:
// As half-precision floating-point numbers were only added
// to IEEE 754 in 2008, today's programming platforms often
// still only have limited support for them. It is very
@@ -2159,7 +2159,7 @@ class binary_reader
{
break;
}
- if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
+ if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
{
return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
}
@@ -2417,7 +2417,7 @@ class binary_reader
const auto byte1 = static_cast(byte1_raw);
const auto byte2 = static_cast(byte2_raw);
- // code from RFC 7049, Appendix D, Figure 3:
+ // Code from RFC 7049, Appendix D, Figure 3:
// As half-precision floating-point numbers were only added
// to IEEE 754 in 2008, today's programming platforms often
// still only have limited support for them. It is very
@@ -2705,7 +2705,7 @@ class binary_reader
bool get_ubjson_high_precision_number()
{
- // get size of following number string
+ // get the size of the following number string
std::size_t size{};
bool no_ndarray = true;
auto res = get_ubjson_size_value(size, no_ndarray);
@@ -2803,7 +2803,7 @@ class binary_reader
chars_read += new_chars_read;
if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
{
- // in case of failure, advance position by 1 to report failing location
+ // in case of failure, advance position by 1 to report the failing location
++chars_read;
sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
return false;
diff --git a/include/nlohmann/detail/input/input_adapters.hpp b/include/nlohmann/detail/input/input_adapters.hpp
index 1affd619e..2c23a8e5d 100644
--- a/include/nlohmann/detail/input/input_adapters.hpp
+++ b/include/nlohmann/detail/input/input_adapters.hpp
@@ -108,7 +108,7 @@ class input_stream_adapter
: is(&i), sb(i.rdbuf())
{}
- // delete because of pointer members
+ // deleted because of pointer members
input_stream_adapter(const input_stream_adapter&) = delete;
input_stream_adapter& operator=(input_stream_adapter&) = delete;
input_stream_adapter& operator=(input_stream_adapter&&) = delete;
@@ -122,7 +122,7 @@ class input_stream_adapter
// std::istream/std::streambuf use std::char_traits::to_int_type, to
// ensure that std::char_traits::eof() and the character 0xFF do not
- // end up as the same value, e.g. 0xFFFFFFFF.
+ // end up as the same value, e.g., 0xFFFFFFFF.
std::char_traits::int_type get_character()
{
auto res = sb->sbumpc();
@@ -344,7 +344,7 @@ class wide_string_input_adapter
typename std::char_traits::int_type get_character() noexcept
{
- // check if buffer needs to be filled
+ // check if the buffer needs to be filled
if (utf8_bytes_index == utf8_bytes_filled)
{
fill_buffer();
diff --git a/include/nlohmann/detail/input/json_sax.hpp b/include/nlohmann/detail/input/json_sax.hpp
index 0ff877893..0b06ad5ab 100644
--- a/include/nlohmann/detail/input/json_sax.hpp
+++ b/include/nlohmann/detail/input/json_sax.hpp
@@ -260,7 +260,7 @@ class json_sax_dom_parser
JSON_ASSERT(!ref_stack.empty());
JSON_ASSERT(ref_stack.back()->is_object());
- // add null at given key and store the reference for later
+ // add null at the given key and store the reference for later
object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
return true;
}
@@ -576,11 +576,11 @@ class json_sax_dom_callback_parser
{
BasicJsonType k = BasicJsonType(val);
- // check callback for key
+ // check callback for the key
const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k);
key_keep_stack.push_back(keep);
- // add discarded value at given key and store the reference for later
+ // add discarded value at the given key and store the reference for later
if (keep && ref_stack.back())
{
object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded);
diff --git a/include/nlohmann/detail/input/lexer.hpp b/include/nlohmann/detail/input/lexer.hpp
index 2b4e80a48..a40790e7e 100644
--- a/include/nlohmann/detail/input/lexer.hpp
+++ b/include/nlohmann/detail/input/lexer.hpp
@@ -127,7 +127,7 @@ class lexer : public lexer_base
, decimal_point_char(static_cast(get_decimal_point()))
{}
- // delete because of pointer members
+ // deleted because of pointer members
lexer(const lexer&) = delete;
lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
lexer& operator=(lexer&) = delete;
@@ -262,10 +262,10 @@ class lexer : public lexer_base
while (true)
{
- // get next character
+ // get the next character
switch (get())
{
- // end of file while parsing string
+ // end of file while parsing the string
case char_traits::eof():
{
error_message = "invalid string: missing closing quote";
@@ -351,7 +351,7 @@ class lexer : public lexer_base
(static_cast(codepoint1) << 10u)
// low surrogate occupies the least significant 15 bits
+ static_cast(codepoint2)
- // there is still the 0xD800, 0xDC00 and 0x10000 noise
+ // there is still the 0xD800, 0xDC00, and 0x10000 noise
// in the result, so we have to subtract with:
// (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
- 0x35FDC00u);
@@ -377,7 +377,7 @@ class lexer : public lexer_base
}
}
- // result of the above calculation yields a proper codepoint
+ // the result of the above calculation yields a proper codepoint
JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);
// translate codepoint into bytes
@@ -828,7 +828,7 @@ class lexer : public lexer_base
break;
}
- // remaining bytes (80..C1 and F5..FF) are ill-formed
+ // the remaining bytes (80..C1 and F5..FF) are ill-formed
default:
{
error_message = "invalid string: ill-formed UTF-8 byte";
@@ -973,7 +973,7 @@ class lexer : public lexer_base
reset();
// the type of the parsed number; initially set to unsigned; will be
- // changed if minus sign, decimal point or exponent is read
+ // changed if minus sign, decimal point, or exponent is read
token_type number_type = token_type::value_unsigned;
// state (init): we just found out we need to scan a number
@@ -1345,7 +1345,7 @@ scan_number_done:
if (next_unget)
{
- // just reset the next_unget variable and work with current
+ // only reset the next_unget variable and work with current
next_unget = false;
}
else
@@ -1524,7 +1524,7 @@ scan_number_done:
return token_type::parse_error;
}
- // read next character and ignore whitespace
+ // read the next character and ignore whitespace
skip_whitespace();
// ignore comments
diff --git a/include/nlohmann/detail/input/parser.hpp b/include/nlohmann/detail/input/parser.hpp
index b5a5a525c..2ddd38c10 100644
--- a/include/nlohmann/detail/input/parser.hpp
+++ b/include/nlohmann/detail/input/parser.hpp
@@ -106,7 +106,7 @@ class parser
exception_message(token_type::end_of_input, "value"), nullptr));
}
- // in case of an error, return discarded value
+ // in case of an error, return a discarded value
if (sdp.is_errored())
{
result = value_t::discarded;
@@ -133,7 +133,7 @@ class parser
parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr));
}
- // in case of an error, return discarded value
+ // in case of an error, return a discarded value
if (sdp.is_errored())
{
result = value_t::discarded;
@@ -336,7 +336,7 @@ class parser
case token_type::parse_error:
{
- // using "uninitialized" to avoid "expected" message
+ // using "uninitialized" to avoid an "expected" message
return sax->parse_error(m_lexer.get_position(),
m_lexer.get_token_string(),
parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
diff --git a/include/nlohmann/detail/iterators/iter_impl.hpp b/include/nlohmann/detail/iterators/iter_impl.hpp
index 45864e8c3..c2fbbfa78 100644
--- a/include/nlohmann/detail/iterators/iter_impl.hpp
+++ b/include/nlohmann/detail/iterators/iter_impl.hpp
@@ -23,7 +23,7 @@ NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{
-// forward declare, to be able to friend it later on
+// forward declare to be able to friend it later on
template class iteration_proxy;
template class iteration_proxy_value;
diff --git a/include/nlohmann/detail/iterators/primitive_iterator.hpp b/include/nlohmann/detail/iterators/primitive_iterator.hpp
index 3a238349b..f1a735662 100644
--- a/include/nlohmann/detail/iterators/primitive_iterator.hpp
+++ b/include/nlohmann/detail/iterators/primitive_iterator.hpp
@@ -21,9 +21,9 @@ namespace detail
@brief an iterator for primitive JSON types
This class models an iterator for primitive JSON types (boolean, number,
-string). It's only purpose is to allow the iterator/const_iterator classes
+string). Its only purpose is to allow the iterator/const_iterator classes
to "iterate" over primitive values. Internally, the iterator is modeled by
-a `difference_type` variable. Value begin_value (`0`) models the begin,
+a `difference_type` variable. Value begin_value (`0`) models the begin and
end_value (`1`) models past the end.
*/
class primitive_iterator_t
diff --git a/include/nlohmann/detail/json_pointer.hpp b/include/nlohmann/detail/json_pointer.hpp
index 1f764979e..e1b3947ed 100644
--- a/include/nlohmann/detail/json_pointer.hpp
+++ b/include/nlohmann/detail/json_pointer.hpp
@@ -285,7 +285,7 @@ class json_pointer
{
if (reference_token == "0")
{
- // start a new array if reference token is 0
+ // start a new array if the reference token is 0
result = &result->operator[](0);
}
else
@@ -314,7 +314,7 @@ class json_pointer
The following code is only reached if there exists a reference
token _and_ the current value is primitive. In this case, we have
an error situation, because primitive values may only occur as
- single value; that is, with an empty list of reference tokens.
+ a single value; that is, with an empty list of reference tokens.
*/
case detail::value_t::string:
case detail::value_t::boolean:
@@ -358,7 +358,7 @@ class json_pointer
// convert null values to arrays or objects before continuing
if (ptr->is_null())
{
- // check if reference token is a number
+ // check if the reference token is a number
const bool nums =
std::all_of(reference_token.begin(), reference_token.end(),
[](const unsigned char x)
@@ -366,7 +366,7 @@ class json_pointer
return std::isdigit(x);
});
- // change value to array for numbers or "-" or to object otherwise
+ // change value to an array for numbers or "-" or to object otherwise
*ptr = (nums || reference_token == "-")
? detail::value_t::array
: detail::value_t::object;
@@ -609,7 +609,7 @@ class json_pointer
{
if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))
{
- // first char should be between '1' and '9'
+ // the first char should be between '1' and '9'
return false;
}
for (std::size_t i = 1; i < reference_token.size(); i++)
@@ -673,7 +673,7 @@ class json_pointer
return result;
}
- // check if nonempty reference string begins with slash
+ // check if a nonempty reference string begins with slash
if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))
{
JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
@@ -747,7 +747,7 @@ class json_pointer
}
else
{
- // iterate array and use index as reference string
+ // iterate array and use index as a reference string
for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
{
flatten(detail::concat(reference_string, '/', std::to_string(i)),
@@ -785,7 +785,7 @@ class json_pointer
case detail::value_t::discarded:
default:
{
- // add primitive value with its reference string
+ // add a primitive value with its reference string
result[reference_string] = value;
break;
}
@@ -821,17 +821,17 @@ class json_pointer
JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second));
}
- // assign value to reference pointed to by JSON pointer; Note that if
- // the JSON pointer is "" (i.e., points to the whole value), function
- // get_and_create returns a reference to result itself. An assignment
- // will then create a primitive value.
+ // Assign the value to the reference pointed to by JSON pointer. Note
+ // that if the JSON pointer is "" (i.e., points to the whole value),
+ // function get_and_create returns a reference to the result itself.
+ // An assignment will then create a primitive value.
json_pointer(element.first).get_and_create(result) = element.second;
}
return result;
}
- // can't use conversion operator because of ambiguity
+ // can't use the conversion operator because of ambiguity
json_pointer convert() const&
{
json_pointer result;
@@ -926,7 +926,7 @@ class json_pointer
};
#if !JSON_HAS_THREE_WAY_COMPARISON
-// functions cannot be defined inside class due to ODR violations
+// functions cannot be defined inside the class due to ODR violations
template
inline bool operator==(const json_pointer& lhs,
const json_pointer& rhs) noexcept
diff --git a/include/nlohmann/detail/macro_scope.hpp b/include/nlohmann/detail/macro_scope.hpp
index d1c6b1be3..cf94997e0 100644
--- a/include/nlohmann/detail/macro_scope.hpp
+++ b/include/nlohmann/detail/macro_scope.hpp
@@ -31,7 +31,7 @@
#endif
// C++ language standard detection
-// if the user manually specified the used c++ version this is skipped
+// if the user manually specified the used C++ version, this is skipped
#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
#if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L)
#define JSON_HAS_CPP_23
@@ -128,7 +128,7 @@
#endif
#ifndef JSON_HAS_RANGES
- // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
+ // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has a syntax error
#if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
#define JSON_HAS_RANGES 0
#elif defined(__cpp_lib_ranges)
@@ -205,7 +205,7 @@
#define JSON_ASSERT(x) assert(x)
#endif
-// allow to access some private functions (needed by the test suite)
+// allow accessing some private functions (needed by the test suite)
#if defined(JSON_TESTS_PRIVATE)
#define JSON_PRIVATE_UNLESS_TESTED public
#else
diff --git a/include/nlohmann/detail/meta/type_traits.hpp b/include/nlohmann/detail/meta/type_traits.hpp
index 6bb46fbdd..06dcb63e1 100644
--- a/include/nlohmann/detail/meta/type_traits.hpp
+++ b/include/nlohmann/detail/meta/type_traits.hpp
@@ -42,12 +42,12 @@ namespace detail
// Note to maintainers:
//
-// Every trait in this file expects a non CV-qualified type.
+// Every trait in this file expects a non-CV-qualified type.
// The only exceptions are in the 'aliases for detected' section
-// (i.e. those of the form: decltype(T::member_function(std::declval())))
+// (i.e., those of the form: decltype(T::member_function(std::declval())))
//
// In this case, T has to be properly CV-qualified to constraint the function arguments
-// (e.g. to_json(BasicJsonType&, const T&))
+// (e.g., to_json(BasicJsonType&, const T&))
template struct is_basic_json : std::false_type {};
@@ -55,7 +55,7 @@ NLOHMANN_BASIC_JSON_TPL_DECLARATION
struct is_basic_json : std::true_type {};
// used by exceptions create() member functions
-// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
+// true_type for the pointer to possibly cv-qualified basic_json or std::nullptr_t
// false_type otherwise
template
struct is_basic_json_context :
@@ -281,7 +281,7 @@ template struct negation : std::integral_constant < bool, !B::value > {
// Reimplementation of is_constructible and is_default_constructible, due to them being broken for
// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367).
-// This causes compile errors in e.g. clang 3.5 or gcc 4.9.
+// This causes compile errors in e.g., Clang 3.5 or GCC 4.9.
template
struct is_default_constructible : std::is_default_constructible {};
@@ -361,7 +361,7 @@ using range_value_t = value_type_t>>;
// The following implementation of is_complete_type is taken from
// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/
-// and is written by Xiang Fan who agreed to using it in this library.
+// and is written by Xiang Fan who agreed to use it in this library.
template
struct is_complete_type : std::false_type {};
@@ -598,7 +598,7 @@ decltype(std::declval()(std::declval(), std::declval()))
template
using detect_is_transparent = typename T::is_transparent;
-// type trait to check if KeyType can be used as object key (without a BasicJsonType)
+// type trait to check if KeyType can be used as an object key (without a BasicJsonType)
// see is_usable_as_basic_json_key_type below
template>
@@ -612,7 +612,7 @@ using is_usable_as_key_type = typename std::conditional <
std::true_type,
std::false_type >::type;
-// type trait to check if KeyType can be used as object key
+// type trait to check if KeyType can be used as an object key
// true if:
// - KeyType is comparable with BasicJsonType::object_t::key_type
// - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
diff --git a/include/nlohmann/detail/output/binary_writer.hpp b/include/nlohmann/detail/output/binary_writer.hpp
index d1f80f877..f1d533947 100644
--- a/include/nlohmann/detail/output/binary_writer.hpp
+++ b/include/nlohmann/detail/output/binary_writer.hpp
@@ -1552,7 +1552,7 @@ class binary_writer
{
return 'L';
}
- // anything else is treated as high-precision number
+ // anything else is treated as a high-precision number
return 'H'; // LCOV_EXCL_LINE
}
@@ -1590,7 +1590,7 @@ class binary_writer
{
return 'M';
}
- // anything else is treated as high-precision number
+ // anything else is treated as a high-precision number
return 'H'; // LCOV_EXCL_LINE
}
@@ -1756,11 +1756,11 @@ class binary_writer
template
void write_number(const NumberType n, const bool OutputIsLittleEndian = false)
{
- // step 1: write number to array of length NumberType
+ // step 1: write the number to an array of length NumberType
std::array vec{};
std::memcpy(vec.data(), &n, sizeof(NumberType));
- // step 2: write array to output (with possible reordering)
+ // step 2: write the array to output (with possible reordering)
if (is_little_endian != OutputIsLittleEndian)
{
// reverse byte order prior to conversion if necessary
diff --git a/include/nlohmann/detail/output/serializer.hpp b/include/nlohmann/detail/output/serializer.hpp
index fc078532c..28ff20f5d 100644
--- a/include/nlohmann/detail/output/serializer.hpp
+++ b/include/nlohmann/detail/output/serializer.hpp
@@ -75,7 +75,7 @@ class serializer
, error_handler(error_handler_)
{}
- // delete because of pointer members
+ // deleted because of pointer members
serializer(const serializer&) = delete;
serializer& operator=(const serializer&) = delete;
serializer(serializer&&) = delete;
@@ -573,7 +573,7 @@ class serializer
break;
}
- default: // decode found yet incomplete multi-byte code point
+ default: // decode found yet incomplete multibyte code point
{
if (!ensure_ascii)
{
@@ -827,7 +827,7 @@ class serializer
void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/)
{
- // get number of digits for a float -> text -> float round-trip
+ // get the number of digits for a float -> text -> float round-trip
static constexpr auto d = std::numeric_limits::max_digits10;
// the actual conversion
@@ -836,10 +836,10 @@ class serializer
// negative value indicates an error
JSON_ASSERT(len > 0);
- // check if buffer was large enough
+ // check if the buffer was large enough
JSON_ASSERT(static_cast(len) < number_buffer.size());
- // erase thousands separator
+ // erase thousands separators
if (thousands_sep != '\0')
{
// NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081
@@ -947,8 +947,8 @@ class serializer
* Helper function for dump_integer
*
* This function takes a negative signed integer and returns its absolute
- * value as unsigned integer. The plus/minus shuffling is necessary as we can
- * not directly remove the sign of an arbitrary signed integer as the
+ * value as an unsigned integer. The plus/minus shuffling is necessary as we
+ * cannot directly remove the sign of an arbitrary signed integer as the
* absolute values of INT_MIN and INT_MAX are usually not the same. See
* #1708 for details.
*/
diff --git a/include/nlohmann/detail/string_escape.hpp b/include/nlohmann/detail/string_escape.hpp
index d969a9ed4..63715cde1 100644
--- a/include/nlohmann/detail/string_escape.hpp
+++ b/include/nlohmann/detail/string_escape.hpp
@@ -32,10 +32,10 @@ inline void replace_substring(StringType& s, const StringType& f,
const StringType& t)
{
JSON_ASSERT(!f.empty());
- for (auto pos = s.find(f); // find first occurrence of f
+ for (auto pos = s.find(f); // find the first occurrence of f
pos != StringType::npos; // make sure f was found
s.replace(pos, f.size(), t), // replace with t, and
- pos = s.find(f, pos + t.size())) // find next occurrence of f
+ pos = s.find(f, pos + t.size())) // find the next occurrence of f
{}
}
diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp
index ed51cd544..10ad4e6ca 100644
--- a/include/nlohmann/json.hpp
+++ b/include/nlohmann/json.hpp
@@ -563,7 +563,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
(t == value_t::binary && binary == nullptr)
)
{
- //not initialized (e.g. due to exception in the ctor)
+ //not initialized (e.g., due to exception in the ctor)
return;
}
if (t == value_t::array || t == value_t::object)
@@ -588,7 +588,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
while (!stack.empty())
{
- // move the last item to local variable to be processed
+ // move the last item to a local variable to be processed
basic_json current_item(std::move(stack.back()));
stack.pop_back();
@@ -610,7 +610,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
current_item.m_data.m_value.object->clear();
}
- // it's now safe that current_item get destructed
+ // it's now safe that current_item gets destructed
// since it doesn't have any children
}
}
@@ -918,20 +918,20 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
// The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;
// (many string types can be constructed from 0 via its null-pointer guise, so we get a
- // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)
+ // broken call to op[key_type], the wrong semantics, and a 4804 warning on Windows)
return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast(0)].is_string();
});
// adjust type if type deduction is not wanted
if (!type_deduction)
{
- // if array is wanted, do not create an object though possible
+ // if an array is wanted, do not create an object though possible
if (manual_type == value_t::array)
{
is_an_object = false;
}
- // if object is wanted but impossible, throw an exception
+ // if an object is wanted but impossible, throw an exception
if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object))
{
JSON_THROW(type_error::create(301, "cannot create object from initializer list", nullptr));
@@ -940,7 +940,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_an_object)
{
- // the initializer list is a list of pairs -> create object
+ // the initializer list is a list of pairs -> create an object
m_data.m_type = value_t::object;
m_data.m_value = value_t::object;
@@ -954,7 +954,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
else
{
- // the initializer list describes an array -> create array
+ // the initializer list describes an array -> create an array
m_data.m_type = value_t::array;
m_data.m_value.array = create(init.begin(), init.end());
}
@@ -1042,16 +1042,16 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_ASSERT(first.m_object != nullptr);
JSON_ASSERT(last.m_object != nullptr);
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
{
JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", nullptr));
}
- // copy type from first iterator
+ // copy type from the first iterator
m_data.m_type = first.m_object->m_data.m_type;
- // check if iterator range is complete for primitive values
+ // check if the iterator range is complete for primitive values
switch (m_data.m_type)
{
case value_t::boolean:
@@ -1231,7 +1231,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
, end_position(other.end_position) // cppcheck-suppress[accessForwarded] TODO check
#endif
{
- // check that passed value is valid
+ // check that the passed value is valid
other.assert_invariant(false); // cppcheck-suppress[accessForwarded]
// invalidate payload
@@ -1257,7 +1257,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_nothrow_move_assignable::value
)
{
- // check that passed value is valid
+ // check that the passed value is valid
other.assert_invariant();
using std::swap;
@@ -1973,7 +1973,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
JSON_CATCH (std::out_of_range&)
{
- // create better exception explanation
+ // create a better exception explanation
JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
} // cppcheck-suppress[missingReturn]
}
@@ -1996,7 +1996,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
JSON_CATCH (std::out_of_range&)
{
- // create better exception explanation
+ // create a better exception explanation
JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
} // cppcheck-suppress[missingReturn]
}
@@ -2086,7 +2086,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
reference operator[](size_type idx)
{
- // implicitly convert null value to an empty array
+ // implicitly convert a null value to an empty array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -2097,7 +2097,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// operator[] only works for arrays
if (JSON_HEDLEY_LIKELY(is_array()))
{
- // fill up array with null values if given idx is outside range
+ // fill up the array with null values if given idx is outside the range
if (idx >= m_data.m_value.array->size())
{
#if JSON_DIAGNOSTICS
@@ -2145,7 +2145,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
reference operator[](typename object_t::key_type key) // NOLINT(performance-unnecessary-value-param)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -2198,7 +2198,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
detail::is_usable_as_basic_json_key_type::value, int > = 0 >
reference operator[](KeyType && key)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -2255,7 +2255,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(key);
if (it != end())
{
@@ -2280,7 +2280,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(key);
if (it != end())
{
@@ -2306,7 +2306,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(std::forward(key));
if (it != end())
{
@@ -2333,7 +2333,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(std::forward(key));
if (it != end())
{
@@ -2356,7 +2356,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if pointer resolves a value, return it or use default value
+ // If the pointer resolves to a value, return it. Otherwise, return
+ // 'default_value'.
JSON_TRY
{
return ptr.get_checked(this).template get();
@@ -2381,7 +2382,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if pointer resolves a value, return it or use default value
+ // If the pointer resolves to a value, return it. Otherwise, return
+ // 'default_value'.
JSON_TRY
{
return ptr.get_checked(this).template get();
@@ -2455,7 +2457,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_same::value, int > = 0 >
IteratorType erase(IteratorType pos) // NOLINT(performance-unnecessary-value-param)
{
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(this != pos.m_object))
{
JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
@@ -2525,7 +2527,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_same::value, int > = 0 >
IteratorType erase(IteratorType first, IteratorType last) // NOLINT(performance-unnecessary-value-param)
{
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object))
{
JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", this));
@@ -3120,7 +3122,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -3128,7 +3130,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (move semantics)
+ // add the element to the array (move semantics)
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->push_back(std::move(val));
set_parent(m_data.m_value.array->back(), old_capacity);
@@ -3153,7 +3155,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -3161,7 +3163,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array
+ // add the element to the array
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->push_back(val);
set_parent(m_data.m_value.array->back(), old_capacity);
@@ -3185,7 +3187,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an object
+ // transform a null object into an object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -3193,7 +3195,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to object
+ // add the element to the object
auto res = m_data.m_value.object->insert(val);
set_parent(res.first->second);
}
@@ -3241,7 +3243,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(311, detail::concat("cannot use emplace_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -3249,7 +3251,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (perfect forwarding)
+ // add the element to the array (perfect forwarding)
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->emplace_back(std::forward(args)...);
return set_parent(m_data.m_value.array->back(), old_capacity);
@@ -3266,7 +3268,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(311, detail::concat("cannot use emplace() with ", type_name()), this));
}
- // transform null object into an object
+ // transform a null object into an object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -3274,11 +3276,11 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (perfect forwarding)
+ // add the element to the array (perfect forwarding)
auto res = m_data.m_value.object->emplace(std::forward(args)...);
set_parent(res.first->second);
- // create result iterator and set iterator to the result of emplace
+ // create a result iterator and set iterator to the result of emplace
auto it = begin();
it.m_it.object_iterator = res.first;
@@ -3442,7 +3444,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/update/
void update(const_iterator first, const_iterator last, bool merge_objects = false) // NOLINT(performance-unnecessary-value-param)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -4002,7 +4004,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
{
- // read width member and use it as indentation parameter if nonzero
+ // read width member and use it as the indentation parameter if nonzero
const bool pretty_print = o.width() > 0;
const auto indentation = pretty_print ? o.width() : 0;
@@ -4797,7 +4799,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
result.at(top_pointer);
}
- // get reference to parent of JSON pointer ptr
+ // get reference to the parent of the JSON pointer ptr
const auto last_path = ptr.back();
ptr.pop_back();
// parent must exist when performing patch add per RFC6902 specs
@@ -4835,7 +4837,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
break;
}
- // if there exists a parent it cannot be primitive
+ // if there exists a parent, it cannot be primitive
case value_t::string: // LCOV_EXCL_LINE
case value_t::boolean: // LCOV_EXCL_LINE
case value_t::number_integer: // LCOV_EXCL_LINE
@@ -4851,7 +4853,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// wrapper for "remove" operation; remove value at ptr
const auto operation_remove = [this, & result](json_pointer & ptr)
{
- // get reference to parent of JSON pointer ptr
+ // get reference to the parent of the JSON pointer ptr
const auto last_path = ptr.back();
ptr.pop_back();
basic_json& parent = result.at(ptr);
@@ -4897,14 +4899,14 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// context-sensitive error message
const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\''); // NOLINT(bugprone-unused-local-non-trivial-variable)
- // check if desired value is present
+ // check if the desired value is present
if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))
{
// NOLINTNEXTLINE(performance-inefficient-string-concatenation)
JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val));
}
- // check if result is of type string
+ // check if the result is of type string
if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string()))
{
// NOLINTNEXTLINE(performance-inefficient-string-concatenation)
@@ -4993,7 +4995,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// ignore out of range errors: success remains false
}
- // throw an exception if test fails
+ // throw an exception if the test fails
if (JSON_HEDLEY_UNLIKELY(!success))
{
JSON_THROW(other_error::create(501, detail::concat("unsuccessful: ", val.dump()), &val));
@@ -5031,7 +5033,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// the patch
basic_json result(value_t::array);
- // if the values are the same, return empty patch
+ // if the values are the same, return an empty patch
if (source == target)
{
return result;
@@ -5145,7 +5147,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
case value_t::discarded:
default:
{
- // both primitive type: replace value
+ // both primitive types: replace value
result.push_back(
{
{"op", "replace"}, {"path", path}, {"value", target}
diff --git a/include/nlohmann/ordered_map.hpp b/include/nlohmann/ordered_map.hpp
index d830c6d7e..2a293fc93 100644
--- a/include/nlohmann/ordered_map.hpp
+++ b/include/nlohmann/ordered_map.hpp
@@ -226,7 +226,7 @@ template ,
// Since we cannot move const Keys, we re-construct them in place.
// We start at first and re-construct (viz. copy) the elements from
- // the back of the vector. Example for first iteration:
+ // the back of the vector. Example for the first iteration:
// ,--------.
// v | destroy e and re-construct with h
diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index 01410e76c..31590ff65 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -2394,7 +2394,7 @@ JSON_HEDLEY_DIAGNOSTIC_POP
#endif
// C++ language standard detection
-// if the user manually specified the used c++ version this is skipped
+// if the user manually specified the used C++ version, this is skipped
#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
#if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L)
#define JSON_HAS_CPP_23
@@ -2491,7 +2491,7 @@ JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#ifndef JSON_HAS_RANGES
- // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
+ // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has a syntax error
#if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
#define JSON_HAS_RANGES 0
#elif defined(__cpp_lib_ranges)
@@ -2568,7 +2568,7 @@ JSON_HEDLEY_DIAGNOSTIC_POP
#define JSON_ASSERT(x) assert(x)
#endif
-// allow to access some private functions (needed by the test suite)
+// allow accessing some private functions (needed by the test suite)
#if defined(JSON_TESTS_PRIVATE)
#define JSON_PRIVATE_UNLESS_TESTED public
#else
@@ -3096,10 +3096,10 @@ inline void replace_substring(StringType& s, const StringType& f,
const StringType& t)
{
JSON_ASSERT(!f.empty());
- for (auto pos = s.find(f); // find first occurrence of f
+ for (auto pos = s.find(f); // find the first occurrence of f
pos != StringType::npos; // make sure f was found
s.replace(pos, f.size(), t), // replace with t, and
- pos = s.find(f, pos + t.size())) // find next occurrence of f
+ pos = s.find(f, pos + t.size())) // find the next occurrence of f
{}
}
@@ -3579,12 +3579,12 @@ namespace detail
// Note to maintainers:
//
-// Every trait in this file expects a non CV-qualified type.
+// Every trait in this file expects a non-CV-qualified type.
// The only exceptions are in the 'aliases for detected' section
-// (i.e. those of the form: decltype(T::member_function(std::declval())))
+// (i.e., those of the form: decltype(T::member_function(std::declval())))
//
// In this case, T has to be properly CV-qualified to constraint the function arguments
-// (e.g. to_json(BasicJsonType&, const T&))
+// (e.g., to_json(BasicJsonType&, const T&))
template struct is_basic_json : std::false_type {};
@@ -3592,7 +3592,7 @@ NLOHMANN_BASIC_JSON_TPL_DECLARATION
struct is_basic_json : std::true_type {};
// used by exceptions create() member functions
-// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
+// true_type for the pointer to possibly cv-qualified basic_json or std::nullptr_t
// false_type otherwise
template
struct is_basic_json_context :
@@ -3818,7 +3818,7 @@ template struct negation : std::integral_constant < bool, !B::value > {
// Reimplementation of is_constructible and is_default_constructible, due to them being broken for
// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367).
-// This causes compile errors in e.g. clang 3.5 or gcc 4.9.
+// This causes compile errors in e.g., Clang 3.5 or GCC 4.9.
template
struct is_default_constructible : std::is_default_constructible {};
@@ -3898,7 +3898,7 @@ using range_value_t = value_type_t>>;
// The following implementation of is_complete_type is taken from
// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/
-// and is written by Xiang Fan who agreed to using it in this library.
+// and is written by Xiang Fan who agreed to use it in this library.
template
struct is_complete_type : std::false_type {};
@@ -4135,7 +4135,7 @@ decltype(std::declval()(std::declval(), std::declval()))
template
using detect_is_transparent = typename T::is_transparent;
-// type trait to check if KeyType can be used as object key (without a BasicJsonType)
+// type trait to check if KeyType can be used as an object key (without a BasicJsonType)
// see is_usable_as_basic_json_key_type below
template>
@@ -4149,7 +4149,7 @@ using is_usable_as_key_type = typename std::conditional <
std::true_type,
std::false_type >::type;
-// type trait to check if KeyType can be used as object key
+// type trait to check if KeyType can be used as an object key
// true if:
// - KeyType is comparable with BasicJsonType::object_t::key_type
// - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
@@ -4513,7 +4513,7 @@ NLOHMANN_JSON_NAMESPACE_END
// emitted in every translation unit. This issue cannot be fixed with a
// header-only library as there is no implementation file to move these
// functions to. As a result, we suppress this warning here to avoid client
-// code to stumble over this. See https://github.com/nlohmann/json/issues/4087
+// code stumbling over this. See https://github.com/nlohmann/json/issues/4087
// for a discussion.
#if defined(__clang__)
#pragma clang diagnostic push
@@ -5209,7 +5209,7 @@ inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
}
// overload for arithmetic types, not chosen for basic_json template arguments
-// (BooleanType, etc..); note: Is it really necessary to provide explicit
+// (BooleanType, etc.); note: Is it really necessary to provide explicit
// overloads for boolean_t etc. in case of a custom BooleanType which is not
// an arithmetic type?
template < typename BasicJsonType, typename ArithmeticType,
@@ -6595,7 +6595,7 @@ class input_stream_adapter
: is(&i), sb(i.rdbuf())
{}
- // delete because of pointer members
+ // deleted because of pointer members
input_stream_adapter(const input_stream_adapter&) = delete;
input_stream_adapter& operator=(input_stream_adapter&) = delete;
input_stream_adapter& operator=(input_stream_adapter&&) = delete;
@@ -6609,7 +6609,7 @@ class input_stream_adapter
// std::istream/std::streambuf use std::char_traits::to_int_type, to
// ensure that std::char_traits::eof() and the character 0xFF do not
- // end up as the same value, e.g. 0xFFFFFFFF.
+ // end up as the same value, e.g., 0xFFFFFFFF.
std::char_traits::int_type get_character()
{
auto res = sb->sbumpc();
@@ -6831,7 +6831,7 @@ class wide_string_input_adapter
typename std::char_traits::int_type get_character() noexcept
{
- // check if buffer needs to be filled
+ // check if the buffer needs to be filled
if (utf8_bytes_index == utf8_bytes_filled)
{
fill_buffer();
@@ -7188,7 +7188,7 @@ class lexer : public lexer_base
, decimal_point_char(static_cast(get_decimal_point()))
{}
- // delete because of pointer members
+ // deleted because of pointer members
lexer(const lexer&) = delete;
lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor)
lexer& operator=(lexer&) = delete;
@@ -7323,10 +7323,10 @@ class lexer : public lexer_base
while (true)
{
- // get next character
+ // get the next character
switch (get())
{
- // end of file while parsing string
+ // end of file while parsing the string
case char_traits::eof():
{
error_message = "invalid string: missing closing quote";
@@ -7412,7 +7412,7 @@ class lexer : public lexer_base
(static_cast(codepoint1) << 10u)
// low surrogate occupies the least significant 15 bits
+ static_cast(codepoint2)
- // there is still the 0xD800, 0xDC00 and 0x10000 noise
+ // there is still the 0xD800, 0xDC00, and 0x10000 noise
// in the result, so we have to subtract with:
// (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
- 0x35FDC00u);
@@ -7438,7 +7438,7 @@ class lexer : public lexer_base
}
}
- // result of the above calculation yields a proper codepoint
+ // the result of the above calculation yields a proper codepoint
JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);
// translate codepoint into bytes
@@ -7889,7 +7889,7 @@ class lexer : public lexer_base
break;
}
- // remaining bytes (80..C1 and F5..FF) are ill-formed
+ // the remaining bytes (80..C1 and F5..FF) are ill-formed
default:
{
error_message = "invalid string: ill-formed UTF-8 byte";
@@ -8034,7 +8034,7 @@ class lexer : public lexer_base
reset();
// the type of the parsed number; initially set to unsigned; will be
- // changed if minus sign, decimal point or exponent is read
+ // changed if minus sign, decimal point, or exponent is read
token_type number_type = token_type::value_unsigned;
// state (init): we just found out we need to scan a number
@@ -8406,7 +8406,7 @@ scan_number_done:
if (next_unget)
{
- // just reset the next_unget variable and work with current
+ // only reset the next_unget variable and work with current
next_unget = false;
}
else
@@ -8585,7 +8585,7 @@ scan_number_done:
return token_type::parse_error;
}
- // read next character and ignore whitespace
+ // read the next character and ignore whitespace
skip_whitespace();
// ignore comments
@@ -8949,7 +8949,7 @@ class json_sax_dom_parser
JSON_ASSERT(!ref_stack.empty());
JSON_ASSERT(ref_stack.back()->is_object());
- // add null at given key and store the reference for later
+ // add null at the given key and store the reference for later
object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
return true;
}
@@ -9265,11 +9265,11 @@ class json_sax_dom_callback_parser
{
BasicJsonType k = BasicJsonType(val);
- // check callback for key
+ // check callback for the key
const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k);
key_keep_stack.push_back(keep);
- // add discarded value at given key and store the reference for later
+ // add discarded value at the given key and store the reference for later
if (keep && ref_stack.back())
{
object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded);
@@ -10149,7 +10149,7 @@ class binary_reader
return get_number(input_format_t::bson, value) && sax->number_unsigned(value);
}
- default: // anything else not supported (yet)
+ default: // anything else is not supported (yet)
{
std::array cr{{}};
static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
@@ -10546,7 +10546,7 @@ class binary_reader
case 0xD2:
case 0xD3:
case 0xD4:
- case 0xD8: // tagged item (1 bytes follow)
+ case 0xD8: // tagged item (1 byte follows)
case 0xD9: // tagged item (2 bytes follow)
case 0xDA: // tagged item (4 bytes follow)
case 0xDB: // tagged item (8 bytes follow)
@@ -10598,7 +10598,7 @@ class binary_reader
case cbor_tag_handler_t::store:
{
binary_t b;
- // use binary subtype and store in binary container
+ // use binary subtype and store in a binary container
switch (current)
{
case 0xD8:
@@ -10667,7 +10667,7 @@ class binary_reader
const auto byte1 = static_cast(byte1_raw);
const auto byte2 = static_cast(byte2_raw);
- // code from RFC 7049, Appendix D, Figure 3:
+ // Code from RFC 7049, Appendix D, Figure 3:
// As half-precision floating-point numbers were only added
// to IEEE 754 in 2008, today's programming platforms often
// still only have limited support for them. It is very
@@ -11974,7 +11974,7 @@ class binary_reader
{
break;
}
- if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
+ if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
{
return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
}
@@ -12232,7 +12232,7 @@ class binary_reader
const auto byte1 = static_cast(byte1_raw);
const auto byte2 = static_cast(byte2_raw);
- // code from RFC 7049, Appendix D, Figure 3:
+ // Code from RFC 7049, Appendix D, Figure 3:
// As half-precision floating-point numbers were only added
// to IEEE 754 in 2008, today's programming platforms often
// still only have limited support for them. It is very
@@ -12520,7 +12520,7 @@ class binary_reader
bool get_ubjson_high_precision_number()
{
- // get size of following number string
+ // get the size of the following number string
std::size_t size{};
bool no_ndarray = true;
auto res = get_ubjson_size_value(size, no_ndarray);
@@ -12618,7 +12618,7 @@ class binary_reader
chars_read += new_chars_read;
if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
{
- // in case of failure, advance position by 1 to report failing location
+ // in case of failure, advance position by 1 to report the failing location
++chars_read;
sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
return false;
@@ -13016,7 +13016,7 @@ class parser
exception_message(token_type::end_of_input, "value"), nullptr));
}
- // in case of an error, return discarded value
+ // in case of an error, return a discarded value
if (sdp.is_errored())
{
result = value_t::discarded;
@@ -13043,7 +13043,7 @@ class parser
parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr));
}
- // in case of an error, return discarded value
+ // in case of an error, return a discarded value
if (sdp.is_errored())
{
result = value_t::discarded;
@@ -13246,7 +13246,7 @@ class parser
case token_type::parse_error:
{
- // using "uninitialized" to avoid "expected" message
+ // using "uninitialized" to avoid an "expected" message
return sax->parse_error(m_lexer.get_position(),
m_lexer.get_token_string(),
parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
@@ -13466,9 +13466,9 @@ namespace detail
@brief an iterator for primitive JSON types
This class models an iterator for primitive JSON types (boolean, number,
-string). It's only purpose is to allow the iterator/const_iterator classes
+string). Its only purpose is to allow the iterator/const_iterator classes
to "iterate" over primitive values. Internally, the iterator is modeled by
-a `difference_type` variable. Value begin_value (`0`) models the begin,
+a `difference_type` variable. Value begin_value (`0`) models the begin and
end_value (`1`) models past the end.
*/
class primitive_iterator_t
@@ -13633,7 +13633,7 @@ NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{
-// forward declare, to be able to friend it later on
+// forward declare to be able to friend it later on
template class iteration_proxy;
template class iteration_proxy_value;
@@ -14841,7 +14841,7 @@ class json_pointer
{
if (reference_token == "0")
{
- // start a new array if reference token is 0
+ // start a new array if the reference token is 0
result = &result->operator[](0);
}
else
@@ -14870,7 +14870,7 @@ class json_pointer
The following code is only reached if there exists a reference
token _and_ the current value is primitive. In this case, we have
an error situation, because primitive values may only occur as
- single value; that is, with an empty list of reference tokens.
+ a single value; that is, with an empty list of reference tokens.
*/
case detail::value_t::string:
case detail::value_t::boolean:
@@ -14914,7 +14914,7 @@ class json_pointer
// convert null values to arrays or objects before continuing
if (ptr->is_null())
{
- // check if reference token is a number
+ // check if the reference token is a number
const bool nums =
std::all_of(reference_token.begin(), reference_token.end(),
[](const unsigned char x)
@@ -14922,7 +14922,7 @@ class json_pointer
return std::isdigit(x);
});
- // change value to array for numbers or "-" or to object otherwise
+ // change value to an array for numbers or "-" or to object otherwise
*ptr = (nums || reference_token == "-")
? detail::value_t::array
: detail::value_t::object;
@@ -15165,7 +15165,7 @@ class json_pointer
{
if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))
{
- // first char should be between '1' and '9'
+ // the first char should be between '1' and '9'
return false;
}
for (std::size_t i = 1; i < reference_token.size(); i++)
@@ -15229,7 +15229,7 @@ class json_pointer
return result;
}
- // check if nonempty reference string begins with slash
+ // check if a nonempty reference string begins with slash
if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))
{
JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
@@ -15303,7 +15303,7 @@ class json_pointer
}
else
{
- // iterate array and use index as reference string
+ // iterate array and use index as a reference string
for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
{
flatten(detail::concat(reference_string, '/', std::to_string(i)),
@@ -15341,7 +15341,7 @@ class json_pointer
case detail::value_t::discarded:
default:
{
- // add primitive value with its reference string
+ // add a primitive value with its reference string
result[reference_string] = value;
break;
}
@@ -15377,17 +15377,17 @@ class json_pointer
JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second));
}
- // assign value to reference pointed to by JSON pointer; Note that if
- // the JSON pointer is "" (i.e., points to the whole value), function
- // get_and_create returns a reference to result itself. An assignment
- // will then create a primitive value.
+ // Assign the value to the reference pointed to by JSON pointer. Note
+ // that if the JSON pointer is "" (i.e., points to the whole value),
+ // function get_and_create returns a reference to the result itself.
+ // An assignment will then create a primitive value.
json_pointer(element.first).get_and_create(result) = element.second;
}
return result;
}
- // can't use conversion operator because of ambiguity
+ // can't use the conversion operator because of ambiguity
json_pointer convert() const&
{
json_pointer result;
@@ -15482,7 +15482,7 @@ class json_pointer
};
#if !JSON_HAS_THREE_WAY_COMPARISON
-// functions cannot be defined inside class due to ODR violations
+// functions cannot be defined inside the class due to ODR violations
template
inline bool operator==(const json_pointer& lhs,
const json_pointer& rhs) noexcept
@@ -17344,7 +17344,7 @@ class binary_writer
{
return 'L';
}
- // anything else is treated as high-precision number
+ // anything else is treated as a high-precision number
return 'H'; // LCOV_EXCL_LINE
}
@@ -17382,7 +17382,7 @@ class binary_writer
{
return 'M';
}
- // anything else is treated as high-precision number
+ // anything else is treated as a high-precision number
return 'H'; // LCOV_EXCL_LINE
}
@@ -17548,11 +17548,11 @@ class binary_writer
template
void write_number(const NumberType n, const bool OutputIsLittleEndian = false)
{
- // step 1: write number to array of length NumberType
+ // step 1: write the number to an array of length NumberType
std::array vec{};
std::memcpy(vec.data(), &n, sizeof(NumberType));
- // step 2: write array to output (with possible reordering)
+ // step 2: write the array to output (with possible reordering)
if (is_little_endian != OutputIsLittleEndian)
{
// reverse byte order prior to conversion if necessary
@@ -17802,7 +17802,7 @@ struct diyfp // f * 2^e
// p_lo = p0_lo + (Q << 32)
//
// But in this particular case here, the full p_lo is not required.
- // Effectively we only need to add the highest bit in p_lo to p_hi (and
+ // Effectively, we only need to add the highest bit in p_lo to p_hi (and
// Q_hi + 1 does not overflow).
Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up
@@ -17892,7 +17892,7 @@ boundaries compute_boundaries(FloatType value)
// Compute the boundaries m- and m+ of the floating-point value
// v = f * 2^e.
//
- // Determine v- and v+, the floating-point predecessor and successor if v,
+ // Determine v- and v+, the floating-point predecessor and successor of v,
// respectively.
//
// v- = v - 2^e if f != 2^(p-1) or e == e_min (A)
@@ -18047,7 +18047,7 @@ inline cached_power get_cached_power_for_binary_exponent(int e)
// (A smaller distance gamma-alpha would require a larger table.)
// NB:
- // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34.
+ // Actually, this function returns c, such that -60 <= e_c + e + 64 <= -34.
constexpr int kCachedPowersMinDecExp = -300;
constexpr int kCachedPowersDecStep = 8;
@@ -18359,8 +18359,8 @@ inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent,
decimal_exponent += n;
- // We may now just stop. But instead look if the buffer could be
- // decremented to bring V closer to w.
+ // We may now just stop. But instead, it looks as if the buffer
+ // could be decremented to bring V closer to w.
//
// pow10 = 10^n is now 1 ulp in the decimal representation V.
// The rounding procedure works with diyfp's with an implicit
@@ -18767,7 +18767,7 @@ char* to_chars(char* first, const char* last, FloatType value)
// Compute v = buffer * 10^decimal_exponent.
// The decimal digits are stored in the buffer, which needs to be interpreted
// as an unsigned decimal integer.
- // len is the length of the buffer, i.e. the number of decimal digits.
+ // len is the length of the buffer, i.e., the number of decimal digits.
int len = 0;
int decimal_exponent = 0;
dtoa_impl::grisu2(first, len, decimal_exponent, value);
@@ -18848,7 +18848,7 @@ class serializer
, error_handler(error_handler_)
{}
- // delete because of pointer members
+ // deleted because of pointer members
serializer(const serializer&) = delete;
serializer& operator=(const serializer&) = delete;
serializer(serializer&&) = delete;
@@ -19346,7 +19346,7 @@ class serializer
break;
}
- default: // decode found yet incomplete multi-byte code point
+ default: // decode found yet incomplete multibyte code point
{
if (!ensure_ascii)
{
@@ -19600,7 +19600,7 @@ class serializer
void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/)
{
- // get number of digits for a float -> text -> float round-trip
+ // get the number of digits for a float -> text -> float round-trip
static constexpr auto d = std::numeric_limits::max_digits10;
// the actual conversion
@@ -19609,10 +19609,10 @@ class serializer
// negative value indicates an error
JSON_ASSERT(len > 0);
- // check if buffer was large enough
+ // check if the buffer was large enough
JSON_ASSERT(static_cast(len) < number_buffer.size());
- // erase thousands separator
+ // erase thousands separators
if (thousands_sep != '\0')
{
// NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081
@@ -19720,8 +19720,8 @@ class serializer
* Helper function for dump_integer
*
* This function takes a negative signed integer and returns its absolute
- * value as unsigned integer. The plus/minus shuffling is necessary as we can
- * not directly remove the sign of an arbitrary signed integer as the
+ * value as an unsigned integer. The plus/minus shuffling is necessary as we
+ * cannot directly remove the sign of an arbitrary signed integer as the
* absolute values of INT_MIN and INT_MAX are usually not the same. See
* #1708 for details.
*/
@@ -19995,7 +19995,7 @@ template ,
// Since we cannot move const Keys, we re-construct them in place.
// We start at first and re-construct (viz. copy) the elements from
- // the back of the vector. Example for first iteration:
+ // the back of the vector. Example for the first iteration:
// ,--------.
// v | destroy e and re-construct with h
@@ -20629,7 +20629,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
(t == value_t::binary && binary == nullptr)
)
{
- //not initialized (e.g. due to exception in the ctor)
+ //not initialized (e.g., due to exception in the ctor)
return;
}
if (t == value_t::array || t == value_t::object)
@@ -20654,7 +20654,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
while (!stack.empty())
{
- // move the last item to local variable to be processed
+ // move the last item to a local variable to be processed
basic_json current_item(std::move(stack.back()));
stack.pop_back();
@@ -20676,7 +20676,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
current_item.m_data.m_value.object->clear();
}
- // it's now safe that current_item get destructed
+ // it's now safe that current_item gets destructed
// since it doesn't have any children
}
}
@@ -20984,20 +20984,20 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
{
// The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;
// (many string types can be constructed from 0 via its null-pointer guise, so we get a
- // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)
+ // broken call to op[key_type], the wrong semantics, and a 4804 warning on Windows)
return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast(0)].is_string();
});
// adjust type if type deduction is not wanted
if (!type_deduction)
{
- // if array is wanted, do not create an object though possible
+ // if an array is wanted, do not create an object though possible
if (manual_type == value_t::array)
{
is_an_object = false;
}
- // if object is wanted but impossible, throw an exception
+ // if an object is wanted but impossible, throw an exception
if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object))
{
JSON_THROW(type_error::create(301, "cannot create object from initializer list", nullptr));
@@ -21006,7 +21006,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
if (is_an_object)
{
- // the initializer list is a list of pairs -> create object
+ // the initializer list is a list of pairs -> create an object
m_data.m_type = value_t::object;
m_data.m_value = value_t::object;
@@ -21020,7 +21020,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
else
{
- // the initializer list describes an array -> create array
+ // the initializer list describes an array -> create an array
m_data.m_type = value_t::array;
m_data.m_value.array = create(init.begin(), init.end());
}
@@ -21108,16 +21108,16 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_ASSERT(first.m_object != nullptr);
JSON_ASSERT(last.m_object != nullptr);
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
{
JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", nullptr));
}
- // copy type from first iterator
+ // copy type from the first iterator
m_data.m_type = first.m_object->m_data.m_type;
- // check if iterator range is complete for primitive values
+ // check if the iterator range is complete for primitive values
switch (m_data.m_type)
{
case value_t::boolean:
@@ -21297,7 +21297,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
, end_position(other.end_position) // cppcheck-suppress[accessForwarded] TODO check
#endif
{
- // check that passed value is valid
+ // check that the passed value is valid
other.assert_invariant(false); // cppcheck-suppress[accessForwarded]
// invalidate payload
@@ -21323,7 +21323,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_nothrow_move_assignable::value
)
{
- // check that passed value is valid
+ // check that the passed value is valid
other.assert_invariant();
using std::swap;
@@ -22039,7 +22039,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
JSON_CATCH (std::out_of_range&)
{
- // create better exception explanation
+ // create a better exception explanation
JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
} // cppcheck-suppress[missingReturn]
}
@@ -22062,7 +22062,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
}
JSON_CATCH (std::out_of_range&)
{
- // create better exception explanation
+ // create a better exception explanation
JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
} // cppcheck-suppress[missingReturn]
}
@@ -22152,7 +22152,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
reference operator[](size_type idx)
{
- // implicitly convert null value to an empty array
+ // implicitly convert a null value to an empty array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -22163,7 +22163,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// operator[] only works for arrays
if (JSON_HEDLEY_LIKELY(is_array()))
{
- // fill up array with null values if given idx is outside range
+ // fill up the array with null values if given idx is outside the range
if (idx >= m_data.m_value.array->size())
{
#if JSON_DIAGNOSTICS
@@ -22211,7 +22211,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
reference operator[](typename object_t::key_type key) // NOLINT(performance-unnecessary-value-param)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -22264,7 +22264,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
detail::is_usable_as_basic_json_key_type::value, int > = 0 >
reference operator[](KeyType && key)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -22321,7 +22321,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(key);
if (it != end())
{
@@ -22346,7 +22346,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(key);
if (it != end())
{
@@ -22372,7 +22372,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(std::forward(key));
if (it != end())
{
@@ -22399,7 +22399,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if key is found, return value and given default value otherwise
+ // If 'key' is found, return its value. Otherwise, return `default_value'.
const auto it = find(std::forward(key));
if (it != end())
{
@@ -22422,7 +22422,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if pointer resolves a value, return it or use default value
+ // If the pointer resolves to a value, return it. Otherwise, return
+ // 'default_value'.
JSON_TRY
{
return ptr.get_checked(this).template get();
@@ -22447,7 +22448,8 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// value only works for objects
if (JSON_HEDLEY_LIKELY(is_object()))
{
- // if pointer resolves a value, return it or use default value
+ // If the pointer resolves to a value, return it. Otherwise, return
+ // 'default_value'.
JSON_TRY
{
return ptr.get_checked(this).template get();
@@ -22521,7 +22523,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_same::value, int > = 0 >
IteratorType erase(IteratorType pos) // NOLINT(performance-unnecessary-value-param)
{
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(this != pos.m_object))
{
JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
@@ -22591,7 +22593,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
std::is_same::value, int > = 0 >
IteratorType erase(IteratorType first, IteratorType last) // NOLINT(performance-unnecessary-value-param)
{
- // make sure iterator fits the current value
+ // make sure the iterator fits the current value
if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object))
{
JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", this));
@@ -23186,7 +23188,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -23194,7 +23196,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (move semantics)
+ // add the element to the array (move semantics)
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->push_back(std::move(val));
set_parent(m_data.m_value.array->back(), old_capacity);
@@ -23219,7 +23221,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -23227,7 +23229,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array
+ // add the element to the array
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->push_back(val);
set_parent(m_data.m_value.array->back(), old_capacity);
@@ -23251,7 +23253,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
}
- // transform null object into an object
+ // transform a null object into an object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -23259,7 +23261,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to object
+ // add the element to the object
auto res = m_data.m_value.object->insert(val);
set_parent(res.first->second);
}
@@ -23307,7 +23309,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(311, detail::concat("cannot use emplace_back() with ", type_name()), this));
}
- // transform null object into an array
+ // transform a null object into an array
if (is_null())
{
m_data.m_type = value_t::array;
@@ -23315,7 +23317,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (perfect forwarding)
+ // add the element to the array (perfect forwarding)
const auto old_capacity = m_data.m_value.array->capacity();
m_data.m_value.array->emplace_back(std::forward(args)...);
return set_parent(m_data.m_value.array->back(), old_capacity);
@@ -23332,7 +23334,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
JSON_THROW(type_error::create(311, detail::concat("cannot use emplace() with ", type_name()), this));
}
- // transform null object into an object
+ // transform a null object into an object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -23340,11 +23342,11 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
assert_invariant();
}
- // add element to array (perfect forwarding)
+ // add the element to the array (perfect forwarding)
auto res = m_data.m_value.object->emplace(std::forward(args)...);
set_parent(res.first->second);
- // create result iterator and set iterator to the result of emplace
+ // create a result iterator and set iterator to the result of emplace
auto it = begin();
it.m_it.object_iterator = res.first;
@@ -23508,7 +23510,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/update/
void update(const_iterator first, const_iterator last, bool merge_objects = false) // NOLINT(performance-unnecessary-value-param)
{
- // implicitly convert null value to an empty object
+ // implicitly convert a null value to an empty object
if (is_null())
{
m_data.m_type = value_t::object;
@@ -24068,7 +24070,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
/// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
{
- // read width member and use it as indentation parameter if nonzero
+ // read width member and use it as the indentation parameter if nonzero
const bool pretty_print = o.width() > 0;
const auto indentation = pretty_print ? o.width() : 0;
@@ -24863,7 +24865,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
result.at(top_pointer);
}
- // get reference to parent of JSON pointer ptr
+ // get reference to the parent of the JSON pointer ptr
const auto last_path = ptr.back();
ptr.pop_back();
// parent must exist when performing patch add per RFC6902 specs
@@ -24901,7 +24903,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
break;
}
- // if there exists a parent it cannot be primitive
+ // if there exists a parent, it cannot be primitive
case value_t::string: // LCOV_EXCL_LINE
case value_t::boolean: // LCOV_EXCL_LINE
case value_t::number_integer: // LCOV_EXCL_LINE
@@ -24917,7 +24919,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// wrapper for "remove" operation; remove value at ptr
const auto operation_remove = [this, & result](json_pointer & ptr)
{
- // get reference to parent of JSON pointer ptr
+ // get reference to the parent of the JSON pointer ptr
const auto last_path = ptr.back();
ptr.pop_back();
basic_json& parent = result.at(ptr);
@@ -24963,14 +24965,14 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// context-sensitive error message
const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\''); // NOLINT(bugprone-unused-local-non-trivial-variable)
- // check if desired value is present
+ // check if the desired value is present
if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))
{
// NOLINTNEXTLINE(performance-inefficient-string-concatenation)
JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val));
}
- // check if result is of type string
+ // check if the result is of type string
if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string()))
{
// NOLINTNEXTLINE(performance-inefficient-string-concatenation)
@@ -25059,7 +25061,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// ignore out of range errors: success remains false
}
- // throw an exception if test fails
+ // throw an exception if the test fails
if (JSON_HEDLEY_UNLIKELY(!success))
{
JSON_THROW(other_error::create(501, detail::concat("unsuccessful: ", val.dump()), &val));
@@ -25097,7 +25099,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
// the patch
basic_json result(value_t::array);
- // if the values are the same, return empty patch
+ // if the values are the same, return an empty patch
if (source == target)
{
return result;
@@ -25211,7 +25213,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
case value_t::discarded:
default:
{
- // both primitive type: replace value
+ // both primitive types: replace value
result.push_back(
{
{"op", "replace"}, {"path", path}, {"value", target}
diff --git a/tools/serve_header/README.md b/tools/serve_header/README.md
index 123fd4479..0d0ed69f6 100644
--- a/tools/serve_header/README.md
+++ b/tools/serve_header/README.md
@@ -17,7 +17,7 @@ The header file is automatically amalgamated on demand.
(see `tools/serve_header/requirements.txt`)
2. To serve the header over HTTPS (which is required by Compiler Explorer at this time), a certificate is needed.
- The recommended method for creating a locally-trusted certificate is to use [`mkcert`](https://github.com/FiloSottile/mkcert).
+ The recommended method for creating a locally trusted certificate is to use [`mkcert`](https://github.com/FiloSottile/mkcert).
- Install the `mkcert` certificate authority into your trust store(s):
```
$ mkcert -install