163 Commits

Author SHA1 Message Date
Philipp A. Hartmann
5656078a38 detect rvalue reference support (RAPIDJSON_HAS_CXX11_RVALUE_REFS) 2014-08-31 17:32:31 +02:00
Philipp A. Hartmann
defc3aaf9b always include "meta.h", as it is not only used for member iterators 2014-08-31 15:04:45 +02:00
Philipp A. Hartmann
1beec85453 GenericValue: add move constructor/move assignment
When C++11 is enabled, several algorithms will fail, if GenericValue is
neither copyable, nor movable.

Cherry-picked from 8005b55.
2014-08-31 12:25:00 +02:00
Philipp A. Hartmann
f8db473779 GenericValue: add explicit operator!=(const Ch*)
MSVC'2005 needs an explicit overload for operator!=(const Ch*)
after the addition of the IsGenericValue SFINAE restrictions.
2014-08-31 11:01:05 +02:00
Philipp A. Hartmann
1da0784331 GenericValue: add and use IsGenericValue meta function
This commit adds an IsGenericValue meta function to match arbitrary
instantiations of the GenericValue template (or derived classes).

This meta function is used in the SFINAE-checks to avoid matching
the generic APIs (operator=,==,!=; AddMember, PushBack) for instances
of the main template.  This avoids ambiguities with the GenericValue
overloads.
2014-08-31 11:01:05 +02:00
Philipp A. Hartmann
e294ce6f7a GenericValue: accept different allocators for read-only access
Several GenericValue functions take a const-reference to another GenericValue
only.  These functions can safely accept values with a different allocator
type.

The following functions are therefore extended by a SourceAllocator template
parameter in this commit:

 - operator==/!=/[]
 - HasMember, FindMember, RemoveMember
 - StringEqual
2014-08-31 11:01:05 +02:00
Milo Yip
ab8416e1e6 Merge pull request #125 from pah/fixes/113
Fix comparison operator ambiguities between Value/Document
2014-08-31 07:31:45 +08:00
Philipp A. Hartmann
804b7fcb2f GenericValue: add static assert to catch broken SFINAE
Before applying the simplifications in ed282b814, the SFINAE check for the
GenericValue(bool) constructor has been broken in MSVC 2005. Add a static
assert as a safe-guard against future reappearance of this problem.
2014-08-30 16:39:15 +02:00
Philipp A. Hartmann
fdd7a76386 GenericValue: use IsBaseOf to support comparisons between Value/Document
This finally fixes #113.
2014-08-30 16:10:59 +02:00
Philipp A. Hartmann
b56641106b improve EN/DISABLEIF macros to support complex templated parameters 2014-08-30 12:52:36 +02:00
Milo Yip
e27f7e7123 Merge pull request #119 from miloyip/issue116extramemberapi
Three new APIs are added for JSON object type.
2014-08-28 23:41:32 +09:00
Milo Yip
991aeaa01c Merge pull request #115 from wrr/warningfix
Fix `RAPIDJSON_HAS_STDSTRING is not defined` compilation warning
2014-08-28 23:16:59 +09:00
Milo Yip
284dcf3dc5 Change MemberEmpty() to ObjectEmpty() 2014-08-28 20:25:41 +08:00
Milo Yip
dc834c9c03 Add Value::MemberCount(), MemberEmpty(), RemoveAllMembers() 2014-08-27 23:14:17 +08:00
Philipp A. Hartmann
a9add7bd2a GenericValue: add non-template overload for operator!=
As reported in #113, recent versions of Clang complain about
ambiguous overloads for some comparison operator instantiations,
especially if the deduced template type is a GenericValue.

Add an explicit, non-templated version for now (which is a better
match).

This only solves part of the problem, as comparisons between
  * GenericValue & GenericDocument
  * GenericValue with different SourceAllocator types
will still cause ambiguities.
2014-08-26 20:06:25 +02:00
Jan Wrobel
fa5b1efd23 Fix RAPIDJSON_HAS_STDSTRING is not defined compilation warning 2014-08-26 19:23:58 +02:00
Philipp A. Hartmann
db7a51041e Use local typedef to invoke GenericMember's destructor (fixes #111) 2014-08-26 15:36:20 +02:00
Philipp A. Hartmann
26c24d0bd9 GenericMemberIterator: allow mixed-constness comparisons and differences 2014-08-21 10:45:23 +02:00
Philipp A. Hartmann
618fe2f4fc GenericValue::MemberErase: drop explicit iterator conversions 2014-08-21 10:40:13 +02:00
Philipp A. Hartmann
744b4852ff GenericValue: add (optional) support for std::string
Some users may want to use RapidJSON with std::string objects.  This commits
adds an (opt-in) feature to include some basic support.  The implementation
uses std::basic_string<Ch> as generic string type.

Support currently covers:
 * construction
 * comparison

No special APIs for AddMember or PushBack have been added, as std::string
most probably requires copying (or an explicit StringRef() call).
2014-08-20 07:07:55 +02:00
Philipp A. Hartmann
702b45bb6e GenericValue: refactoring of operator==/!=
By restructuring the call forwarding of the various operator== and
operator!= overloads, new overloads can be added by simply adding an
additional member operator==.

