283 Commits

Author SHA1 Message Date
Milo Yip
556a8975bd Add RAPIDJSON_UNLIKELY in Value::Accept() 2016-01-31 01:33:47 +08:00
Milo Yip
05968b7031 Fix schema tests and added SchemaValidatingReader 2016-01-27 13:59:14 +08:00
Milo Yip
a6eb15d274 Fix warnings in clang for C++11 2016-01-23 14:37:15 +08:00
Milo Yip
6d6381f596 Try to fix clang and gcc warnings problems again x7 2015-12-18 20:15:11 +08:00
Milo Yip
9ce381b801 Try to fix clang and gcc warnings problems again 2015-12-18 19:15:51 +08:00
Milo Yip
17f2ca6913 Try to fix clang and gcc warnings problems 2015-12-18 19:04:09 +08:00
Milo Yip
74c8dcfd57 Fix clang -Weverything 2015-12-18 18:34:04 +08:00
Philipp A. Hartmann
98959e2820 GenericDocument: add implicit conversion to ParseResult
To simplify the error handling, this commit adds an implicit conversion
of GenericDocument to ParseResult, allowing code like (already in the
documentation):

   ParseResult ok = doc.Parse(json);
   if (!ok) // ...
2015-11-26 22:30:59 +01:00
Michael Haubenwallner
07672da098 fix Document::Parse(const Ch*) for transcoding
To allow for an UTF16-Document to Parse(UTF8),
the Parse() argument has to be UTF8-compatible.
2015-11-25 19:45:47 +01:00
etiennebatise
74a021346d Add break at default switch case statements
fix issue #444
2015-10-14 15:46:26 +02:00
Philipp A. Hartmann
fa123699d3 Keep Document value unchanged on parse error, fixes #437
Keeping the DOM unchanged in case of an error is the intended
behaviour according to the [documentation] [1].

Instead of forcing the value to `kNullType` before starting the
parsing, store the parsed value upon success via regular move.

[1]: https://miloyip.github.io/rapidjson/md_doc_dom.html#ParseError
2015-10-07 21:48:39 +02:00
Rodion Malinovsky
2e11498943 Fix the usage of the stack::GetAllocator 2015-09-16 14:54:38 +03:00
Rodion Malinovsky
8604ba0f1c Add asserts to prevent UB 2015-09-16 14:53:12 +03:00
Philipp A. Hartmann
fec9e8a4f2 prohibit C++11 move from Document to Value
As reported in #387, silently moving a `GenericDocument` to a
`GenericValue` can lead to object slicing and premature deletion of
the owning allocator of the (surviving) `GenericValue`.

To reduce this risk, prohibit move construction of a `GenericValue`
from a `GenericDocument`.
2015-07-17 08:24:43 +02:00
Milo Yip
823b731896 Merge pull request #376 from pah/feature/document-swap
add GenericDocument<>::Swap with std::swap() support
2015-07-13 21:14:02 +08:00
Philipp A. Hartmann
c2b5864927 add documentation for 'swap' friend functions 2015-07-13 14:38:24 +02:00
Philipp A. Hartmann
46e1696316 add free inline swap functions 2015-07-13 09:35:15 +02:00
Philipp A. Hartmann
0ebe16e169 add and use simplified "internal::Swap"
This avoids the dependency on the <algorithm> header, as suggested by
@miloyip in #376.
2015-07-10 17:06:52 +02:00
Philipp A. Hartmann
dd901f498b add GenericDocument<>::Swap
See #368.
2015-07-04 01:57:24 +02:00
Mateusz Łoskot
8197805208 Add explicit specifier to GenericDocument ctor.
@pah recommended to mark this constructor as explicit to avoid accidentally creating a temporary GenericDocument from a Type enum value (because all arguments but the first one are optional).
2015-07-01 22:36:26 +02:00
Mateusz Loskot
a0177ca210 Add documentation for new GenericDocument ctor taking object type.
Update also documentation of the existing GenericDocument constructor.
2015-06-30 10:28:07 +02:00
Mateusz Loskot
413144a8b2 Add GenericDocument ctor overload to specify JSON type.
It unifies the interfaces with Value where kXXXType can be passed
into constructor.
It enables shortcut that helps to avoid extra SetXXX() call following
construction of a document.
2015-06-26 16:00:49 +02:00
miloyip
6e1d10ec6b Add GenericValue::EraseMember(string types) APIs 2015-05-21 16:12:33 +08:00
miloyip
2786103abd Add Value::XXXMember(...) overloads for std::string 2015-05-12 22:48:14 +08:00
miloyip
98b66e3c5a Change Document::ParseStream() to use stack allocator for Reader 2015-05-11 13:58:02 +08:00
miloyip
56568fd73f Add GenericValue::ValueType and fix warning for SetString(std::string, Allocator) 2015-05-04 10:25:31 +08:00
Milo Yip
4cd14b7c0e Merge pull request #305 from pah/fix/strict-memcpy
Avoid calling memcpy with NULL pointers
2015-04-17 12:28:37 +08:00
Philipp A. Hartmann
0c5c1538dc Avoid calling memcpy with NULL pointers
According to the C/C++ standards, calling `memcpy(NULL, NULL, 0)` is
undefined behaviour. Recent GCC versions may rely on this by optimizing
NULL pointer checks more aggressively, see [1].

