Exemplo n.º 1
0
        static object Evaluate(string expression, PrimitiveDsdlType expectedReturnType)
        {
            var evaluator = new DsdlConstExprEvaluator(expectedReturnType);
            var result    = evaluator.Evaluate(expression);

            if (result is string stringResult && bool.TryParse(stringResult, out var boolResult))
            {
                return(boolResult);
            }
            return(result);
        }
Exemplo n.º 2
0
        object ReadPrimitiveType(BitStreamReader reader, PrimitiveDsdlType t)
        {
            switch (t)
            {
            case BooleanDsdlType _:
                return(BitSerializer.ReadBoolean(reader, t.MaxBitlen));

            case IntDsdlType _:
                return(BitSerializer.ReadIntTyped(reader, t.MaxBitlen));

            case UIntDsdlType _:
                return(BitSerializer.ReadUIntTyped(reader, t.MaxBitlen));

            case FloatDsdlType fdt:
                return(ReadFloatPrimitiveType(reader, fdt));

            default:
                throw new ArgumentOutOfRangeException(nameof(t));
            }
        }
Exemplo n.º 3
0
        static string GetCSharpType(PrimitiveDsdlType type)
        {
            switch (type)
            {
            case BooleanDsdlType _:
                return("bool");

            case IntDsdlType t:
                if (t.MaxBitlen <= 8)
                {
                    return("sbyte");
                }
                else if (t.MaxBitlen <= 16)
                {
                    return("short");
                }
                else if (t.MaxBitlen <= 32)
                {
                    return("int");
                }
                else if (t.MaxBitlen <= 64)
                {
                    return("long");
                }
                else
                {
                    throw new InvalidOperationException();
                }

            case UIntDsdlType t:
                if (t.MaxBitlen <= 8)
                {
                    return("byte");
                }
                else if (t.MaxBitlen <= 16)
                {
                    return("ushort");
                }
                else if (t.MaxBitlen <= 32)
                {
                    return("uint");
                }
                else if (t.MaxBitlen <= 64)
                {
                    return("ulong");
                }
                else
                {
                    throw new InvalidOperationException();
                }

            case FloatDsdlType t:
                if (t.MaxBitlen == 16 || t.MaxBitlen == 32)
                {
                    return("float");
                }
                else if (t.MaxBitlen == 64)
                {
                    return("double");
                }
                else
                {
                    throw new InvalidOperationException();
                }

            default:
                throw new InvalidOperationException();
            }
        }