EmberSet GetContents() { if (_contents == null) { _contents = this[ContentsTag] as EmberSet; } return(_contents); }
/// <summary> /// Creates a container of an application-defined type with Set semantics /// </summary> /// <param name="type">Application-defined type. BerType.ApplicationFlag can be omitted.</param> public static EmberSet CreateApplicationDefinedSet(BerTag tag, uint type, EmberContainer parent) { var set = new EmberSet(tag, parent) { BerTypeNumber = type | BerType.ApplicationFlag }; return set; }
protected EmberSet EnsureContents() { if (_contents == null) { var tag = ContentsTag; _contents = this[tag] as EmberSet; if (_contents == null) { _contents = new EmberSet(tag, this); } } return(_contents); }
object IEmberVisitor <XmlExportState, object> .Visit(EmberSet node, XmlExportState state) { return(WriteContainer(node, state)); }
void Test_DOM() { Console.WriteLine("\r\n------------------------ DOM"); EmberContainer container1; EmberContainer frame = new EmberFrame(); container1 = new EmberSet(new BerTag(DefaultClass, 0)); container1.Insert(new BerTag(DefaultClass, 0), -1); container1.Insert(new BerTag(DefaultClass, 1), 128); container1.Insert(new BerTag(DefaultClass, 2), -128); container1.Insert(new BerTag(DefaultClass, 3), 255); container1.Insert(new BerTag(DefaultClass, 4), -255); container1.Insert(new BerTag(DefaultClass, 5), 12345); container1.Insert(new BerTag(DefaultClass, 6), -12345); container1.Insert(new BerTag(DefaultClass, 7), 16384); container1.Insert(new BerTag(DefaultClass, 8), -16384); container1.Insert(new BerTag(DefaultClass, 9), 65535); container1.Insert(new BerTag(DefaultClass, 10), -65535); container1.Insert(new BerTag(DefaultClass, 11), 0); container1.Insert(new BerTag(DefaultClass, 12), 127); container1.Insert(new BerTag(DefaultClass, 13), -127); container1.Insert(new BerTag(DefaultClass, 1111222), 0xFFFFFFFF); container1.InsertOid(new BerTag(DefaultClass, 14), new int[] { 1, 3, 6, 0 }); container1.InsertOid(new BerTag(DefaultClass, 15), new int[] { 1 }); container1.InsertRelativeOid(new BerTag(DefaultClass, 16), new int[] { 1, 2, 3, 4, 5, 6 }); frame.Insert(container1); container1 = new EmberSequence(new BerTag(DefaultClass, 1)); container1.Insert(new BerTag(DefaultClass, 3), -0.54321); container1.Insert(new BerTag(DefaultClass, 5), "Wuppdich"); var appDefined = EmberApplicationInterface.CreateApplicationDefinedSequence(new BerTag(BerClass.Application, 889), 2, container1); appDefined.Insert(new BerTag(DefaultClass, 100), true); frame.Insert(container1); var xml1 = GetXml(frame); var output = new BerMemoryOutput(); frame.Encode(output); var memory = output.ToArray(); using (var stream = new FileStream(@"N:\Temp\test.ber", FileMode.Create, FileAccess.Write)) stream.Write(memory, 0, memory.Length); var input = new BerMemoryInput(memory); var stopwatch = new Stopwatch(); stopwatch.Start(); var asyncReader = new AsyncFrameReader(this); asyncReader.ReadBytes(output.Memory); var loadedFrame = asyncReader.DetachRoot(); stopwatch.Stop(); Console.WriteLine("load tree: {0}ms", stopwatch.ElapsedMilliseconds); var xml2 = GetXml(loadedFrame); Console.WriteLine(xml1); Console.WriteLine(xml2); Debug.Assert(xml1 == xml2); }
EmberNode CreateNode(string tagName, string typeName) { BerTag tag; EmberNode node = null; if (BerTag.TryParse(tagName, out tag) && typeName != null) { uint type; if (BerDefinitions.GetTypeFromName(typeName, true, out type)) { switch (type) { case BerType.Null: { node = new NullEmberLeaf(tag); break; } case BerType.Boolean: { bool value; if (bool.TryParse(_reader.ReadContentAsString(), out value)) { node = new BooleanEmberLeaf(tag, value); } break; } case BerType.Integer: { long value; if (long.TryParse(_reader.ReadContentAsString(), out value)) { if ((ulong)value > int.MaxValue) { node = new LongEmberLeaf(tag, value); } else { node = new IntegerEmberLeaf(tag, (int)value); } } break; } case BerType.Real: { double value; if (double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value)) { node = new RealEmberLeaf(tag, value); } break; } case BerType.UTF8String: { node = new StringEmberLeaf(tag, _reader.ReadContentAsString()); break; } case BerType.OctetString: { var octets = System.Convert.FromBase64String(_reader.ReadContentAsString()); node = new OctetStringEmberLeaf(tag, octets); break; } #pragma warning disable 618 // EmberFrame is obsolete case BerType.Sequence: { if (tag == Legacy.EmberFrame.FrameTag) { node = new Legacy.EmberFrame(); } else { node = new EmberSequence(tag); } break; } #pragma warning restore 618 case BerType.Set: { node = new EmberSet(tag); break; } default: { if (_application != null) { node = _application.CreateNodeFromXml(type, tag, _reader); } if (node == null) { Debug.WriteLine("Unknown BER value type: " + type); node = new EmberContainer(tag, null, type); } break; } } } } return(node); }
void Test_DOM() { Console.WriteLine("\r\n------------------------ DOM"); EmberContainer container1; EmberContainer frame = new EmberFrame(); container1 = new EmberSet(new BerTag(DefaultClass, 0)); container1.Insert(new BerTag(DefaultClass, 0), -1); container1.Insert(new BerTag(DefaultClass, 1), 128); container1.Insert(new BerTag(DefaultClass, 2), -128); container1.Insert(new BerTag(DefaultClass, 3), 255); container1.Insert(new BerTag(DefaultClass, 4), -255); container1.Insert(new BerTag(DefaultClass, 5), 12345); container1.Insert(new BerTag(DefaultClass, 6), -12345); container1.Insert(new BerTag(DefaultClass, 7), 16384); container1.Insert(new BerTag(DefaultClass, 8), -16384); container1.Insert(new BerTag(DefaultClass, 9), 65535); container1.Insert(new BerTag(DefaultClass, 10), -65535); container1.Insert(new BerTag(DefaultClass, 11), 0); container1.Insert(new BerTag(DefaultClass, 12), 127); container1.Insert(new BerTag(DefaultClass, 13), -127); container1.Insert(new BerTag(DefaultClass, 1111222), 0xFFFFFFFF); container1.InsertOid(new BerTag(DefaultClass, 14), new int[] { 1, 3, 6, 0 }); container1.InsertOid(new BerTag(DefaultClass, 15), new int[] { 1 }); container1.InsertRelativeOid(new BerTag(DefaultClass, 16), new int[] { 1, 2, 3, 4, 5, 6 }); frame.Insert(container1); container1 = new EmberSequence(new BerTag(DefaultClass, 1)); container1.Insert(new BerTag(DefaultClass, 3), -0.54321); container1.Insert(new BerTag(DefaultClass, 5), "Wuppdich"); var appDefined = EmberApplicationInterface.CreateApplicationDefinedSequence(new BerTag(BerClass.Application, 889), 2, container1); appDefined.Insert(new BerTag(DefaultClass, 100), true); frame.Insert(container1); var xml1 = GetXml(frame); var output = new BerMemoryOutput(); frame.Encode(output); var memory = output.ToArray(); using(var stream = new FileStream(@"N:\Temp\test.ber", FileMode.Create, FileAccess.Write)) stream.Write(memory, 0, memory.Length); var input = new BerMemoryInput(memory); var stopwatch = new Stopwatch(); stopwatch.Start(); var asyncReader = new AsyncFrameReader(this); asyncReader.ReadBytes(output.Memory); var loadedFrame = asyncReader.DetachRoot(); stopwatch.Stop(); Console.WriteLine("load tree: {0}ms", stopwatch.ElapsedMilliseconds); var xml2 = GetXml(loadedFrame); Console.WriteLine(xml1); Console.WriteLine(xml2); Debug.Assert(xml1 == xml2); }
EmberNode CreateNode(string tagName, string typeName) { BerTag tag; EmberNode node = null; if(BerTag.TryParse(tagName, out tag) && typeName != null) { uint type; if(BerDefinitions.GetTypeFromName(typeName, true, out type)) { switch(type) { case BerType.Boolean: { bool value; if(bool.TryParse(_reader.ReadContentAsString(), out value)) node = new BooleanEmberLeaf(tag, value); break; } case BerType.Integer: { long value; if(long.TryParse(_reader.ReadContentAsString(), out value)) { if((ulong)value > int.MaxValue) node = new LongEmberLeaf(tag, value); else node = new IntegerEmberLeaf(tag, (int)value); } break; } case BerType.Real: { double value; if(double.TryParse(_reader.ReadContentAsString(), NumberStyles.Float, XmlExport.FormatProvider, out value)) node = new RealEmberLeaf(tag, value); break; } case BerType.UTF8String: { node = new StringEmberLeaf(tag, _reader.ReadContentAsString()); break; } case BerType.OctetString: { var octets = System.Convert.FromBase64String(_reader.ReadContentAsString()); node = new OctetStringEmberLeaf(tag, octets); break; } #pragma warning disable 618 // EmberFrame is obsolete case BerType.Sequence: { if(tag == Legacy.EmberFrame.FrameTag) node = new Legacy.EmberFrame(); else node = new EmberSequence(tag); break; } #pragma warning restore 618 case BerType.Set: { node = new EmberSet(tag); break; } default: { if(_application != null) node = _application.CreateNodeFromXml(type, tag, _reader); if(node == null) { Debug.WriteLine("Unknown BER value type: " + type); node = new EmberContainer(tag, null, type); } break; } } } } return node; }
/// <summary> /// Creates an EmberSet object with the passed BerType. Convenience method /// to be called from an overridden CreateNodeFromXml method. /// </summary> protected EmberNode CreateSet(uint type, BerTag tag, XmlReader reader) { var node = new EmberSet(tag, null, true) { BerTypeNumber = type }; return node; }
/// <summary> /// Creates an EmberSet object with the passed BerType. Convenience method /// to be called from an overridden CreateNodeFromReader method. /// </summary> protected EmberNode CreateSet(uint type, BerReaderBase reader) { var tag = reader.Tag; var node = new EmberSet(tag, null); node.BerTypeNumber = type; return node; }