Merge pull request #46 from pah/cleanup/misc

Miscellaneous cleanups
This commit is contained in:
Milo Yip 2014-07-03 23:50:53 +08:00
commit a96b699396
7 changed files with 29 additions and 49 deletions

3
.gitignore vendored
View File

@ -1,4 +1,7 @@
/bin/* /bin/*
!/bin/data
!/bin/encodings
!/bin/jsonchecker
/build/*.exe /build/*.exe
/build/gmake /build/gmake
/build/vs*/ /build/vs*/

View File

@ -285,12 +285,7 @@ public:
explicit GenericValue(double d) : data_(), flags_(kNumberDoubleFlag) { data_.n.d = d; } explicit GenericValue(double d) : data_(), flags_(kNumberDoubleFlag) { data_.n.d = d; }
//! Constructor for constant string (i.e. do not make a copy of string) //! Constructor for constant string (i.e. do not make a copy of string)
GenericValue(const Ch* s, SizeType length) : data_(), flags_() { GenericValue(const Ch* s, SizeType length) : data_(), flags_() { SetStringRaw(s, length); }
RAPIDJSON_ASSERT(s != NULL);
flags_ = kConstStringFlag;
data_.s.str = s;
data_.s.length = length;
}
//! Constructor for constant string (i.e. do not make a copy of string) //! Constructor for constant string (i.e. do not make a copy of string)
explicit GenericValue(const Ch* s) : data_(), flags_() { SetStringRaw(s, internal::StrLen(s)); } explicit GenericValue(const Ch* s) : data_(), flags_() { SetStringRaw(s, internal::StrLen(s)); }
@ -427,14 +422,8 @@ public:
A better approach is to use the now public FindMember(). A better approach is to use the now public FindMember().
*/ */
GenericValue& operator[](const Ch* name) { GenericValue& operator[](const Ch* name) {
MemberIterator member = FindMember(name); GenericValue n(name, internal::StrLen(name));
if (member != MemberEnd()) return (*this)[n];
return member->value;
else {
RAPIDJSON_ASSERT(false); // see above note
static GenericValue NullValue;
return NullValue;
}
} }
const GenericValue& operator[](const Ch* name) const { return const_cast<GenericValue&>(*this)[name]; } const GenericValue& operator[](const Ch* name) const { return const_cast<GenericValue&>(*this)[name]; }
@ -486,15 +475,8 @@ public:
\c std::map, this has been changed to MemberEnd() now. \c std::map, this has been changed to MemberEnd() now.
*/ */
MemberIterator FindMember(const Ch* name) { MemberIterator FindMember(const Ch* name) {
RAPIDJSON_ASSERT(name); GenericValue n(name, internal::StrLen(name));
RAPIDJSON_ASSERT(IsObject()); return FindMember(n);
SizeType len = internal::StrLen(name);
MemberIterator member = MemberBegin();
for (; member != MemberEnd(); ++member)
if (member->name.data_.s.length == len && memcmp(member->name.data_.s.str, name, len * sizeof(Ch)) == 0)
break;
return member;
} }
ConstMemberIterator FindMember(const Ch* name) const { return const_cast<GenericValue&>(*this).FindMember(name); } ConstMemberIterator FindMember(const Ch* name) const { return const_cast<GenericValue&>(*this).FindMember(name); }
@ -565,13 +547,8 @@ public:
\note Removing member is implemented by moving the last member. So the ordering of members is changed. \note Removing member is implemented by moving the last member. So the ordering of members is changed.
*/ */
bool RemoveMember(const Ch* name) { bool RemoveMember(const Ch* name) {
MemberIterator m = FindMember(name); GenericValue n(name, internal::StrLen(name));
if (m != MemberEnd()) { return RemoveMember(n);
RemoveMember(m);
return true;
}
else
return false;
} }
bool RemoveMember(const GenericValue& name) { bool RemoveMember(const GenericValue& name) {
@ -891,7 +868,7 @@ private:
}; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
struct Array { struct Array {
GenericValue<Encoding, Allocator>* elements; GenericValue* elements;
SizeType size; SizeType size;
SizeType capacity; SizeType capacity;
}; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode
@ -1004,7 +981,7 @@ public:
template <typename InputStream> template <typename InputStream>
GenericDocument& ParseStream(InputStream& is) { GenericDocument& ParseStream(InputStream& is) {
return ParseStream<0, Encoding, InputStream>(is); return ParseStream<kParseDefaultFlags, Encoding, InputStream>(is);
} }
//! Parse JSON text from a mutable string. //! Parse JSON text from a mutable string.
@ -1024,7 +1001,7 @@ public:
} }
GenericDocument& ParseInsitu(Ch* str) { GenericDocument& ParseInsitu(Ch* str) {
return ParseInsitu<0, Encoding>(str); return ParseInsitu<kParseDefaultFlags, Encoding>(str);
} }
//! Parse JSON text from a read-only string. //! Parse JSON text from a read-only string.
@ -1044,7 +1021,7 @@ public:
} }
GenericDocument& Parse(const Ch* str) { GenericDocument& Parse(const Ch* str) {
return Parse<0>(str); return Parse<kParseDefaultFlags>(str);
} }
//! Whether a parse error was occured in the last parsing. //! Whether a parse error was occured in the last parsing.

