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
 internal void InvokeTreeChanged()
 {
     if (TreeChanged != null)
     {
         TreeChanged.Invoke();
     }
 }
Beispiel #3
0
 public void CreateFromFibTreeAndNormalize(FibTree tree)
 {
     Root = new FibTreeNode(null);
     Labels.Clear();
     copyNodeAndChildrens(Root, tree.Root);
     normalize();
     TreeChanged?.Invoke();
 }
Beispiel #4
0
        public void CreateFromNormalizedFibTreeAndCompress(FibTree tree)
        {
            Root = new FibTreeNode(null);
            Labels.Clear();
            Dictionary <FibTreeNode, CompressData> compressData = new Dictionary <FibTreeNode, CompressData>();

            calculateCompressData(tree.Root, compressData);
            addChildrenWithStride(Root, tree.Root, compressData);
            TreeChanged?.Invoke();
        }
Beispiel #5
0
 protected void OnTreeChanged(object sender, EventArgs e)
 {
     if (Parent != null)
     {
         Parent.OnTreeChanged(sender, e);
     }
     else
     {
         TreeChanged?.Invoke(sender, e);
     }
 }