Пример #1
0
        public static GlowValue GetValue(EmberNode leaf)
        {
            var value = null as GlowValue;

            switch (leaf.BerTypeNumber)
            {
            case BerType.Integer:
                value = new GlowValue(GetIntegerNodeValue(leaf));
                break;

            case BerType.Real:
                value = new GlowValue(((RealEmberLeaf)leaf).Value);
                break;

            case BerType.UTF8String:
                value = new GlowValue(((StringEmberLeaf)leaf).Value);
                break;

            case BerType.Boolean:
                value = new GlowValue(((BooleanEmberLeaf)leaf).Value);
                break;

            case BerType.OctetString:
                value = new GlowValue(((OctetStringEmberLeaf)leaf).Value);
                break;

            case BerType.Null:
                value = GlowValue.Null;
                break;
            }

            return(value);
        }
Пример #2
0
        public static void InsertValue(EmberContainer container, BerTag tag, GlowValue value)
        {
            var leaf = ValueToLeaf(tag, value);

            if (leaf == null)
            {
                throw new ArgumentException("Type not supported");
            }

            container.Insert(leaf);
        }
Пример #3
0
        public static EmberNode ValueToLeaf(BerTag tag, GlowValue value)
        {
            switch (value.Type)
            {
            case GlowParameterType.Integer: return(new LongEmberLeaf(tag, value.Integer));

            case GlowParameterType.Real:    return(new RealEmberLeaf(tag, value.Real));

            case GlowParameterType.String:  return(new StringEmberLeaf(tag, value.String));

            case GlowParameterType.Boolean: return(new BooleanEmberLeaf(tag, value.Boolean));

            case GlowParameterType.Octets:  return(new OctetStringEmberLeaf(tag, value.Octets));
            }

            return(null);
        }
Пример #4
0
        /// <summary>
        /// Tries to parse a GlowValue value of the specified type from a string.
        /// </summary>
        /// <param name="str">The string to parse.</param>
        /// <param name="type">The expected parameter type of the value. Must be either GlowParameterType.Integer,
        /// GlowParameterType.Real, GlowParameterType.String, GlowParameterType.Boolean or GlowParameterType.Octets.</param>
        /// <param name="provider">The string format to use.</param>
        /// <param name="value">If successful, receives the parsed value.</param>
        /// <returns>True if the passed string could be parsed, otherwise false.</returns>
        public static bool TryParse(string str, int type, IFormatProvider provider, out GlowValue value)
        {
            if(str == null)
            throw new ArgumentNullException("str");

             switch(type)
             {
            case GlowParameterType.Integer:
            {
               long integer;

               if(Int64.TryParse(str, NumberStyles.Any, provider, out integer))
               {
                  value = new GlowValue(integer);
                  return true;
               }

               break;
            }

            case GlowParameterType.Real:
            {
               double real;

               if(Double.TryParse(str, NumberStyles.Any, provider, out real))
               {
                  value = new GlowValue(real);
                  return true;
               }

               break;
            }

            case GlowParameterType.String:
               value = new GlowValue(str);
               return true;

            case GlowParameterType.Boolean:
            {
               bool boolean;

               if(Boolean.TryParse(str, out boolean))
               {
                  value = new GlowValue(boolean);
                  return true;
               }

               break;
            }

            case GlowParameterType.Octets:
            {
               if((str.Length & 1) == 0) // dividable by 2
               {
                  var octets = new List<byte>();
                  var success = true;

                  for(int index = 0; index < str.Length; index += 2)
                  {
                     var sub = str.Substring(index, 2);
                     byte b;

                     if(Byte.TryParse(sub, NumberStyles.HexNumber, provider, out b))
                     {
                        octets.Add(b);
                     }
                     else
                     {
                        success = false;
                        break;
                     }
                  }

                  if(success)
                  {
                     value = new GlowValue(octets.ToArray());
                     return true;
                  }
               }

               break;
            }

            default:
               throw new ArgumentException("Unsupported type");
             }

             value = null;
             return false;
        }
