//////////////////////////////////////////////////////////////////////////// //--------------------------------- 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); }