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
51ecc31d
Unverified
Commit
51ecc31d
authored
8 years ago
by
Théo DELRIEU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add detail/iterators/primitive_iterator.hpp
parent
9ea25685
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
133 additions
and
117 deletions
+133
-117
Makefile
Makefile
+2
-1
src/detail/iterators/primitive_iterator.hpp
src/detail/iterators/primitive_iterator.hpp
+130
-0
src/json.hpp
src/json.hpp
+1
-116
No files found.
Makefile
View file @
51ecc31d
...
...
@@ -12,7 +12,8 @@ SRCS = ${SRCDIR}/json.hpp \
${SRCDIR}
/detail/conversions/to_json.hpp
\
${SRCDIR}
/detail/parsing/input_adapters.hpp
\
${SRCDIR}
/detail/parsing/lexer.hpp
\
${SRCDIR}
/detail/parsing/parser.hpp
${SRCDIR}
/detail/parsing/parser.hpp
\
${SRCDIR}
/detail/iterators/primitive_iterator.hpp
...
...
This diff is collapsed.
Click to expand it.
src/detail/iterators/primitive_iterator.hpp
0 → 100644
View file @
51ecc31d
#ifndef NLOHMANN_JSON_DETAIL_ITERATORS_PRIMITIVE_ITERATOR_HPP
#define NLOHMANN_JSON_DETAIL_ITERATORS_PRIMITIVE_ITERATOR_HPP
#include <cstddef>
#include <iosfwd>
#include <limits>
namespace
nlohmann
{
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
to "iterate" over primitive values. Internally, the iterator is modeled by
a `difference_type` variable. Value begin_value (`0`) models the begin,
end_value (`1`) models past the end.
*/
class
primitive_iterator_t
{
public:
using
difference_type
=
std
::
ptrdiff_t
;
constexpr
difference_type
get_value
()
const
noexcept
{
return
m_it
;
}
/// set iterator to a defined beginning
void
set_begin
()
noexcept
{
m_it
=
begin_value
;
}
/// set iterator to a defined past the end
void
set_end
()
noexcept
{
m_it
=
end_value
;
}
/// return whether the iterator can be dereferenced
constexpr
bool
is_begin
()
const
noexcept
{
return
m_it
==
begin_value
;
}
/// return whether the iterator is at end
constexpr
bool
is_end
()
const
noexcept
{
return
m_it
==
end_value
;
}
friend
constexpr
bool
operator
==
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
==
rhs
.
m_it
;
}
friend
constexpr
bool
operator
<
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
<
rhs
.
m_it
;
}
primitive_iterator_t
operator
+
(
difference_type
i
)
{
auto
result
=
*
this
;
result
+=
i
;
return
result
;
}
friend
constexpr
difference_type
operator
-
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
-
rhs
.
m_it
;
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
primitive_iterator_t
it
)
{
return
os
<<
it
.
m_it
;
}
primitive_iterator_t
&
operator
++
()
{
++
m_it
;
return
*
this
;
}
primitive_iterator_t
const
operator
++
(
int
)
{
auto
result
=
*
this
;
m_it
++
;
return
result
;
}
primitive_iterator_t
&
operator
--
()
{
--
m_it
;
return
*
this
;
}
primitive_iterator_t
const
operator
--
(
int
)
{
auto
result
=
*
this
;
m_it
--
;
return
result
;
}
primitive_iterator_t
&
operator
+=
(
difference_type
n
)
{
m_it
+=
n
;
return
*
this
;
}
primitive_iterator_t
&
operator
-=
(
difference_type
n
)
{
m_it
-=
n
;
return
*
this
;
}
private:
static
constexpr
difference_type
begin_value
=
0
;
static
constexpr
difference_type
end_value
=
begin_value
+
1
;
/// iterator as signed integer type
difference_type
m_it
=
(
std
::
numeric_limits
<
std
::
ptrdiff_t
>::
min
)();
};
}
}
#endif
This diff is collapsed.
Click to expand it.
src/json.hpp
View file @
51ecc31d
...
...
@@ -60,6 +60,7 @@ SOFTWARE.
#include "detail/parsing/input_adapters.hpp"
#include "detail/parsing/lexer.hpp"
#include "detail/parsing/parser.hpp"
#include "detail/iterators/primitive_iterator.hpp"
/*!
@brief namespace for Niels Lohmann
...
...
@@ -74,122 +75,6 @@ namespace detail
// iterators //
///////////////
/*!
@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
to "iterate" over primitive values. Internally, the iterator is modeled by
a `difference_type` variable. Value begin_value (`0`) models the begin,
end_value (`1`) models past the end.
*/
class
primitive_iterator_t
{
public:
using
difference_type
=
std
::
ptrdiff_t
;
constexpr
difference_type
get_value
()
const
noexcept
{
return
m_it
;
}
/// set iterator to a defined beginning
void
set_begin
()
noexcept
{
m_it
=
begin_value
;
}
/// set iterator to a defined past the end
void
set_end
()
noexcept
{
m_it
=
end_value
;
}
/// return whether the iterator can be dereferenced
constexpr
bool
is_begin
()
const
noexcept
{
return
m_it
==
begin_value
;
}
/// return whether the iterator is at end
constexpr
bool
is_end
()
const
noexcept
{
return
m_it
==
end_value
;
}
friend
constexpr
bool
operator
==
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
==
rhs
.
m_it
;
}
friend
constexpr
bool
operator
<
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
<
rhs
.
m_it
;
}
primitive_iterator_t
operator
+
(
difference_type
i
)
{
auto
result
=
*
this
;
result
+=
i
;
return
result
;
}
friend
constexpr
difference_type
operator
-
(
primitive_iterator_t
lhs
,
primitive_iterator_t
rhs
)
noexcept
{
return
lhs
.
m_it
-
rhs
.
m_it
;
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
primitive_iterator_t
it
)
{
return
os
<<
it
.
m_it
;
}
primitive_iterator_t
&
operator
++
()
{
++
m_it
;
return
*
this
;
}
primitive_iterator_t
const
operator
++
(
int
)
{
auto
result
=
*
this
;
m_it
++
;
return
result
;
}
primitive_iterator_t
&
operator
--
()
{
--
m_it
;
return
*
this
;
}
primitive_iterator_t
const
operator
--
(
int
)
{
auto
result
=
*
this
;
m_it
--
;
return
result
;
}
primitive_iterator_t
&
operator
+=
(
difference_type
n
)
{
m_it
+=
n
;
return
*
this
;
}
primitive_iterator_t
&
operator
-=
(
difference_type
n
)
{
m_it
-=
n
;
return
*
this
;
}
private:
static
constexpr
difference_type
begin_value
=
0
;
static
constexpr
difference_type
end_value
=
begin_value
+
1
;
/// iterator as signed integer type
difference_type
m_it
=
(
std
::
numeric_limits
<
std
::
ptrdiff_t
>::
min
)();
};
/*!
@brief an iterator value
...
...
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