public Element ReadNextElement() { ulong position = (ulong)stream.Position; var elementType = getNextEbmlCodeAsBytes(); if (elementType == null) { // Failed to read type id. return(null); } Element elem = ProtoTypeManager.GetInstance(elementType); if (elem == null) { return(null); } Utility.LogTrace($"Read element {elem.TypeInfo.Name}"); // Read the size. ulong elementSize = ReadEbmlCode(stream); if (elementSize == 0) { Utility.LogError($"Invalid element size for {elem.TypeInfo.Name}"); } ulong end = (ulong)stream.Position; // Set it's size elem.Size = elementSize; elem.HeaderSize = end - position; return(elem); }
public ProtoType(string name, byte[] type, int level) { Level = level; Name = name; Type = new MemoryStream(type); ulong codename = Utility.ParseEbmlCode(Type); ProtoTypeManager.AddDictionaryElement(codename, this); Utility.LogTrace($"Associating {Name} with {codename}"); }