rj_schema 0.2.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rj_schema/rapidjson/bin/unittestschema/address.json +139 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/allOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/anyOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/oneOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +118 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +5 -5
- data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/document.h +17 -12
- data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +49 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +56 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/clzll.h +4 -4
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +17 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +17 -9
- data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +311 -159
- data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +3 -3
- data/ext/rj_schema/rapidjson/readme.md +3 -3
- data/ext/rj_schema/rapidjson/readme.zh-cn.md +2 -2
- data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/perftest.h +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +1 -0
- data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/clzlltest.cpp +34 -0
- data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +33 -1
- data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +4 -1
- data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +593 -78
- data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/unittest.h +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +1 -1
- data/ext/rj_schema/rj_schema.cpp +160 -16
- data/lib/rj_schema.rb +1 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eaf776a94bc82ea6f7ed041927c3ade57e7e74fd7a8f01db87ae1252eaac6a30
|
4
|
+
data.tar.gz: df73cdfcf503d76b70a311e64d1edf95893ce9c521ac0e3154dc27be2533d435
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13da02db7af7782178b92b1970c006de03bc45d65c96c90cc87b8aa3b90e0a673dac67bfc3e22a1f4d85ae26e1f8c7a6f951b3fe44239bb2d8149f290a18a585
|
7
|
+
data.tar.gz: 8c05a82b990647d6c8010fb121c45c4e4e9b7e35dac3a8a4b48f997597180ffd31095ff5e558ae3f15eb4cfd2c5077bdd459536299e20153127d9f74508cfc4e
|
@@ -0,0 +1,139 @@
|
|
1
|
+
{
|
2
|
+
"type": "object",
|
3
|
+
"properties": {
|
4
|
+
"version": {
|
5
|
+
"$ref": "#/definitions/decimal_type"
|
6
|
+
},
|
7
|
+
"address": {
|
8
|
+
"$ref": "#/definitions/address_type"
|
9
|
+
},
|
10
|
+
"phones": {
|
11
|
+
"type": "array",
|
12
|
+
"minItems": 1,
|
13
|
+
"maxItems": 2,
|
14
|
+
"uniqueItems": true,
|
15
|
+
"items": {
|
16
|
+
"$ref": "#/definitions/phone_type"
|
17
|
+
}
|
18
|
+
},
|
19
|
+
"names": {
|
20
|
+
"type": "array",
|
21
|
+
"items": [
|
22
|
+
{ "type": "string" },
|
23
|
+
{ "type": "string" }
|
24
|
+
],
|
25
|
+
"additionalItems": false
|
26
|
+
},
|
27
|
+
"extra": {
|
28
|
+
"type": "object",
|
29
|
+
"patternProperties": {
|
30
|
+
"^S_": { "type": "string" }
|
31
|
+
}
|
32
|
+
},
|
33
|
+
"gender": {
|
34
|
+
"type": "string",
|
35
|
+
"enum": ["M", "F"]
|
36
|
+
}
|
37
|
+
},
|
38
|
+
"additionalProperties": false,
|
39
|
+
"dependencies": {
|
40
|
+
"address": [ "version" ],
|
41
|
+
"names": {
|
42
|
+
"properties": {
|
43
|
+
"version": { "$ref": "#/definitions/decimal_type" }
|
44
|
+
},
|
45
|
+
"required": ["version"]
|
46
|
+
}
|
47
|
+
},
|
48
|
+
"definitions": {
|
49
|
+
"address_type": {
|
50
|
+
"type": "object",
|
51
|
+
"properties": {
|
52
|
+
"number": {
|
53
|
+
"$ref": "#/definitions/positiveInt_type"
|
54
|
+
},
|
55
|
+
"street1": {
|
56
|
+
"type": "string"
|
57
|
+
},
|
58
|
+
"street2": {
|
59
|
+
"type": ["string", "null"]
|
60
|
+
},
|
61
|
+
"street3": {
|
62
|
+
"not": { "type": ["boolean", "number", ",integer", "object", "null"] }
|
63
|
+
},
|
64
|
+
"city": {
|
65
|
+
"type": "string",
|
66
|
+
"maxLength": 10,
|
67
|
+
"minLength": 4
|
68
|
+
},
|
69
|
+
"area": {
|
70
|
+
"oneOf": [
|
71
|
+
{ "$ref": "#/definitions/county_type" },
|
72
|
+
{ "$ref": "#/definitions/province_type" }
|
73
|
+
]
|
74
|
+
},
|
75
|
+
"country": {
|
76
|
+
"allOf": [
|
77
|
+
{ "$ref": "#/definitions/country_type" }
|
78
|
+
]
|
79
|
+
},
|
80
|
+
"postcode": {
|
81
|
+
"anyOf": [
|
82
|
+
{ "type": "string", "pattern": "^[A-Z]{2}[0-9]{1,2} [0-9][A-Z]{2}$" },
|
83
|
+
{ "type": "string", "pattern": "^[0-9]{5}$" }
|
84
|
+
]
|
85
|
+
}
|
86
|
+
},
|
87
|
+
"minProperties": 7,
|
88
|
+
"required": [
|
89
|
+
"number",
|
90
|
+
"street1",
|
91
|
+
"city"
|
92
|
+
]
|
93
|
+
},
|
94
|
+
"country_type": {
|
95
|
+
"type": "string",
|
96
|
+
"enum": ["UK", "Canada"]
|
97
|
+
},
|
98
|
+
"county_type": {
|
99
|
+
"type": "string",
|
100
|
+
"enum": ["Sussex", "Surrey", "Kent"]
|
101
|
+
},
|
102
|
+
"province_type": {
|
103
|
+
"type": "string",
|
104
|
+
"enum": ["Quebec", "BC", "Alberta"]
|
105
|
+
},
|
106
|
+
"date_type": {
|
107
|
+
"pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$",
|
108
|
+
"type": "string"
|
109
|
+
},
|
110
|
+
"positiveInt_type": {
|
111
|
+
"minimum": 0,
|
112
|
+
"exclusiveMinimum": true,
|
113
|
+
"maximum": 100,
|
114
|
+
"exclusiveMaximum": true,
|
115
|
+
"type": "integer"
|
116
|
+
},
|
117
|
+
"decimal_type": {
|
118
|
+
"multipleOf": 1.0,
|
119
|
+
"type": "number"
|
120
|
+
},
|
121
|
+
"time_type": {
|
122
|
+
"pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$",
|
123
|
+
"type": "string"
|
124
|
+
},
|
125
|
+
"unsignedInt_type": {
|
126
|
+
"type": "integer",
|
127
|
+
"minimum": 0,
|
128
|
+
"maximum": 99999
|
129
|
+
},
|
130
|
+
"phone_type": {
|
131
|
+
"pattern": "^[0-9]*-[0-9]*",
|
132
|
+
"type": "string"
|
133
|
+
},
|
134
|
+
"url_type": {
|
135
|
+
"pattern": "^\\S*$",
|
136
|
+
"type": "string"
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
@@ -7,9 +7,124 @@
|
|
7
7
|
#include "rapidjson/schema.h"
|
8
8
|
#include "rapidjson/stringbuffer.h"
|
9
9
|
#include "rapidjson/prettywriter.h"
|
10
|
+
#include <string>
|
11
|
+
#include <iostream>
|
12
|
+
#include <sstream>
|
10
13
|
|
11
14
|
using namespace rapidjson;
|
12
15
|
|
16
|
+
typedef GenericValue<UTF8<>, CrtAllocator > ValueType;
|
17
|
+
|
18
|
+
// Forward ref
|
19
|
+
static void CreateErrorMessages(const ValueType& errors, size_t depth, const char* context);
|
20
|
+
|
21
|
+
// Convert GenericValue to std::string
|
22
|
+
static std::string GetString(const ValueType& val) {
|
23
|
+
std::ostringstream s;
|
24
|
+
if (val.IsString())
|
25
|
+
s << val.GetString();
|
26
|
+
else if (val.IsDouble())
|
27
|
+
s << val.GetDouble();
|
28
|
+
else if (val.IsUint())
|
29
|
+
s << val.GetUint();
|
30
|
+
else if (val.IsInt())
|
31
|
+
s << val.GetInt();
|
32
|
+
else if (val.IsUint64())
|
33
|
+
s << val.GetUint64();
|
34
|
+
else if (val.IsInt64())
|
35
|
+
s << val.GetInt64();
|
36
|
+
else if (val.IsBool() && val.GetBool())
|
37
|
+
s << "true";
|
38
|
+
else if (val.IsBool())
|
39
|
+
s << "false";
|
40
|
+
else if (val.IsFloat())
|
41
|
+
s << val.GetFloat();
|
42
|
+
return s.str();}
|
43
|
+
|
44
|
+
// Create the error message for a named error
|
45
|
+
// The error object can either be empty or contain at least member properties:
|
46
|
+
// {"errorCode": <code>, "instanceRef": "<pointer>", "schemaRef": "<pointer>" }
|
47
|
+
// Additional properties may be present for use as inserts.
|
48
|
+
// An "errors" property may be present if there are child errors.
|
49
|
+
static void HandleError(const char* errorName, const ValueType& error, size_t depth, const char* context) {
|
50
|
+
if (!error.ObjectEmpty()) {
|
51
|
+
// Get error code and look up error message text (English)
|
52
|
+
int code = error["errorCode"].GetInt();
|
53
|
+
std::string message(GetValidateError_En(static_cast<ValidateErrorCode>(code)));
|
54
|
+
// For each member property in the error, see if its name exists as an insert in the error message and if so replace with the stringified property value
|
55
|
+
// So for example - "Number '%actual' is not a multiple of the 'multipleOf' value '%expected'." - we would expect "actual" and "expected" members.
|
56
|
+
for (ValueType::ConstMemberIterator insertsItr = error.MemberBegin();
|
57
|
+
insertsItr != error.MemberEnd(); ++insertsItr) {
|
58
|
+
std::string insertName("%");
|
59
|
+
insertName += insertsItr->name.GetString(); // eg "%actual"
|
60
|
+
size_t insertPos = message.find(insertName);
|
61
|
+
if (insertPos != std::string::npos) {
|
62
|
+
std::string insertString("");
|
63
|
+
const ValueType &insert = insertsItr->value;
|
64
|
+
if (insert.IsArray()) {
|
65
|
+
// Member is an array so create comma-separated list of items for the insert string
|
66
|
+
for (ValueType::ConstValueIterator itemsItr = insert.Begin(); itemsItr != insert.End(); ++itemsItr) {
|
67
|
+
if (itemsItr != insert.Begin()) insertString += ",";
|
68
|
+
insertString += GetString(*itemsItr);
|
69
|
+
}
|
70
|
+
} else {
|
71
|
+
insertString += GetString(insert);
|
72
|
+
}
|
73
|
+
message.replace(insertPos, insertName.length(), insertString);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
// Output error message, references, context
|
77
|
+
std::string indent(depth * 2, ' ');
|
78
|
+
std::cout << indent << "Error Name: " << errorName << std::endl;
|
79
|
+
std::cout << indent << "Message: " << message.c_str() << std::endl;
|
80
|
+
std::cout << indent << "Instance: " << error["instanceRef"].GetString() << std::endl;
|
81
|
+
std::cout << indent << "Schema: " << error["schemaRef"].GetString() << std::endl;
|
82
|
+
if (depth > 0) std::cout << indent << "Context: " << context << std::endl;
|
83
|
+
std::cout << std::endl;
|
84
|
+
|
85
|
+
// If child errors exist, apply the process recursively to each error structure.
|
86
|
+
// This occurs for "oneOf", "allOf", "anyOf" and "dependencies" errors, so pass the error name as context.
|
87
|
+
if (error.HasMember("errors")) {
|
88
|
+
depth++;
|
89
|
+
const ValueType &childErrors = error["errors"];
|
90
|
+
if (childErrors.IsArray()) {
|
91
|
+
// Array - each item is an error structure - example
|
92
|
+
// "anyOf": {"errorCode": ..., "errors":[{"pattern": {"errorCode\": ...\"}}, {"pattern": {"errorCode\": ...}}]
|
93
|
+
for (ValueType::ConstValueIterator errorsItr = childErrors.Begin();
|
94
|
+
errorsItr != childErrors.End(); ++errorsItr) {
|
95
|
+
CreateErrorMessages(*errorsItr, depth, errorName);
|
96
|
+
}
|
97
|
+
} else if (childErrors.IsObject()) {
|
98
|
+
// Object - each member is an error structure - example
|
99
|
+
// "dependencies": {"errorCode": ..., "errors": {"address": {"required": {"errorCode": ...}}, "name": {"required": {"errorCode": ...}}}
|
100
|
+
for (ValueType::ConstMemberIterator propsItr = childErrors.MemberBegin();
|
101
|
+
propsItr != childErrors.MemberEnd(); ++propsItr) {
|
102
|
+
CreateErrorMessages(propsItr->value, depth, errorName);
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
// Create error message for all errors in an error structure
|
110
|
+
// Context is used to indicate whether the error structure has a parent 'dependencies', 'allOf', 'anyOf' or 'oneOf' error
|
111
|
+
static void CreateErrorMessages(const ValueType& errors, size_t depth = 0, const char* context = 0) {
|
112
|
+
// Each member property contains one or more errors of a given type
|
113
|
+
for (ValueType::ConstMemberIterator errorTypeItr = errors.MemberBegin(); errorTypeItr != errors.MemberEnd(); ++errorTypeItr) {
|
114
|
+
const char* errorName = errorTypeItr->name.GetString();
|
115
|
+
const ValueType& errorContent = errorTypeItr->value;
|
116
|
+
if (errorContent.IsArray()) {
|
117
|
+
// Member is an array where each item is an error - eg "type": [{"errorCode": ...}, {"errorCode": ...}]
|
118
|
+
for (ValueType::ConstValueIterator contentItr = errorContent.Begin(); contentItr != errorContent.End(); ++contentItr) {
|
119
|
+
HandleError(errorName, *contentItr, depth, context);
|
120
|
+
}
|
121
|
+
} else if (errorContent.IsObject()) {
|
122
|
+
// Member is an object which is a single error - eg "type": {"errorCode": ... }
|
123
|
+
HandleError(errorName, errorContent, depth, context);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
13
128
|
int main(int argc, char *argv[]) {
|
14
129
|
if (argc != 2) {
|
15
130
|
fprintf(stderr, "Usage: schemavalidator schema.json < input.json\n");
|
@@ -65,6 +180,8 @@ int main(int argc, char *argv[]) {
|
|
65
180
|
validator.GetInvalidSchemaPointer().StringifyUriFragment(sb);
|
66
181
|
fprintf(stderr, "Invalid schema: %s\n", sb.GetString());
|
67
182
|
fprintf(stderr, "Invalid keyword: %s\n", validator.GetInvalidSchemaKeyword());
|
183
|
+
fprintf(stderr, "Invalid code: %d\n", validator.GetInvalidSchemaCode());
|
184
|
+
fprintf(stderr, "Invalid message: %s\n", GetValidateError_En(validator.GetInvalidSchemaCode()));
|
68
185
|
sb.Clear();
|
69
186
|
validator.GetInvalidDocumentPointer().StringifyUriFragment(sb);
|
70
187
|
fprintf(stderr, "Invalid document: %s\n", sb.GetString());
|
@@ -73,6 +190,7 @@ int main(int argc, char *argv[]) {
|
|
73
190
|
PrettyWriter<StringBuffer> w(sb);
|
74
191
|
validator.GetError().Accept(w);
|
75
192
|
fprintf(stderr, "Error report:\n%s\n", sb.GetString());
|
193
|
+
CreateErrorMessages(validator.GetError());
|
76
194
|
return EXIT_FAILURE;
|
77
195
|
}
|
78
196
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
2
2
|
//
|
3
|
-
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
4
4
|
//
|
5
5
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
6
6
|
// in compliance with the License. You may obtain a copy of the License at
|
@@ -77,19 +77,19 @@ public:
|
|
77
77
|
static const bool kNeedFree = true;
|
78
78
|
void* Malloc(size_t size) {
|
79
79
|
if (size) // behavior of malloc(0) is implementation defined.
|
80
|
-
return
|
80
|
+
return RAPIDJSON_MALLOC(size);
|
81
81
|
else
|
82
82
|
return NULL; // standardize to returning NULL.
|
83
83
|
}
|
84
84
|
void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) {
|
85
85
|
(void)originalSize;
|
86
86
|
if (newSize == 0) {
|
87
|
-
|
87
|
+
RAPIDJSON_FREE(originalPtr);
|
88
88
|
return NULL;
|
89
89
|
}
|
90
|
-
return
|
90
|
+
return RAPIDJSON_REALLOC(originalPtr, newSize);
|
91
91
|
}
|
92
|
-
static void Free(void *ptr) {
|
92
|
+
static void Free(void *ptr) { RAPIDJSON_FREE(ptr); }
|
93
93
|
};
|
94
94
|
|
95
95
|
///////////////////////////////////////////////////////////////////////////////
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
2
2
|
//
|
3
|
-
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
4
4
|
//
|
5
5
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
6
6
|
// in compliance with the License. You may obtain a copy of the License at
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
2
2
|
//
|
3
|
-
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
4
4
|
//
|
5
5
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
6
6
|
// in compliance with the License. You may obtain a copy of the License at
|
@@ -289,12 +289,14 @@ class GenericMemberIterator;
|
|
289
289
|
//! non-const GenericMemberIterator
|
290
290
|
template <typename Encoding, typename Allocator>
|
291
291
|
class GenericMemberIterator<false,Encoding,Allocator> {
|
292
|
+
public:
|
292
293
|
//! use plain pointer as iterator type
|
293
294
|
typedef GenericMember<Encoding,Allocator>* Iterator;
|
294
295
|
};
|
295
296
|
//! const GenericMemberIterator
|
296
297
|
template <typename Encoding, typename Allocator>
|
297
298
|
class GenericMemberIterator<true,Encoding,Allocator> {
|
299
|
+
public:
|
298
300
|
//! use plain const pointer as iterator type
|
299
301
|
typedef const GenericMember<Encoding,Allocator>* Iterator;
|
300
302
|
};
|
@@ -2001,17 +2003,18 @@ private:
|
|
2001
2003
|
|
2002
2004
|
// Initial flags of different types.
|
2003
2005
|
kNullFlag = kNullType,
|
2004
|
-
|
2005
|
-
|
2006
|
-
|
2007
|
-
|
2008
|
-
|
2009
|
-
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2006
|
+
// These casts are added to suppress the warning on MSVC about bitwise operations between enums of different types.
|
2007
|
+
kTrueFlag = static_cast<int>(kTrueType) | static_cast<int>(kBoolFlag),
|
2008
|
+
kFalseFlag = static_cast<int>(kFalseType) | static_cast<int>(kBoolFlag),
|
2009
|
+
kNumberIntFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kIntFlag | kInt64Flag),
|
2010
|
+
kNumberUintFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag),
|
2011
|
+
kNumberInt64Flag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kInt64Flag),
|
2012
|
+
kNumberUint64Flag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kUint64Flag),
|
2013
|
+
kNumberDoubleFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kDoubleFlag),
|
2014
|
+
kNumberAnyFlag = static_cast<int>(kNumberType) | static_cast<int>(kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag),
|
2015
|
+
kConstStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag),
|
2016
|
+
kCopyStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag | kCopyFlag),
|
2017
|
+
kShortStringFlag = static_cast<int>(kStringType) | static_cast<int>(kStringFlag | kCopyFlag | kInlineStrFlag),
|
2015
2018
|
kObjectFlag = kObjectType,
|
2016
2019
|
kArrayFlag = kArrayType,
|
2017
2020
|
|
@@ -2609,6 +2612,7 @@ public:
|
|
2609
2612
|
GenericArray& operator=(const GenericArray& rhs) { value_ = rhs.value_; return *this; }
|
2610
2613
|
~GenericArray() {}
|
2611
2614
|
|
2615
|
+
operator ValueType&() const { return value_; }
|
2612
2616
|
SizeType Size() const { return value_.Size(); }
|
2613
2617
|
SizeType Capacity() const { return value_.Capacity(); }
|
2614
2618
|
bool Empty() const { return value_.Empty(); }
|
@@ -2664,6 +2668,7 @@ public:
|
|
2664
2668
|
GenericObject& operator=(const GenericObject& rhs) { value_ = rhs.value_; return *this; }
|
2665
2669
|
~GenericObject() {}
|
2666
2670
|
|
2671
|
+
operator ValueType&() const { return value_; }
|
2667
2672
|
SizeType MemberCount() const { return value_.MemberCount(); }
|
2668
2673
|
SizeType MemberCapacity() const { return value_.MemberCapacity(); }
|
2669
2674
|
bool ObjectEmpty() const { return value_.ObjectEmpty(); }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
2
2
|
//
|
3
|
-
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
4
4
|
//
|
5
5
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
6
6
|
// in compliance with the License. You may obtain a copy of the License at
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Tencent is pleased to support the open source community by making RapidJSON available.
|
2
2
|
//
|
3
|
-
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
3
|
+
// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
|
4
4
|
//
|
5
5
|
// Licensed under the MIT License (the "License"); you may not use this file except
|
6
6
|
// in compliance with the License. You may obtain a copy of the License at
|