natix.CompactDS.Bitmap.SimpleSelect1 C# (CSharp) Method

SimpleSelect1() protected method

protected SimpleSelect1 ( int rank ) : int
rank int
return int
        protected int SimpleSelect1(int rank)
        {
            if (rank <= 0) {
                return -1;
            }
            //			var G = new ListGen<int> ((int i) => this.Rank1 (i), this.Count);
            //			return GenericSearch.FindFirst<int> (rank, G);
            var n = this.Count;
            int sp = 0;
            int ep = n;
            int cmp = 0;
            int mid;
            do {
                mid = (sp >> 1) + (ep >> 1);
                var rank_mid = this.Rank1 (mid);
                cmp = rank.CompareTo(rank_mid);
                if (cmp > 0) {
                    sp = mid + 1;
                } else {
                    ep = mid;
                }
            } while (sp < ep);
            if (cmp < 0) {
                mid--;
            } else if (cmp > 0) {
                if (mid < ep) {
                    if (mid + 1 < n) {
                        var rank_mid = this.Rank1 (mid+1);
                        if (rank.CompareTo (rank_mid) == 0) {
                            mid++;
                        }
                    }
                }
            }
            return mid;
        }