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