conversions between PipelineOps and RPC schema

This commit is contained in:
Vaci Koblizek 2020-09-27 23:14:43 +01:00
parent f999265165
commit 0d03705cfc

View file

@ -22,4 +22,39 @@ final class PipelineOp {
static PipelineOp PointerField(short pointerIndex) { static PipelineOp PointerField(short pointerIndex) {
return new PipelineOp(Type.GET_POINTER_FIELD, pointerIndex); return new PipelineOp(Type.GET_POINTER_FIELD, pointerIndex);
} }
static void FromPipelineOps(PipelineOp[] ops, RpcProtocol.PromisedAnswer.Builder builder) {
var transforms = builder.initTransform(ops.length);
for (int ii = 0; ii < ops.length; ++ii) {
switch (ops[ii].type) {
case NOOP:
transforms.get(ii).setNoop(null);
break;
case GET_POINTER_FIELD:
transforms.get(ii).setGetPointerField(ops[ii].pointerIndex);
break;
}
}
}
static PipelineOp[] ToPipelineOps(RpcProtocol.PromisedAnswer.Reader reader) {
var transforms = reader.getTransform();
var ops = new PipelineOp[transforms.size()];
for (int ii = 0; ii < ops.length; ++ii) {
var transform = transforms.get(ii);
switch (transform.which()) {
case NOOP:
ops[ii] = Noop();
break;
case GET_POINTER_FIELD:
ops[ii] = PointerField(transform.getGetPointerField());
break;
default:
// TODO improve error handling here
// Unsupported pipeline ops
return null;
}
}
return ops;
}
} }