Пример #5
0
        /// <summary>
        /// Tries to parse a GlowValue value of the specified type from a string.
        /// </summary>
        /// <param name="str">The string to parse.</param>
        /// <param name="type">The expected parameter type of the value. Must be either GlowParameterType.Integer,
        /// GlowParameterType.Real, GlowParameterType.String, GlowParameterType.Boolean or GlowParameterType.Octets.</param>
        /// <param name="provider">The string format to use.</param>
        /// <param name="value">If successful, receives the parsed value.</param>
        /// <returns>True if the passed string could be parsed, otherwise false.</returns>
        public static bool TryParse(string str, int type, IFormatProvider provider, out GlowValue value)
        {
            if (str == null)
            {
                throw new ArgumentNullException("str");
            }

            switch (type)
            {
            case GlowParameterType.Integer:
            {
                long integer;

                if (Int64.TryParse(str, NumberStyles.Any, provider, out integer))
                {
                    value = new GlowValue(integer);
                    return(true);
                }

                break;
            }

            case GlowParameterType.Real:
            {
                double real;

                if (Double.TryParse(str, NumberStyles.Any, provider, out real))
                {
                    value = new GlowValue(real);
                    return(true);
                }

                break;
            }

            case GlowParameterType.String:
                value = new GlowValue(str);
                return(true);

            case GlowParameterType.Boolean:
            {
                bool boolean;

                if (Boolean.TryParse(str, out boolean))
                {
                    value = new GlowValue(boolean);
                    return(true);
                }

                break;
            }

            case GlowParameterType.Octets:
            {
                if ((str.Length & 1) == 0) // dividable by 2
                {
                    var octets  = new List <byte>();
                    var success = true;

                    for (int index = 0; index < str.Length; index += 2)
                    {
                        var  sub = str.Substring(index, 2);
                        byte b;

                        if (Byte.TryParse(sub, NumberStyles.HexNumber, provider, out b))
                        {
                            octets.Add(b);
                        }
                        else
                        {
                            success = false;
                            break;
                        }
                    }

                    if (success)
                    {
                        value = new GlowValue(octets.ToArray());
                        return(true);
                    }
                }

                break;
            }

            case GlowParameterType.None:
                value = GlowValue.Null;
                return(true);

            default:
                throw new ArgumentException("Unsupported type");
            }

            value = null;
            return(false);
        }
Пример #6
0
 void InsertValue(BerTag tag, GlowValue value)
 {
     InternalTools.InsertValue(EnsureContentsAndRemove(tag), tag, value);
 }
Пример #7
0
 void InsertValue(BerTag tag, GlowValue value)
 {
     InternalTools.InsertValue(EnsureContentsAndRemove(tag), tag, value);
 }
Пример #8
0
            void CreateGlowParameter(Item item, int[] path, int? number, int fields, GlowElementCollectionBase parent)
            {
                var glowValue = null as GlowValue;
                var isWriteable = false;

                if((fields & GlowFieldFlags.Value) != 0)
                {
                   var valueKind = item.Parent.Key.GetValueKind(item.Name);
                   var value = item.Parent.Key.GetValue(item.Name);

                   switch(valueKind)
                   {
                  case RegistryValueKind.Binary:
                     glowValue = new GlowValue((byte[])value);
                     break;
                  case RegistryValueKind.DWord:
                     glowValue = new GlowValue((long)(int)value);
                     isWriteable = true;
                     break;
                  case RegistryValueKind.ExpandString:
                     glowValue = new GlowValue((string)value);
                     break;
                  case RegistryValueKind.MultiString:
                     glowValue = new GlowValue(String.Join("\n", (string[])value));
                     break;
                  case RegistryValueKind.QWord:
                     glowValue = new GlowValue((long)value);
                     isWriteable = true;
                     break;
                  case RegistryValueKind.String:
                     glowValue = new GlowValue((string)value);
                     isWriteable = true;
                     break;
                   }
                }

                if(number != null)
                   path = path.Concat(new[] { number.Value }).ToArray();

                var glow = new GlowQualifiedParameter(path);

                if((fields & GlowFieldFlags.Identifier) != 0)
                   glow.Identifier = item.Identifier;

                if((fields & GlowFieldFlags.Description) != 0
                && String.IsNullOrEmpty(item.Name) == false)
                   glow.Description = item.Name;

                if(fields == GlowFieldFlags.All
                && isWriteable)
                   glow.Access = GlowAccess.ReadWrite;

                if(glowValue != null)
                   glow.Value = glowValue;

                parent.Insert(glow);
            }