示例#1
0
        public static void ValidateNode(NeoDatis.Btree.IBTreeNode node)
        {
            if (!on)
            {
                return;
            }
            int nbKeys = node.GetNbKeys();

            if (node.HasParent() && nbKeys < node.GetDegree() - 1)
            {
                throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Node with less than "
                                                                                + (node.GetDegree() - 1) + " keys");
            }
            int maxNbKeys     = node.GetDegree() * 2 - 1;
            int nbChildren    = node.GetNbChildren();
            int maxNbChildren = node.GetDegree() * 2;

            if (nbChildren != 0 && nbKeys == 0)
            {
                throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Node with no key but with children : "
                                                                                + node);
            }
            for (int i = 0; i < nbKeys; i++)
            {
                if (node.GetKeyAndValueAt(i) == null)
                {
                    throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Null key at " +
                                                                                    i + " on node " + node.ToString());
                }
                CheckValuesOfChild(node.GetKeyAndValueAt(i), node.GetChildAt(i, false));
            }
            for (int i = nbKeys; i < maxNbKeys; i++)
            {
                if (node.GetKeyAndValueAt(i) != null)
                {
                    throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Not Null key at "
                                                                                    + i + " on node " + node.ToString());
                }
            }
            NeoDatis.Btree.IBTreeNode previousNode = null;
            for (int i = 0; i < nbChildren; i++)
            {
                if (node.GetChildAt(i, false) == null)
                {
                    throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Null child at index "
                                                                                    + i + " on node " + node.ToString());
                }
                if (previousNode != null && previousNode == node.GetChildAt(i, false))
                {
                    throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Two equals children at index "
                                                                                    + i + " : " + previousNode.ToString());
                }
                previousNode = node.GetChildAt(i, false);
            }
            for (int i = nbChildren; i < maxNbChildren; i++)
            {
                if (node.GetChildAt(i, false) != null)
                {
                    throw new NeoDatis.Btree.Exception.BTreeNodeValidationException("Not Null child at "
                                                                                    + i + " on node " + node.ToString());
                }
            }
        }