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 }