コード例 #1
0
ファイル: KDNode.cs プロジェクト: AlvaIce/GFJT-2020
        /// <summary>
        /// Inserts a
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="t"></param>
        /// <param name="lev"></param>
        /// <param name="k"></param>
        /// <returns></returns>
        /// <remarks> Method ins translated from 352.ins.c of Gonnet and Baeza-Yates</remarks>
        public static KdNode Insert(HPoint key, object value, KdNode t, int lev, int k)
        {
            if (t == null)
            {
                t = new KdNode(key, value);
            }
            else if (key.Equals(t.K))
            {
                // "re-insert"
                if (t.IsDeleted)
                {
                    t.IsDeleted = false;
                    t.V         = value;
                }
                else
                {
                    throw (new KeyDuplicateException());
                }
            }
            else if (key[lev] > t.K[lev])
            {
                t.Right = Insert(key, value, t.Right, (lev + 1) % k, k);
            }
            else
            {
                t.Left = Insert(key, value, t.Left, (lev + 1) % k, k);
            }

            return(t);
        }
コード例 #2
0
ファイル: KDNode.cs プロジェクト: AlvaIce/GFJT-2020
        /// <summary>
        /// Searches for a specific value
        /// </summary>
        /// <param name="key"></param>
        /// <param name="t"></param>
        /// <param name="k"></param>
        /// <returns></returns>
        /// <remarks>Method srch translated from 352.srch.c of Gonnet and Baeza-Yates</remarks>
        public static KdNode Search(HPoint key, KdNode t, int k)
        {
            for (int lev = 0; t != null; lev = (lev + 1) % k)
            {
                if (!t.IsDeleted && key.Equals(t.K))
                {
                    return(t);
                }
                t = key[lev] > t.K[lev] ? t.Right : t.Left;
            }

            return(null);
        }
コード例 #3
0
ファイル: KDNode.cs プロジェクト: ExRam/DotSpatial-PCL
        /// <summary>
        /// Searches for a specific value
        /// </summary>
        /// <param name="key"></param>
        /// <param name="t"></param>
        /// <param name="k"></param>
        /// <returns></returns>
        /// <remarks>Method srch translated from 352.srch.c of Gonnet and Baeza-Yates</remarks>
        public static KdNode Search(HPoint key, KdNode t, int k)
        {
            for (int lev = 0; t != null; lev = (lev + 1) % k)
            {
                if (!t.IsDeleted && key.Equals(t.K))
                {
                    return t;
                }
                t = key[lev] > t.K[lev] ? t.Right : t.Left;
            }

            return null;
        }
コード例 #4
0
ファイル: KDNode.cs プロジェクト: ExRam/DotSpatial-PCL
        /// <summary>
        /// Inserts a
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="t"></param>
        /// <param name="lev"></param>
        /// <param name="k"></param>
        /// <returns></returns>
        /// <remarks> Method ins translated from 352.ins.c of Gonnet and Baeza-Yates</remarks>
        public static KdNode Insert(HPoint key, object value, KdNode t, int lev, int k)
        {
            if (t == null)
            {
                t = new KdNode(key, value);
            }
            else if (key.Equals(t.K))
            {
                // "re-insert"
                if (t.IsDeleted)
                {
                    t.IsDeleted = false;
                    t.V = value;
                }
                else
                {
                    throw (new KeyDuplicateException());
                }
            }
            else if (key[lev] > t.K[lev])
            {
                t.Right = Insert(key, value, t.Right, (lev + 1) % k, k);
            }
            else
            {
                t.Left = Insert(key, value, t.Left, (lev + 1) % k, k);
            }

            return t;
        }