<M> void addBuilder(final JSONBuilder<?, M> builder, final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); M member = accessor.get(source); if (member == null) { kw.Null(writer); } else { builder.render(writer, member); } } }); }
void addInteger(final ToBoolFunction<T> isNull, final ToLongFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { Appendables.appendValue(writer, func.applyAsLong(source)); } } }); }
<E extends Enum<E>> void addEnumOrdinal(final ToEnumFunction<T, E> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); E v = func.applyAsEnum(source); if (v == null) { kw.Null(writer); } else { Appendables.appendValue(writer, v.ordinal()); } } }); }
void endSelect(final int count, final ToBoolFunction<T>[] branches, final JSONBuilder<?, T>[] cases) { consumeDeclaredMemberName(); final StringTemplateScript<T>[] caseScripts = new StringTemplateScript[count]; for (int i = 0; i < count; i++) { final JSONBuilder<?, T> builder = cases[i]; caseScripts[i] = builder; } scripts.add(caseScripts, new StringTemplateBranching<T>() { @Override public int branch(T source) { for (int i = 0; i < count; i++) { if (branches[i].applyAsBool(source)) { return i; } } return -1; } }); }
void addDecimal(final int precision, final ToBoolFunction<T> isNull, final ToDoubleFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { double v = func.applyAsDouble(source); Appendables.appendDecimalValue(writer, (long) (v * PipeWriter.powd[64 + precision]), (byte) (precision * -1)); } } }); }
void endSelect(final int count, final ToBoolFunction<T>[] branches, final JSONBuilder<?, T>[] cases) { consumeDeclaredMemberName(); final StringTemplateScript<T>[] caseScripts = new StringTemplateScript[count]; for (int i = 0; i < count; i++) { final JSONBuilder<?, T> builder = cases[i]; caseScripts[i] = builder; } scripts.add(caseScripts, new StringTemplateBranching<T>() { @Override public int branch(T source) { for (int i = 0; i < count; i++) { if (branches[i].applyAsBool(source)) { return i; } } return -1; } }); }
void addNull() { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(createNullObjectScript(declaredMemberName)); }
void addNull() { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(createNullObjectScript(declaredMemberName)); }
void addNull() { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(createNullObjectScript(declaredMemberName)); }
void addInteger(final ToBoolFunction<T> isNull, final ToLongFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { Appendables.appendValue(writer, func.applyAsLong(source), false); } } }); }
<M> void addBuilder(final JSONBuilder<?, M> builder, final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); M member = accessor.get(source); if (member == null) { kw.Null(writer); } else { builder.render(writer, member); } } }); }
void addInteger(final ToBoolFunction<T> isNull, final ToLongFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { Appendables.appendValue(writer, func.applyAsLong(source), false); } } }); }
<E extends Enum<E>> void addEnumOrdinal(final ToEnumFunction<T, E> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); E v = func.applyAsEnum(source); if (v == null) { kw.Null(writer); } else { Appendables.appendValue(writer, v.ordinal()); } } }); }
<E extends Enum<E>> void addEnumOrdinal(final ToEnumFunction<T, E> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); E v = func.applyAsEnum(source); if (v == null) { kw.Null(writer); } else { Appendables.appendValue(writer, v.ordinal()); } } }); }
void addDecimal(final int precision, final ToBoolFunction<T> isNull, final ToDoubleFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { double v = func.applyAsDouble(source); Appendables.appendDecimalValue(writer, (long) (v * PipeWriter.powd[64 + precision]), (byte) (precision * -1)); } } }); }
<M> void addBuilder(final JSONBuilder<?, M> builder, final ToMemberFunction<T, M> accessor) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); M member = accessor.get(source); if (member == null) { kw.Null(writer); } else { builder.render(writer, member); } } }); }
void addDecimal(final int precision, final ToBoolFunction<T> isNull, final ToDoubleFunction<T> func) { final byte[] declaredMemberName = consumeDeclaredMemberName(); scripts.add(new StringTemplateScript<T>() { @Override public void render(final AppendableByteWriter writer, T source) { prefixObjectMemberName(declaredMemberName, depth, writer); if (isNull != null && isNull.applyAsBool(source)) { kw.Null(writer); } else { double v = func.applyAsDouble(source); Appendables.appendDecimalValue(writer, (long) (v * PipeWriter.powd[64 + precision]), (byte) (precision * -1)); } } }); }
JSONBuilder<R, T> beginSelect() { final byte[] declaredMemberName = consumeDeclaredMemberName(); JSONBuilder<R, T> builder = new JSONBuilder<R, T>(new StringTemplateBuilder<T>(), kw, depth, root); builder.declaredMemberName = declaredMemberName; builder.ors = ors; this.scripts.add(builder); return builder; }
JSONBuilder<R, T> beginSelect() { final byte[] declaredMemberName = consumeDeclaredMemberName(); JSONBuilder<R, T> builder = new JSONBuilder<R, T>(new StringTemplateBuilder<T>(), kw, depth, root); builder.declaredMemberName = declaredMemberName; builder.ors = ors; this.scripts.add(builder); return builder; }
JSONBuilder<R, T> beginSelect() { final byte[] declaredMemberName = consumeDeclaredMemberName(); JSONBuilder<R, T> builder = new JSONBuilder<R, T>(new StringTemplateBuilder<T>(), kw, depth, root); builder.declaredMemberName = declaredMemberName; builder.ors = ors; this.scripts.add(builder); return builder; }