Merge pull request #554 from miloyip/issue552_movingschemadocument
Add move constructor for GenericSchemaDocument
This commit is contained in:
commit
10ccdf88e2
@ -1322,7 +1322,7 @@ public:
|
|||||||
\param remoteProvider An optional remote schema document provider for resolving remote reference. Can be null.
|
\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.
|
\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),
|
remoteProvider_(remoteProvider),
|
||||||
allocator_(allocator),
|
allocator_(allocator),
|
||||||
ownAllocator_(),
|
ownAllocator_(),
|
||||||
@ -1357,6 +1357,22 @@ public:
|
|||||||
schemaRef_.ShrinkToFit(); // Deallocate all memory for ref
|
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
|
//! Destructor
|
||||||
~GenericSchemaDocument() {
|
~GenericSchemaDocument() {
|
||||||
while (!schemaMap_.Empty())
|
while (!schemaMap_.Empty())
|
||||||
@ -1369,6 +1385,11 @@ public:
|
|||||||
const SchemaType& GetRoot() const { return *root_; }
|
const SchemaType& GetRoot() const { return *root_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
//! Prohibit copying
|
||||||
|
GenericSchemaDocument(const GenericSchemaDocument&);
|
||||||
|
//! Prohibit assignment
|
||||||
|
GenericSchemaDocument& operator=(const GenericSchemaDocument&);
|
||||||
|
|
||||||
struct SchemaRefEntry {
|
struct SchemaRefEntry {
|
||||||
SchemaRefEntry(const PointerType& s, const PointerType& t, const SchemaType** outSchema, Allocator *allocator) : source(s, allocator), target(t, allocator), schema(outSchema) {}
|
SchemaRefEntry(const PointerType& s, const PointerType& t, const SchemaType** outSchema, Allocator *allocator) : source(s, allocator), target(t, allocator), schema(outSchema) {}
|
||||||
PointerType source;
|
PointerType source;
|
||||||
|
@ -1152,6 +1152,24 @@ TEST(SchemaValidatingWriter, Simple) {
|
|||||||
EXPECT_TRUE(validator.GetInvalidDocumentPointer() == SchemaDocument::PointerType(""));
|
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, "\"Life, the universe, and everything\"", true);
|
||||||
|
INVALIDATE(s, "[\"Life\", \"the universe\", \"and everything\"]", "", "type", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user