public bool TryFindValueAt(TKey[] point, onAdditionalCheckEqualsDelegate additionalCheckEquals, out TValue value) { var parent = root; int dimension = -1; return(TryFindValueAt(point, additionalCheckEquals, parent, dimension, out value)); }
public TValue FindValueAt(TKey[] point, onAdditionalCheckEqualsDelegate additionalCheckEquals) { TValue value; if (TryFindValueAt(point, additionalCheckEquals, out value)) { return(value); } else { return(default(TValue)); } }
private bool TryFindValueAt(TKey[] point, onAdditionalCheckEqualsDelegate additionalCheckEquals, KdTreeNavNode <TKey> navParent, int dimension, out TValue value) { do { dimension = (dimension + 1) % dimensions; if (navParent == null) { value = default(TValue); return(false); } else if (isNode(dimension)) { var parent = (KdTreeNode <TKey, TValue>)navParent; if (typeMath.AreEqual(point, parent.Points)) { if (additionalCheckEquals(parent, point)) { value = parent.Value; return(true); } else { if (TryFindValueAt(point, additionalCheckEquals, parent[-1], dimension, out value)) { return(true); } if (TryFindValueAt(point, additionalCheckEquals, parent[1], dimension, out value)) { return(true); } return(false); } } } // Keep searching int compare = typeMath.Compare(point[dimension], navParent.Point); navParent = navParent[compare]; }while (true); }