rj_schema 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Rakefile +18 -0
- data/ext/rj_schema/extconf.rb +7 -0
- data/ext/rj_schema/rapidjson/CHANGELOG.md +158 -0
- data/ext/rj_schema/rapidjson/CMakeLists.txt +221 -0
- data/ext/rj_schema/rapidjson/CMakeModules/FindGTestSrc.cmake +30 -0
- data/ext/rj_schema/rapidjson/RapidJSON.pc.in +7 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfig.cmake.in +15 -0
- data/ext/rj_schema/rapidjson/RapidJSONConfigVersion.cmake.in +10 -0
- data/ext/rj_schema/rapidjson/appveyor.yml +41 -0
- data/ext/rj_schema/rapidjson/bin/data/glossary.json +22 -0
- data/ext/rj_schema/rapidjson/bin/data/menu.json +27 -0
- data/ext/rj_schema/rapidjson/bin/data/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/bin/data/sample.json +3315 -0
- data/ext/rj_schema/rapidjson/bin/data/webapp.json +88 -0
- data/ext/rj_schema/rapidjson/bin/data/widget.json +26 -0
- data/ext/rj_schema/rapidjson/bin/draft-04/schema +150 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf16lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32be.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32bebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32le.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf32lebom.json +0 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8.json +7 -0
- data/ext/rj_schema/rapidjson/bin/encodings/utf8bom.json +7 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail1.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail10.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail11.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail12.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail13.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail14.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail15.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail16.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail17.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail18.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail19.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail20.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail21.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail22.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail23.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail24.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail25.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail26.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail27.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail28.json +2 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail29.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail3.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail30.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail31.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail32.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail33.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail4.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail5.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail6.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail7.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail8.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/fail9.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass1.json +58 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass2.json +1 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/pass3.json +6 -0
- data/ext/rj_schema/rapidjson/bin/jsonchecker/readme.txt +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/LICENSE +19 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/README.md +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/bin/jsonschema_suite +283 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/folder/folderInteger.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/integer.json +3 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/remotes/subSchemas.json +8 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/dependencies.json +108 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/disallow.json +80 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/divisibleBy.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/enum.json +71 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/extends.json +94 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/format.json +222 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/jsregex.json +18 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/required.json +53 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/type.json +474 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft3/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalItems.json +82 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/additionalProperties.json +88 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/allOf.json +112 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/anyOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/default.json +49 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/definitions.json +32 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/dependencies.json +113 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/enum.json +72 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/items.json +46 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maxProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/maximum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minItems.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minLength.json +33 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minProperties.json +28 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/minimum.json +42 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/multipleOf.json +60 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/not.json +96 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/oneOf.json +68 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/bignum.json +107 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/format.json +148 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/optional/zeroTerminatedFloats.json +15 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/pattern.json +34 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/patternProperties.json +110 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/properties.json +92 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/ref.json +159 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/refRemote.json +74 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/required.json +39 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/type.json +330 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tests/draft4/uniqueItems.json +79 -0
- data/ext/rj_schema/rapidjson/bin/jsonschema/tox.ini +8 -0
- data/ext/rj_schema/rapidjson/bin/types/booleans.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/floats.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/guids.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/integers.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/mixed.json +592 -0
- data/ext/rj_schema/rapidjson/bin/types/nulls.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/paragraphs.json +102 -0
- data/ext/rj_schema/rapidjson/bin/types/readme.txt +1 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/LICENSE +45 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/README.md +7 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis +38 -0
- data/ext/rj_schema/rapidjson/doc/CMakeLists.txt +27 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/Doxyfile.zh-cn.in +2369 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.dot +50 -0
- data/ext/rj_schema/rapidjson/doc/diagram/architecture.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.dot +65 -0
- data/ext/rj_schema/rapidjson/doc/diagram/insituparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/iterative-parser-states-diagram.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/makefile +8 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.dot +47 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move1.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.dot +62 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move2.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.dot +60 -0
- data/ext/rj_schema/rapidjson/doc/diagram/move3.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.dot +56 -0
- data/ext/rj_schema/rapidjson/doc/diagram/normalparsing.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.dot +54 -0
- data/ext/rj_schema/rapidjson/doc/diagram/simpledom.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.dot +58 -0
- data/ext/rj_schema/rapidjson/doc/diagram/tutorial.png +0 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.dot +73 -0
- data/ext/rj_schema/rapidjson/doc/diagram/utilityclass.png +0 -0
- data/ext/rj_schema/rapidjson/doc/dom.md +280 -0
- data/ext/rj_schema/rapidjson/doc/dom.zh-cn.md +284 -0
- data/ext/rj_schema/rapidjson/doc/encoding.md +146 -0
- data/ext/rj_schema/rapidjson/doc/encoding.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/doc/faq.md +289 -0
- data/ext/rj_schema/rapidjson/doc/faq.zh-cn.md +290 -0
- data/ext/rj_schema/rapidjson/doc/features.md +104 -0
- data/ext/rj_schema/rapidjson/doc/features.zh-cn.md +103 -0
- data/ext/rj_schema/rapidjson/doc/internals.md +368 -0
- data/ext/rj_schema/rapidjson/doc/internals.zh-cn.md +363 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.png +0 -0
- data/ext/rj_schema/rapidjson/doc/logo/rapidjson.svg +119 -0
- data/ext/rj_schema/rapidjson/doc/misc/DoxygenLayout.xml +194 -0
- data/ext/rj_schema/rapidjson/doc/misc/doxygenextra.css +274 -0
- data/ext/rj_schema/rapidjson/doc/misc/footer.html +11 -0
- data/ext/rj_schema/rapidjson/doc/misc/header.html +24 -0
- data/ext/rj_schema/rapidjson/doc/npm.md +31 -0
- data/ext/rj_schema/rapidjson/doc/performance.md +26 -0
- data/ext/rj_schema/rapidjson/doc/performance.zh-cn.md +26 -0
- data/ext/rj_schema/rapidjson/doc/pointer.md +234 -0
- data/ext/rj_schema/rapidjson/doc/pointer.zh-cn.md +234 -0
- data/ext/rj_schema/rapidjson/doc/sax.md +509 -0
- data/ext/rj_schema/rapidjson/doc/sax.zh-cn.md +487 -0
- data/ext/rj_schema/rapidjson/doc/schema.md +505 -0
- data/ext/rj_schema/rapidjson/doc/schema.zh-cn.md +237 -0
- data/ext/rj_schema/rapidjson/doc/stream.md +426 -0
- data/ext/rj_schema/rapidjson/doc/stream.zh-cn.md +426 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.md +536 -0
- data/ext/rj_schema/rapidjson/doc/tutorial.zh-cn.md +534 -0
- data/ext/rj_schema/rapidjson/docker/debian/Dockerfile +8 -0
- data/ext/rj_schema/rapidjson/example/CMakeLists.txt +45 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.cpp +292 -0
- data/ext/rj_schema/rapidjson/example/archiver/archiver.h +145 -0
- data/ext/rj_schema/rapidjson/example/archiver/archivertest.cpp +287 -0
- data/ext/rj_schema/rapidjson/example/capitalize/capitalize.cpp +67 -0
- data/ext/rj_schema/rapidjson/example/condense/condense.cpp +32 -0
- data/ext/rj_schema/rapidjson/example/filterkey/filterkey.cpp +135 -0
- data/ext/rj_schema/rapidjson/example/filterkeydom/filterkeydom.cpp +170 -0
- data/ext/rj_schema/rapidjson/example/jsonx/jsonx.cpp +207 -0
- data/ext/rj_schema/rapidjson/example/lookaheadparser/lookaheadparser.cpp +350 -0
- data/ext/rj_schema/rapidjson/example/messagereader/messagereader.cpp +105 -0
- data/ext/rj_schema/rapidjson/example/parsebyparts/parsebyparts.cpp +176 -0
- data/ext/rj_schema/rapidjson/example/pretty/pretty.cpp +30 -0
- data/ext/rj_schema/rapidjson/example/prettyauto/prettyauto.cpp +56 -0
- data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +78 -0
- data/ext/rj_schema/rapidjson/example/serialize/serialize.cpp +173 -0
- data/ext/rj_schema/rapidjson/example/simpledom/simpledom.cpp +29 -0
- data/ext/rj_schema/rapidjson/example/simplepullreader/simplepullreader.cpp +53 -0
- data/ext/rj_schema/rapidjson/example/simplereader/simplereader.cpp +42 -0
- data/ext/rj_schema/rapidjson/example/simplewriter/simplewriter.cpp +36 -0
- data/ext/rj_schema/rapidjson/example/tutorial/tutorial.cpp +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +271 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/document.h +2630 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +299 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +716 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +74 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +161 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +99 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +104 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +151 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +290 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +258 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +245 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +304 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +181 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +55 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +734 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +231 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +69 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +269 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +46 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +115 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +70 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +71 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1363 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +277 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +628 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +2222 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +2479 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +223 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +121 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +716 -0
- data/ext/rj_schema/rapidjson/include_dirs.js +2 -0
- data/ext/rj_schema/rapidjson/library.json +15 -0
- data/ext/rj_schema/rapidjson/license.txt +57 -0
- data/ext/rj_schema/rapidjson/package.json +24 -0
- data/ext/rj_schema/rapidjson/rapidjson.autopkg +77 -0
- data/ext/rj_schema/rapidjson/readme.md +160 -0
- data/ext/rj_schema/rapidjson/readme.zh-cn.md +152 -0
- data/ext/rj_schema/rapidjson/test/CMakeLists.txt +20 -0
- data/ext/rj_schema/rapidjson/test/perftest/CMakeLists.txt +28 -0
- data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +974 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +24 -0
- data/ext/rj_schema/rapidjson/test/perftest/perftest.h +185 -0
- data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +166 -0
- data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +472 -0
- data/ext/rj_schema/rapidjson/test/perftest/schematest.cpp +216 -0
- data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +102 -0
- data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +133 -0
- data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +115 -0
- data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +672 -0
- data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +98 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +313 -0
- data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +451 -0
- data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +112 -0
- data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +230 -0
- data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +181 -0
- data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +160 -0
- data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +143 -0
- data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +70 -0
- data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +92 -0
- data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +1529 -0
- data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +344 -0
- data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +1895 -0
- data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +638 -0
- data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +2009 -0
- data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +219 -0
- data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +30 -0
- data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +192 -0
- data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +132 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +51 -0
- data/ext/rj_schema/rapidjson/test/unittest/unittest.h +140 -0
- data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1829 -0
- data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +598 -0
- data/ext/rj_schema/rapidjson/test/valgrind.supp +17 -0
- data/ext/rj_schema/rapidjson/travis-doxygen.sh +121 -0
- data/ext/rj_schema/rj_schema.cpp +136 -0
- data/lib/rj_schema.rb +7 -0
- metadata +371 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// Serialize example
|
|
2
|
+
// This example shows writing JSON string with writer directly.
|
|
3
|
+
|
|
4
|
+
#include "rapidjson/prettywriter.h" // for stringify JSON
|
|
5
|
+
#include <cstdio>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
using namespace rapidjson;
|
|
10
|
+
|
|
11
|
+
class Person {
|
|
12
|
+
public:
|
|
13
|
+
Person(const std::string& name, unsigned age) : name_(name), age_(age) {}
|
|
14
|
+
Person(const Person& rhs) : name_(rhs.name_), age_(rhs.age_) {}
|
|
15
|
+
virtual ~Person();
|
|
16
|
+
|
|
17
|
+
Person& operator=(const Person& rhs) {
|
|
18
|
+
name_ = rhs.name_;
|
|
19
|
+
age_ = rhs.age_;
|
|
20
|
+
return *this;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
protected:
|
|
24
|
+
template <typename Writer>
|
|
25
|
+
void Serialize(Writer& writer) const {
|
|
26
|
+
// This base class just write out name-value pairs, without wrapping within an object.
|
|
27
|
+
writer.String("name");
|
|
28
|
+
#if RAPIDJSON_HAS_STDSTRING
|
|
29
|
+
writer.String(name_);
|
|
30
|
+
#else
|
|
31
|
+
writer.String(name_.c_str(), static_cast<SizeType>(name_.length())); // Supplying length of string is faster.
|
|
32
|
+
#endif
|
|
33
|
+
writer.String("age");
|
|
34
|
+
writer.Uint(age_);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private:
|
|
38
|
+
std::string name_;
|
|
39
|
+
unsigned age_;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
Person::~Person() {
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class Education {
|
|
46
|
+
public:
|
|
47
|
+
Education(const std::string& school, double GPA) : school_(school), GPA_(GPA) {}
|
|
48
|
+
Education(const Education& rhs) : school_(rhs.school_), GPA_(rhs.GPA_) {}
|
|
49
|
+
|
|
50
|
+
template <typename Writer>
|
|
51
|
+
void Serialize(Writer& writer) const {
|
|
52
|
+
writer.StartObject();
|
|
53
|
+
|
|
54
|
+
writer.String("school");
|
|
55
|
+
#if RAPIDJSON_HAS_STDSTRING
|
|
56
|
+
writer.String(school_);
|
|
57
|
+
#else
|
|
58
|
+
writer.String(school_.c_str(), static_cast<SizeType>(school_.length()));
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
writer.String("GPA");
|
|
62
|
+
writer.Double(GPA_);
|
|
63
|
+
|
|
64
|
+
writer.EndObject();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private:
|
|
68
|
+
std::string school_;
|
|
69
|
+
double GPA_;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
class Dependent : public Person {
|
|
73
|
+
public:
|
|
74
|
+
Dependent(const std::string& name, unsigned age, Education* education = 0) : Person(name, age), education_(education) {}
|
|
75
|
+
Dependent(const Dependent& rhs) : Person(rhs), education_(0) { education_ = (rhs.education_ == 0) ? 0 : new Education(*rhs.education_); }
|
|
76
|
+
virtual ~Dependent();
|
|
77
|
+
|
|
78
|
+
Dependent& operator=(const Dependent& rhs) {
|
|
79
|
+
if (this == &rhs)
|
|
80
|
+
return *this;
|
|
81
|
+
delete education_;
|
|
82
|
+
education_ = (rhs.education_ == 0) ? 0 : new Education(*rhs.education_);
|
|
83
|
+
return *this;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
template <typename Writer>
|
|
87
|
+
void Serialize(Writer& writer) const {
|
|
88
|
+
writer.StartObject();
|
|
89
|
+
|
|
90
|
+
Person::Serialize(writer);
|
|
91
|
+
|
|
92
|
+
writer.String("education");
|
|
93
|
+
if (education_)
|
|
94
|
+
education_->Serialize(writer);
|
|
95
|
+
else
|
|
96
|
+
writer.Null();
|
|
97
|
+
|
|
98
|
+
writer.EndObject();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private:
|
|
102
|
+
|
|
103
|
+
Education *education_;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
Dependent::~Dependent() {
|
|
107
|
+
delete education_;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
class Employee : public Person {
|
|
111
|
+
public:
|
|
112
|
+
Employee(const std::string& name, unsigned age, bool married) : Person(name, age), dependents_(), married_(married) {}
|
|
113
|
+
Employee(const Employee& rhs) : Person(rhs), dependents_(rhs.dependents_), married_(rhs.married_) {}
|
|
114
|
+
virtual ~Employee();
|
|
115
|
+
|
|
116
|
+
Employee& operator=(const Employee& rhs) {
|
|
117
|
+
static_cast<Person&>(*this) = rhs;
|
|
118
|
+
dependents_ = rhs.dependents_;
|
|
119
|
+
married_ = rhs.married_;
|
|
120
|
+
return *this;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
void AddDependent(const Dependent& dependent) {
|
|
124
|
+
dependents_.push_back(dependent);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
template <typename Writer>
|
|
128
|
+
void Serialize(Writer& writer) const {
|
|
129
|
+
writer.StartObject();
|
|
130
|
+
|
|
131
|
+
Person::Serialize(writer);
|
|
132
|
+
|
|
133
|
+
writer.String("married");
|
|
134
|
+
writer.Bool(married_);
|
|
135
|
+
|
|
136
|
+
writer.String(("dependents"));
|
|
137
|
+
writer.StartArray();
|
|
138
|
+
for (std::vector<Dependent>::const_iterator dependentItr = dependents_.begin(); dependentItr != dependents_.end(); ++dependentItr)
|
|
139
|
+
dependentItr->Serialize(writer);
|
|
140
|
+
writer.EndArray();
|
|
141
|
+
|
|
142
|
+
writer.EndObject();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private:
|
|
146
|
+
std::vector<Dependent> dependents_;
|
|
147
|
+
bool married_;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
Employee::~Employee() {
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
int main(int, char*[]) {
|
|
154
|
+
std::vector<Employee> employees;
|
|
155
|
+
|
|
156
|
+
employees.push_back(Employee("Milo YIP", 34, true));
|
|
157
|
+
employees.back().AddDependent(Dependent("Lua YIP", 3, new Education("Happy Kindergarten", 3.5)));
|
|
158
|
+
employees.back().AddDependent(Dependent("Mio YIP", 1));
|
|
159
|
+
|
|
160
|
+
employees.push_back(Employee("Percy TSE", 30, false));
|
|
161
|
+
|
|
162
|
+
StringBuffer sb;
|
|
163
|
+
PrettyWriter<StringBuffer> writer(sb);
|
|
164
|
+
|
|
165
|
+
writer.StartArray();
|
|
166
|
+
for (std::vector<Employee>::const_iterator employeeItr = employees.begin(); employeeItr != employees.end(); ++employeeItr)
|
|
167
|
+
employeeItr->Serialize(writer);
|
|
168
|
+
writer.EndArray();
|
|
169
|
+
|
|
170
|
+
puts(sb.GetString());
|
|
171
|
+
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// JSON simple example
|
|
2
|
+
// This example does not handle errors.
|
|
3
|
+
|
|
4
|
+
#include "rapidjson/document.h"
|
|
5
|
+
#include "rapidjson/writer.h"
|
|
6
|
+
#include "rapidjson/stringbuffer.h"
|
|
7
|
+
#include <iostream>
|
|
8
|
+
|
|
9
|
+
using namespace rapidjson;
|
|
10
|
+
|
|
11
|
+
int main() {
|
|
12
|
+
// 1. Parse a JSON string into DOM.
|
|
13
|
+
const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
|
|
14
|
+
Document d;
|
|
15
|
+
d.Parse(json);
|
|
16
|
+
|
|
17
|
+
// 2. Modify it by DOM.
|
|
18
|
+
Value& s = d["stars"];
|
|
19
|
+
s.SetInt(s.GetInt() + 1);
|
|
20
|
+
|
|
21
|
+
// 3. Stringify the DOM
|
|
22
|
+
StringBuffer buffer;
|
|
23
|
+
Writer<StringBuffer> writer(buffer);
|
|
24
|
+
d.Accept(writer);
|
|
25
|
+
|
|
26
|
+
// Output {"project":"rapidjson","stars":11}
|
|
27
|
+
std::cout << buffer.GetString() << std::endl;
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#include "rapidjson/reader.h"
|
|
2
|
+
#include <iostream>
|
|
3
|
+
#include <sstream>
|
|
4
|
+
|
|
5
|
+
using namespace rapidjson;
|
|
6
|
+
using namespace std;
|
|
7
|
+
|
|
8
|
+
// If you can require C++11, you could use std::to_string here
|
|
9
|
+
template <typename T> std::string stringify(T x) {
|
|
10
|
+
std::stringstream ss;
|
|
11
|
+
ss << x;
|
|
12
|
+
return ss.str();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
struct MyHandler {
|
|
16
|
+
const char* type;
|
|
17
|
+
std::string data;
|
|
18
|
+
|
|
19
|
+
MyHandler() : type(), data() {}
|
|
20
|
+
|
|
21
|
+
bool Null() { type = "Null"; data.clear(); return true; }
|
|
22
|
+
bool Bool(bool b) { type = "Bool:"; data = b? "true": "false"; return true; }
|
|
23
|
+
bool Int(int i) { type = "Int:"; data = stringify(i); return true; }
|
|
24
|
+
bool Uint(unsigned u) { type = "Uint:"; data = stringify(u); return true; }
|
|
25
|
+
bool Int64(int64_t i) { type = "Int64:"; data = stringify(i); return true; }
|
|
26
|
+
bool Uint64(uint64_t u) { type = "Uint64:"; data = stringify(u); return true; }
|
|
27
|
+
bool Double(double d) { type = "Double:"; data = stringify(d); return true; }
|
|
28
|
+
bool RawNumber(const char* str, SizeType length, bool) { type = "Number:"; data = std::string(str, length); return true; }
|
|
29
|
+
bool String(const char* str, SizeType length, bool) { type = "String:"; data = std::string(str, length); return true; }
|
|
30
|
+
bool StartObject() { type = "StartObject"; data.clear(); return true; }
|
|
31
|
+
bool Key(const char* str, SizeType length, bool) { type = "Key:"; data = std::string(str, length); return true; }
|
|
32
|
+
bool EndObject(SizeType memberCount) { type = "EndObject:"; data = stringify(memberCount); return true; }
|
|
33
|
+
bool StartArray() { type = "StartArray"; data.clear(); return true; }
|
|
34
|
+
bool EndArray(SizeType elementCount) { type = "EndArray:"; data = stringify(elementCount); return true; }
|
|
35
|
+
private:
|
|
36
|
+
MyHandler(const MyHandler& noCopyConstruction);
|
|
37
|
+
MyHandler& operator=(const MyHandler& noAssignment);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
int main() {
|
|
41
|
+
const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
|
|
42
|
+
|
|
43
|
+
MyHandler handler;
|
|
44
|
+
Reader reader;
|
|
45
|
+
StringStream ss(json);
|
|
46
|
+
reader.IterativeParseInit();
|
|
47
|
+
while (!reader.IterativeParseComplete()) {
|
|
48
|
+
reader.IterativeParseNext<kParseDefaultFlags>(ss, handler);
|
|
49
|
+
cout << handler.type << handler.data << endl;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#include "rapidjson/reader.h"
|
|
2
|
+
#include <iostream>
|
|
3
|
+
|
|
4
|
+
using namespace rapidjson;
|
|
5
|
+
using namespace std;
|
|
6
|
+
|
|
7
|
+
struct MyHandler {
|
|
8
|
+
bool Null() { cout << "Null()" << endl; return true; }
|
|
9
|
+
bool Bool(bool b) { cout << "Bool(" << boolalpha << b << ")" << endl; return true; }
|
|
10
|
+
bool Int(int i) { cout << "Int(" << i << ")" << endl; return true; }
|
|
11
|
+
bool Uint(unsigned u) { cout << "Uint(" << u << ")" << endl; return true; }
|
|
12
|
+
bool Int64(int64_t i) { cout << "Int64(" << i << ")" << endl; return true; }
|
|
13
|
+
bool Uint64(uint64_t u) { cout << "Uint64(" << u << ")" << endl; return true; }
|
|
14
|
+
bool Double(double d) { cout << "Double(" << d << ")" << endl; return true; }
|
|
15
|
+
bool RawNumber(const char* str, SizeType length, bool copy) {
|
|
16
|
+
cout << "Number(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
bool String(const char* str, SizeType length, bool copy) {
|
|
20
|
+
cout << "String(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
bool StartObject() { cout << "StartObject()" << endl; return true; }
|
|
24
|
+
bool Key(const char* str, SizeType length, bool copy) {
|
|
25
|
+
cout << "Key(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
bool EndObject(SizeType memberCount) { cout << "EndObject(" << memberCount << ")" << endl; return true; }
|
|
29
|
+
bool StartArray() { cout << "StartArray()" << endl; return true; }
|
|
30
|
+
bool EndArray(SizeType elementCount) { cout << "EndArray(" << elementCount << ")" << endl; return true; }
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
int main() {
|
|
34
|
+
const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
|
|
35
|
+
|
|
36
|
+
MyHandler handler;
|
|
37
|
+
Reader reader;
|
|
38
|
+
StringStream ss(json);
|
|
39
|
+
reader.Parse(ss, handler);
|
|
40
|
+
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include "rapidjson/writer.h"
|
|
2
|
+
#include "rapidjson/stringbuffer.h"
|
|
3
|
+
#include <iostream>
|
|
4
|
+
|
|
5
|
+
using namespace rapidjson;
|
|
6
|
+
using namespace std;
|
|
7
|
+
|
|
8
|
+
int main() {
|
|
9
|
+
StringBuffer s;
|
|
10
|
+
Writer<StringBuffer> writer(s);
|
|
11
|
+
|
|
12
|
+
writer.StartObject(); // Between StartObject()/EndObject(),
|
|
13
|
+
writer.Key("hello"); // output a key,
|
|
14
|
+
writer.String("world"); // follow by a value.
|
|
15
|
+
writer.Key("t");
|
|
16
|
+
writer.Bool(true);
|
|
17
|
+
writer.Key("f");
|
|
18
|
+
writer.Bool(false);
|
|
19
|
+
writer.Key("n");
|
|
20
|
+
writer.Null();
|
|
21
|
+
writer.Key("i");
|
|
22
|
+
writer.Uint(123);
|
|
23
|
+
writer.Key("pi");
|
|
24
|
+
writer.Double(3.1416);
|
|
25
|
+
writer.Key("a");
|
|
26
|
+
writer.StartArray(); // Between StartArray()/EndArray(),
|
|
27
|
+
for (unsigned i = 0; i < 4; i++)
|
|
28
|
+
writer.Uint(i); // all values are elements of the array.
|
|
29
|
+
writer.EndArray();
|
|
30
|
+
writer.EndObject();
|
|
31
|
+
|
|
32
|
+
// {"hello":"world","t":true,"f":false,"n":null,"i":123,"pi":3.1416,"a":[0,1,2,3]}
|
|
33
|
+
cout << s.GetString() << endl;
|
|
34
|
+
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Hello World example
|
|
2
|
+
// This example shows basic usage of DOM-style API.
|
|
3
|
+
|
|
4
|
+
#include "rapidjson/document.h" // rapidjson's DOM-style API
|
|
5
|
+
#include "rapidjson/prettywriter.h" // for stringify JSON
|
|
6
|
+
#include <cstdio>
|
|
7
|
+
|
|
8
|
+
using namespace rapidjson;
|
|
9
|
+
using namespace std;
|
|
10
|
+
|
|
11
|
+
int main(int, char*[]) {
|
|
12
|
+
////////////////////////////////////////////////////////////////////////////
|
|
13
|
+
// 1. Parse a JSON text string to a document.
|
|
14
|
+
|
|
15
|
+
const char json[] = " { \"hello\" : \"world\", \"t\" : true , \"f\" : false, \"n\": null, \"i\":123, \"pi\": 3.1416, \"a\":[1, 2, 3, 4] } ";
|
|
16
|
+
printf("Original JSON:\n %s\n", json);
|
|
17
|
+
|
|
18
|
+
Document document; // Default template parameter uses UTF8 and MemoryPoolAllocator.
|
|
19
|
+
|
|
20
|
+
#if 0
|
|
21
|
+
// "normal" parsing, decode strings to new buffers. Can use other input stream via ParseStream().
|
|
22
|
+
if (document.Parse(json).HasParseError())
|
|
23
|
+
return 1;
|
|
24
|
+
#else
|
|
25
|
+
// In-situ parsing, decode strings directly in the source string. Source must be string.
|
|
26
|
+
char buffer[sizeof(json)];
|
|
27
|
+
memcpy(buffer, json, sizeof(json));
|
|
28
|
+
if (document.ParseInsitu(buffer).HasParseError())
|
|
29
|
+
return 1;
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
printf("\nParsing to document succeeded.\n");
|
|
33
|
+
|
|
34
|
+
////////////////////////////////////////////////////////////////////////////
|
|
35
|
+
// 2. Access values in document.
|
|
36
|
+
|
|
37
|
+
printf("\nAccess values in document:\n");
|
|
38
|
+
assert(document.IsObject()); // Document is a JSON value represents the root of DOM. Root can be either an object or array.
|
|
39
|
+
|
|
40
|
+
assert(document.HasMember("hello"));
|
|
41
|
+
assert(document["hello"].IsString());
|
|
42
|
+
printf("hello = %s\n", document["hello"].GetString());
|
|
43
|
+
|
|
44
|
+
// Since version 0.2, you can use single lookup to check the existing of member and its value:
|
|
45
|
+
Value::MemberIterator hello = document.FindMember("hello");
|
|
46
|
+
assert(hello != document.MemberEnd());
|
|
47
|
+
assert(hello->value.IsString());
|
|
48
|
+
assert(strcmp("world", hello->value.GetString()) == 0);
|
|
49
|
+
(void)hello;
|
|
50
|
+
|
|
51
|
+
assert(document["t"].IsBool()); // JSON true/false are bool. Can also uses more specific function IsTrue().
|
|
52
|
+
printf("t = %s\n", document["t"].GetBool() ? "true" : "false");
|
|
53
|
+
|
|
54
|
+
assert(document["f"].IsBool());
|
|
55
|
+
printf("f = %s\n", document["f"].GetBool() ? "true" : "false");
|
|
56
|
+
|
|
57
|
+
printf("n = %s\n", document["n"].IsNull() ? "null" : "?");
|
|
58
|
+
|
|
59
|
+
assert(document["i"].IsNumber()); // Number is a JSON type, but C++ needs more specific type.
|
|
60
|
+
assert(document["i"].IsInt()); // In this case, IsUint()/IsInt64()/IsUInt64() also return true.
|
|
61
|
+
printf("i = %d\n", document["i"].GetInt()); // Alternative (int)document["i"]
|
|
62
|
+
|
|
63
|
+
assert(document["pi"].IsNumber());
|
|
64
|
+
assert(document["pi"].IsDouble());
|
|
65
|
+
printf("pi = %g\n", document["pi"].GetDouble());
|
|
66
|
+
|
|
67
|
+
{
|
|
68
|
+
const Value& a = document["a"]; // Using a reference for consecutive access is handy and faster.
|
|
69
|
+
assert(a.IsArray());
|
|
70
|
+
for (SizeType i = 0; i < a.Size(); i++) // rapidjson uses SizeType instead of size_t.
|
|
71
|
+
printf("a[%d] = %d\n", i, a[i].GetInt());
|
|
72
|
+
|
|
73
|
+
int y = a[0].GetInt();
|
|
74
|
+
(void)y;
|
|
75
|
+
|
|
76
|
+
// Iterating array with iterators
|
|
77
|
+
printf("a = ");
|
|
78
|
+
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)
|
|
79
|
+
printf("%d ", itr->GetInt());
|
|
80
|
+
printf("\n");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Iterating object members
|
|
84
|
+
static const char* kTypeNames[] = { "Null", "False", "True", "Object", "Array", "String", "Number" };
|
|
85
|
+
for (Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr)
|
|
86
|
+
printf("Type of member %s is %s\n", itr->name.GetString(), kTypeNames[itr->value.GetType()]);
|
|
87
|
+
|
|
88
|
+
////////////////////////////////////////////////////////////////////////////
|
|
89
|
+
// 3. Modify values in document.
|
|
90
|
+
|
|
91
|
+
// Change i to a bigger number
|
|
92
|
+
{
|
|
93
|
+
uint64_t f20 = 1; // compute factorial of 20
|
|
94
|
+
for (uint64_t j = 1; j <= 20; j++)
|
|
95
|
+
f20 *= j;
|
|
96
|
+
document["i"] = f20; // Alternate form: document["i"].SetUint64(f20)
|
|
97
|
+
assert(!document["i"].IsInt()); // No longer can be cast as int or uint.
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Adding values to array.
|
|
101
|
+
{
|
|
102
|
+
Value& a = document["a"]; // This time we uses non-const reference.
|
|
103
|
+
Document::AllocatorType& allocator = document.GetAllocator();
|
|
104
|
+
for (int i = 5; i <= 10; i++)
|
|
105
|
+
a.PushBack(i, allocator); // May look a bit strange, allocator is needed for potentially realloc. We normally uses the document's.
|
|
106
|
+
|
|
107
|
+
// Fluent API
|
|
108
|
+
a.PushBack("Lua", allocator).PushBack("Mio", allocator);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Making string values.
|
|
112
|
+
|
|
113
|
+
// This version of SetString() just store the pointer to the string.
|
|
114
|
+
// So it is for literal and string that exists within value's life-cycle.
|
|
115
|
+
{
|
|
116
|
+
document["hello"] = "rapidjson"; // This will invoke strlen()
|
|
117
|
+
// Faster version:
|
|
118
|
+
// document["hello"].SetString("rapidjson", 9);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// This version of SetString() needs an allocator, which means it will allocate a new buffer and copy the the string into the buffer.
|
|
122
|
+
Value author;
|
|
123
|
+
{
|
|
124
|
+
char buffer2[10];
|
|
125
|
+
int len = sprintf(buffer2, "%s %s", "Milo", "Yip"); // synthetic example of dynamically created string.
|
|
126
|
+
|
|
127
|
+
author.SetString(buffer2, static_cast<SizeType>(len), document.GetAllocator());
|
|
128
|
+
// Shorter but slower version:
|
|
129
|
+
// document["hello"].SetString(buffer, document.GetAllocator());
|
|
130
|
+
|
|
131
|
+
// Constructor version:
|
|
132
|
+
// Value author(buffer, len, document.GetAllocator());
|
|
133
|
+
// Value author(buffer, document.GetAllocator());
|
|
134
|
+
memset(buffer2, 0, sizeof(buffer2)); // For demonstration purpose.
|
|
135
|
+
}
|
|
136
|
+
// Variable 'buffer' is unusable now but 'author' has already made a copy.
|
|
137
|
+
document.AddMember("author", author, document.GetAllocator());
|
|
138
|
+
|
|
139
|
+
assert(author.IsNull()); // Move semantic for assignment. After this variable is assigned as a member, the variable becomes null.
|
|
140
|
+
|
|
141
|
+
////////////////////////////////////////////////////////////////////////////
|
|
142
|
+
// 4. Stringify JSON
|
|
143
|
+
|
|
144
|
+
printf("\nModified JSON with reformatting:\n");
|
|
145
|
+
StringBuffer sb;
|
|
146
|
+
PrettyWriter<StringBuffer> writer(sb);
|
|
147
|
+
document.Accept(writer); // Accept() traverses the DOM and generates Handler events.
|
|
148
|
+
puts(sb.GetString());
|
|
149
|
+
|
|
150
|
+
return 0;
|
|
151
|
+
}
|