@@ -216,10 +216,11 @@ func Merge(dst, src1, src2 string) {
216216 r2 .nextTrigram ()
217217 w .endTrigram ()
218218 } else {
219+ w .trigram (r1 .trigram )
219220 if r1 .trigram == ^ uint32 (0 ) {
221+ w .endTrigram ()
220222 break
221223 }
222- w .trigram (r1 .trigram )
223224 r1 .nextId ()
224225 r2 .nextId ()
225226 for r1 .fileid != - 1 || r2 .fileid != - 1 {
@@ -380,84 +381,3 @@ func (r *postMapReader) nextId() bool {
380381 r .fileid = - 1
381382 return false
382383}
383-
384- type postDataWriter struct {
385- out * Buffer
386- postIndexFile * Buffer
387- base int
388- lastOffset int
389- count int
390- offset int
391- lastID int
392- t uint32
393- delta deltaWriter
394- numTrigram int
395- tmp [32 ]byte
396- block []byte
397- }
398-
399- func (w * postDataWriter ) flush () {
400- if w .postIndexFile != nil && len (w .block ) > 0 {
401- w .postIndexFile .Write (w .block [:cap (w .block )])
402- w .block = w .block [:0 ]
403- }
404- }
405-
406- func (w * postDataWriter ) init (postData , postIndex * Buffer ) {
407- w .out = postData
408- w .base = w .out .Offset ()
409- w .postIndexFile = nil
410- w .delta .init (w .out )
411- w .lastOffset = w .base
412- w .postIndexFile = postIndex
413- w .block = make ([]byte , 0 , postBlockSize )
414- }
415-
416- func (w * postDataWriter ) trigram (t uint32 ) {
417- if t == 0 {
418- panic ("invalid trigram" )
419- }
420- w .offset = w .out .Offset ()
421- w .count = 0
422- w .t = t
423- w .lastID = - 1
424- w .numTrigram ++
425- w .out .WriteTrigram (w .t )
426- }
427-
428- func (w * postDataWriter ) fileid (id int ) {
429- w .delta .Write (id - w .lastID )
430- w .lastID = id
431- w .count ++
432- }
433-
434- func (w * postDataWriter ) endTrigram () {
435- w .delta .Write (0 )
436- w .delta .Flush ()
437- if w .postIndexFile == nil {
438- return
439- }
440- if writeVersion == 1 {
441- w .postIndexFile .WriteTrigram (w .t )
442- w .postIndexFile .WriteUint (w .count )
443- w .postIndexFile .WriteUint (w .offset - w .base )
444- return
445- }
446-
447- buf := w .tmp [:]
448- buf [0 ] = byte (w .t >> 16 )
449- buf [1 ] = byte (w .t >> 8 )
450- buf [2 ] = byte (w .t )
451-
452- n := 3
453- n += binary .PutUvarint (buf [n :], uint64 (w .count ))
454- n1 := binary .PutUvarint (buf [n :], uint64 (w .offset - w .lastOffset ))
455- if len (w .block )+ n + n1 > cap (w .block ) {
456- w .postIndexFile .Write (w .block [:cap (w .block )])
457- clear (w .block )
458- w .block = w .block [:0 ]
459- n1 = binary .PutUvarint (buf [n :], uint64 (w .offset - w .base ))
460- }
461- w .block = append (w .block , buf [:n + n1 ]... )
462- w .lastOffset = w .offset
463- }
0 commit comments