예제 #1
0
                /// <summary>
                /// Converts a value to a string based on this ParameterTemplate's type.
                /// </summary>
                public string ValueToString(object val)
                {
                    if (EnumEntries != null)
                    {
                        if (EnumEntries.Values.Contains(val))
                        {
                            return(EnumEntries.First(x => x.Value.Equals(val)).Key);
                        }
                    }

                    switch (Type)
                    {
                    case ParamType.aob: return(string.Join(" ", ((byte[])val).Select(b => b.ToString("X2"))));

                    case ParamType.x8: return(((byte)val).ToString("X2"));

                    case ParamType.x16: return(((ushort)val).ToString("X4"));

                    case ParamType.x32: return(((uint)val).ToString("X8"));

                    case ParamType.x64: return(((ulong)val).ToString("X16"));

                    case ParamType.b: return(((bool)val) ? "True" : "False");

                    default: return(val.ToString());
                    }
                }
        public override bool Parse()
        {
            bool result = false;

            if (_source.Attributes != null)
            {
                UniqueId = _source.Attributes["uniqueID"].InnerXml;
                Name     = _source.Attributes["name"].InnerXml;
            }

            foreach (XmlNode childNode in _source)
            {
                if (childNode.Name == "dataType")
                {
                    DataType = new XddDataType(childNode, _dataTypeList);

                    result = DataType.Parse();
                }
                else if (childNode.Name == "enumEntry")
                {
                    var enumEntry = new XddEnumEntry(childNode);

                    result = enumEntry.Parse();

                    EnumEntries.Add(enumEntry);
                }
            }

            return(result);
        }
예제 #3
0
                /// <summary>
                /// Converts a string to a value based on this ParameterTemplate's type.
                /// </summary>
                public object StringToValue(string str)
                {
                    if (str == null)
                    {
                        return(null);
                    }

                    IEnumerable <string> GetArrayFromSingleLineString(string s)
                    {
                        return(s.Split(' ')
                               .Where(st => !string.IsNullOrWhiteSpace(st))
                               .Select(st => st.Trim()));
                    }

                    List <string> GetArrayFromString(string s)
                    {
                        List <string> result = new List <string>();
                        var           lines  = s.Split('\n');

                        foreach (var l in lines)
                        {
                            result.AddRange(GetArrayFromSingleLineString(l.Replace("\r", "").Replace("\n", "").Replace("\t", "")));
                        }
                        return(result);
                    }

                    // Convert a string enum value to the actual numeric value.
                    if (EnumEntries != null)
                    {
                        if (EnumEntries.ContainsKey(str))
                        {
                            str = EnumEntries[str].ToString();
                        }
                    }

                    switch (Type)
                    {
                    case ParamType.aob: return(GetArrayFromString(str).Select(b => byte.Parse(b, System.Globalization.NumberStyles.HexNumber)).ToArray());

                    case ParamType.u8: return(byte.Parse(str));

                    case ParamType.x8: return(byte.Parse(str, System.Globalization.NumberStyles.HexNumber));

                    case ParamType.s8: return(sbyte.Parse(str));

                    case ParamType.u16: return(ushort.Parse(str));

                    case ParamType.x16: return(ushort.Parse(str, System.Globalization.NumberStyles.HexNumber));

                    case ParamType.s16: return(short.Parse(str));

                    case ParamType.u32: return(uint.Parse(str));

                    case ParamType.x32: return(uint.Parse(str, System.Globalization.NumberStyles.HexNumber));

                    case ParamType.s32: return(int.Parse(str));

                    case ParamType.u64: return(ulong.Parse(str));

                    case ParamType.x64: return(ulong.Parse(str, System.Globalization.NumberStyles.HexNumber));

                    case ParamType.s64: return(long.Parse(str));

                    case ParamType.f32: return(float.Parse(str));

                    case ParamType.f64: return(double.Parse(str));

                    case ParamType.b:
                        string toLower = str.ToLower().Trim();
                        if (toLower == "true")
                        {
                            return(true);
                        }
                        else if (toLower == "false")
                        {
                            return(false);
                        }
                        else
                        {
                            throw new FormatException("Boolean value must be either 'True' or 'False', case-insensitive.");
                        }

                    default: throw new Exception($"Invalid ParamTemplate ParamType: {Type.ToString()}");
                    }
                }