public PatTreeNode AddPatTreeNode(String Name, int Index)
 {
     Name = Name.PadRight(StringLength, '\0');
     PatTreeNode n = new PatTreeNode();
     n.name = Name;
     PatTreeNode CurNode = Nodes[0];
     PatTreeNode leftNode = CurNode.left;
     uint bit = (uint)(StringLength * 8) - 1;
     while (CurNode.refbit > leftNode.refbit)
     {
         CurNode = leftNode;
         leftNode = GetBit(Name, leftNode.refbit) ? leftNode.right : leftNode.left;
     }
     while (GetBit(leftNode.name, bit) == GetBit(Name, bit)) bit--;
     CurNode = Nodes[0];
     leftNode = CurNode.left;
     while ((CurNode.refbit > leftNode.refbit) && (leftNode.refbit > bit))
     {
         CurNode = leftNode;
         leftNode = GetBit(Name, leftNode.refbit) ? leftNode.right : leftNode.left;
     }
     n.refbit = bit;
     n.left = GetBit(Name, n.refbit) ? leftNode : n;
     n.right = GetBit(Name, n.refbit) ? n : leftNode;
     if (GetBit(Name, CurNode.refbit)) CurNode.right = n;
     else CurNode.left = n;
     n.idxEntry = Index;
     Nodes.Add(n);
     return n;
 }
        private PatTreeNode AddRootPatTreeNode()
        {
            PatTreeNode p = new PatTreeNode();

            p.refbit   = (uint)(StringLength * 8) - 1;
            p.left     = p;
            p.right    = p;
            p.idxEntry = 0;
            p.name     = new String('\0', StringLength);
            Nodes.Add(p);
            return(p);
        }
Beispiel #3
0
            private PatTreeNode AddRootPatTreeNode()
            {
                PatTreeNode p = new PatTreeNode();

                p.refbit   = 127;
                p.left     = p;
                p.right    = p;
                p.idxEntry = 0;
                p.name     = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
                Nodes.Add(p);
                return(p);
            }
        public PatTreeNode AddPatTreeNode(String Name, int Index)
        {
            Name = Name.PadRight(StringLength, '\0');
            PatTreeNode n = new PatTreeNode();

            n.name = Name;
            PatTreeNode CurNode  = Nodes[0];
            PatTreeNode leftNode = CurNode.left;
            uint        bit      = (uint)(StringLength * 8) - 1;

            while (CurNode.refbit > leftNode.refbit)
            {
                CurNode  = leftNode;
                leftNode = GetBit(Name, leftNode.refbit) ? leftNode.right : leftNode.left;
            }
            while (GetBit(leftNode.name, bit) == GetBit(Name, bit))
            {
                bit--;
            }
            CurNode  = Nodes[0];
            leftNode = CurNode.left;
            while ((CurNode.refbit > leftNode.refbit) && (leftNode.refbit > bit))
            {
                CurNode  = leftNode;
                leftNode = GetBit(Name, leftNode.refbit) ? leftNode.right : leftNode.left;
            }
            n.refbit = bit;
            n.left   = GetBit(Name, n.refbit) ? leftNode : n;
            n.right  = GetBit(Name, n.refbit) ? n : leftNode;
            if (GetBit(Name, CurNode.refbit))
            {
                CurNode.right = n;
            }
            else
            {
                CurNode.left = n;
            }
            n.idxEntry = Index;
            Nodes.Add(n);
            return(n);
        }
Beispiel #5
0
            public PatTreeNode AddPatTreeNode(String Name, int Index)
            {
                foreach (PatTreeNode n in Nodes)
                {
                    if (n.name == Name)
                    {
                        return(null);
                    }
                }
                PatTreeNode p = new PatTreeNode();

                Name = Name.PadRight(16, '\0');

                int         CurRefBit = 0;
                PatTreeNode LastNode  = null;

                PatTreeNode CurNode = Nodes[0].left;

                if (Nodes[0].refbit > Nodes[0].left.refbit)
                {
                    CurRefBit = Nodes[0].left.refbit;
                    do
                    {
                        LastNode = CurNode;
                        if (((GetStringPart(Name, ((CurRefBit >> 5) & 3) * 4) >> (CurRefBit & 0x1F)) & 1) != 0)
                        {
                            CurNode = CurNode.right;
                        }
                        else
                        {
                            CurNode = CurNode.left;
                        }
                        CurRefBit = CurNode.refbit;
                    }while (LastNode.refbit > CurRefBit);
                }

                CurRefBit = 0;
                LastNode  = null;

                int Refbit = 127;

                if ((CurNode.idxEntry ^ GetStringPart(Name, 0xC)) >= 0)
                {
                    int WorkingRefBit;
                    do
                    {
                        Refbit--;
                        WorkingRefBit   = Refbit;
                        WorkingRefBit >>= 5;
                        WorkingRefBit  &= 3;
                        int c = GetStringPart(CurNode.name, WorkingRefBit * 4);
                        c ^= GetStringPart(Name, WorkingRefBit * 4);
                        int TmpRefBit = Refbit;
                        TmpRefBit      &= 0x1F;
                        WorkingRefBit   = c;
                        WorkingRefBit >>= TmpRefBit & 0xFF;
                    }while ((WorkingRefBit & 0x1) == 0);
                }

                CurRefBit = 0;
                LastNode  = null;

                CurNode   = Nodes[0].left;
                LastNode  = Nodes[0];
                CurRefBit = Nodes[0].left.refbit;
                if (Nodes[0].refbit > Nodes[0].left.refbit)
                {
                    do
                    {
                        if (CurRefBit <= Refbit)
                        {
                            break;
                        }
                        LastNode = CurNode;
                        if (((GetStringPart(Name, ((CurRefBit >> 5) & 3) * 4) >> (CurRefBit & 0x1F)) & 1) != 0)
                        {
                            CurNode = CurNode.right;
                        }
                        else
                        {
                            CurNode = CurNode.left;
                        }
                        CurRefBit = CurNode.refbit;
                    }while (LastNode.refbit > CurRefBit);
                }

                p.refbit   = Refbit;
                p.left     = null;            //Nodes[0];
                p.right    = null;            //p;
                p.idxEntry = Index;
                p.name     = Name;

                if (((GetStringPart(Name, ((Refbit >> 5) & 3) * 4) >> (Refbit & 0x1F)) & 1) == 0)
                {
                    p.left = p;
                }
                else
                {
                    p.left = CurNode;
                }

                if (((GetStringPart(Name, ((Refbit >> 5) & 3) * 4) >> (Refbit & 0x1F)) & 1) == 0)
                {
                    p.right = CurNode;
                }
                else
                {
                    p.right = p;
                }

                if (((GetStringPart(Name, ((LastNode.refbit >> 5) & 3) * 4) >> (LastNode.refbit & 0x1F)) & 1) != 0)
                {
                    LastNode.right = p;
                    Nodes.Add(p);
                    return(p);
                }
                else
                {
                    LastNode.left = p;
                    Nodes.Add(p);
                    return(p);
                }
            }
 private PatTreeNode AddRootPatTreeNode()
 {
     PatTreeNode p = new PatTreeNode();
     p.refbit = (uint)(StringLength * 8) - 1;
     p.left = p;
     p.right = p;
     p.idxEntry = 0;
     p.name = new String('\0', StringLength);
     Nodes.Add(p);
     return p;
 }