static void buildTree(Asn1Reader root, Asn1TreeNode tree) { root.MoveNext(); Int32 index = 0; do { tree.AddChild(new Asn1Lite(root, tree, index)); index++; } while (root.MoveNextCurrentLevel()); root.Reset(); foreach (Asn1TreeNode node in tree.Children.Where(node => node.Value.IsContainer && node.Value.PayloadLength > 0)) { root.MoveToPosition(node.Value.Offset); buildTree(root, node); } }
static void buildTree(Asn1Reader asn, Asn1Node node, Asn1Tree rootTree) { asn.MoveNext(); List <Int32> subNodeIndexes = new List <Int32>(); Int32 index = 0; do { node.AddUnsafe(new Asn1Node(asn, rootTree)); if (asn.IsConstructed) { subNodeIndexes.Add(index); } index++; } while (asn.MoveNextCurrentLevel()); asn.Reset(); foreach (Int32 subNodeIndex in subNodeIndexes) { Asn1Node subNode = node.Children[subNodeIndex]; asn.MoveToPoisition(subNode.Offset); buildTree(asn, subNode, rootTree); } }