Skip to content

Commit

Permalink
Update features.md
Browse files Browse the repository at this point in the history
  • Loading branch information
miloyip committed Jun 29, 2014
1 parent a75c8f9 commit 3ef2a6b
Showing 1 changed file with 35 additions and 18 deletions.
53 changes: 35 additions & 18 deletions doc/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
## General

* Cross-platform
* Compiler: tested Visual Studio, gcc, clang
* Architecture: x86, x64, ARM
* Operating systems: Windows, Mac OS X, Linux, iOS, Android
* Compilers: Visual Studio, gcc, clang, etc.
* Architectures: x86, x64, ARM, etc.
* Operating systems: Windows, Mac OS X, Linux, iOS, Android, etc.
* Easy installation
* Header files only library. Just copy the headers to your project.
* Self-contained, minimal dependence
* Self-contained, minimal dependences
* No STL, BOOST, etc.
* Only included `<cstdio>`, `<cstdlib>`, `<cstring>`, `<inttypes.h>`, `<new>`, `<stdint.h>`.
* Only included `<cstdio>`, `<cstdlib>`, `<cstring>`, `<inttypes.h>`, `<new>`, `<stdint.h>`. *
* Without C++ exception, RTTI
* High performance
* Use template and inline functions to reduce function call overheads.
* Optional SSE2/SSE4.1 support.
Expand All @@ -20,15 +21,7 @@
* RapidJSON should be fully RFC4627/ECMA-404 compliance.
* Support unicode surrogate.
* Support null character (`"\u0000"`)
** For example, `["Hello\u0000World"]` can be parsed and handled gracefully.

## API style

* SAX (Simple API for XML) style API
* Similar to [SAX](http://en.wikipedia.org/wiki/Simple_API_for_XML), RapidJSON provides a event sequential access parser API (`GenericReader`). It also provides a generator API (`GenericWriter`) which consumes the same set of events.
* DOM (Document Object Model) style API
* Similar to [DOM](http://en.wikipedia.org/wiki/Document_Object_Model) for HTML/XML, RapidJSON can parse JSON into a DOM representation (`GenericDocument`), for easy manipulation, and finally stringify back to JSON if needed.
* The DOM style API (`GenericDocument`) is actually implemented with SAX style API (`GenericReader`). SAX is faster but sometimes DOM is easier. Users can pick their choices according to scenarios.
* For example, `["Hello\u0000World"]` can be parsed and handled gracefully. There is API for getting/setting lengths of string.

## Unicode

Expand All @@ -38,18 +31,42 @@
* For example, you can read a UTF-8 file and let RapidJSON transcode the JSON strings into UTF-16 in the DOM.
* Support encoding validation internally.
* For example, you can read a UTF-8 file, and let RapidJSON check whether all JSON strings are valid UTF-8 byte sequence.
* Support custom character types.
* By default the character types are `char` for UTF8, `wchar_t` for UTF16, `uint32_t` for UTF32.
* Support custom encodings.

## API styles

* SAX (Simple API for XML) style API
* Similar to [SAX](http://en.wikipedia.org/wiki/Simple_API_for_XML), RapidJSON provides a event sequential access parser API (`GenericReader`). It also provides a generator API (`GenericWriter`) which consumes the same set of events.
* DOM (Document Object Model) style API
* Similar to [DOM](http://en.wikipedia.org/wiki/Document_Object_Model) for HTML/XML, RapidJSON can parse JSON into a DOM representation (`GenericDocument`), for easy manipulation, and finally stringify back to JSON if needed.
* The DOM style API (`GenericDocument`) is actually implemented with SAX style API (`GenericReader`). SAX is faster but sometimes DOM is easier. Users can pick their choices according to scenarios.

## DOM (Document)

* Support insitu parsing.
* Parse JSON string values in-place at the source JSON, and then the DOM points to addresses of those strings.
* Faster than convention parsing: no allocation for strings, no copy (if string does not contain escapes), cache-friendly.
* Support 32-bit/64-bit signed/unsigned integer and `double` for JSON number type.
* RapidJSON checks range of numerical values for conversions.

## SAX (Reader)

* Support comprehensive error code if parsing failed.
* Support localizable error message.

## SAX (Writer)

* Support PrettyWriter for adding newlines and indentations.
* Support custom precision for floating point values.

## Stream

* Support `GenericStringBuffer` for storing the output JSON as string.
* Support `FileReadStream`/`FileWriteStream` for input/output `FILE` object.
* Support custom streams.

## JSON formatting

* Support PrettyWriter for adding newlines and indentations.

## Memory

* Minimize memory overheads for DOM.
Expand Down

0 comments on commit 3ef2a6b

Please sign in to comment.