Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
4396a68d
Unverified
Commit
4396a68d
authored
Apr 11, 2020
by
Niels Lohmann
Committed by
GitHub
Apr 11, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1984 from dota17/document-fix
Modify the document about operator==
parents
062fd384
2e7d340d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
5 deletions
+36
-5
include/nlohmann/json.hpp
include/nlohmann/json.hpp
+18
-2
single_include/nlohmann/json.hpp
single_include/nlohmann/json.hpp
+18
-3
No files found.
include/nlohmann/json.hpp
View file @
4396a68d
...
@@ -5632,13 +5632,13 @@ class basic_json
...
@@ -5632,13 +5632,13 @@ class basic_json
their stored values are the same according to their respective
their stored values are the same according to their respective
`operator==`.
`operator==`.
- Integer and floating-point numbers are automatically converted before
- Integer and floating-point numbers are automatically converted before
comparison. Note tha
n
two NaN values are always treated as unequal.
comparison. Note tha
t
two NaN values are always treated as unequal.
- Two JSON null values are equal.
- Two JSON null values are equal.
@note Floating-point inside JSON values numbers are compared with
@note Floating-point inside JSON values numbers are compared with
`json::number_float_t::operator==` which is `double::operator==` by
`json::number_float_t::operator==` which is `double::operator==` by
default. To compare floating-point while respecting an epsilon, an alternative
default. To compare floating-point while respecting an epsilon, an alternative
[comparison function](https://github.com/mariokonrad/marnav/blob/master/
src
/marnav/math/floatingpoint.hpp#L34-#L39)
[comparison function](https://github.com/mariokonrad/marnav/blob/master/
include
/marnav/math/floatingpoint.hpp#L34-#L39)
could be used, for instance
could be used, for instance
@code {.cpp}
@code {.cpp}
template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
...
@@ -5647,6 +5647,22 @@ class basic_json
...
@@ -5647,6 +5647,22 @@ class basic_json
return std::abs(a - b) <= epsilon;
return std::abs(a - b) <= epsilon;
}
}
@endcode
@endcode
Or you can self-defined operator equal function like this:
@code {.cpp}
bool my_equal(const_reference lhs, const_reference rhs) {
const auto lhs_type lhs.type();
const auto rhs_type rhs.type();
if (lhs_type == rhs_type) {
switch(lhs_type)
// self_defined case
case value_t::number_float:
return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();
// other cases remain the same with the original
...
}
...
}
@endcode
@note NaN values never compare equal to themselves or to other NaN values.
@note NaN values never compare equal to themselves or to other NaN values.
...
...
single_include/nlohmann/json.hpp
View file @
4396a68d
...
@@ -20491,13 +20491,13 @@ class basic_json
...
@@ -20491,13 +20491,13 @@ class basic_json
their stored values are the same according to their respective
their stored values are the same according to their respective
`operator==`.
`operator==`.
- Integer and floating-point numbers are automatically converted before
- Integer and floating-point numbers are automatically converted before
comparison. Note tha
n
two NaN values are always treated as unequal.
comparison. Note tha
t
two NaN values are always treated as unequal.
- Two JSON null values are equal.
- Two JSON null values are equal.
@note Floating-point inside JSON values numbers are compared with
@note Floating-point inside JSON values numbers are compared with
`json::number_float_t::operator==` which is `double::operator==` by
`json::number_float_t::operator==` which is `double::operator==` by
default. To compare floating-point while respecting an epsilon, an alternative
default. To compare floating-point while respecting an epsilon, an alternative
[comparison function](https://github.com/mariokonrad/marnav/blob/master/
src
/marnav/math/floatingpoint.hpp#L34-#L39)
[comparison function](https://github.com/mariokonrad/marnav/blob/master/
include
/marnav/math/floatingpoint.hpp#L34-#L39)
could be used, for instance
could be used, for instance
@code {.cpp}
@code {.cpp}
template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
template<typename T, typename = typename std::enable_if<std::is_floating_point<T>::value, T>::type>
...
@@ -20506,7 +20506,22 @@ class basic_json
...
@@ -20506,7 +20506,22 @@ class basic_json
return std::abs(a - b) <= epsilon;
return std::abs(a - b) <= epsilon;
}
}
@endcode
@endcode
Or you can self-defined operator equal function like this:
@code {.cpp}
bool my_equal(const_reference lhs, const_reference rhs) {
const auto lhs_type lhs.type();
const auto rhs_type rhs.type();
if (lhs_type == rhs_type) {
switch(lhs_type)
// self_defined case
case value_t::number_float:
return std::abs(lhs - rhs) <= std::numeric_limits<float>::epsilon();
// other cases remain the same with the original
...
}
...
}
@endcode
@note NaN values never compare equal to themselves or to other NaN values.
@note NaN values never compare equal to themselves or to other NaN values.
@param[in] lhs first JSON value to consider
@param[in] lhs first JSON value to consider
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment