static void Main(string[] args) { // Create the tries var binaryRoot = new BinaryNode("Root"); var compressedRoot = new CompressedNode("Root"); var multibitRoot = new MultibitNode() { Stride = 3 }; // Generate IPs var gen = new AddressGenerator().GenerateAddress(); var db = gen.Take(10).ToArray(); // Add children to tries foreach (var ip in db) { binaryRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); compressedRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); multibitRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); } compressedRoot.Compress(); // Perform a lookup var tosearch = new Address("132.15.162.33/17"); Console.WriteLine($"Binary: {binaryRoot.Lookup(tosearch.BinaryString)}"); Console.WriteLine($"Compressed: {compressedRoot.Lookup(tosearch.BinaryString)}"); Console.WriteLine($"Multibit: {multibitRoot.Lookup(tosearch.BinaryString, "Root")}"); Console.ReadLine(); }
public static void CreateDatabase(IEnumerable <Address> ips) { BinaryRoot = new BinaryNode() { NextHop = "Root" }; CompressedRoot = new CompressedNode() { NextHop = "Root" }; MultibitRoot = new MultibitNode() { Stride = MultibitStride }; foreach (var ip in ips) { BinaryRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); CompressedRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); MultibitRoot.AddChild(ip.MaskedIPv4, ip.BinaryString); } CompressedRoot.Compress(); Main.UpdateTreeViews(); }
public void UpdateMultibitTreeView(MultibitNode root) { multibitTreeView.Items.Clear(); TreeViewItem child = new TreeViewItem(); child.Header = "Root"; child.Foreground = new SolidColorBrush(Colors.OrangeRed); child.Tag = root; multibitTreeView.Items.Add(child); AddMultibitChild(Globals.MultibitRoot, child); }
public void AddMultibitChild(MultibitNode node, TreeViewItem parentItem) { foreach (var childNode in node.Children) { var child = new TreeViewItem(); if (childNode.Value.Item1 != "") { child.Header = $"{childNode.Key} ({childNode.Value.Item1})"; child.Foreground = new SolidColorBrush(Colors.DodgerBlue); } else { child.Header = childNode.Key; } child.Tag = childNode.Value.Item2; parentItem.Items.Add(child); if (childNode.Value.Item2 != null) { AddMultibitChild(childNode.Value.Item2, child); } } }