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  }