public static RCOperator ReadOperator(RCActivator activator, RCArray <byte> data, ref int start) { int count = BitConverter.ToInt32(data._source, start); start += sizeof(int); RCValue left = null; RCValue right = null; string name = null; if (count == 2) { name = Binary.ReadScalarString(data, ref start); right = Binary.DoParse(activator, data, ref start); } else if (count == 3) { left = Binary.DoParse(activator, data, ref start); name = Binary.ReadScalarString(data, ref start); right = Binary.DoParse(activator, data, ref start); } else { throw new Exception("count of an operator must always be 2 or 3."); } return(activator.New(name, left, right)); }
public static RCBlock ReadBlock(RCActivator activator, RCArray <byte> data, ref int start) { int count = BitConverter.ToInt32(data._source, start); start += sizeof(int); RCBlock result = null; for (int i = 0; i < count; ++i) { string name = Binary.ReadScalarString(data, ref start); string evaluator = Binary.ReadScalarString(data, ref start); RCValue val = Binary.DoParse(activator, data, ref start); result = new RCBlock(result, name, evaluator, val); } return(result); }