github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/index/model/state.go (about) 1 package model 2 3 import ( 4 "github.com/balzaczyy/golucene/core/store" 5 "github.com/balzaczyy/golucene/core/util" 6 "strconv" 7 "strings" 8 ) 9 10 // index/SegmentWriteState.java 11 12 /* Holder class for common parameters used during write. */ 13 type SegmentWriteState struct { 14 infoStream util.InfoStream 15 Directory store.Directory 16 SegmentInfo *SegmentInfo 17 FieldInfos FieldInfos 18 DelCountOnFlush int 19 SegUpdates interface{} // BufferedUpdates 20 LiveDocs util.MutableBits 21 SegmentSuffix string 22 termIndexInterval int 23 Context store.IOContext 24 } 25 26 func NewSegmentWriteState(infoStream util.InfoStream, 27 dir store.Directory, segmentInfo *SegmentInfo, 28 fieldInfos FieldInfos, termIndexInterval int, 29 SegUpdates interface{}, ctx store.IOContext) *SegmentWriteState { 30 31 return NewSegmentWriteState2( 32 infoStream, dir, segmentInfo, fieldInfos, termIndexInterval, 33 SegUpdates, ctx, "") 34 } 35 36 func NewSegmentWriteState2(infoStream util.InfoStream, 37 dir store.Directory, segmentInfo *SegmentInfo, 38 fieldInfos FieldInfos, termIndexInterval int, 39 SegUpdates interface{}, ctx store.IOContext, 40 segmentSuffix string) *SegmentWriteState { 41 42 ans := &SegmentWriteState{ 43 infoStream: infoStream, 44 Directory: dir, 45 SegmentInfo: segmentInfo, 46 FieldInfos: fieldInfos, 47 SegUpdates: SegUpdates, 48 SegmentSuffix: segmentSuffix, 49 termIndexInterval: termIndexInterval, 50 Context: ctx, 51 } 52 assert(ans.assertSegmentSuffix(segmentSuffix)) 53 return ans 54 } 55 56 /* Create a shallow copy of SegmentWriteState with a new segment suffix. */ 57 func NewSegmentWriteStateFrom(state *SegmentWriteState, 58 segmentSuffix string) *SegmentWriteState { 59 60 return &SegmentWriteState{ 61 state.infoStream, 62 state.Directory, 63 state.SegmentInfo, 64 state.FieldInfos, 65 state.DelCountOnFlush, 66 state.SegUpdates, 67 nil, 68 segmentSuffix, 69 state.termIndexInterval, 70 state.Context, 71 } 72 } 73 74 func (s *SegmentWriteState) assertSegmentSuffix(segmentSuffix string) bool { 75 if len(segmentSuffix) == 0 { 76 return true 77 } 78 numParts := len(strings.SplitN(segmentSuffix, "_", 3)) 79 if numParts == 2 { 80 return true 81 } 82 if numParts == 1 { 83 _, err := strconv.ParseInt(segmentSuffix, 36, 64) 84 assert(err == nil) 85 return true 86 } 87 return false 88 } 89 90 // index/SegmentReadState.java 91 92 type SegmentReadState struct { 93 Dir store.Directory 94 SegmentInfo *SegmentInfo 95 FieldInfos FieldInfos 96 Context store.IOContext 97 TermsIndexDivisor int 98 SegmentSuffix string 99 } 100 101 func NewSegmentReadState(dir store.Directory, 102 info *SegmentInfo, fieldInfos FieldInfos, 103 context store.IOContext, termsIndexDivisor int) SegmentReadState { 104 105 return SegmentReadState{dir, info, fieldInfos, context, termsIndexDivisor, ""} 106 }