summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/slime/Injector.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/slime/Injector.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/slime/Injector.java42
1 files changed, 25 insertions, 17 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/slime/Injector.java b/vespajlib/src/main/java/com/yahoo/slime/Injector.java
index 3e507cf29c2..95198c16031 100644
--- a/vespajlib/src/main/java/com/yahoo/slime/Injector.java
+++ b/vespajlib/src/main/java/com/yahoo/slime/Injector.java
@@ -25,17 +25,29 @@ public class Injector {
}
private void injectValue(Inserter inserter, Inspector inspector, Inspector guard) {
- switch (inspector.type()) {
- case NIX: inserter.insertNIX(); break;
- case BOOL: inserter.insertBOOL(inspector.asBool()); break;
- case LONG: inserter.insertLONG(inspector.asLong()); break;
- case DOUBLE: inserter.insertDOUBLE(inspector.asDouble()); break;
- case STRING: inserter.insertSTRING(inspector.asString()); break;
- case DATA: inserter.insertDATA(inspector.asData()); break;
- case ARRAY: injectArray(inserter, inspector, guard); break;
- case OBJECT: injectObject(inserter, inspector, guard); break;
- default: throw new IllegalArgumentException("Unknown type " + inspector.type());
- }
+ inspector.accept(new Visitor() {
+ @Override public void visitInvalid() { }
+ @Override public void visitNix() { inserter.insertNIX(); }
+ @Override public void visitBool(boolean bit) { inserter.insertBOOL(bit); }
+ @Override public void visitLong(long l) { inserter.insertLONG(l); }
+ @Override public void visitDouble(double d) { inserter.insertDOUBLE(d); }
+ @Override public void visitString(String str) { inserter.insertSTRING(str); }
+ @Override public void visitString(byte[] utf8) { inserter.insertSTRING(utf8); }
+ @Override public void visitData(byte[] data) { inserter.insertDATA(data); }
+
+ @Override
+ public void visitArray(Inspector arr) {
+ Cursor cursor = inserter.insertARRAY();
+ ArrayTraverser arrayTraverser = new NestedInjector(cursor, guard != null ? guard : cursor);
+ arr.traverse(arrayTraverser);
+ }
+ @Override
+ public void visitObject(Inspector obj) {
+ Cursor cursor = inserter.insertOBJECT();
+ ObjectTraverser objectTraverser = new NestedInjector(cursor, guard != null ? guard : cursor);
+ obj.traverse(objectTraverser);
+ }
+ });
}
private void injectArray(Inserter inserter, Inspector inspector, Inspector guard) {
@@ -65,9 +77,7 @@ public class Injector {
return;
}
- var inserter = new ArrayInserter();
- inserter.adjust(cursor);
- injectValue(inserter, inspector, guard);
+ injectValue(new ArrayInserter(cursor), inspector, guard);
}
@Override
@@ -76,9 +86,7 @@ public class Injector {
return;
}
- var inserter = new ObjectInserter();
- inserter.adjust(cursor, name);
- injectValue(inserter, inspector, guard);
+ injectValue(new ObjectInserter(cursor, name), inspector, guard);
}
}
}