コード例 #1
0
        public bool TryFindValueAt(TKey[] point, onAdditionalCheckEqualsDelegate additionalCheckEquals, out TValue value)
        {
            var parent    = root;
            int dimension = -1;

            return(TryFindValueAt(point, additionalCheckEquals, parent, dimension, out value));
        }
コード例 #2
0
        public TValue FindValueAt(TKey[] point, onAdditionalCheckEqualsDelegate additionalCheckEquals)
        {
            TValue value;

            if (TryFindValueAt(point, additionalCheckEquals, out value))
            {
                return(value);
            }
            else
            {
                return(default(TValue));
            }
        }
コード例 #3
0
        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);
        }