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); }
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); }
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); }
/// <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; }
/// <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); }
void InsertValue(BerTag tag, GlowValue value) { InternalTools.InsertValue(EnsureContentsAndRemove(tag), tag, value); }
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); }