commit
795946b1ca
@ -54,6 +54,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|||||||
endif()
|
endif()
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#add extra search paths for libraries and includes
|
#add extra search paths for libraries and includes
|
||||||
|
@ -30,7 +30,7 @@ environment:
|
|||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DBUILD_SHARED_LIBS=true -Wno-dev
|
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -Wno-dev
|
||||||
|
|
||||||
build:
|
build:
|
||||||
project: Build\VS\RapidJSON.sln
|
project: Build\VS\RapidJSON.sln
|
||||||
|
@ -23,8 +23,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach (example ${EXAMPLES})
|
foreach (example ${EXAMPLES})
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
RAPIDJSON_DIAG_PUSH
|
RAPIDJSON_DIAG_PUSH
|
||||||
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
|
||||||
|
RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
@ -311,6 +312,10 @@ struct GenericStringRef {
|
|||||||
GenericStringRef(const CharType* str, SizeType len)
|
GenericStringRef(const CharType* str, SizeType len)
|
||||||
: s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
|
: s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
|
||||||
|
|
||||||
|
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
|
||||||
|
|
||||||
|
GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
|
||||||
|
|
||||||
//! implicit conversion to plain CharType pointer
|
//! implicit conversion to plain CharType pointer
|
||||||
operator const Ch *() const { return s; }
|
operator const Ch *() const { return s; }
|
||||||
|
|
||||||
|
@ -85,6 +85,10 @@ public:
|
|||||||
size_t PutEnd(Ch*) { return 0; }
|
size_t PutEnd(Ch*) { return 0; }
|
||||||
|
|
||||||
MemoryStream& is_;
|
MemoryStream& is_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EncodedInputStream(const EncodedInputStream&);
|
||||||
|
EncodedInputStream& operator=(const EncodedInputStream&);
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Output byte stream wrapper with statically bound encoding.
|
//! Output byte stream wrapper with statically bound encoding.
|
||||||
|
@ -31,6 +31,11 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(effc++)
|
RAPIDJSON_DIAG_OFF(effc++)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef RAPIDJSON_REGEX_VERBOSE
|
#ifndef RAPIDJSON_REGEX_VERBOSE
|
||||||
#define RAPIDJSON_REGEX_VERBOSE 0
|
#define RAPIDJSON_REGEX_VERBOSE 0
|
||||||
#endif
|
#endif
|
||||||
@ -693,4 +698,8 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_INTERNAL_REGEX_H_
|
#endif // RAPIDJSON_INTERNAL_REGEX_H_
|
||||||
|
@ -23,6 +23,11 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(switch-enum)
|
RAPIDJSON_DIAG_OFF(switch-enum)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token
|
static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token
|
||||||
@ -1342,4 +1347,8 @@ RAPIDJSON_NAMESPACE_END
|
|||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_POINTER_H_
|
#endif // RAPIDJSON_POINTER_H_
|
||||||
|
@ -68,6 +68,11 @@ RAPIDJSON_DIAG_PUSH
|
|||||||
RAPIDJSON_DIAG_OFF(variadic-macros)
|
RAPIDJSON_DIAG_OFF(variadic-macros)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
|
||||||
|
#endif
|
||||||
|
|
||||||
RAPIDJSON_NAMESPACE_BEGIN
|
RAPIDJSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1963,7 +1968,8 @@ public:
|
|||||||
GenericSchemaValidator<SchemaDocumentType, Handler> validator(sd_, handler);
|
GenericSchemaValidator<SchemaDocumentType, Handler> validator(sd_, handler);
|
||||||
parseResult_ = reader.template Parse<parseFlags>(is_, validator);
|
parseResult_ = reader.template Parse<parseFlags>(is_, validator);
|
||||||
|
|
||||||
if ((isValid_ = validator.IsValid())) {
|
isValid_ = validator.IsValid();
|
||||||
|
if (isValid_) {
|
||||||
invalidSchemaPointer_ = PointerType();
|
invalidSchemaPointer_ = PointerType();
|
||||||
invalidSchemaKeyword_ = 0;
|
invalidSchemaKeyword_ = 0;
|
||||||
invalidDocumentPointer_ = PointerType();
|
invalidDocumentPointer_ = PointerType();
|
||||||
@ -2004,4 +2010,8 @@ RAPIDJSON_DIAG_POP
|
|||||||
RAPIDJSON_DIAG_POP
|
RAPIDJSON_DIAG_POP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // RAPIDJSON_SCHEMA_H_
|
#endif // RAPIDJSON_SCHEMA_H_
|
||||||
|
@ -38,13 +38,25 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
|
||||||
# If the user is running a newer version of Clang that includes the
|
# If the user is running a newer version of Clang that includes the
|
||||||
# -Wdouble-promotion, we will ignore that warning.
|
# -Wdouble-promotion, we will ignore that warning.
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
|
||||||
endif()
|
endif()
|
||||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
# Force to always compile with /W4
|
||||||
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
|
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Force to always compile with /WX
|
||||||
|
if(CMAKE_CXX_FLAGS MATCHES "/WX-")
|
||||||
|
string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1")
|
||||||
|
@ -447,10 +447,10 @@ TYPED_TEST_CASE(DocumentMove, MoveAllocatorTypes);
|
|||||||
|
|
||||||
TYPED_TEST(DocumentMove, MoveConstructor) {
|
TYPED_TEST(DocumentMove, MoveConstructor) {
|
||||||
typedef TypeParam Allocator;
|
typedef TypeParam Allocator;
|
||||||
typedef GenericDocument<UTF8<>, Allocator> Document;
|
typedef GenericDocument<UTF8<>, Allocator> D;
|
||||||
Allocator allocator;
|
Allocator allocator;
|
||||||
|
|
||||||
Document a(&allocator);
|
D a(&allocator);
|
||||||
a.Parse("[\"one\", \"two\", \"three\"]");
|
a.Parse("[\"one\", \"two\", \"three\"]");
|
||||||
EXPECT_FALSE(a.HasParseError());
|
EXPECT_FALSE(a.HasParseError());
|
||||||
EXPECT_TRUE(a.IsArray());
|
EXPECT_TRUE(a.IsArray());
|
||||||
@ -458,7 +458,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
|
|||||||
EXPECT_EQ(&a.GetAllocator(), &allocator);
|
EXPECT_EQ(&a.GetAllocator(), &allocator);
|
||||||
|
|
||||||
// Document b(a); // does not compile (!is_copy_constructible)
|
// Document b(a); // does not compile (!is_copy_constructible)
|
||||||
Document b(std::move(a));
|
D b(std::move(a));
|
||||||
EXPECT_TRUE(a.IsNull());
|
EXPECT_TRUE(a.IsNull());
|
||||||
EXPECT_TRUE(b.IsArray());
|
EXPECT_TRUE(b.IsArray());
|
||||||
EXPECT_EQ(3u, b.Size());
|
EXPECT_EQ(3u, b.Size());
|
||||||
@ -471,7 +471,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
|
|||||||
EXPECT_EQ(2u, b.MemberCount());
|
EXPECT_EQ(2u, b.MemberCount());
|
||||||
|
|
||||||
// Document c = a; // does not compile (!is_copy_constructible)
|
// Document c = a; // does not compile (!is_copy_constructible)
|
||||||
Document c = std::move(b);
|
D c = std::move(b);
|
||||||
EXPECT_TRUE(b.IsNull());
|
EXPECT_TRUE(b.IsNull());
|
||||||
EXPECT_TRUE(c.IsObject());
|
EXPECT_TRUE(c.IsObject());
|
||||||
EXPECT_EQ(2u, c.MemberCount());
|
EXPECT_EQ(2u, c.MemberCount());
|
||||||
@ -481,17 +481,17 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
|
|||||||
|
|
||||||
TYPED_TEST(DocumentMove, MoveConstructorParseError) {
|
TYPED_TEST(DocumentMove, MoveConstructorParseError) {
|
||||||
typedef TypeParam Allocator;
|
typedef TypeParam Allocator;
|
||||||
typedef GenericDocument<UTF8<>, Allocator> Document;
|
typedef GenericDocument<UTF8<>, Allocator> D;
|
||||||
|
|
||||||
ParseResult noError;
|
ParseResult noError;
|
||||||
Document a;
|
D a;
|
||||||
a.Parse("{ 4 = 4]");
|
a.Parse("{ 4 = 4]");
|
||||||
ParseResult error(a.GetParseError(), a.GetErrorOffset());
|
ParseResult error(a.GetParseError(), a.GetErrorOffset());
|
||||||
EXPECT_TRUE(a.HasParseError());
|
EXPECT_TRUE(a.HasParseError());
|
||||||
EXPECT_NE(error.Code(), noError.Code());
|
EXPECT_NE(error.Code(), noError.Code());
|
||||||
EXPECT_NE(error.Offset(), noError.Offset());
|
EXPECT_NE(error.Offset(), noError.Offset());
|
||||||
|
|
||||||
Document b(std::move(a));
|
D b(std::move(a));
|
||||||
EXPECT_FALSE(a.HasParseError());
|
EXPECT_FALSE(a.HasParseError());
|
||||||
EXPECT_TRUE(b.HasParseError());
|
EXPECT_TRUE(b.HasParseError());
|
||||||
EXPECT_EQ(a.GetParseError(), noError.Code());
|
EXPECT_EQ(a.GetParseError(), noError.Code());
|
||||||
@ -499,7 +499,7 @@ TYPED_TEST(DocumentMove, MoveConstructorParseError) {
|
|||||||
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
|
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
|
||||||
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
|
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
|
||||||
|
|
||||||
Document c(std::move(b));
|
D c(std::move(b));
|
||||||
EXPECT_FALSE(b.HasParseError());
|
EXPECT_FALSE(b.HasParseError());
|
||||||
EXPECT_TRUE(c.HasParseError());
|
EXPECT_TRUE(c.HasParseError());
|
||||||
EXPECT_EQ(b.GetParseError(), noError.Code());
|
EXPECT_EQ(b.GetParseError(), noError.Code());
|
||||||
@ -540,10 +540,10 @@ TYPED_TEST(DocumentMove, MoveConstructorStack) {
|
|||||||
|
|
||||||
TYPED_TEST(DocumentMove, MoveAssignment) {
|
TYPED_TEST(DocumentMove, MoveAssignment) {
|
||||||
typedef TypeParam Allocator;
|
typedef TypeParam Allocator;
|
||||||
typedef GenericDocument<UTF8<>, Allocator> Document;
|
typedef GenericDocument<UTF8<>, Allocator> D;
|
||||||
Allocator allocator;
|
Allocator allocator;
|
||||||
|
|
||||||
Document a(&allocator);
|
D a(&allocator);
|
||||||
a.Parse("[\"one\", \"two\", \"three\"]");
|
a.Parse("[\"one\", \"two\", \"three\"]");
|
||||||
EXPECT_FALSE(a.HasParseError());
|
EXPECT_FALSE(a.HasParseError());
|
||||||
EXPECT_TRUE(a.IsArray());
|
EXPECT_TRUE(a.IsArray());
|
||||||
@ -551,7 +551,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
|
|||||||
EXPECT_EQ(&a.GetAllocator(), &allocator);
|
EXPECT_EQ(&a.GetAllocator(), &allocator);
|
||||||
|
|
||||||
// Document b; b = a; // does not compile (!is_copy_assignable)
|
// Document b; b = a; // does not compile (!is_copy_assignable)
|
||||||
Document b;
|
D b;
|
||||||
b = std::move(a);
|
b = std::move(a);
|
||||||
EXPECT_TRUE(a.IsNull());
|
EXPECT_TRUE(a.IsNull());
|
||||||
EXPECT_TRUE(b.IsArray());
|
EXPECT_TRUE(b.IsArray());
|
||||||
@ -565,7 +565,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
|
|||||||
EXPECT_EQ(2u, b.MemberCount());
|
EXPECT_EQ(2u, b.MemberCount());
|
||||||
|
|
||||||
// Document c; c = a; // does not compile (see static_assert)
|
// Document c; c = a; // does not compile (see static_assert)
|
||||||
Document c;
|
D c;
|
||||||
c = std::move(b);
|
c = std::move(b);
|
||||||
EXPECT_TRUE(b.IsNull());
|
EXPECT_TRUE(b.IsNull());
|
||||||
EXPECT_TRUE(c.IsObject());
|
EXPECT_TRUE(c.IsObject());
|
||||||
@ -576,17 +576,17 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
|
|||||||
|
|
||||||
TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
|
TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
|
||||||
typedef TypeParam Allocator;
|
typedef TypeParam Allocator;
|
||||||
typedef GenericDocument<UTF8<>, Allocator> Document;
|
typedef GenericDocument<UTF8<>, Allocator> D;
|
||||||
|
|
||||||
ParseResult noError;
|
ParseResult noError;
|
||||||
Document a;
|
D a;
|
||||||
a.Parse("{ 4 = 4]");
|
a.Parse("{ 4 = 4]");
|
||||||
ParseResult error(a.GetParseError(), a.GetErrorOffset());
|
ParseResult error(a.GetParseError(), a.GetErrorOffset());
|
||||||
EXPECT_TRUE(a.HasParseError());
|
EXPECT_TRUE(a.HasParseError());
|
||||||
EXPECT_NE(error.Code(), noError.Code());
|
EXPECT_NE(error.Code(), noError.Code());
|
||||||
EXPECT_NE(error.Offset(), noError.Offset());
|
EXPECT_NE(error.Offset(), noError.Offset());
|
||||||
|
|
||||||
Document b;
|
D b;
|
||||||
b = std::move(a);
|
b = std::move(a);
|
||||||
EXPECT_FALSE(a.HasParseError());
|
EXPECT_FALSE(a.HasParseError());
|
||||||
EXPECT_TRUE(b.HasParseError());
|
EXPECT_TRUE(b.HasParseError());
|
||||||
@ -595,7 +595,7 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
|
|||||||
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
|
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
|
||||||
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
|
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
|
||||||
|
|
||||||
Document c;
|
D c;
|
||||||
c = std::move(b);
|
c = std::move(b);
|
||||||
EXPECT_FALSE(b.HasParseError());
|
EXPECT_FALSE(b.HasParseError());
|
||||||
EXPECT_TRUE(c.HasParseError());
|
EXPECT_TRUE(c.HasParseError());
|
||||||
@ -612,9 +612,9 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
|
|||||||
TYPED_TEST(DocumentMove, MoveAssignmentStack) {
|
TYPED_TEST(DocumentMove, MoveAssignmentStack) {
|
||||||
typedef TypeParam Allocator;
|
typedef TypeParam Allocator;
|
||||||
typedef UTF8<> Encoding;
|
typedef UTF8<> Encoding;
|
||||||
typedef GenericDocument<Encoding, Allocator> Document;
|
typedef GenericDocument<Encoding, Allocator> D;
|
||||||
|
|
||||||
Document a;
|
D a;
|
||||||
size_t defaultCapacity = a.GetStackCapacity();
|
size_t defaultCapacity = a.GetStackCapacity();
|
||||||
|
|
||||||
// Trick Document into getting GetStackCapacity() to return non-zero
|
// Trick Document into getting GetStackCapacity() to return non-zero
|
||||||
@ -625,12 +625,12 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) {
|
|||||||
size_t capacity = a.GetStackCapacity();
|
size_t capacity = a.GetStackCapacity();
|
||||||
EXPECT_GT(capacity, 0u);
|
EXPECT_GT(capacity, 0u);
|
||||||
|
|
||||||
Document b;
|
D b;
|
||||||
b = std::move(a);
|
b = std::move(a);
|
||||||
EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
|
EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
|
||||||
EXPECT_EQ(b.GetStackCapacity(), capacity);
|
EXPECT_EQ(b.GetStackCapacity(), capacity);
|
||||||
|
|
||||||
Document c;
|
D c;
|
||||||
c = std::move(b);
|
c = std::move(b);
|
||||||
EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
|
EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
|
||||||
EXPECT_EQ(c.GetStackCapacity(), capacity);
|
EXPECT_EQ(c.GetStackCapacity(), capacity);
|
||||||
|
@ -20,6 +20,11 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_PUSH
|
||||||
|
RAPIDJSON_DIAG_OFF(4702) // unreachable code
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace rapidjson;
|
using namespace rapidjson;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -168,4 +173,8 @@ TEST(IStreamWrapper, wfstream) {
|
|||||||
EXPECT_EQ(5, d.MemberCount());
|
EXPECT_EQ(5, d.MemberCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
RAPIDJSON_DIAG_POP
|
||||||
|
#endif
|
||||||
|
@ -720,7 +720,7 @@ TEST(Reader, ParseString_Error) {
|
|||||||
TEST_STRINGENCODING_ERROR(UTF32<>, UTF8<>, unsigned, ARRAY('[', '\"', 0x110000, '\"', ']', '\0'));
|
TEST_STRINGENCODING_ERROR(UTF32<>, UTF8<>, unsigned, ARRAY('[', '\"', 0x110000, '\"', ']', '\0'));
|
||||||
|
|
||||||
// Malform ASCII sequence
|
// Malform ASCII sequence
|
||||||
TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80), '\"', ']', '\0'));
|
TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80u), '\"', ']', '\0'));
|
||||||
|
|
||||||
#undef ARRAY
|
#undef ARRAY
|
||||||
#undef TEST_STRINGARRAY_ERROR
|
#undef TEST_STRINGARRAY_ERROR
|
||||||
|
@ -35,6 +35,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
_CrtMemState memoryState = { 0 };
|
_CrtMemState memoryState = { 0 };
|
||||||
|
(void)memoryState;
|
||||||
_CrtMemCheckpoint(&memoryState);
|
_CrtMemCheckpoint(&memoryState);
|
||||||
//_CrtSetBreakAlloc(X);
|
//_CrtSetBreakAlloc(X);
|
||||||
//void *testWhetherMemoryLeakDetectionWorks = malloc(1);
|
//void *testWhetherMemoryLeakDetectionWorks = malloc(1);
|
||||||
|
@ -94,23 +94,23 @@ TEST(Value, Traits) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST(Value, MoveConstructor) {
|
TEST(Value, MoveConstructor) {
|
||||||
typedef GenericValue<UTF8<>, CrtAllocator> Value;
|
typedef GenericValue<UTF8<>, CrtAllocator> V;
|
||||||
Value::AllocatorType allocator;
|
V::AllocatorType allocator;
|
||||||
|
|
||||||
Value x((Value(kArrayType)));
|
V x((V(kArrayType)));
|
||||||
x.Reserve(4u, allocator);
|
x.Reserve(4u, allocator);
|
||||||
x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
|
x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
|
||||||
EXPECT_TRUE(x.IsArray());
|
EXPECT_TRUE(x.IsArray());
|
||||||
EXPECT_EQ(4u, x.Size());
|
EXPECT_EQ(4u, x.Size());
|
||||||
|
|
||||||
// Value y(x); // does not compile (!is_copy_constructible)
|
// Value y(x); // does not compile (!is_copy_constructible)
|
||||||
Value y(std::move(x));
|
V y(std::move(x));
|
||||||
EXPECT_TRUE(x.IsNull());
|
EXPECT_TRUE(x.IsNull());
|
||||||
EXPECT_TRUE(y.IsArray());
|
EXPECT_TRUE(y.IsArray());
|
||||||
EXPECT_EQ(4u, y.Size());
|
EXPECT_EQ(4u, y.Size());
|
||||||
|
|
||||||
// Value z = y; // does not compile (!is_copy_assignable)
|
// Value z = y; // does not compile (!is_copy_assignable)
|
||||||
Value z = std::move(y);
|
V z = std::move(y);
|
||||||
EXPECT_TRUE(y.IsNull());
|
EXPECT_TRUE(y.IsNull());
|
||||||
EXPECT_TRUE(z.IsArray());
|
EXPECT_TRUE(z.IsArray());
|
||||||
EXPECT_EQ(4u, z.Size());
|
EXPECT_EQ(4u, z.Size());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user