public void CreateFromFibTable(FibTable table) { Root = new FibTreeNode(null); Labels.Clear(); foreach (FibEntry entry in table) { FibTreeNode node = Root; for (int i = 0; i < entry.BinaryForm.Length; i++) { int edgeLabel = entry.BinaryForm[i] - (int)'0'; if (node.GetChild(edgeLabel) == null) { node.AddChild(edgeLabel); } node = node.GetChild(edgeLabel); } FibTreeLabel label = Labels.GetLabelByNextHop(entry.NextHop); if (label == null) { label = Labels.AddLabelForNextHop(entry.NextHop); } node.Label = label; } TreeChanged?.Invoke(); }
private void normalize_CreateLeaves(FibTreeNode node, FibTreeLabel nearestLabel) { if (node.Children.Count == 0) { return; } if (node.Label != null) { nearestLabel = node.Label; } if (node.Children.Count == 1) { string notExistingEdgeLabel = string.Format("{0}", (int)'1' - (int)node.Children.ToList()[0].Key[0]); node.AddChild(notExistingEdgeLabel, nearestLabel); } normalize_CreateLeaves(node.GetChild(0), nearestLabel); normalize_CreateLeaves(node.GetChild(1), nearestLabel); }