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); }
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); }
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; }