111 Commits

Author SHA1 Message Date
Philipp A. Hartmann
249529f039 avoid truncation warning on MSVC 2014-07-03 17:07:07 +02:00
Philipp A. Hartmann
afa8279d8a GenericValue: drop duplicate/unneeded code
* Delegate constant string construction to SetStringRaw
 * Delegate "const Ch*" overloads to GenericValue variants
   of operator[], FindMember and RemoveMember
 * Remove repeated template arguments in nested struct Array

(cherry-picked from ca9b0332d)
2014-07-03 17:06:36 +02:00
Philipp A. Hartmann
d178fd4e94 Parse*: explicitly spell out kParseDefaultFlags
Instead of hard-coding the value 0 for the parseFlags in the
various parsing overloads, explicitly use kParseDefaultFlags
to provide more self-documenting code.
2014-07-03 17:06:35 +02:00
Philipp A. Hartmann
6b7f346437 ParseErrorCode: fix typo (NumberTooBig) 2014-07-03 17:06:35 +02:00
Milo Yip
1aa84342ba Added GenericValue::Swap() 2014-07-03 22:38:34 +08:00
Milo Yip
009c4005b2 Fixes 'not' keyword that is not supported by Visual Studio by default 2014-07-03 22:37:42 +08:00
Philipp A. Hartmann
5835750259 GenericMemberIterator: fixup some formatting and documentation
No functional changes.
2014-07-03 15:18:01 +02:00
Philipp A. Hartmann
86c47a6a8b document.h: move inclusion of template meta functions
In order to activate the suppression of "-Weffc++" warnings in the
template meta function classes (non-virtual destructor), move the
inclusion of the meta-function header `internal/meta.h` after the
suppression pragma.
2014-07-03 14:56:43 +02:00
Philipp A. Hartmann
43737ef310 GenericValue::FindMember: return MemberEnd, if member doesn't exist 2014-07-03 14:33:56 +02:00
Philipp A. Hartmann
17a8804cf3 document.h: add GenericMemberIterator
Add dedicated class-based member iterator to prepare the switch to a
(safe) API change to return MemberEnd() from FindMember().

Pointer-based iterator can be kept by defining
RAPIDJSON_NOMEMBERITERATORCLASS. This may be useful for platforms without
a working <iterator> header.
2014-07-03 14:29:57 +02:00
Philipp A. Hartmann
05179e2891 internal/meta.h: add some template meta functions
* Add/RemoveConst
 * IsSame, IsConst, IsMoreConst
 * Enable/DisableIf (including helper macro)
2014-07-03 14:24:58 +02:00
Philipp A. Hartmann
7890a1b17a StreamLocalCopy: move to reader.h
Eventually move to internal header `internal/streamcopy.h`?

Based on 088e8173.
2014-07-02 21:28:41 +02:00
Philipp A. Hartmann
f6903f79d4 GenericReader: simplify local stream copy optimization
rapidjson.h:
 * StreamLocalCopy: add default argument to copy optimization selector
   based on StreamTraits of Stream parameter
 * drop operator->, operator*
 * make Stream (reference) member public
 * drop empty destructor

reader.h:
 * add local references, initialized from "copy"
   (reverts algorithmic bodies back to plain 's.xx()')
2014-07-02 20:51:10 +02:00
Milo Yip
1e99f0b537 Merge remote-tracking branch 'origin/master' into warning 2014-07-03 01:00:01 +08:00
Milo Yip
5a186104f4 Fixes warnings 2014-07-03 00:59:35 +08:00
Milo Yip
2a9c7a9ffa Makes FileReadStream not using local copy optimization 2014-07-03 00:25:45 +08:00
Milo Yip
9aec8d6ad4 Fixes local copy optimization
The previous optimization #32 has problem that restoration requires
assignment operator.
Change the backup/restore process using a template wrapper class to
select code path.
2014-07-02 23:49:47 +08:00
Milo Yip
10924e389c Fixes parsing small floating point values underflow
https://code.google.com/p/rapidjson/issues/detail?id=75