This patch tries to avoid calling std::memcpy with zero elements.
As a side effect, explicitly return NULL when requesting an empty block
from MemoryPoolAllocator::Malloc.

This may be related to #301.

[1] https://gcc.gnu.org/gcc-4.9/porting_to.html
2015-04-16 21:05:08 +02:00
miloyip
76d67b7eae Improves coverage of Value::Accept() 2015-04-15 12:16:16 +08:00
miloyip
04011cdae2 Adjust spaces 2015-04-13 22:46:27 +08:00
miloyip
2d07198863 Fix compilation 2015-04-13 18:24:10 +08:00
miloyip
e7f1c6dd08 Remove an invalid Document::ParseInsitu() API 2015-04-13 18:21:15 +08:00
miloyip
cb59a5a9a2 Correct the Value::operator==() for double. 2015-04-11 11:34:44 +08:00
Milo Yip
2452afbf3c Fix -Wfloat-equal warnings in Value::operator== and valuetest 2015-04-11 00:02:17 +08:00
Milo Yip
d1959ba6e3 Change copyright owner and related changes. 2015-04-03 12:57:16 +08:00
Philipp A. Hartmann
2f010e6e4b document.h: include <string>, iff RAPIDJSON_HAS_STDSTRING==1
Reported-by: Janusz Chorko (@yachoor)
See: https://github.com/miloyip/rapidjson/commit/c1c9ba7c#commitcomment-10434694
2015-03-30 22:37:24 +02:00
Philipp A. Hartmann
06c3ddbac5 GenericValue::AddMember<T>: add missing overload (closes #254)
As discovered by @felipegb94, there are missing overloads to the
`GenericValue::AddMember<T>` template function, taking an explicit
`GenericValue&` as a name and accepting arbitrary primitive values.

This patch adds the missing overloads. The `StringRefType` overload
is needed to disambiguate the addition of a string literal as
value.

Some tests are added to `TEST(Value, Object)` in `valuetest.cpp`.
2015-03-10 19:11:27 +01:00
Milo Yip
24563b28fb Correct Value(kStringType) and more assertions 2015-01-13 23:49:53 +08:00
Philipp A. Hartmann
2aab79207e GenericValue: improve copying performance
The GenericValue "copy" constructor (with Allocator) uses a temporary
GenericDocument object to perform the deep copying with the provided
allocator.  This leads to the temporary allocation of the `Stack`
memory, even in case of shallow values (numbers, etc.).

This patch improves the performance of this operation by only resorting
the the SAX Handler implementation in case of Array or Object values.
2014-11-26 23:11:00 +01:00
Philipp A. Hartmann
3220438aa5 GenericDocument: explicitly prohibit copying
See #201.
2014-11-21 13:05:54 +01:00
Philipp A. Hartmann
549dcb755d *.h: move to namespace macros 2014-11-06 20:52:49 +01:00
Philipp A. Hartmann
c557b230a6 Add customization macros for global new/delete
As mentioned in #181, some environments may require adaptations to
the internal calls to the global `new`/`delete` operators, like
adding explicit `NULL` checks to `delete.

This patch adds two new macros
 * RAPIDJSON_NEW(x)
 * RAPIDJSON_DELETE(x)
to allow user-defined expressions in these cases.

This fixes #181 in an alternative manner.
2014-10-30 11:20:46 +01:00
Sean Leather
716907b9fb Clarify documentation on RemoveMember, EraseMember ordering 2014-10-27 15:04:26 +02:00
ecorm
b0328d2d3b GenericDocument move-assignment now uses std::foward to move-assign the base class. 2014-10-24 15:25:27 -03:00
ecorm
20a9cd2810 Merge branch 'master' into issue123movesupport 2014-10-24 14:09:30 -03:00
ecorm
fd12dcb3db Added MemoryPoolAllocator to GenericDocument moveunit tests. Added comment in GenericDocument move assignment operator explaining why the static_cast is needed to move the base class. 2014-10-24 14:05:32 -03:00
Philipp A. Hartmann
6bd5ecb08c GenericValue: improve documentation for operator[] 2014-10-24 14:45:48 +02:00
Philipp A. Hartmann
e8445e0bbc GenericValue: improve operator[] disambiguation
In the original disambiguation fix for `GenericValue::operator[]` (#170),
the documentation has been missing, which led to quite badly rendered
Doxygen pages.

During a cleanup, I've realized that a much simpler disambiguation is
possible:

````cpp
  GenericValue& operator[](SizeType idx); // array
  template <typename T>
  GenericValue& operator[](T* name);      // object
````

This approach works, as non-template functions are preferred over
template functions.

In order to improve the error messages, the pointer type is restricted
to `(const) Ch`.

Update `tutorial.md` to drop the ambiguity warning.
2014-10-24 13:55:26 +02:00
ecorm
cb33f910c3 Merge branch 'master' into issue123movesupport 2014-10-24 03:11:34 -03:00
ecorm
02f3b00ee6 Implemented C++11 move semantics for GenericDocument 2014-10-24 02:51:17 -03:00