github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/index/readerUtil.go (about)

     1  package index
     2  
     3  // index/ReaderUtil.java
     4  
     5  /*
     6  Returns index of the searcher/reader for document n in the slice used
     7  to construct this searcher/reader.
     8  */
     9  func SubIndex(n int, leaves []*AtomicReaderContext) int {
    10  	// find searcher/reader for doc n:
    11  	size := len(leaves)
    12  	lo, hi := 0, size-1
    13  	// bi-search starts array, for first element less thann, return its index
    14  	for lo <= hi {
    15  		mid := (lo + hi) >> 1
    16  		midValue := leaves[mid].DocBase
    17  		if n < midValue {
    18  			hi = mid - 1
    19  		} else if n > midValue {
    20  			lo = mid + 1
    21  		} else { // found a match
    22  			for mid+1 < size && leaves[mid+1].DocBase == midValue {
    23  				mid++ // scan to last match
    24  			}
    25  			return mid
    26  		}
    27  	}
    28  	return hi
    29  }