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
ae6f6604
Unverified
Commit
ae6f6604
authored
8 years ago
by
Théo DELRIEU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add detail/iterators/json_reverse_iterator.hpp
parent
5fc9ef2b
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
125 additions
and
109 deletions
+125
-109
Makefile
Makefile
+2
-1
src/detail/iterators/json_reverse_iterator.hpp
src/detail/iterators/json_reverse_iterator.hpp
+122
-0
src/json.hpp
src/json.hpp
+1
-108
No files found.
Makefile
View file @
ae6f6604
...
@@ -16,7 +16,8 @@ SRCS = ${SRCDIR}/json.hpp \
...
@@ -16,7 +16,8 @@ SRCS = ${SRCDIR}/json.hpp \
${SRCDIR}
/detail/iterators/primitive_iterator.hpp
\
${SRCDIR}
/detail/iterators/primitive_iterator.hpp
\
${SRCDIR}
/detail/iterators/internal_iterator.hpp
\
${SRCDIR}
/detail/iterators/internal_iterator.hpp
\
${SRCDIR}
/detail/iterators/iter_impl.hpp
\
${SRCDIR}
/detail/iterators/iter_impl.hpp
\
${SRCDIR}
/detail/iterators/iteration_proxy.hpp
${SRCDIR}
/detail/iterators/iteration_proxy.hpp
\
${SRCDIR}
/detail/iterators/json_reverse_iterator.hpp
...
...
This diff is collapsed.
Click to expand it.
src/detail/iterators/json_reverse_iterator.hpp
0 → 100644
View file @
ae6f6604
#ifndef NLOHMANN_JSON_DETAIL_ITERATORS_JSON_REVERSE_ITERATOR_HPP
#define NLOHMANN_JSON_DETAIL_ITERATORS_JSON_REVERSE_ITERATOR_HPP
#include <cstddef>
#include <iterator>
#include <utility>
namespace
nlohmann
{
namespace
detail
{
//////////////////////
// reverse_iterator //
//////////////////////
/*!
@brief a template for a reverse iterator class
@tparam Base the base iterator type to reverse. Valid types are @ref
iterator (to create @ref reverse_iterator) and @ref const_iterator (to
create @ref const_reverse_iterator).
@requirement The class satisfies the following concept requirements:
-
[BidirectionalIterator](http://en.cppreference.com/w/cpp/concept/BidirectionalIterator):
The iterator that can be moved can be moved in both directions (i.e.
incremented and decremented).
- [OutputIterator](http://en.cppreference.com/w/cpp/concept/OutputIterator):
It is possible to write to the pointed-to element (only if @a Base is
@ref iterator).
@since version 1.0.0
*/
template
<
typename
Base
>
class
json_reverse_iterator
:
public
std
::
reverse_iterator
<
Base
>
{
public:
using
difference_type
=
std
::
ptrdiff_t
;
/// shortcut to the reverse iterator adapter
using
base_iterator
=
std
::
reverse_iterator
<
Base
>
;
/// the reference type for the pointed-to element
using
reference
=
typename
Base
::
reference
;
/// create reverse iterator from iterator
json_reverse_iterator
(
const
typename
base_iterator
::
iterator_type
&
it
)
noexcept
:
base_iterator
(
it
)
{}
/// create reverse iterator from base class
json_reverse_iterator
(
const
base_iterator
&
it
)
noexcept
:
base_iterator
(
it
)
{}
/// post-increment (it++)
json_reverse_iterator
const
operator
++
(
int
)
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
++
(
1
));
}
/// pre-increment (++it)
json_reverse_iterator
&
operator
++
()
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
++
());
}
/// post-decrement (it--)
json_reverse_iterator
const
operator
--
(
int
)
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
--
(
1
));
}
/// pre-decrement (--it)
json_reverse_iterator
&
operator
--
()
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
--
());
}
/// add to iterator
json_reverse_iterator
&
operator
+=
(
difference_type
i
)
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
+=
(
i
));
}
/// add to iterator
json_reverse_iterator
operator
+
(
difference_type
i
)
const
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
+
(
i
));
}
/// subtract from iterator
json_reverse_iterator
operator
-
(
difference_type
i
)
const
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
-
(
i
));
}
/// return difference
difference_type
operator
-
(
const
json_reverse_iterator
&
other
)
const
{
return
base_iterator
(
*
this
)
-
base_iterator
(
other
);
}
/// access to successor
reference
operator
[](
difference_type
n
)
const
{
return
*
(
this
->
operator
+
(
n
));
}
/// return the key of an object iterator
auto
key
()
const
->
decltype
(
std
::
declval
<
Base
>
().
key
())
{
auto
it
=
--
this
->
base
();
return
it
.
key
();
}
/// return the value of an iterator
reference
value
()
const
{
auto
it
=
--
this
->
base
();
return
it
.
operator
*
();
}
};
}
}
#endif
This diff is collapsed.
Click to expand it.
src/json.hpp
View file @
ae6f6604
...
@@ -64,6 +64,7 @@ SOFTWARE.
...
@@ -64,6 +64,7 @@ SOFTWARE.
#include "detail/iterators/internal_iterator.hpp"
#include "detail/iterators/internal_iterator.hpp"
#include "detail/iterators/iter_impl.hpp"
#include "detail/iterators/iter_impl.hpp"
#include "detail/iterators/iteration_proxy.hpp"
#include "detail/iterators/iteration_proxy.hpp"
#include "detail/iterators/json_reverse_iterator.hpp"
/*!
/*!
@brief namespace for Niels Lohmann
@brief namespace for Niels Lohmann
...
@@ -74,114 +75,6 @@ namespace nlohmann
...
@@ -74,114 +75,6 @@ namespace nlohmann
{
{
namespace
detail
namespace
detail
{
{
///////////////
// iterators //
///////////////
/*!
@brief a template for a reverse iterator class
@tparam Base the base iterator type to reverse. Valid types are @ref
iterator (to create @ref reverse_iterator) and @ref const_iterator (to
create @ref const_reverse_iterator).
@requirement The class satisfies the following concept requirements:
-
[BidirectionalIterator](http://en.cppreference.com/w/cpp/concept/BidirectionalIterator):
The iterator that can be moved can be moved in both directions (i.e.
incremented and decremented).
- [OutputIterator](http://en.cppreference.com/w/cpp/concept/OutputIterator):
It is possible to write to the pointed-to element (only if @a Base is
@ref iterator).
@since version 1.0.0
*/
template
<
typename
Base
>
class
json_reverse_iterator
:
public
std
::
reverse_iterator
<
Base
>
{
public:
using
difference_type
=
std
::
ptrdiff_t
;
/// shortcut to the reverse iterator adapter
using
base_iterator
=
std
::
reverse_iterator
<
Base
>
;
/// the reference type for the pointed-to element
using
reference
=
typename
Base
::
reference
;
/// create reverse iterator from iterator
json_reverse_iterator
(
const
typename
base_iterator
::
iterator_type
&
it
)
noexcept
:
base_iterator
(
it
)
{}
/// create reverse iterator from base class
json_reverse_iterator
(
const
base_iterator
&
it
)
noexcept
:
base_iterator
(
it
)
{}
/// post-increment (it++)
json_reverse_iterator
const
operator
++
(
int
)
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
++
(
1
));
}
/// pre-increment (++it)
json_reverse_iterator
&
operator
++
()
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
++
());
}
/// post-decrement (it--)
json_reverse_iterator
const
operator
--
(
int
)
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
--
(
1
));
}
/// pre-decrement (--it)
json_reverse_iterator
&
operator
--
()
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
--
());
}
/// add to iterator
json_reverse_iterator
&
operator
+=
(
difference_type
i
)
{
return
static_cast
<
json_reverse_iterator
&>
(
base_iterator
::
operator
+=
(
i
));
}
/// add to iterator
json_reverse_iterator
operator
+
(
difference_type
i
)
const
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
+
(
i
));
}
/// subtract from iterator
json_reverse_iterator
operator
-
(
difference_type
i
)
const
{
return
static_cast
<
json_reverse_iterator
>
(
base_iterator
::
operator
-
(
i
));
}
/// return difference
difference_type
operator
-
(
const
json_reverse_iterator
&
other
)
const
{
return
base_iterator
(
*
this
)
-
base_iterator
(
other
);
}
/// access to successor
reference
operator
[](
difference_type
n
)
const
{
return
*
(
this
->
operator
+
(
n
));
}
/// return the key of an object iterator
auto
key
()
const
->
decltype
(
std
::
declval
<
Base
>
().
key
())
{
auto
it
=
--
this
->
base
();
return
it
.
key
();
}
/// return the value of an iterator
reference
value
()
const
{
auto
it
=
--
this
->
base
();
return
it
.
operator
*
();
}
};
/////////////////////
/////////////////////
// output adapters //
// output adapters //
/////////////////////
/////////////////////
...
...
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