sq_detailed_metrics 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/extconf.rb +26 -0
- data/include/half.hpp +4575 -0
- data/include/msgpack.h +24 -0
- data/include/msgpack/fbuffer.h +42 -0
- data/include/msgpack/gcc_atomic.h +25 -0
- data/include/msgpack/object.h +118 -0
- data/include/msgpack/pack.h +174 -0
- data/include/msgpack/pack_define.h +18 -0
- data/include/msgpack/pack_template.h +952 -0
- data/include/msgpack/sbuffer.h +115 -0
- data/include/msgpack/sysdep.h +221 -0
- data/include/msgpack/timestamp.h +58 -0
- data/include/msgpack/unpack.h +281 -0
- data/include/msgpack/unpack_define.h +89 -0
- data/include/msgpack/unpack_template.h +471 -0
- data/include/msgpack/util.h +15 -0
- data/include/msgpack/version.h +38 -0
- data/include/msgpack/version_master.h +3 -0
- data/include/msgpack/vrefbuffer.h +144 -0
- data/include/msgpack/zbuffer.h +205 -0
- data/include/msgpack/zone.h +163 -0
- data/include/rapidjson/allocators.h +271 -0
- data/include/rapidjson/document.h +2575 -0
- data/include/rapidjson/encodedstream.h +299 -0
- data/include/rapidjson/encodings.h +716 -0
- data/include/rapidjson/error/en.h +74 -0
- data/include/rapidjson/error/error.h +155 -0
- data/include/rapidjson/filereadstream.h +99 -0
- data/include/rapidjson/filewritestream.h +104 -0
- data/include/rapidjson/fwd.h +151 -0
- data/include/rapidjson/internal/biginteger.h +290 -0
- data/include/rapidjson/internal/diyfp.h +258 -0
- data/include/rapidjson/internal/dtoa.h +245 -0
- data/include/rapidjson/internal/ieee754.h +78 -0
- data/include/rapidjson/internal/itoa.h +304 -0
- data/include/rapidjson/internal/meta.h +181 -0
- data/include/rapidjson/internal/pow10.h +55 -0
- data/include/rapidjson/internal/regex.h +701 -0
- data/include/rapidjson/internal/stack.h +230 -0
- data/include/rapidjson/internal/strfunc.h +55 -0
- data/include/rapidjson/internal/strtod.h +269 -0
- data/include/rapidjson/internal/swap.h +46 -0
- data/include/rapidjson/istreamwrapper.h +115 -0
- data/include/rapidjson/memorybuffer.h +70 -0
- data/include/rapidjson/memorystream.h +71 -0
- data/include/rapidjson/msinttypes/inttypes.h +316 -0
- data/include/rapidjson/msinttypes/stdint.h +300 -0
- data/include/rapidjson/ostreamwrapper.h +81 -0
- data/include/rapidjson/pointer.h +1358 -0
- data/include/rapidjson/prettywriter.h +255 -0
- data/include/rapidjson/rapidjson.h +615 -0
- data/include/rapidjson/reader.h +1879 -0
- data/include/rapidjson/schema.h +2006 -0
- data/include/rapidjson/stream.h +179 -0
- data/include/rapidjson/stringbuffer.h +117 -0
- data/include/rapidjson/writer.h +610 -0
- data/include/xxhash.h +328 -0
- data/json_conv.cpp +284 -0
- data/json_conv.hpp +17 -0
- data/metrics.cpp +239 -0
- data/metrics.hpp +84 -0
- data/msgpack/objectc.c +482 -0
- data/msgpack/unpack.c +703 -0
- data/msgpack/version.c +22 -0
- data/msgpack/vrefbuffer.c +250 -0
- data/msgpack/zone.c +222 -0
- data/sq_detailed_metrics.cpp +248 -0
- metadata +199 -0
@@ -0,0 +1,74 @@
|
|
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
|
+
#ifndef RAPIDJSON_ERROR_EN_H_
|
16
|
+
#define RAPIDJSON_ERROR_EN_H_
|
17
|
+
|
18
|
+
#include "error.h"
|
19
|
+
|
20
|
+
#ifdef __clang__
|
21
|
+
RAPIDJSON_DIAG_PUSH
|
22
|
+
RAPIDJSON_DIAG_OFF(switch-enum)
|
23
|
+
RAPIDJSON_DIAG_OFF(covered-switch-default)
|
24
|
+
#endif
|
25
|
+
|
26
|
+
RAPIDJSON_NAMESPACE_BEGIN
|
27
|
+
|
28
|
+
//! Maps error code of parsing into error message.
|
29
|
+
/*!
|
30
|
+
\ingroup RAPIDJSON_ERRORS
|
31
|
+
\param parseErrorCode Error code obtained in parsing.
|
32
|
+
\return the error message.
|
33
|
+
\note User can make a copy of this function for localization.
|
34
|
+
Using switch-case is safer for future modification of error codes.
|
35
|
+
*/
|
36
|
+
inline const RAPIDJSON_ERROR_CHARTYPE* GetParseError_En(ParseErrorCode parseErrorCode) {
|
37
|
+
switch (parseErrorCode) {
|
38
|
+
case kParseErrorNone: return RAPIDJSON_ERROR_STRING("No error.");
|
39
|
+
|
40
|
+
case kParseErrorDocumentEmpty: return RAPIDJSON_ERROR_STRING("The document is empty.");
|
41
|
+
case kParseErrorDocumentRootNotSingular: return RAPIDJSON_ERROR_STRING("The document root must not be followed by other values.");
|
42
|
+
|
43
|
+
case kParseErrorValueInvalid: return RAPIDJSON_ERROR_STRING("Invalid value.");
|
44
|
+
|
45
|
+
case kParseErrorObjectMissName: return RAPIDJSON_ERROR_STRING("Missing a name for object member.");
|
46
|
+
case kParseErrorObjectMissColon: return RAPIDJSON_ERROR_STRING("Missing a colon after a name of object member.");
|
47
|
+
case kParseErrorObjectMissCommaOrCurlyBracket: return RAPIDJSON_ERROR_STRING("Missing a comma or '}' after an object member.");
|
48
|
+
|
49
|
+
case kParseErrorArrayMissCommaOrSquareBracket: return RAPIDJSON_ERROR_STRING("Missing a comma or ']' after an array element.");
|
50
|
+
|
51
|
+
case kParseErrorStringUnicodeEscapeInvalidHex: return RAPIDJSON_ERROR_STRING("Incorrect hex digit after \\u escape in string.");
|
52
|
+
case kParseErrorStringUnicodeSurrogateInvalid: return RAPIDJSON_ERROR_STRING("The surrogate pair in string is invalid.");
|
53
|
+
case kParseErrorStringEscapeInvalid: return RAPIDJSON_ERROR_STRING("Invalid escape character in string.");
|
54
|
+
case kParseErrorStringMissQuotationMark: return RAPIDJSON_ERROR_STRING("Missing a closing quotation mark in string.");
|
55
|
+
case kParseErrorStringInvalidEncoding: return RAPIDJSON_ERROR_STRING("Invalid encoding in string.");
|
56
|
+
|
57
|
+
case kParseErrorNumberTooBig: return RAPIDJSON_ERROR_STRING("Number too big to be stored in double.");
|
58
|
+
case kParseErrorNumberMissFraction: return RAPIDJSON_ERROR_STRING("Miss fraction part in number.");
|
59
|
+
case kParseErrorNumberMissExponent: return RAPIDJSON_ERROR_STRING("Miss exponent in number.");
|
60
|
+
|
61
|
+
case kParseErrorTermination: return RAPIDJSON_ERROR_STRING("Terminate parsing due to Handler error.");
|
62
|
+
case kParseErrorUnspecificSyntaxError: return RAPIDJSON_ERROR_STRING("Unspecific syntax error.");
|
63
|
+
|
64
|
+
default: return RAPIDJSON_ERROR_STRING("Unknown error.");
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
RAPIDJSON_NAMESPACE_END
|
69
|
+
|
70
|
+
#ifdef __clang__
|
71
|
+
RAPIDJSON_DIAG_POP
|
72
|
+
#endif
|
73
|
+
|
74
|
+
#endif // RAPIDJSON_ERROR_EN_H_
|
@@ -0,0 +1,155 @@
|
|
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
|
+
#ifndef RAPIDJSON_ERROR_ERROR_H_
|
16
|
+
#define RAPIDJSON_ERROR_ERROR_H_
|
17
|
+
|
18
|
+
#include "../rapidjson.h"
|
19
|
+
|
20
|
+
#ifdef __clang__
|
21
|
+
RAPIDJSON_DIAG_PUSH
|
22
|
+
RAPIDJSON_DIAG_OFF(padded)
|
23
|
+
#endif
|
24
|
+
|
25
|
+
/*! \file error.h */
|
26
|
+
|
27
|
+
/*! \defgroup RAPIDJSON_ERRORS RapidJSON error handling */
|
28
|
+
|
29
|
+
///////////////////////////////////////////////////////////////////////////////
|
30
|
+
// RAPIDJSON_ERROR_CHARTYPE
|
31
|
+
|
32
|
+
//! Character type of error messages.
|
33
|
+
/*! \ingroup RAPIDJSON_ERRORS
|
34
|
+
The default character type is \c char.
|
35
|
+
On Windows, user can define this macro as \c TCHAR for supporting both
|
36
|
+
unicode/non-unicode settings.
|
37
|
+
*/
|
38
|
+
#ifndef RAPIDJSON_ERROR_CHARTYPE
|
39
|
+
#define RAPIDJSON_ERROR_CHARTYPE char
|
40
|
+
#endif
|
41
|
+
|
42
|
+
///////////////////////////////////////////////////////////////////////////////
|
43
|
+
// RAPIDJSON_ERROR_STRING
|
44
|
+
|
45
|
+
//! Macro for converting string literial to \ref RAPIDJSON_ERROR_CHARTYPE[].
|
46
|
+
/*! \ingroup RAPIDJSON_ERRORS
|
47
|
+
By default this conversion macro does nothing.
|
48
|
+
On Windows, user can define this macro as \c _T(x) for supporting both
|
49
|
+
unicode/non-unicode settings.
|
50
|
+
*/
|
51
|
+
#ifndef RAPIDJSON_ERROR_STRING
|
52
|
+
#define RAPIDJSON_ERROR_STRING(x) x
|
53
|
+
#endif
|
54
|
+
|
55
|
+
RAPIDJSON_NAMESPACE_BEGIN
|
56
|
+
|
57
|
+
///////////////////////////////////////////////////////////////////////////////
|
58
|
+
// ParseErrorCode
|
59
|
+
|
60
|
+
//! Error code of parsing.
|
61
|
+
/*! \ingroup RAPIDJSON_ERRORS
|
62
|
+
\see GenericReader::Parse, GenericReader::GetParseErrorCode
|
63
|
+
*/
|
64
|
+
enum ParseErrorCode {
|
65
|
+
kParseErrorNone = 0, //!< No error.
|
66
|
+
|
67
|
+
kParseErrorDocumentEmpty, //!< The document is empty.
|
68
|
+
kParseErrorDocumentRootNotSingular, //!< The document root must not follow by other values.
|
69
|
+
|
70
|
+
kParseErrorValueInvalid, //!< Invalid value.
|
71
|
+
|
72
|
+
kParseErrorObjectMissName, //!< Missing a name for object member.
|
73
|
+
kParseErrorObjectMissColon, //!< Missing a colon after a name of object member.
|
74
|
+
kParseErrorObjectMissCommaOrCurlyBracket, //!< Missing a comma or '}' after an object member.
|
75
|
+
|
76
|
+
kParseErrorArrayMissCommaOrSquareBracket, //!< Missing a comma or ']' after an array element.
|
77
|
+
|
78
|
+
kParseErrorStringUnicodeEscapeInvalidHex, //!< Incorrect hex digit after \\u escape in string.
|
79
|
+
kParseErrorStringUnicodeSurrogateInvalid, //!< The surrogate pair in string is invalid.
|
80
|
+
kParseErrorStringEscapeInvalid, //!< Invalid escape character in string.
|
81
|
+
kParseErrorStringMissQuotationMark, //!< Missing a closing quotation mark in string.
|
82
|
+
kParseErrorStringInvalidEncoding, //!< Invalid encoding in string.
|
83
|
+
|
84
|
+
kParseErrorNumberTooBig, //!< Number too big to be stored in double.
|
85
|
+
kParseErrorNumberMissFraction, //!< Miss fraction part in number.
|
86
|
+
kParseErrorNumberMissExponent, //!< Miss exponent in number.
|
87
|
+
|
88
|
+
kParseErrorTermination, //!< Parsing was terminated.
|
89
|
+
kParseErrorUnspecificSyntaxError //!< Unspecific syntax error.
|
90
|
+
};
|
91
|
+
|
92
|
+
//! Result of parsing (wraps ParseErrorCode)
|
93
|
+
/*!
|
94
|
+
\ingroup RAPIDJSON_ERRORS
|
95
|
+
\code
|
96
|
+
Document doc;
|
97
|
+
ParseResult ok = doc.Parse("[42]");
|
98
|
+
if (!ok) {
|
99
|
+
fprintf(stderr, "JSON parse error: %s (%u)",
|
100
|
+
GetParseError_En(ok.Code()), ok.Offset());
|
101
|
+
exit(EXIT_FAILURE);
|
102
|
+
}
|
103
|
+
\endcode
|
104
|
+
\see GenericReader::Parse, GenericDocument::Parse
|
105
|
+
*/
|
106
|
+
struct ParseResult {
|
107
|
+
public:
|
108
|
+
//! Default constructor, no error.
|
109
|
+
ParseResult() : code_(kParseErrorNone), offset_(0) {}
|
110
|
+
//! Constructor to set an error.
|
111
|
+
ParseResult(ParseErrorCode code, size_t offset) : code_(code), offset_(offset) {}
|
112
|
+
|
113
|
+
//! Get the error code.
|
114
|
+
ParseErrorCode Code() const { return code_; }
|
115
|
+
//! Get the error offset, if \ref IsError(), 0 otherwise.
|
116
|
+
size_t Offset() const { return offset_; }
|
117
|
+
|
118
|
+
//! Conversion to \c bool, returns \c true, iff !\ref IsError().
|
119
|
+
operator bool() const { return !IsError(); }
|
120
|
+
//! Whether the result is an error.
|
121
|
+
bool IsError() const { return code_ != kParseErrorNone; }
|
122
|
+
|
123
|
+
bool operator==(const ParseResult& that) const { return code_ == that.code_; }
|
124
|
+
bool operator==(ParseErrorCode code) const { return code_ == code; }
|
125
|
+
friend bool operator==(ParseErrorCode code, const ParseResult & err) { return code == err.code_; }
|
126
|
+
|
127
|
+
//! Reset error code.
|
128
|
+
void Clear() { Set(kParseErrorNone); }
|
129
|
+
//! Update error code and offset.
|
130
|
+
void Set(ParseErrorCode code, size_t offset = 0) { code_ = code; offset_ = offset; }
|
131
|
+
|
132
|
+
private:
|
133
|
+
ParseErrorCode code_;
|
134
|
+
size_t offset_;
|
135
|
+
};
|
136
|
+
|
137
|
+
//! Function pointer type of GetParseError().
|
138
|
+
/*! \ingroup RAPIDJSON_ERRORS
|
139
|
+
|
140
|
+
This is the prototype for \c GetParseError_X(), where \c X is a locale.
|
141
|
+
User can dynamically change locale in runtime, e.g.:
|
142
|
+
\code
|
143
|
+
GetParseErrorFunc GetParseError = GetParseError_En; // or whatever
|
144
|
+
const RAPIDJSON_ERROR_CHARTYPE* s = GetParseError(document.GetParseErrorCode());
|
145
|
+
\endcode
|
146
|
+
*/
|
147
|
+
typedef const RAPIDJSON_ERROR_CHARTYPE* (*GetParseErrorFunc)(ParseErrorCode);
|
148
|
+
|
149
|
+
RAPIDJSON_NAMESPACE_END
|
150
|
+
|
151
|
+
#ifdef __clang__
|
152
|
+
RAPIDJSON_DIAG_POP
|
153
|
+
#endif
|
154
|
+
|
155
|
+
#endif // RAPIDJSON_ERROR_ERROR_H_
|
@@ -0,0 +1,99 @@
|
|
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
|
+
#ifndef RAPIDJSON_FILEREADSTREAM_H_
|
16
|
+
#define RAPIDJSON_FILEREADSTREAM_H_
|
17
|
+
|
18
|
+
#include "stream.h"
|
19
|
+
#include <cstdio>
|
20
|
+
|
21
|
+
#ifdef __clang__
|
22
|
+
RAPIDJSON_DIAG_PUSH
|
23
|
+
RAPIDJSON_DIAG_OFF(padded)
|
24
|
+
RAPIDJSON_DIAG_OFF(unreachable-code)
|
25
|
+
RAPIDJSON_DIAG_OFF(missing-noreturn)
|
26
|
+
#endif
|
27
|
+
|
28
|
+
RAPIDJSON_NAMESPACE_BEGIN
|
29
|
+
|
30
|
+
//! File byte stream for input using fread().
|
31
|
+
/*!
|
32
|
+
\note implements Stream concept
|
33
|
+
*/
|
34
|
+
class FileReadStream {
|
35
|
+
public:
|
36
|
+
typedef char Ch; //!< Character type (byte).
|
37
|
+
|
38
|
+
//! Constructor.
|
39
|
+
/*!
|
40
|
+
\param fp File pointer opened for read.
|
41
|
+
\param buffer user-supplied buffer.
|
42
|
+
\param bufferSize size of buffer in bytes. Must >=4 bytes.
|
43
|
+
*/
|
44
|
+
FileReadStream(std::FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) {
|
45
|
+
RAPIDJSON_ASSERT(fp_ != 0);
|
46
|
+
RAPIDJSON_ASSERT(bufferSize >= 4);
|
47
|
+
Read();
|
48
|
+
}
|
49
|
+
|
50
|
+
Ch Peek() const { return *current_; }
|
51
|
+
Ch Take() { Ch c = *current_; Read(); return c; }
|
52
|
+
size_t Tell() const { return count_ + static_cast<size_t>(current_ - buffer_); }
|
53
|
+
|
54
|
+
// Not implemented
|
55
|
+
void Put(Ch) { RAPIDJSON_ASSERT(false); }
|
56
|
+
void Flush() { RAPIDJSON_ASSERT(false); }
|
57
|
+
Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
58
|
+
size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; }
|
59
|
+
|
60
|
+
// For encoding detection only.
|
61
|
+
const Ch* Peek4() const {
|
62
|
+
return (current_ + 4 <= bufferLast_) ? current_ : 0;
|
63
|
+
}
|
64
|
+
|
65
|
+
private:
|
66
|
+
void Read() {
|
67
|
+
if (current_ < bufferLast_)
|
68
|
+
++current_;
|
69
|
+
else if (!eof_) {
|
70
|
+
count_ += readCount_;
|
71
|
+
readCount_ = fread(buffer_, 1, bufferSize_, fp_);
|
72
|
+
bufferLast_ = buffer_ + readCount_ - 1;
|
73
|
+
current_ = buffer_;
|
74
|
+
|
75
|
+
if (readCount_ < bufferSize_) {
|
76
|
+
buffer_[readCount_] = '\0';
|
77
|
+
++bufferLast_;
|
78
|
+
eof_ = true;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
std::FILE* fp_;
|
84
|
+
Ch *buffer_;
|
85
|
+
size_t bufferSize_;
|
86
|
+
Ch *bufferLast_;
|
87
|
+
Ch *current_;
|
88
|
+
size_t readCount_;
|
89
|
+
size_t count_; //!< Number of characters read
|
90
|
+
bool eof_;
|
91
|
+
};
|
92
|
+
|
93
|
+
RAPIDJSON_NAMESPACE_END
|
94
|
+
|
95
|
+
#ifdef __clang__
|
96
|
+
RAPIDJSON_DIAG_POP
|
97
|
+
#endif
|
98
|
+
|
99
|
+
#endif // RAPIDJSON_FILESTREAM_H_
|
@@ -0,0 +1,104 @@
|
|
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
|
+
#ifndef RAPIDJSON_FILEWRITESTREAM_H_
|
16
|
+
#define RAPIDJSON_FILEWRITESTREAM_H_
|
17
|
+
|
18
|
+
#include "stream.h"
|
19
|
+
#include <cstdio>
|
20
|
+
|
21
|
+
#ifdef __clang__
|
22
|
+
RAPIDJSON_DIAG_PUSH
|
23
|
+
RAPIDJSON_DIAG_OFF(unreachable-code)
|
24
|
+
#endif
|
25
|
+
|
26
|
+
RAPIDJSON_NAMESPACE_BEGIN
|
27
|
+
|
28
|
+
//! Wrapper of C file stream for input using fread().
|
29
|
+
/*!
|
30
|
+
\note implements Stream concept
|
31
|
+
*/
|
32
|
+
class FileWriteStream {
|
33
|
+
public:
|
34
|
+
typedef char Ch; //!< Character type. Only support char.
|
35
|
+
|
36
|
+
FileWriteStream(std::FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) {
|
37
|
+
RAPIDJSON_ASSERT(fp_ != 0);
|
38
|
+
}
|
39
|
+
|
40
|
+
void Put(char c) {
|
41
|
+
if (current_ >= bufferEnd_)
|
42
|
+
Flush();
|
43
|
+
|
44
|
+
*current_++ = c;
|
45
|
+
}
|
46
|
+
|
47
|
+
void PutN(char c, size_t n) {
|
48
|
+
size_t avail = static_cast<size_t>(bufferEnd_ - current_);
|
49
|
+
while (n > avail) {
|
50
|
+
std::memset(current_, c, avail);
|
51
|
+
current_ += avail;
|
52
|
+
Flush();
|
53
|
+
n -= avail;
|
54
|
+
avail = static_cast<size_t>(bufferEnd_ - current_);
|
55
|
+
}
|
56
|
+
|
57
|
+
if (n > 0) {
|
58
|
+
std::memset(current_, c, n);
|
59
|
+
current_ += n;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
void Flush() {
|
64
|
+
if (current_ != buffer_) {
|
65
|
+
size_t result = fwrite(buffer_, 1, static_cast<size_t>(current_ - buffer_), fp_);
|
66
|
+
if (result < static_cast<size_t>(current_ - buffer_)) {
|
67
|
+
// failure deliberately ignored at this time
|
68
|
+
// added to avoid warn_unused_result build errors
|
69
|
+
}
|
70
|
+
current_ = buffer_;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
// Not implemented
|
75
|
+
char Peek() const { RAPIDJSON_ASSERT(false); return 0; }
|
76
|
+
char Take() { RAPIDJSON_ASSERT(false); return 0; }
|
77
|
+
size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; }
|
78
|
+
char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; }
|
79
|
+
size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; }
|
80
|
+
|
81
|
+
private:
|
82
|
+
// Prohibit copy constructor & assignment operator.
|
83
|
+
FileWriteStream(const FileWriteStream&);
|
84
|
+
FileWriteStream& operator=(const FileWriteStream&);
|
85
|
+
|
86
|
+
std::FILE* fp_;
|
87
|
+
char *buffer_;
|
88
|
+
char *bufferEnd_;
|
89
|
+
char *current_;
|
90
|
+
};
|
91
|
+
|
92
|
+
//! Implement specialized version of PutN() with memset() for better performance.
|
93
|
+
template<>
|
94
|
+
inline void PutN(FileWriteStream& stream, char c, size_t n) {
|
95
|
+
stream.PutN(c, n);
|
96
|
+
}
|
97
|
+
|
98
|
+
RAPIDJSON_NAMESPACE_END
|
99
|
+
|
100
|
+
#ifdef __clang__
|
101
|
+
RAPIDJSON_DIAG_POP
|
102
|
+
#endif
|
103
|
+
|
104
|
+
#endif // RAPIDJSON_FILESTREAM_H_
|
@@ -0,0 +1,151 @@
|
|
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
|
+
#ifndef RAPIDJSON_FWD_H_
|
16
|
+
#define RAPIDJSON_FWD_H_
|
17
|
+
|
18
|
+
#include "rapidjson.h"
|
19
|
+
|
20
|
+
RAPIDJSON_NAMESPACE_BEGIN
|
21
|
+
|
22
|
+
// encodings.h
|
23
|
+
|
24
|
+
template<typename CharType> struct UTF8;
|
25
|
+
template<typename CharType> struct UTF16;
|
26
|
+
template<typename CharType> struct UTF16BE;
|
27
|
+
template<typename CharType> struct UTF16LE;
|
28
|
+
template<typename CharType> struct UTF32;
|
29
|
+
template<typename CharType> struct UTF32BE;
|
30
|
+
template<typename CharType> struct UTF32LE;
|
31
|
+
template<typename CharType> struct ASCII;
|
32
|
+
template<typename CharType> struct AutoUTF;
|
33
|
+
|
34
|
+
template<typename SourceEncoding, typename TargetEncoding>
|
35
|
+
struct Transcoder;
|
36
|
+
|
37
|
+
// allocators.h
|
38
|
+
|
39
|
+
class CrtAllocator;
|
40
|
+
|
41
|
+
template <typename BaseAllocator>
|
42
|
+
class MemoryPoolAllocator;
|
43
|
+
|
44
|
+
// stream.h
|
45
|
+
|
46
|
+
template <typename Encoding>
|
47
|
+
struct GenericStringStream;
|
48
|
+
|
49
|
+
typedef GenericStringStream<UTF8<char> > StringStream;
|
50
|
+
|
51
|
+
template <typename Encoding>
|
52
|
+
struct GenericInsituStringStream;
|
53
|
+
|
54
|
+
typedef GenericInsituStringStream<UTF8<char> > InsituStringStream;
|
55
|
+
|
56
|
+
// stringbuffer.h
|
57
|
+
|
58
|
+
template <typename Encoding, typename Allocator>
|
59
|
+
class GenericStringBuffer;
|
60
|
+
|
61
|
+
typedef GenericStringBuffer<UTF8<char>, CrtAllocator> StringBuffer;
|
62
|
+
|
63
|
+
// filereadstream.h
|
64
|
+
|
65
|
+
class FileReadStream;
|
66
|
+
|
67
|
+
// filewritestream.h
|
68
|
+
|
69
|
+
class FileWriteStream;
|
70
|
+
|
71
|
+
// memorybuffer.h
|
72
|
+
|
73
|
+
template <typename Allocator>
|
74
|
+
struct GenericMemoryBuffer;
|
75
|
+
|
76
|
+
typedef GenericMemoryBuffer<CrtAllocator> MemoryBuffer;
|
77
|
+
|
78
|
+
// memorystream.h
|
79
|
+
|
80
|
+
struct MemoryStream;
|
81
|
+
|
82
|
+
// reader.h
|
83
|
+
|
84
|
+
template<typename Encoding, typename Derived>
|
85
|
+
struct BaseReaderHandler;
|
86
|
+
|
87
|
+
template <typename SourceEncoding, typename TargetEncoding, typename StackAllocator>
|
88
|
+
class GenericReader;
|
89
|
+
|
90
|
+
typedef GenericReader<UTF8<char>, UTF8<char>, CrtAllocator> Reader;
|
91
|
+
|
92
|
+
// writer.h
|
93
|
+
|
94
|
+
template<typename OutputStream, typename SourceEncoding, typename TargetEncoding, typename StackAllocator, unsigned writeFlags>
|
95
|
+
class Writer;
|
96
|
+
|
97
|
+
// prettywriter.h
|
98
|
+
|
99
|
+
template<typename OutputStream, typename SourceEncoding, typename TargetEncoding, typename StackAllocator, unsigned writeFlags>
|
100
|
+
class PrettyWriter;
|
101
|
+
|
102
|
+
// document.h
|
103
|
+
|
104
|
+
template <typename Encoding, typename Allocator>
|
105
|
+
struct GenericMember;
|
106
|
+
|
107
|
+
template <bool Const, typename Encoding, typename Allocator>
|
108
|
+
class GenericMemberIterator;
|
109
|
+
|
110
|
+
template<typename CharType>
|
111
|
+
struct GenericStringRef;
|
112
|
+
|
113
|
+
template <typename Encoding, typename Allocator>
|
114
|
+
class GenericValue;
|
115
|
+
|
116
|
+
typedef GenericValue<UTF8<char>, MemoryPoolAllocator<CrtAllocator> > Value;
|
117
|
+
|
118
|
+
template <typename Encoding, typename Allocator, typename StackAllocator>
|
119
|
+
class GenericDocument;
|
120
|
+
|
121
|
+
typedef GenericDocument<UTF8<char>, MemoryPoolAllocator<CrtAllocator>, CrtAllocator> Document;
|
122
|
+
|
123
|
+
// pointer.h
|
124
|
+
|
125
|
+
template <typename ValueType, typename Allocator>
|
126
|
+
class GenericPointer;
|
127
|
+
|
128
|
+
typedef GenericPointer<Value, CrtAllocator> Pointer;
|
129
|
+
|
130
|
+
// schema.h
|
131
|
+
|
132
|
+
template <typename SchemaDocumentType>
|
133
|
+
class IGenericRemoteSchemaDocumentProvider;
|
134
|
+
|
135
|
+
template <typename ValueT, typename Allocator>
|
136
|
+
class GenericSchemaDocument;
|
137
|
+
|
138
|
+
typedef GenericSchemaDocument<Value, CrtAllocator> SchemaDocument;
|
139
|
+
typedef IGenericRemoteSchemaDocumentProvider<SchemaDocument> IRemoteSchemaDocumentProvider;
|
140
|
+
|
141
|
+
template <
|
142
|
+
typename SchemaDocumentType,
|
143
|
+
typename OutputHandler,
|
144
|
+
typename StateAllocator>
|
145
|
+
class GenericSchemaValidator;
|
146
|
+
|
147
|
+
typedef GenericSchemaValidator<SchemaDocument, BaseReaderHandler<UTF8<char>, void>, CrtAllocator> SchemaValidator;
|
148
|
+
|
149
|
+
RAPIDJSON_NAMESPACE_END
|
150
|
+
|
151
|
+
#endif // RAPIDJSON_RAPIDJSONFWD_H_
|