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,287 @@
|
|
|
1
|
+
#include "archiver.h"
|
|
2
|
+
#include <iostream>
|
|
3
|
+
#include <vector>
|
|
4
|
+
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
6
|
+
// Test1: simple object
|
|
7
|
+
|
|
8
|
+
struct Student {
|
|
9
|
+
Student() : name(), age(), height(), canSwim() {}
|
|
10
|
+
Student(const std::string name, unsigned age, double height, bool canSwim) :
|
|
11
|
+
name(name), age(age), height(height), canSwim(canSwim)
|
|
12
|
+
{}
|
|
13
|
+
|
|
14
|
+
std::string name;
|
|
15
|
+
unsigned age;
|
|
16
|
+
double height;
|
|
17
|
+
bool canSwim;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
template <typename Archiver>
|
|
21
|
+
Archiver& operator&(Archiver& ar, Student& s) {
|
|
22
|
+
ar.StartObject();
|
|
23
|
+
ar.Member("name") & s.name;
|
|
24
|
+
ar.Member("age") & s.age;
|
|
25
|
+
ar.Member("height") & s.height;
|
|
26
|
+
ar.Member("canSwim") & s.canSwim;
|
|
27
|
+
return ar.EndObject();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
std::ostream& operator<<(std::ostream& os, const Student& s) {
|
|
31
|
+
return os << s.name << " " << s.age << " " << s.height << " " << s.canSwim;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
void test1() {
|
|
35
|
+
std::string json;
|
|
36
|
+
|
|
37
|
+
// Serialize
|
|
38
|
+
{
|
|
39
|
+
Student s("Lua", 9, 150.5, true);
|
|
40
|
+
|
|
41
|
+
JsonWriter writer;
|
|
42
|
+
writer & s;
|
|
43
|
+
json = writer.GetString();
|
|
44
|
+
std::cout << json << std::endl;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Deserialize
|
|
48
|
+
{
|
|
49
|
+
Student s;
|
|
50
|
+
JsonReader reader(json.c_str());
|
|
51
|
+
reader & s;
|
|
52
|
+
std::cout << s << std::endl;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
57
|
+
// Test2: std::vector <=> JSON array
|
|
58
|
+
//
|
|
59
|
+
// You can map a JSON array to other data structures as well
|
|
60
|
+
|
|
61
|
+
struct Group {
|
|
62
|
+
Group() : groupName(), students() {}
|
|
63
|
+
std::string groupName;
|
|
64
|
+
std::vector<Student> students;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
template <typename Archiver>
|
|
68
|
+
Archiver& operator&(Archiver& ar, Group& g) {
|
|
69
|
+
ar.StartObject();
|
|
70
|
+
|
|
71
|
+
ar.Member("groupName");
|
|
72
|
+
ar & g.groupName;
|
|
73
|
+
|
|
74
|
+
ar.Member("students");
|
|
75
|
+
size_t studentCount = g.students.size();
|
|
76
|
+
ar.StartArray(&studentCount);
|
|
77
|
+
if (ar.IsReader)
|
|
78
|
+
g.students.resize(studentCount);
|
|
79
|
+
for (size_t i = 0; i < studentCount; i++)
|
|
80
|
+
ar & g.students[i];
|
|
81
|
+
ar.EndArray();
|
|
82
|
+
|
|
83
|
+
return ar.EndObject();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
std::ostream& operator<<(std::ostream& os, const Group& g) {
|
|
87
|
+
os << g.groupName << std::endl;
|
|
88
|
+
for (std::vector<Student>::const_iterator itr = g.students.begin(); itr != g.students.end(); ++itr)
|
|
89
|
+
os << *itr << std::endl;
|
|
90
|
+
return os;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
void test2() {
|
|
94
|
+
std::string json;
|
|
95
|
+
|
|
96
|
+
// Serialize
|
|
97
|
+
{
|
|
98
|
+
Group g;
|
|
99
|
+
g.groupName = "Rainbow";
|
|
100
|
+
|
|
101
|
+
Student s1("Lua", 9, 150.5, true);
|
|
102
|
+
Student s2("Mio", 7, 120.0, false);
|
|
103
|
+
g.students.push_back(s1);
|
|
104
|
+
g.students.push_back(s2);
|
|
105
|
+
|
|
106
|
+
JsonWriter writer;
|
|
107
|
+
writer & g;
|
|
108
|
+
json = writer.GetString();
|
|
109
|
+
std::cout << json << std::endl;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Deserialize
|
|
113
|
+
{
|
|
114
|
+
Group g;
|
|
115
|
+
JsonReader reader(json.c_str());
|
|
116
|
+
reader & g;
|
|
117
|
+
std::cout << g << std::endl;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
122
|
+
// Test3: polymorphism & friend
|
|
123
|
+
//
|
|
124
|
+
// Note that friendship is not necessary but make things simpler.
|
|
125
|
+
|
|
126
|
+
class Shape {
|
|
127
|
+
public:
|
|
128
|
+
virtual ~Shape() {}
|
|
129
|
+
virtual const char* GetType() const = 0;
|
|
130
|
+
virtual void Print(std::ostream& os) const = 0;
|
|
131
|
+
|
|
132
|
+
protected:
|
|
133
|
+
Shape() : x_(), y_() {}
|
|
134
|
+
Shape(double x, double y) : x_(x), y_(y) {}
|
|
135
|
+
|
|
136
|
+
template <typename Archiver>
|
|
137
|
+
friend Archiver& operator&(Archiver& ar, Shape& s);
|
|
138
|
+
|
|
139
|
+
double x_, y_;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
template <typename Archiver>
|
|
143
|
+
Archiver& operator&(Archiver& ar, Shape& s) {
|
|
144
|
+
ar.Member("x") & s.x_;
|
|
145
|
+
ar.Member("y") & s.y_;
|
|
146
|
+
return ar;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
class Circle : public Shape {
|
|
150
|
+
public:
|
|
151
|
+
Circle() : radius_() {}
|
|
152
|
+
Circle(double x, double y, double radius) : Shape(x, y), radius_(radius) {}
|
|
153
|
+
~Circle() {}
|
|
154
|
+
|
|
155
|
+
const char* GetType() const { return "Circle"; }
|
|
156
|
+
|
|
157
|
+
void Print(std::ostream& os) const {
|
|
158
|
+
os << "Circle (" << x_ << ", " << y_ << ")" << " radius = " << radius_;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private:
|
|
162
|
+
template <typename Archiver>
|
|
163
|
+
friend Archiver& operator&(Archiver& ar, Circle& c);
|
|
164
|
+
|
|
165
|
+
double radius_;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
template <typename Archiver>
|
|
169
|
+
Archiver& operator&(Archiver& ar, Circle& c) {
|
|
170
|
+
ar & static_cast<Shape&>(c);
|
|
171
|
+
ar.Member("radius") & c.radius_;
|
|
172
|
+
return ar;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
class Box : public Shape {
|
|
176
|
+
public:
|
|
177
|
+
Box() : width_(), height_() {}
|
|
178
|
+
Box(double x, double y, double width, double height) : Shape(x, y), width_(width), height_(height) {}
|
|
179
|
+
~Box() {}
|
|
180
|
+
|
|
181
|
+
const char* GetType() const { return "Box"; }
|
|
182
|
+
|
|
183
|
+
void Print(std::ostream& os) const {
|
|
184
|
+
os << "Box (" << x_ << ", " << y_ << ")" << " width = " << width_ << " height = " << height_;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
private:
|
|
188
|
+
template <typename Archiver>
|
|
189
|
+
friend Archiver& operator&(Archiver& ar, Box& b);
|
|
190
|
+
|
|
191
|
+
double width_, height_;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
template <typename Archiver>
|
|
195
|
+
Archiver& operator&(Archiver& ar, Box& b) {
|
|
196
|
+
ar & static_cast<Shape&>(b);
|
|
197
|
+
ar.Member("width") & b.width_;
|
|
198
|
+
ar.Member("height") & b.height_;
|
|
199
|
+
return ar;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
class Canvas {
|
|
203
|
+
public:
|
|
204
|
+
Canvas() : shapes_() {}
|
|
205
|
+
~Canvas() { Clear(); }
|
|
206
|
+
|
|
207
|
+
void Clear() {
|
|
208
|
+
for (std::vector<Shape*>::iterator itr = shapes_.begin(); itr != shapes_.end(); ++itr)
|
|
209
|
+
delete *itr;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
void AddShape(Shape* shape) { shapes_.push_back(shape); }
|
|
213
|
+
|
|
214
|
+
void Print(std::ostream& os) {
|
|
215
|
+
for (std::vector<Shape*>::iterator itr = shapes_.begin(); itr != shapes_.end(); ++itr) {
|
|
216
|
+
(*itr)->Print(os);
|
|
217
|
+
std::cout << std::endl;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
private:
|
|
222
|
+
template <typename Archiver>
|
|
223
|
+
friend Archiver& operator&(Archiver& ar, Canvas& c);
|
|
224
|
+
|
|
225
|
+
std::vector<Shape*> shapes_;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
template <typename Archiver>
|
|
229
|
+
Archiver& operator&(Archiver& ar, Shape*& shape) {
|
|
230
|
+
std::string type = ar.IsReader ? "" : shape->GetType();
|
|
231
|
+
ar.StartObject();
|
|
232
|
+
ar.Member("type") & type;
|
|
233
|
+
if (type == "Circle") {
|
|
234
|
+
if (ar.IsReader) shape = new Circle;
|
|
235
|
+
ar & static_cast<Circle&>(*shape);
|
|
236
|
+
}
|
|
237
|
+
else if (type == "Box") {
|
|
238
|
+
if (ar.IsReader) shape = new Box;
|
|
239
|
+
ar & static_cast<Box&>(*shape);
|
|
240
|
+
}
|
|
241
|
+
return ar.EndObject();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
template <typename Archiver>
|
|
245
|
+
Archiver& operator&(Archiver& ar, Canvas& c) {
|
|
246
|
+
size_t shapeCount = c.shapes_.size();
|
|
247
|
+
ar.StartArray(&shapeCount);
|
|
248
|
+
if (ar.IsReader) {
|
|
249
|
+
c.Clear();
|
|
250
|
+
c.shapes_.resize(shapeCount);
|
|
251
|
+
}
|
|
252
|
+
for (size_t i = 0; i < shapeCount; i++)
|
|
253
|
+
ar & c.shapes_[i];
|
|
254
|
+
return ar.EndArray();
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
void test3() {
|
|
258
|
+
std::string json;
|
|
259
|
+
|
|
260
|
+
// Serialize
|
|
261
|
+
{
|
|
262
|
+
Canvas c;
|
|
263
|
+
c.AddShape(new Circle(1.0, 2.0, 3.0));
|
|
264
|
+
c.AddShape(new Box(4.0, 5.0, 6.0, 7.0));
|
|
265
|
+
|
|
266
|
+
JsonWriter writer;
|
|
267
|
+
writer & c;
|
|
268
|
+
json = writer.GetString();
|
|
269
|
+
std::cout << json << std::endl;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Deserialize
|
|
273
|
+
{
|
|
274
|
+
Canvas c;
|
|
275
|
+
JsonReader reader(json.c_str());
|
|
276
|
+
reader & c;
|
|
277
|
+
c.Print(std::cout);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
282
|
+
|
|
283
|
+
int main() {
|
|
284
|
+
test1();
|
|
285
|
+
test2();
|
|
286
|
+
test3();
|
|
287
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// JSON condenser example
|
|
2
|
+
|
|
3
|
+
// This example parses JSON from stdin with validation,
|
|
4
|
+
// and re-output the JSON content to stdout with all string capitalized, and without whitespace.
|
|
5
|
+
|
|
6
|
+
#include "rapidjson/reader.h"
|
|
7
|
+
#include "rapidjson/writer.h"
|
|
8
|
+
#include "rapidjson/filereadstream.h"
|
|
9
|
+
#include "rapidjson/filewritestream.h"
|
|
10
|
+
#include "rapidjson/error/en.h"
|
|
11
|
+
#include <vector>
|
|
12
|
+
#include <cctype>
|
|
13
|
+
|
|
14
|
+
using namespace rapidjson;
|
|
15
|
+
|
|
16
|
+
template<typename OutputHandler>
|
|
17
|
+
struct CapitalizeFilter {
|
|
18
|
+
CapitalizeFilter(OutputHandler& out) : out_(out), buffer_() {}
|
|
19
|
+
|
|
20
|
+
bool Null() { return out_.Null(); }
|
|
21
|
+
bool Bool(bool b) { return out_.Bool(b); }
|
|
22
|
+
bool Int(int i) { return out_.Int(i); }
|
|
23
|
+
bool Uint(unsigned u) { return out_.Uint(u); }
|
|
24
|
+
bool Int64(int64_t i) { return out_.Int64(i); }
|
|
25
|
+
bool Uint64(uint64_t u) { return out_.Uint64(u); }
|
|
26
|
+
bool Double(double d) { return out_.Double(d); }
|
|
27
|
+
bool RawNumber(const char* str, SizeType length, bool copy) { return out_.RawNumber(str, length, copy); }
|
|
28
|
+
bool String(const char* str, SizeType length, bool) {
|
|
29
|
+
buffer_.clear();
|
|
30
|
+
for (SizeType i = 0; i < length; i++)
|
|
31
|
+
buffer_.push_back(static_cast<char>(std::toupper(str[i])));
|
|
32
|
+
return out_.String(&buffer_.front(), length, true); // true = output handler need to copy the string
|
|
33
|
+
}
|
|
34
|
+
bool StartObject() { return out_.StartObject(); }
|
|
35
|
+
bool Key(const char* str, SizeType length, bool copy) { return String(str, length, copy); }
|
|
36
|
+
bool EndObject(SizeType memberCount) { return out_.EndObject(memberCount); }
|
|
37
|
+
bool StartArray() { return out_.StartArray(); }
|
|
38
|
+
bool EndArray(SizeType elementCount) { return out_.EndArray(elementCount); }
|
|
39
|
+
|
|
40
|
+
OutputHandler& out_;
|
|
41
|
+
std::vector<char> buffer_;
|
|
42
|
+
|
|
43
|
+
private:
|
|
44
|
+
CapitalizeFilter(const CapitalizeFilter&);
|
|
45
|
+
CapitalizeFilter& operator=(const CapitalizeFilter&);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
int main(int, char*[]) {
|
|
49
|
+
// Prepare JSON reader and input stream.
|
|
50
|
+
Reader reader;
|
|
51
|
+
char readBuffer[65536];
|
|
52
|
+
FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
|
|
53
|
+
|
|
54
|
+
// Prepare JSON writer and output stream.
|
|
55
|
+
char writeBuffer[65536];
|
|
56
|
+
FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
|
|
57
|
+
Writer<FileWriteStream> writer(os);
|
|
58
|
+
|
|
59
|
+
// JSON reader parse from the input stream and let writer generate the output.
|
|
60
|
+
CapitalizeFilter<Writer<FileWriteStream> > filter(writer);
|
|
61
|
+
if (!reader.Parse(is, filter)) {
|
|
62
|
+
fprintf(stderr, "\nError(%u): %s\n", static_cast<unsigned>(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode()));
|
|
63
|
+
return 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// JSON condenser example
|
|
2
|
+
|
|
3
|
+
// This example parses JSON text from stdin with validation,
|
|
4
|
+
// and re-output the JSON content to stdout without whitespace.
|
|
5
|
+
|
|
6
|
+
#include "rapidjson/reader.h"
|
|
7
|
+
#include "rapidjson/writer.h"
|
|
8
|
+
#include "rapidjson/filereadstream.h"
|
|
9
|
+
#include "rapidjson/filewritestream.h"
|
|
10
|
+
#include "rapidjson/error/en.h"
|
|
11
|
+
|
|
12
|
+
using namespace rapidjson;
|
|
13
|
+
|
|
14
|
+
int main(int, char*[]) {
|
|
15
|
+
// Prepare JSON reader and input stream.
|
|
16
|
+
Reader reader;
|
|
17
|
+
char readBuffer[65536];
|
|
18
|
+
FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
|
|
19
|
+
|
|
20
|
+
// Prepare JSON writer and output stream.
|
|
21
|
+
char writeBuffer[65536];
|
|
22
|
+
FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
|
|
23
|
+
Writer<FileWriteStream> writer(os);
|
|
24
|
+
|
|
25
|
+
// JSON reader parse from the input stream and let writer generate the output.
|
|
26
|
+
if (!reader.Parse(is, writer)) {
|
|
27
|
+
fprintf(stderr, "\nError(%u): %s\n", static_cast<unsigned>(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode()));
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// JSON filterkey example with SAX-style API.
|
|
2
|
+
|
|
3
|
+
// This example parses JSON text from stdin with validation.
|
|
4
|
+
// During parsing, specified key will be filtered using a SAX handler.
|
|
5
|
+
// It re-output the JSON content to stdout without whitespace.
|
|
6
|
+
|
|
7
|
+
#include "rapidjson/reader.h"
|
|
8
|
+
#include "rapidjson/writer.h"
|
|
9
|
+
#include "rapidjson/filereadstream.h"
|
|
10
|
+
#include "rapidjson/filewritestream.h"
|
|
11
|
+
#include "rapidjson/error/en.h"
|
|
12
|
+
#include <stack>
|
|
13
|
+
|
|
14
|
+
using namespace rapidjson;
|
|
15
|
+
|
|
16
|
+
// This handler forwards event into an output handler, with filtering the descendent events of specified key.
|
|
17
|
+
template <typename OutputHandler>
|
|
18
|
+
class FilterKeyHandler {
|
|
19
|
+
public:
|
|
20
|
+
typedef char Ch;
|
|
21
|
+
|
|
22
|
+
FilterKeyHandler(OutputHandler& outputHandler, const Ch* keyString, SizeType keyLength) :
|
|
23
|
+
outputHandler_(outputHandler), keyString_(keyString), keyLength_(keyLength), filterValueDepth_(), filteredKeyCount_()
|
|
24
|
+
{}
|
|
25
|
+
|
|
26
|
+
bool Null() { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Null() && EndValue(); }
|
|
27
|
+
bool Bool(bool b) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Bool(b) && EndValue(); }
|
|
28
|
+
bool Int(int i) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Int(i) && EndValue(); }
|
|
29
|
+
bool Uint(unsigned u) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Uint(u) && EndValue(); }
|
|
30
|
+
bool Int64(int64_t i) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Int64(i) && EndValue(); }
|
|
31
|
+
bool Uint64(uint64_t u) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Uint64(u) && EndValue(); }
|
|
32
|
+
bool Double(double d) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.Double(d) && EndValue(); }
|
|
33
|
+
bool RawNumber(const Ch* str, SizeType len, bool copy) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.RawNumber(str, len, copy) && EndValue(); }
|
|
34
|
+
bool String (const Ch* str, SizeType len, bool copy) { return filterValueDepth_ > 0 ? EndValue() : outputHandler_.String (str, len, copy) && EndValue(); }
|
|
35
|
+
|
|
36
|
+
bool StartObject() {
|
|
37
|
+
if (filterValueDepth_ > 0) {
|
|
38
|
+
filterValueDepth_++;
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
filteredKeyCount_.push(0);
|
|
43
|
+
return outputHandler_.StartObject();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
bool Key(const Ch* str, SizeType len, bool copy) {
|
|
48
|
+
if (filterValueDepth_ > 0)
|
|
49
|
+
return true;
|
|
50
|
+
else if (len == keyLength_ && std::memcmp(str, keyString_, len) == 0) {
|
|
51
|
+
filterValueDepth_ = 1;
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
++filteredKeyCount_.top();
|
|
56
|
+
return outputHandler_.Key(str, len, copy);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
bool EndObject(SizeType) {
|
|
61
|
+
if (filterValueDepth_ > 0) {
|
|
62
|
+
filterValueDepth_--;
|
|
63
|
+
return EndValue();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Use our own filtered memberCount
|
|
67
|
+
SizeType memberCount = filteredKeyCount_.top();
|
|
68
|
+
filteredKeyCount_.pop();
|
|
69
|
+
return outputHandler_.EndObject(memberCount) && EndValue();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
bool StartArray() {
|
|
74
|
+
if (filterValueDepth_ > 0) {
|
|
75
|
+
filterValueDepth_++;
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
else
|
|
79
|
+
return outputHandler_.StartArray();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
bool EndArray(SizeType elementCount) {
|
|
83
|
+
if (filterValueDepth_ > 0) {
|
|
84
|
+
filterValueDepth_--;
|
|
85
|
+
return EndValue();
|
|
86
|
+
}
|
|
87
|
+
else
|
|
88
|
+
return outputHandler_.EndArray(elementCount) && EndValue();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private:
|
|
92
|
+
FilterKeyHandler(const FilterKeyHandler&);
|
|
93
|
+
FilterKeyHandler& operator=(const FilterKeyHandler&);
|
|
94
|
+
|
|
95
|
+
bool EndValue() {
|
|
96
|
+
if (filterValueDepth_ == 1) // Just at the end of value after filtered key
|
|
97
|
+
filterValueDepth_ = 0;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
OutputHandler& outputHandler_;
|
|
102
|
+
const char* keyString_;
|
|
103
|
+
const SizeType keyLength_;
|
|
104
|
+
unsigned filterValueDepth_;
|
|
105
|
+
std::stack<SizeType> filteredKeyCount_;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
int main(int argc, char* argv[]) {
|
|
109
|
+
if (argc != 2) {
|
|
110
|
+
fprintf(stderr, "filterkey key < input.json > output.json\n");
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Prepare JSON reader and input stream.
|
|
115
|
+
Reader reader;
|
|
116
|
+
char readBuffer[65536];
|
|
117
|
+
FileReadStream is(stdin, readBuffer, sizeof(readBuffer));
|
|
118
|
+
|
|
119
|
+
// Prepare JSON writer and output stream.
|
|
120
|
+
char writeBuffer[65536];
|
|
121
|
+
FileWriteStream os(stdout, writeBuffer, sizeof(writeBuffer));
|
|
122
|
+
Writer<FileWriteStream> writer(os);
|
|
123
|
+
|
|
124
|
+
// Prepare Filter
|
|
125
|
+
FilterKeyHandler<Writer<FileWriteStream> > filter(writer, argv[1], static_cast<SizeType>(strlen(argv[1])));
|
|
126
|
+
|
|
127
|
+
// JSON reader parse from the input stream, filter handler filters the events, and forward to writer.
|
|
128
|
+
// i.e. the events flow is: reader -> filter -> writer
|
|
129
|
+
if (!reader.Parse(is, filter)) {
|
|
130
|
+
fprintf(stderr, "\nError(%u): %s\n", static_cast<unsigned>(reader.GetErrorOffset()), GetParseError_En(reader.GetParseErrorCode()));
|
|
131
|
+
return 1;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return 0;
|
|
135
|
+
}
|