mirror of
https://github.com/Tencent/rapidjson.git
synced 2025-03-06 13:41:35 +01:00
Add move constructor for GenericSchemaDocument
This commit is contained in:
parent
dd25c9651a
commit
db4bc75cd9
@ -1322,7 +1322,7 @@ public:
|
||||
\param remoteProvider An optional remote schema document provider for resolving remote reference. Can be null.
|
||||
\param allocator An optional allocator instance for allocating memory. Can be null.
|
||||
*/
|
||||
GenericSchemaDocument(const ValueType& document, IRemoteSchemaDocumentProviderType* remoteProvider = 0, Allocator* allocator = 0) :
|
||||
GenericSchemaDocument(const ValueType& document, IRemoteSchemaDocumentProviderType* remoteProvider = 0, Allocator* allocator = 0) RAPIDJSON_NOEXCEPT :
|
||||
remoteProvider_(remoteProvider),
|
||||
allocator_(allocator),
|
||||
ownAllocator_(),
|
||||
@ -1357,6 +1357,22 @@ public:
|
||||
schemaRef_.ShrinkToFit(); // Deallocate all memory for ref
|
||||
}
|
||||
|
||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||
//! Move constructor in C++11
|
||||
GenericSchemaDocument(GenericSchemaDocument&& rhs) RAPIDJSON_NOEXCEPT :
|
||||
remoteProvider_(rhs.remoteProvider_),
|
||||
allocator_(rhs.allocator_),
|
||||
ownAllocator_(rhs.ownAllocator_),
|
||||
root_(rhs.root_),
|
||||
schemaMap_(std::move(rhs.schemaMap_)),
|
||||
schemaRef_(std::move(rhs.schemaRef_))
|
||||
{
|
||||
rhs.remoteProvider_ = 0;
|
||||
rhs.allocator_ = 0;
|
||||
rhs.ownAllocator_ = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
//! Destructor
|
||||
~GenericSchemaDocument() {
|
||||
while (!schemaMap_.Empty())
|
||||
@ -1369,6 +1385,11 @@ public:
|
||||
const SchemaType& GetRoot() const { return *root_; }
|
||||
|
||||
private:
|
||||
//! Prohibit copying
|
||||
GenericSchemaDocument(const GenericSchemaDocument&);
|
||||
//! Prohibit assignment
|
||||
GenericSchemaDocument& operator=(const GenericSchemaDocument&);
|
||||
|
||||
struct SchemaRefEntry {
|
||||
SchemaRefEntry(const PointerType& s, const PointerType& t, const SchemaType** outSchema, Allocator *allocator) : source(s, allocator), target(t, allocator), schema(outSchema) {}
|
||||
PointerType source;
|
||||
|
@ -1152,6 +1152,24 @@ TEST(SchemaValidatingWriter, Simple) {
|
||||
EXPECT_TRUE(validator.GetInvalidDocumentPointer() == SchemaDocument::PointerType(""));
|
||||
}
|
||||
|
||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||
|
||||
static SchemaDocument ReturnSchemaDocument() {
|
||||
Document sd;
|
||||
sd.Parse("{ \"type\": [\"number\", \"string\"] }");
|
||||
SchemaDocument s(sd);
|
||||
return s;
|
||||
}
|
||||
|
||||
TEST(Schema, Issue552) {
|
||||
SchemaDocument s = ReturnSchemaDocument();
|
||||
VALIDATE(s, "42", true);
|
||||
VALIDATE(s, "\"I'm a string\"", true);
|
||||
VALIDATE(s, "{ \"an\": [ \"arbitrarily\", \"nested\" ], \"data\": \"structure\" }", true);
|
||||
}
|
||||
|
||||
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||
|
||||
#ifdef __clang__
|
||||
RAPIDJSON_DIAG_POP
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user