Example #1
0
        ////////////////////////////////////////////////////////////////////////////
        //--------------------------------- REVISIONS ------------------------------
        // Date       Name                 Tracking #         Description
        // ---------  -------------------  -------------      ----------------------
        // 21JUN2009  James Shen                              Initial Creation
        ////////////////////////////////////////////////////////////////////////////

        /**
         * binary search (English).
         * @param queryValue query string.
         * @return the string recrod ID.
         */
        private int BinarySearch(string queryValue)
        {
            int left  = 0;
            int right = (int)(_stringIndex._size / StringIndex.RECORDSIZE) - 1;

            while (left <= right)
            {
                int middle = (int)Math.Floor((left + right) / 2.0);
                {
                    _stringIndex.GetRecord(middle);
                    string middleValue = _stringData.GetRecord(_stringIndex.RecordOffset);
                    _stringIndex.GetRecord(left);
                    string leftValue = _stringData.GetRecord(_stringIndex.RecordOffset);
                    _stringIndex.GetRecord(right);
                    string rightValue = _stringData.GetRecord(_stringIndex.RecordOffset);
                    if (leftValue.Length > queryValue.Length)
                    {
                        leftValue = leftValue.Substring(0, queryValue.Length);
                    }
                    if (middleValue.Length > queryValue.Length)
                    {
                        middleValue = middleValue.Substring(0, queryValue.Length);
                    }
                    if (rightValue.Length > queryValue.Length)
                    {
                        rightValue = rightValue.Substring(0, queryValue.Length);
                    }

                    if (queryValue.CompareTo(middleValue) == 0)
                    {
                        return(middle);
                    }
                    if (queryValue.CompareTo(middleValue) > 0)
                    {
                        left = middle + 1;
                    }
                    else
                    {
                        right = middle - 1;
                    }
                }
            }
            return(-1);
        }