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
7056b375
Unverified
Commit
7056b375
authored
8 years ago
by
Théo DELRIEU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add detail/value_t.hpp
parent
8c555db9
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
65 deletions
+81
-65
Makefile
Makefile
+2
-1
src/detail/value_t.hpp
src/detail/value_t.hpp
+78
-0
src/json.hpp
src/json.hpp
+1
-64
No files found.
Makefile
View file @
7056b375
...
...
@@ -6,7 +6,8 @@ SRCS = ${SRCDIR}/json.hpp \
${SRCDIR}
/detail/macro_scope.hpp
\
${SRCDIR}
/detail/macro_unscope.hpp
\
${SRCDIR}
/detail/meta.hpp
\
${SRCDIR}
/detail/exceptions.hpp
${SRCDIR}
/detail/exceptions.hpp
\
${SRCDIR}
/detail/value_t.hpp
...
...
This diff is collapsed.
Click to expand it.
src/detail/value_t.hpp
0 → 100644
View file @
7056b375
#ifndef NLOHMANN_JSON_DETAIL_VALUE_T_HPP
#define NLOHMANN_JSON_DETAIL_VALUE_T_HPP
#include <ciso646> // and
#include <cstddef> // size_t
#include <cstdint> // uint8_t
namespace
nlohmann
{
namespace
detail
{
///////////////////////////
// JSON type enumeration //
///////////////////////////
/*!
@brief the JSON type enumeration
This enumeration collects the different JSON types. It is internally used to
distinguish the stored values, and the functions @ref basic_json::is_null(),
@ref basic_json::is_object(), @ref basic_json::is_array(),
@ref basic_json::is_string(), @ref basic_json::is_boolean(),
@ref basic_json::is_number() (with @ref basic_json::is_number_integer(),
@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),
@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and
@ref basic_json::is_structured() rely on it.
@note There are three enumeration entries (number_integer, number_unsigned, and
number_float), because the library distinguishes these three types for numbers:
@ref basic_json::number_unsigned_t is used for unsigned integers,
@ref basic_json::number_integer_t is used for signed integers, and
@ref basic_json::number_float_t is used for floating-point numbers or to
approximate integers which do not fit in the limits of their respective type.
@sa @ref basic_json::basic_json(const value_t value_type) -- create a JSON
value with the default value for a given type
@since version 1.0.0
*/
enum
class
value_t
:
uint8_t
{
null
,
///< null value
object
,
///< object (unordered set of name/value pairs)
array
,
///< array (ordered collection of values)
string
,
///< string value
boolean
,
///< boolean value
number_integer
,
///< number value (signed integer)
number_unsigned
,
///< number value (unsigned integer)
number_float
,
///< number value (floating-point)
discarded
///< discarded by the the parser callback function
};
/*!
@brief comparison operator for JSON types
Returns an ordering that is similar to Python:
- order: null < boolean < number < object < array < string
- furthermore, each type is not smaller than itself
- discarded values are not comparable
@since version 1.0.0
*/
inline
bool
operator
<
(
const
value_t
lhs
,
const
value_t
rhs
)
noexcept
{
static
constexpr
std
::
array
<
uint8_t
,
8
>
order
=
{{
0
/* null */
,
3
/* object */
,
4
/* array */
,
5
/* string */
,
1
/* boolean */
,
2
/* integer */
,
2
/* unsigned */
,
2
/* float */
}
};
const
auto
l_index
=
static_cast
<
std
::
size_t
>
(
lhs
);
const
auto
r_index
=
static_cast
<
std
::
size_t
>
(
rhs
);
return
l_index
<
order
.
size
()
and
r_index
<
order
.
size
()
and
order
[
l_index
]
<
order
[
r_index
];
}
}
}
#endif
This diff is collapsed.
Click to expand it.
src/json.hpp
View file @
7056b375
...
...
@@ -55,6 +55,7 @@ SOFTWARE.
#include "detail/macro_scope.hpp"
#include "detail/meta.hpp"
#include "detail/exceptions.hpp"
#include "detail/value_t.hpp"
/*!
@brief namespace for Niels Lohmann
...
...
@@ -65,70 +66,6 @@ namespace nlohmann
{
namespace
detail
{
///////////////////////////
// JSON type enumeration //
///////////////////////////
/*!
@brief the JSON type enumeration
This enumeration collects the different JSON types. It is internally used to
distinguish the stored values, and the functions @ref basic_json::is_null(),
@ref basic_json::is_object(), @ref basic_json::is_array(),
@ref basic_json::is_string(), @ref basic_json::is_boolean(),
@ref basic_json::is_number() (with @ref basic_json::is_number_integer(),
@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),
@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and
@ref basic_json::is_structured() rely on it.
@note There are three enumeration entries (number_integer, number_unsigned, and
number_float), because the library distinguishes these three types for numbers:
@ref basic_json::number_unsigned_t is used for unsigned integers,
@ref basic_json::number_integer_t is used for signed integers, and
@ref basic_json::number_float_t is used for floating-point numbers or to
approximate integers which do not fit in the limits of their respective type.
@sa @ref basic_json::basic_json(const value_t value_type) -- create a JSON
value with the default value for a given type
@since version 1.0.0
*/
enum
class
value_t
:
uint8_t
{
null
,
///< null value
object
,
///< object (unordered set of name/value pairs)
array
,
///< array (ordered collection of values)
string
,
///< string value
boolean
,
///< boolean value
number_integer
,
///< number value (signed integer)
number_unsigned
,
///< number value (unsigned integer)
number_float
,
///< number value (floating-point)
discarded
///< discarded by the the parser callback function
};
/*!
@brief comparison operator for JSON types
Returns an ordering that is similar to Python:
- order: null < boolean < number < object < array < string
- furthermore, each type is not smaller than itself
- discarded values are not comparable
@since version 1.0.0
*/
inline
bool
operator
<
(
const
value_t
lhs
,
const
value_t
rhs
)
noexcept
{
static
constexpr
std
::
array
<
uint8_t
,
8
>
order
=
{{
0
/* null */
,
3
/* object */
,
4
/* array */
,
5
/* string */
,
1
/* boolean */
,
2
/* integer */
,
2
/* unsigned */
,
2
/* float */
}
};
const
auto
l_index
=
static_cast
<
std
::
size_t
>
(
lhs
);
const
auto
r_index
=
static_cast
<
std
::
size_t
>
(
rhs
);
return
l_index
<
order
.
size
()
and
r_index
<
order
.
size
()
and
order
[
l_index
]
<
order
[
r_index
];
}
//////////////////
// constructors //
//////////////////
...
...
This diff is collapsed.
Click to expand it.
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