Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
畅游知识海洋
json
提交
51ecc31d
J
json
项目概览
畅游知识海洋
/
json
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
json
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
GitCode(gitcode.net)2024年7月9日维护升级公告
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
51ecc31d
编写于
8月 14, 2017
作者:
T
Théo DELRIEU
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add detail/iterators/primitive_iterator.hpp
上级
9ea25685
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
133 addition
and
117 deletion
+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
未找到文件。
Makefile
浏览文件 @
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
...
...
src/detail/iterators/primitive_iterator.hpp
0 → 100644
浏览文件 @
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
src/json.hpp
浏览文件 @
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
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录