Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }