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
Aug 14, 2017
by
Théo DELRIEU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add detail/iterators/json_reverse_iterator.hpp
parent
5fc9ef2b
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
...
...
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
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 //
/////////////////////
/////////////////////
...
...
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