Additionally, the "Ch*" overloads are dropped in favour of an SFINAE
version that removes the pointer variants from matching the templated
operator== (see also operator=).
2014-08-20 07:07:42 +02:00
Milo Yip
941aa93f45 Separate Document's value and stack allocator.
Use CrtAllocator for stack.
ShrinkToFit stack after parsing.
2014-08-17 18:33:47 +08:00
Milo Yip
0dbcc1cf2e Add license and change indents from tab to space. 2014-08-11 22:26:45 +08:00
Milo Yip
0e4f08ea89 Fix a compilation error due to INT64_C 2014-08-08 22:07:02 +08:00
Milo Yip
5e5fb7b3d8 Change UINT64_C() to RAPIDJSON_UINT64_C2()
Fix #94
2014-08-08 21:34:43 +08:00
Milo Yip
c3ad232c3e Fixes size type in Value::operator==() 2014-08-01 00:01:06 +08:00
Milo Yip
9892847021 Update documents about erase member/elements, also added some time complexity information. 2014-07-31 23:58:52 +08:00
Milo Yip
10098319fe Merge pull request #92 from pah/issue91removeelement
Remove for object members, some cleanups for values
2014-07-31 19:19:44 +08:00
Philipp A. Hartmann
fc6d7a59dc GenericValue: rename Erase(ConstMemberIterator) to EraseMember 2014-07-31 13:16:56 +02:00
miloyip
afe59a0db1 Makes StringEqual() more safe by always compares lengths. 2014-07-31 19:08:37 +08:00
Philipp A. Hartmann
96af95c945 GenericValue: add Erase function for object members 2014-07-31 13:03:32 +02:00
Philipp A. Hartmann
c0fcdcc478 GenericValue: use generated assignment/destructor for GenericMember 2014-07-31 13:03:32 +02:00
Philipp A. Hartmann
59fee54f9d GenericValue::Erase: pass ConstValueIterators 2014-07-31 13:03:32 +02:00
Philipp A. Hartmann
9a9c6d6810 GenericValue: improve Erase documentation 2014-07-31 13:03:32 +02:00
Philipp A. Hartmann
6ed9934143 GenericValue: document Array iterator functions 2014-07-31 13:03:32 +02:00
Philipp A. Hartmann
11d31aaa7b fix typo 2014-07-31 13:03:32 +02:00
miloyip
71ae5660ed Revert "Add Erase(ConstValueIterator) and Erase(ConstValueIterator,ConstValueIterator)"
This reverts commit 9ab2621e855a9abb8377520b42d6dfddcd49a8e1.
2014-07-31 18:56:57 +08:00
miloyip
9ab2621e85 Add Erase(ConstValueIterator) and Erase(ConstValueIterator,ConstValueIterator)
As std::vector::erase() overloads added in C++11
2014-07-31 18:53:17 +08:00
miloyip
71c8402549 Add equal-to and non-equal-to operators 2014-07-31 18:43:59 +08:00
miloyip
0f7d2dad51 Add 2 overloads of Erase() for removing elements of array. 2014-07-31 14:22:59 +08:00
Milo Yip
e3e8fea0f3 Remove stack size limit feature
It is not very useful for iterative parsing as the worst case of heap
size is O(n) where n is number of character in JSON, for the worst
synthetic cases. This is reasonable and should not create stack overflow
security problem as in recursive parsing.
2014-07-26 21:40:11 +08:00
thebusytypist
1f53c6c041 Implement stack size limitation for iterative parsing. 2014-07-15 14:16:06 +08:00
Milo Yip
9e3ed44e85 Suppress VS2013 warnings due to #64 2014-07-13 01:10:25 +08:00
Philipp A. Hartmann
152db11ad6 Merge branch 'upstream/master' into feature/exception-support
Conflicts:
	include/rapidjson/reader.h
2014-07-12 18:42:06 +02:00
Milo Yip
b55fcbd36a Merge pull request #61 from miloyip/issue59terminate
Fixes #59 by adding bool return value for each event handler function
2014-07-12 23:42:50 +08:00
Philipp A. Hartmann
418a5829b3 update documentation of ParseResult and related functions 2014-07-11 09:39:20 +02:00
Philipp A. Hartmann
2fcb999749 add ParseResult 2014-07-11 09:39:20 +02:00
Philipp A. Hartmann
4475521177 GenericDocument: simplify error handling in ParseStream
* unconditionally store error state of reader after parsing
 * clear stack after parsing by using a ClearStackOnExit scope guard
2014-07-11 09:39:20 +02:00
Philipp A. Hartmann
41d211cd51 GenericValue::operator= : fixup assignment operator
While MSVC doesn't like the explicit `.template operator=<...>` syntax
(see 4f40ed6), Clang 3.5 complains about the absence of it:

In file included from ../../test/perftest/rapidjsontest.cpp:6:
../../include/rapidjson/document.h:504:18: error: use 'template' keyword to treat 'operator =' as a dependent template name
                return (*this).operator=<StringRefType>(str);
                               ^
                               template

Delegate both operator=(StringRefType) and operator=(T) to operator(GenericValue&).
2014-07-11 08:27:28 +02:00
Philipp A. Hartmann
4f40ed64b6 MSVC: fix compiler error in GenericDocument
The `StringRefType` assignment operator overload
leads to a compiler error on MSVC 2005 and later:

..\..\include\rapidjson/document.h(504) : error C2951: template declarations are only permitted at global, namespace, or class scope

Drop the unneeded 'template' keyword here.
2014-07-10 19:41:08 +02:00