VR-Vantage 3.0 API Documentation
Home
Modules
Namespaces
Classes
Files
Libraries
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
rapidjson
stream.h
Go to the documentation of this file.
1
// Tencent is pleased to support the open source community by making RapidJSON available.
2
//
3
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
4
//
5
// Licensed under the MIT License (the "License"); you may not use this file except
6
// in compliance with the License. You may obtain a copy of the License at
7
//
8
// http://opensource.org/licenses/MIT
9
//
10
// Unless required by applicable law or agreed to in writing, software distributed
11
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
// specific language governing permissions and limitations under the License.
14
15
#include "
rapidjson.h
"
16
17
#ifndef RAPIDJSON_STREAM_H_
18
#define RAPIDJSON_STREAM_H_
19
20
#include "
encodings.h
"
21
22
RAPIDJSON_NAMESPACE_BEGIN
23
25
// Stream
26
39
42
46
50
53
56
61
66
67
72
template
<
typename
Stream>
73
struct
StreamTraits
{
75
79
enum
{
copyOptimization
= 0 };
80
};
81
83
template
<
typename
Stream>
84
inline
void
PutReserve
(Stream&
stream
,
size_t
count
) {
85
(
void
)stream;
86
(
void
)count;
87
}
88
90
template
<
typename
Stream>
91
inline
void
PutUnsafe
(Stream&
stream
,
typename
Stream::Ch
c
) {
92
stream.Put(c);
93
}
94
96
template
<
typename
Stream,
typename
Ch>
97
inline
void
PutN
(Stream&
stream
, Ch
c
,
size_t
n
) {
98
PutReserve
(stream, n);
99
for
(
size_t
i = 0; i <
n
; i++)
100
PutUnsafe
(stream, c);
101
}
102
104
// StringStream
105
107
109
template
<
typename
Encoding>
110
struct
GenericStringStream
{
111
typedef
typename
Encoding::Ch
Ch
;
112
113
GenericStringStream
(
const
Ch
*
src
) :
src_
(src),
head_
(src) {}
114
115
Ch
Peek
()
const
{
return
*
src_
; }
116
Ch
Take
() {
return
*
src_
++; }
117
size_t
Tell
()
const
{
return
static_cast<
size_t
>
(
src_
-
head_
); }
118
119
Ch
*
PutBegin
() {
RAPIDJSON_ASSERT
(
false
);
return
0; }
120
void
Put
(
Ch
) {
RAPIDJSON_ASSERT
(
false
); }
121
void
Flush
() {
RAPIDJSON_ASSERT
(
false
); }
122
size_t
PutEnd
(
Ch
*) {
RAPIDJSON_ASSERT
(
false
);
return
0; }
123
124
const
Ch
*
src_
;
125
const
Ch
*
head_
;
126
};
127
128
template
<
typename
Encoding>
129
struct
StreamTraits
<
GenericStringStream
<Encoding> > {
130
enum
{
copyOptimization
= 1 };
131
};
132
134
typedef
GenericStringStream<UTF8<>
>
StringStream
;
135
137
// InsituStringStream
138
140
143
template
<
typename
Encoding>
144
struct
GenericInsituStringStream
{
145
typedef
typename
Encoding::Ch
Ch
;
146
147
GenericInsituStringStream
(
Ch
*
src
) :
src_
(src),
dst_
(0),
head_
(src) {}
148
149
// Read
150
Ch
Peek
() {
return
*
src_
; }
151
Ch
Take
() {
return
*
src_
++; }
152
size_t
Tell
() {
return
static_cast<
size_t
>
(
src_
-
head_
); }
153
154
// Write
155
void
Put
(
Ch
c
) {
RAPIDJSON_ASSERT
(
dst_
!= 0); *
dst_
++ =
c
; }
156
157
Ch
*
PutBegin
() {
return
dst_
=
src_
; }
158
size_t
PutEnd
(
Ch
* begin) {
return
static_cast<
size_t
>
(
dst_
- begin); }
159
void
Flush
() {}
160
161
Ch
*
Push
(
size_t
count
) {
Ch
* begin =
dst_
;
dst_
+=
count
;
return
begin; }
162
void
Pop
(
size_t
count
) {
dst_
-=
count
; }
163
164
Ch
*
src_
;
165
Ch
*
dst_
;
166
Ch
*
head_
;
167
};
168
169
template
<
typename
Encoding>
170
struct
StreamTraits
<
GenericInsituStringStream
<Encoding> > {
171
enum
{
copyOptimization
= 1 };
172
};
173
175
typedef
GenericInsituStringStream<UTF8<>
>
InsituStringStream
;
176
177
RAPIDJSON_NAMESPACE_END
178
179
#endif // RAPIDJSON_STREAM_H_
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (
www.mak.com
)