Exemple #1
0
 public static void WriteReference(RCArray <byte> result, RCReference reference)
 {
     result.Write((byte)'r');
     WriteScalarInt(result, reference.Parts.Count);
     for (int i = 0; i < reference.Parts.Count; ++i)
     {
         Binary.WriteScalarString(reference.Parts[i], result);
     }
 }
Exemple #2
0
        public static void WriteOperator(RCArray <byte> result, RCOperator op)
        {
            // Pre-order traversal of the expression tree.
            result.Write((byte)'o');
            int count = op.Left == null ? 2 : 3;

            WriteScalarInt(result, count);
            if (op.Left != null)
            {
                op.Left.ToByte(result);
            }
            Binary.WriteScalarString(op.Name, result);
            op.Right.ToByte(result);
        }
Exemple #3
0
 public static void WriteBlock(RCArray <byte> result, RCBlock block)
 {
     // Pre-order traversal of the expression tree.
     result.Write((byte)'k');
     WriteScalarInt(result, block.Count);
     for (int i = 0; i < block.Count; ++i)
     {
         RCBlock name = block.GetName(i);
         Binary.WriteScalarString(name.Name, result);
         // Binary.WriteScalarString (RCEvaluator.For (name.Evaluator), result);
         Binary.WriteScalarString(name.Evaluator.Symbol, result);
         name.Value.ToByte(result);
     }
 }
Exemple #4
0
        public static void WriteScalarSymbol(RCArray <byte> result, RCSymbolScalar scalar)
        {
            // This is not going to be a triumph of efficiency.
            // I am considering rewriting RCSymbolScalar so that it stores all of its
            // data as an array of bytes.  Then the ToByte operation would just
            // return the internal representation.
            for (int i = 0; i < scalar.Length; ++i)
            {
                object part = scalar.Part(i);
                char   type = RCVectorBase.EmptyOf(part.GetType()).TypeCode;
                result.Write((byte)type);
                switch (type)
                {
                case 'l':
                    result.Write(BitConverter.GetBytes((long)part));
                    break;

                case 'd':
                    result.Write(BitConverter.GetBytes((double)part));
                    break;

                case 'm':
                    Binary.WriteScalarDecimal((decimal)part, result);
                    break;

                case 'b':
                    result.Write(BitConverter.GetBytes((bool)part));
                    break;

                case 's':
                    Binary.WriteScalarString((string)part, result);
                    break;

                default: throw new Exception("Unknown type:" + type + " found in symbol");
                }
            }
        }