Exemplo n.º 1
0
        // Read an enum type
        public bool TryGetField(FieldDecl fieldDecl, out byte value)
        {
            FieldDefinition fieldDefinition = GetFieldDefinition(fieldDecl);

            if (fieldDefinition != null && fieldDefinition.FieldType == 0x00)
            {
                value = _binaryReader.ReadByte();
                if (value == 0xff)
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                value = 0xff;
                return(false);
            }
        }
Exemplo n.º 2
0
        public bool TryGetField(FieldDecl fieldDecl, out double value)
        {
            value = 0;
            FieldDefinition fieldDefinition = GetFieldDefinition(fieldDecl);

            if (fieldDefinition == null)
            {
                return(false);
            }
            else
            {
                // We will return false if we encounter an invalid value in the raw data.
                // The caller needs to interpret invalid values the same as missing values.
                if (fieldDefinition.FieldType == 0x01)
                {
                    sbyte raw = _binaryReader.ReadSByte();
                    if (raw == 0x7f)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x02 || fieldDefinition.FieldType == 0x0A)
                {
                    byte raw = _binaryReader.ReadByte();
                    if (raw == 0xff)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x83)
                {
                    Int16 raw = _binaryReader.ReadInt16();
                    if (raw == 0x7fff)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x84 || fieldDefinition.FieldType == 0x8B)
                {
                    UInt16 raw = _binaryReader.ReadUInt16();
                    if (raw == 0xffff)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x85)
                {
                    Int32 raw = _binaryReader.ReadInt32();
                    if (raw == 0x7fffffff)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x86 || fieldDefinition.FieldType == 0x8C)
                {
                    UInt32 raw = _binaryReader.ReadUInt32();
                    if (raw == 0xffffffff)
                    {
                        return(false);
                    }
                    value = Convert.ToDouble(raw);
                }
                else if (fieldDefinition.FieldType == 0x88)
                {
                    // TODO: don't know how to handle floating point invalid values.
                    // I think I need to peek the raw bits rather than try to interpret
                    value = Convert.ToDouble(_binaryReader.ReadSingle());
                }
                else if (fieldDefinition.FieldType == 0x89)
                {
                    // TODO: don't know how to handle floating point invalid values
                    // I think I need to peek the raw bits rather than try to interpret
                    value = Convert.ToDouble(_binaryReader.ReadDouble());
                }
                else
                {
                    value = 0;
                    return(false);
                }
                return(true);
            }
        }