summaryrefslogtreecommitdiffstats
path: root/src/s3select/rapidjson/example/traverseaspointer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/s3select/rapidjson/example/traverseaspointer.cpp')
-rw-r--r--src/s3select/rapidjson/example/traverseaspointer.cpp39
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;
+}