diff options
Diffstat (limited to 'src/s3select/rapidjson/example/traverseaspointer.cpp')
-rw-r--r-- | src/s3select/rapidjson/example/traverseaspointer.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/s3select/rapidjson/example/traverseaspointer.cpp b/src/s3select/rapidjson/example/traverseaspointer.cpp new file mode 100644 index 000000000..7e0c89923 --- /dev/null +++ b/src/s3select/rapidjson/example/traverseaspointer.cpp @@ -0,0 +1,39 @@ +#include "rapidjson/document.h" +#include "rapidjson/filereadstream.h" +#include "rapidjson/pointer.h" +#include "rapidjson/stringbuffer.h" +#include <iostream> + +using namespace rapidjson; + +void traverse(const Value& v, const Pointer& p) { + StringBuffer sb; + p.Stringify(sb); + std::cout << sb.GetString() << std::endl; + + switch (v.GetType()) { + case kArrayType: + for (SizeType i = 0; i != v.Size(); ++i) + traverse(v[i], p.Append(i)); + break; + case kObjectType: + for (Value::ConstMemberIterator m = v.MemberBegin(); m != v.MemberEnd(); ++m) + traverse(m->value, p.Append(m->name.GetString(), m->name.GetStringLength())); + break; + default: + break; + } +} + +int main(int, char*[]) { + char readBuffer[65536]; + FileReadStream is(stdin, readBuffer, sizeof(readBuffer)); + + Document d; + d.ParseStream(is); + + Pointer root; + traverse(d, root); + + return 0; +} |