View File

@ -34,7 +34,7 @@ inline const RAPIDJSON_ERROR_CHARTYPE* GetParseError_En(ParseErrorCode parseErro
case kParseErrorStringMissQuotationMark: return RAPIDJSON_ERROR_STRING("Missing a closing quotation mark in string."); case kParseErrorStringMissQuotationMark: return RAPIDJSON_ERROR_STRING("Missing a closing quotation mark in string.");
case kParseErrorStringInvalidEncoding: return RAPIDJSON_ERROR_STRING("Invalid encoidng in string."); case kParseErrorStringInvalidEncoding: return RAPIDJSON_ERROR_STRING("Invalid encoidng in string.");
case kParesErrorNumberTooBig: return RAPIDJSON_ERROR_STRING("Number too big to be stored in double."); case kParseErrorNumberTooBig: return RAPIDJSON_ERROR_STRING("Number too big to be stored in double.");
case kParseErrorNumberMissFraction: return RAPIDJSON_ERROR_STRING("Miss fraction part in number."); case kParseErrorNumberMissFraction: return RAPIDJSON_ERROR_STRING("Miss fraction part in number.");
case kParseErrorNumberMissExponent: return RAPIDJSON_ERROR_STRING("Miss exponent in number."); case kParseErrorNumberMissExponent: return RAPIDJSON_ERROR_STRING("Miss exponent in number.");

View File

@ -71,7 +71,7 @@ enum ParseErrorCode {
kParseErrorStringMissQuotationMark, //!< Missing a closing quotation mark in string. kParseErrorStringMissQuotationMark, //!< Missing a closing quotation mark in string.
kParseErrorStringInvalidEncoding, //!< Invalid encoidng in string. kParseErrorStringInvalidEncoding, //!< Invalid encoidng in string.
kParesErrorNumberTooBig, //!< Number too big to be stored in double. kParseErrorNumberTooBig, //!< Number too big to be stored in double.
kParseErrorNumberMissFraction, //!< Miss fraction part in number. kParseErrorNumberMissFraction, //!< Miss fraction part in number.
kParseErrorNumberMissExponent //!< Miss exponent in number. kParseErrorNumberMissExponent //!< Miss exponent in number.
}; };
@ -224,7 +224,7 @@ inline const char *SkipWhitespace_SIMD(const char* p) {
x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1)); x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1));
x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2)); x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2));
x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3)); x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3));
unsigned short r = ~_mm_movemask_epi8(x); unsigned short r = (unsigned short)~_mm_movemask_epi8(x);
if (r == 0) // all 16 characters are whitespace if (r == 0) // all 16 characters are whitespace
p += 16; p += 16;
else { // some of characters may be non-whitespace else { // some of characters may be non-whitespace
@ -323,7 +323,7 @@ public:
template <typename InputStream, typename Handler> template <typename InputStream, typename Handler>
bool Parse(InputStream& is, Handler& handler) { bool Parse(InputStream& is, Handler& handler) {
return Parse<0>(is, handler); return Parse<kParseDefaultFlags>(is, handler);
} }
bool HasParseError() const { return parseErrorCode_ != kParseErrorNone; } bool HasParseError() const { return parseErrorCode_ != kParseErrorNone; }
@ -610,7 +610,7 @@ private:
} }
} }
else else
RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, is.Tell()); RAPIDJSON_PARSE_ERROR(kParseErrorValueInvalid, s.Tell());
// Parse 64bit int // Parse 64bit int
uint64_t i64 = 0; uint64_t i64 = 0;
@ -643,7 +643,7 @@ private:
d = (double)i64; d = (double)i64;
while (s.Peek() >= '0' && s.Peek() <= '9') { while (s.Peek() >= '0' && s.Peek() <= '9') {
if (d >= 1E307) if (d >= 1E307)
RAPIDJSON_PARSE_ERROR(kParesErrorNumberTooBig, is.Tell()); RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, s.Tell());
d = d * 10 + (s.Take() - '0'); d = d * 10 + (s.Take() - '0');
} }
} }
@ -662,7 +662,7 @@ private:
--expFrac; --expFrac;
} }
else else
RAPIDJSON_PARSE_ERROR(kParseErrorNumberMissFraction, is.Tell()); RAPIDJSON_PARSE_ERROR(kParseErrorNumberMissFraction, s.Tell());
while (s.Peek() >= '0' && s.Peek() <= '9') { while (s.Peek() >= '0' && s.Peek() <= '9') {
if (expFrac > -16) { if (expFrac > -16) {
@ -695,11 +695,11 @@ private:
while (s.Peek() >= '0' && s.Peek() <= '9') { while (s.Peek() >= '0' && s.Peek() <= '9') {
exp = exp * 10 + (s.Take() - '0'); exp = exp * 10 + (s.Take() - '0');
if (exp > 308) if (exp > 308)
RAPIDJSON_PARSE_ERROR(kParesErrorNumberTooBig, is.Tell()); RAPIDJSON_PARSE_ERROR(kParseErrorNumberTooBig, s.Tell());
} }
} }
else else
RAPIDJSON_PARSE_ERROR(kParseErrorNumberMissExponent, is.Tell()); RAPIDJSON_PARSE_ERROR(kParseErrorNumberMissExponent, s.Tell());
if (expMinus) if (expMinus)
exp = -exp; exp = -exp;

View File

@ -85,7 +85,7 @@ TEST_F(RapidJson, SIMD_SUFFIX(ReaderParse_DummyHandler_ValidateEncoding)) {
} }
} }
TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParseInsitu_MemoryPoolAllocator)) { TEST_F(RapidJson, SIMD_SUFFIX(DocumentParseInsitu_MemoryPoolAllocator)) {
//const size_t userBufferSize = 128 * 1024; //const size_t userBufferSize = 128 * 1024;
//char* userBuffer = (char*)malloc(userBufferSize); //char* userBuffer = (char*)malloc(userBufferSize);
@ -108,7 +108,7 @@ TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParseInsitu_MemoryPoolAllocator)) {
//free(userBuffer); //free(userBuffer);
} }
TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParse_MemoryPoolAllocator)) { TEST_F(RapidJson, SIMD_SUFFIX(DocumentParse_MemoryPoolAllocator)) {
//const size_t userBufferSize = 128 * 1024; //const size_t userBufferSize = 128 * 1024;
//char* userBuffer = (char*)malloc(userBufferSize); //char* userBuffer = (char*)malloc(userBufferSize);
@ -130,7 +130,7 @@ TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParse_MemoryPoolAllocator)) {
//free(userBuffer); //free(userBuffer);
} }
TEST_F(RapidJson, SIMD_SUFFIX(DoucmentParse_CrtAllocator)) { TEST_F(RapidJson, SIMD_SUFFIX(DocumentParse_CrtAllocator)) {
for (size_t i = 0; i < kTrialCount; i++) { for (size_t i = 0; i < kTrialCount; i++) {
memcpy(temp_, json_, length_ + 1); memcpy(temp_, json_, length_ + 1);
GenericDocument<UTF8<>, CrtAllocator> doc; GenericDocument<UTF8<>, CrtAllocator> doc;

View File

@ -171,9 +171,9 @@ TEST(Reader, ParseNumber_Error) {
for (int i = 1; i < 310; i++) for (int i = 1; i < 310; i++)
n1e309[i] = '0'; n1e309[i] = '0';
n1e309[310] = '\0'; n1e309[310] = '\0';
TEST_NUMBER_ERROR(kParesErrorNumberTooBig, n1e309); TEST_NUMBER_ERROR(kParseErrorNumberTooBig, n1e309);
} }
TEST_NUMBER_ERROR(kParesErrorNumberTooBig, "1e309"); TEST_NUMBER_ERROR(kParseErrorNumberTooBig, "1e309");
// Miss fraction part in number. // Miss fraction part in number.
TEST_NUMBER_ERROR(kParseErrorNumberMissFraction, "1."); TEST_NUMBER_ERROR(kParseErrorNumberMissFraction, "1.");

View File

@ -27,7 +27,7 @@ TEST(Value, assignment_operator) {
template <typename Value> template <typename Value>
void TestCopyFrom() { void TestCopyFrom() {
Value::AllocatorType a; typename Value::AllocatorType a;
Value v1(1234); Value v1(1234);
Value v2(v1, a); // deep copy constructor Value v2(v1, a); // deep copy constructor
EXPECT_TRUE(v1.GetType() == v2.GetType()); EXPECT_TRUE(v1.GetType() == v2.GetType());