The modification is slightly different from dlbattle123 to improve
speed.
2014-06-30 21:26:43 +08:00
miloyip
a9356c09c0 Fixes IBM XL C/C++ for AIX issue
Move rapidjson::GenericValue::Member to rapidjson::GenericMember

https://code.google.com/p/rapidjson/issues/detail?id=64
2014-06-30 19:07:58 +08:00
miloyip
a1ce06a187 Fixes vs2010 warning about INT64_C() 2014-06-30 10:18:14 +08:00
miloyip
389fe87cd8 Merge branch 'master' into issue23errorcode
Conflicts:
	example/condense/condense.cpp
	include/rapidjson/reader.h
	test/unittest/readertest.cpp
2014-06-30 09:44:24 +08:00
Milo Yip
8e76a9dcce Fixes compilation error
need ‘typename’ before
‘rapidjson::StreamTraits<InputStream>::StreamCopyType
2014-06-29 21:24:15 +08:00
Milo Yip
789761ae1b Fixes compilation error
‘>>’ should be ‘> >’ within a nested template argument list
2014-06-29 21:18:31 +08:00
Milo Yip
bcf7cee788 Add stream copying optimization switch depending stream type.
An unit test is added
2014-06-29 20:59:01 +08:00
Milo Yip
1d14748bc9 Added overloaded functions for default parseFlags
Can write d.Parse(...) instead of d.Parse<0>(...)
Hope to reduce strangeness and confusion for beginner.
2014-06-29 15:03:38 +08:00
Milo Yip
c14c5ff236 Documentation on error related files and include dependent header. 2014-06-27 22:43:21 +08:00
Milo Yip
69ca7487bc Manually merge the segfault fix from main branch and fix several unit tests about error code 2014-06-27 22:27:18 +08:00
Milo Yip
b0059483c8 Error can only be assigned once 2014-06-27 22:13:02 +08:00
Philipp A. Hartmann
0277ebdc3c document.h: avoid casting away const
Another instance of casting away constness via C-style cast
has been missed (introduced by #20).
2014-06-27 10:27:35 +02:00
Philipp A. Hartmann
be01d3d7cc fix build on travis-ci.org
Some early returns were missing after the removal of longjmp in #22.
This has led to segfaults on Linux (confirmed locally).
2014-06-27 10:26:37 +02:00
Milo Yip
b4df717675 Fixes grammar mistakes in error messages. 2014-06-27 16:13:54 +08:00
Milo Yip
3693d61f5a Add parse error codes and API for converting error code to text.
Parse errors is represented as enum type `ParseErrorCode`.
Error texts are optional for user.
Added  `GetParseError_En()` in `error/en.h`, user can localize this file
into other files. User may dynamically change the locale in runtime.
2014-06-27 01:53:56 +08:00
Milo Yip
813eaf4e03 Merge pull request #25 from miloyip/issue22setjmp
Removal of setjmp()/longjmp()
2014-06-26 23:48:29 +08:00
Milo Yip
a1a8abd0d9 Add safe checks in parsing compound types.
Compound types (object and array) call ParseString() and ParseValue()
for key and values. If there is parse errors inside those calls, it
should stop continue parsing. Otherwise, it may be possible to continue
parsing and calling handler incorrectly.
For example, in ["a\u,","b"], \u generates an error (it should follow
but 4 hex digits), the parser continues to treat the first comma as
element separator, and treat "," as a JSON string and call the handler.
It may be unacceptable in the application code.
2014-06-26 23:35:13 +08:00
Milo Yip
3d9dd745a1 Remove setjmp header and jmpbuf member variable 2014-06-26 23:24:16 +08:00
Milo Yip
188b99b471 Clear the stack after parsing and fixes indentation. 2014-06-26 23:14:05 +08:00
Milo Yip
74a24377a8 Remove setjmp()/longjmp() 2014-06-26 22:31:54 +08:00
Philipp A. Hartmann
cc8833506c document.h: define __STDC_CONSTANT_MACROS
The C++ standard does not include the C99 macros used to set the (U)INT64
constants in document.h and reader.h (see adf66292 and ce1fece2).

Many implementations include their definition when the
__STDC_CONSTANT_MACROS preprocessor symbol is defined.

See e.g. http://www.cprogramdevelop.com/5272623/,
needed to successfully build in travis-ci.org's environment.
2014-06-26 16:06:15 +02:00
Milo Yip
d5add05c9a Merge pull request #19 from pah/feature/double-precision
User-defined double output precision
2014-06-26 10:33:24 +08:00
Philipp A. Hartmann
8bde3be116 GenericValue: add copy constructor and CopyFrom
To allow deep copying from an existing GenericValue, an
explicit "copy constructor" (with required Allocator param)
and an "CopyFrom" assignment function are added.

  Document d; Document::AllocatorType& a = d.GetAllocator();
  Value v1("foo");
  // Value v2(v1); // not allowed

  Value v2(v1,a);                             // make a copy
  RAPIDJSON_ASSERT(v1.IsString());            // v1 untouched
  d.SetArray().PushBack(v1,a).PushBack(v2,a);
  RAPIDJSON_ASSERT(v1.Empty() && v2.Empty());

  v2.CopyFrom(d,a);                           // copy whole document
  RAPIDJSON_ASSERT(d.IsArray() && d.Size());  // d untouched
  v1.SetObject().AddMember( "array", v2, a );
  d.PushBack(v1,a);

Additionally, the Handler implementation in GenericDocument is made
private again, restricting access to GenericReader and GenericValue.
2014-06-25 18:09:26 +02:00
Philipp A. Hartmann
a0e5e68fdb GenericDocument::Accept: deep-copy strings, if needed
Instead of always just shallowly referencing the potentially allocated
strings when calling the Handler::String function, request a copy in
case the string has been allocated from an Allocator before.

This is necessary to avoid double free()s of the string memory,
especially when using the Handler to create a deep copy of a Value.

The explicit comparison against '0' is done to suppress the warning
C4800 on MSVC, see pah/rapidjson#5.
2014-06-25 18:09:26 +02:00
Philipp A. Hartmann
c9c2d06b9b Writer: add Double(d,precision) for one-shot double output
As proposed in other patches, it is convenient to pass a user-defined
precision for the (programmatic) output of a single double value
to an OutputStream.

This patch adds an additional overload with an explicit precision
argument to the (Pretty)Writer class templates.
2014-06-25 18:09:16 +02:00
Philipp A. Hartmann
0ccc51fbae Writer: add SetDoublePrecision to control number of significant digits
Writing a double to an OutputStream current prints at most 6 significant
digits (according to the C standard).

The function SetDoublePrecision(), added to the Writer classes
can be used to fluently set the precision, i.e. the number of
significant digits to use for writing the double:

  Writer<...> writer(...);
  d.Accept(writer.SetDoublePrecision(12));
2014-06-25 18:09:16 +02:00
Milo Yip
60b8c11909 Merge branch 'master' of https://github.com/miloyip/rapidjson 2014-06-25 23:57:04 +08:00
Milo Yip
ce1fece245 Use thirdparty stdint.h for Visual Studio 2014-06-25 23:40:12 +08:00
Milo Yip
f1a2c28ac7 Merge pull request #14 from pah/fixes/misc
some minor fixes
2014-06-25 23:23:12 +08:00
Milo Yip
a56a051737 Merge pull request #13 from pah/fixes/107
GenericDocument::ParseStream: make SourceEncoding optional
2014-06-25 23:23:00 +08:00
Milo Yip
87770399a1 Merge pull request #12 from pah/fixes/72
GenericDocument: forward allocator to GenericReader
2014-06-25 23:22:47 +08:00
Milo Yip
9b92a9781b Merge pull request #11 from pah/fixes/70
GenericValue: explicit constructors
2014-06-25 23:22:00 +08:00
Milo Yip
fc80636c6d Merge pull request #10 from pah/fixes/57
GenericValue: fixup construction from NumberType
2014-06-25 23:20:49 +08:00