xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
libxrpl
json
json_valueiterator.cpp
1
// included by json_value.cpp
2
3
#include <xrpl/json/json_forwards.h>
4
#include <xrpl/json/json_value.h>
5
6
namespace
json
{
7
8
// //////////////////////////////////////////////////////////////////
9
// //////////////////////////////////////////////////////////////////
10
// //////////////////////////////////////////////////////////////////
11
// class ValueIteratorBase
12
// //////////////////////////////////////////////////////////////////
13
// //////////////////////////////////////////////////////////////////
14
// //////////////////////////////////////////////////////////////////
15
16
ValueIteratorBase::ValueIteratorBase
() :
isNull_
(true)
17
{
18
}
19
20
ValueIteratorBase::ValueIteratorBase
(Value::ObjectValues::iterator
const
& current)
21
:
current_
(current),
isNull_
(false)
22
{
23
}
24
25
Value
&
26
ValueIteratorBase::deref
()
const
27
{
28
return
current_
->second;
29
}
30
31
void
32
ValueIteratorBase::increment
()
33
{
34
++
current_
;
35
}
36
37
void
38
ValueIteratorBase::decrement
()
39
{
40
--
current_
;
41
}
42
43
ValueIteratorBase::difference_type
44
ValueIteratorBase::computeDistance
(
SelfType
const
& other)
const
45
{
46
// Iterator for null value are initialized using the default
47
// constructor, which initialize current_ to the default
48
// std::map::iterator. As begin() and end() are two instance
49
// of the default std::map::iterator, they can not be compared.
50
// To allow this, we handle this comparison specifically.
51
if
(
isNull_
&& other.
isNull_
)
52
{
53
return
0;
54
}
55
56
// Usage of std::distance is not portable (does not compile with Sun Studio
57
// 12 RogueWave STL, which is the one used by default). Using a portable
58
// hand-made version for non random iterator instead:
59
// return difference_type( std::distance( current_, other.current_ ) );
60
difference_type
myDistance = 0;
61
62
for
(Value::ObjectValues::iterator it =
current_
; it != other.
current_
; ++it)
63
{
64
++myDistance;
65
}
66
67
return
myDistance;
68
}
69
70
bool
71
ValueIteratorBase::isEqual
(
SelfType
const
& other)
const
72
{
73
if
(
isNull_
)
74
{
75
return
other.
isNull_
;
76
}
77
78
return
current_
== other.
current_
;
79
}
80
81
void
82
ValueIteratorBase::copy
(
SelfType
const
& other)
83
{
84
current_
= other.
current_
;
85
}
86
87
Value
88
ValueIteratorBase::key
()
const
89
{
90
Value::CZString
const
czString = (*current_).first;
91
92
if
(czString.
cStr
() !=
nullptr
)
93
{
94
if
(czString.
isStaticString
())
95
return
Value
(
StaticString
(czString.
cStr
()));
96
97
return
Value
(czString.
cStr
());
98
}
99
100
return
Value
(czString.
index
());
101
}
102
103
UInt
104
ValueIteratorBase::index
()
const
105
{
106
Value::CZString
const
czString = (*current_).first;
107
108
if
(czString.
cStr
() ==
nullptr
)
109
return
czString.
index
();
110
111
return
Value::UInt
(-1);
112
}
113
114
char
const
*
115
ValueIteratorBase::memberName
()
const
116
{
117
char
const
* name = (*current_).first.cStr();
118
return
(name !=
nullptr
) ? name :
""
;
119
}
120
121
// //////////////////////////////////////////////////////////////////
122
// //////////////////////////////////////////////////////////////////
123
// //////////////////////////////////////////////////////////////////
124
// class ValueConstIterator
125
// //////////////////////////////////////////////////////////////////
126
// //////////////////////////////////////////////////////////////////
127
// //////////////////////////////////////////////////////////////////
128
129
ValueConstIterator::ValueConstIterator
(Value::ObjectValues::iterator
const
& current)
130
:
ValueIteratorBase
(current)
131
{
132
}
133
134
ValueConstIterator
&
135
ValueConstIterator::operator=
(
SelfType
const
& other)
136
{
137
copy
(other);
138
return
*
this
;
139
}
140
141
// //////////////////////////////////////////////////////////////////
142
// //////////////////////////////////////////////////////////////////
143
// //////////////////////////////////////////////////////////////////
144
// class ValueIterator
145
// //////////////////////////////////////////////////////////////////
146
// //////////////////////////////////////////////////////////////////
147
// //////////////////////////////////////////////////////////////////
148
149
ValueIterator::ValueIterator
(Value::ObjectValues::iterator
const
& current)
150
:
ValueIteratorBase
(current)
151
{
152
}
153
154
ValueIterator::ValueIterator
(
ValueConstIterator
const
& other) :
ValueIteratorBase
(other)
155
{
156
}
157
158
ValueIterator::ValueIterator
(
ValueIterator
const
& other) =
default
;
159
160
ValueIterator
&
161
ValueIterator::operator=
(
SelfType
const
& other)
162
{
163
copy
(other);
164
return
*
this
;
165
}
166
167
}
// namespace json
json::StaticString
Lightweight wrapper to tag static string.
Definition
json_value.h:48
json::ValueConstIterator
const iterator for object and array value.
Definition
json_value.h:592
json::ValueConstIterator::operator=
SelfType & operator=(SelfType const &other)
Definition
json_valueiterator.cpp:135
json::ValueConstIterator::SelfType
ValueConstIterator SelfType
Definition
json_value.h:601
json::ValueConstIterator::ValueConstIterator
ValueConstIterator()=default
json::ValueIteratorBase::ValueIteratorBase
ValueIteratorBase()
Definition
json_valueiterator.cpp:16
json::ValueIteratorBase::isEqual
bool isEqual(SelfType const &other) const
Definition
json_valueiterator.cpp:71
json::ValueIteratorBase::SelfType
ValueIteratorBase SelfType
Definition
json_value.h:531
json::ValueIteratorBase::current_
Value::ObjectValues::iterator current_
Definition
json_value.h:583
json::ValueIteratorBase::isNull_
bool isNull_
Definition
json_value.h:585
json::ValueIteratorBase::deref
Value & deref() const
Definition
json_valueiterator.cpp:26
json::ValueIteratorBase::increment
void increment()
Definition
json_valueiterator.cpp:32
json::ValueIteratorBase::decrement
void decrement()
Definition
json_valueiterator.cpp:38
json::ValueIteratorBase::copy
void copy(SelfType const &other)
Definition
json_valueiterator.cpp:82
json::ValueIteratorBase::memberName
char const * memberName() const
Return the member name of the referenced Value.
Definition
json_valueiterator.cpp:115
json::ValueIteratorBase::computeDistance
difference_type computeDistance(SelfType const &other) const
Definition
json_valueiterator.cpp:44
json::ValueIteratorBase::index
UInt index() const
Return the index of the referenced Value.
Definition
json_valueiterator.cpp:104
json::ValueIteratorBase::difference_type
int difference_type
Definition
json_value.h:530
json::ValueIteratorBase::key
Value key() const
Return either the index or the member name of the referenced value as a Value.
Definition
json_valueiterator.cpp:88
json::ValueIterator
Iterator for object and array value.
Definition
json_value.h:657
json::ValueIterator::SelfType
ValueIterator SelfType
Definition
json_value.h:666
json::ValueIterator::ValueIterator
ValueIterator()=default
json::ValueIterator::operator=
SelfType & operator=(SelfType const &other)
Definition
json_valueiterator.cpp:161
json::Value::CZString
Definition
json_value.h:135
json::Value::CZString::isStaticString
bool isStaticString() const
Definition
json_value.cpp:164
json::Value::CZString::index
int index() const
Definition
json_value.cpp:152
json::Value::CZString::cStr
char const * cStr() const
Definition
json_value.cpp:158
json::Value
Represents a JSON value.
Definition
json_value.h:117
json::Value::UInt
json::UInt UInt
Definition
json_value.h:124
json
JSON (JavaScript Object Notation).
Definition
json_errors.h:5
json::UInt
unsigned int UInt
Definition
json_forwards.h:7
Generated by
1.17.0