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

     1  package index
     2  
     3  // index/ReaderUtil.java
     4  
     5  /* Common util methods for dealing wiht IndexReaders and IndexReaderContexts. */
     6  
     7  /*
     8  Walks up the reader tree and return the given context's top level
     9  reader context, or in other words the reader tree's root context.
    10  */
    11  func TopLevelContext(ctx IndexReaderContext) IndexReaderContext {
    12  	for ctx.Parent() != nil {
    13  		ctx = ctx.Parent()
    14  	}
    15  	return ctx
    16  }
    17  
    18  /*
    19  Returns index of the searcher/reader for document n in the
    20  array used to construct this searcher/reader.
    21  */
    22  func subIndex(n int, docStarts []int) int {
    23  	// searcher/reader for doc n:
    24  	size := len(docStarts)
    25  	lo := 0        // search starts array
    26  	hi := size - 1 // for first element less than n, return its index
    27  	for hi >= lo {
    28  		mid := int(uint(lo+hi) >> 1)
    29  		midValue := docStarts[mid]
    30  		if n < midValue {
    31  			hi = mid - 1
    32  		} else if n > midValue {
    33  			lo = mid + 1
    34  		} else { // found a match
    35  			for mid+1 < size && docStarts[mid+1] == midValue {
    36  				mid++ // scan to last match
    37  			}
    38  			return mid
    39  		}
    40  	}
    41  	return hi
    42  }