Skip to content

Commit 8aad6cc

Browse files
committed
index: move non-merge-specific code into write.go
1 parent fde726f commit 8aad6cc

2 files changed

Lines changed: 83 additions & 82 deletions

File tree

index/merge.go

Lines changed: 2 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
}

index/write.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,3 +819,84 @@ func sortPost(post []postEntry) {
819819
tmp[o] = p
820820
}
821821
}
822+
823+
type postDataWriter struct {
824+
out *Buffer
825+
postIndexFile *Buffer
826+
base int
827+
lastOffset int
828+
count int
829+
offset int
830+
lastID int
831+
t uint32
832+
delta deltaWriter
833+
numTrigram int
834+
tmp [32]byte
835+
block []byte
836+
}
837+
838+
func (w *postDataWriter) flush() {
839+
if w.postIndexFile != nil && len(w.block) > 0 {
840+
w.postIndexFile.Write(w.block[:cap(w.block)])
841+
w.block = w.block[:0]
842+
}
843+
}
844+
845+
func (w *postDataWriter) init(postData, postIndex *Buffer) {
846+
w.out = postData
847+
w.base = w.out.Offset()
848+
w.postIndexFile = nil
849+
w.delta.init(w.out)
850+
w.lastOffset = w.base
851+
w.postIndexFile = postIndex
852+
w.block = make([]byte, 0, postBlockSize)
853+
}
854+
855+
func (w *postDataWriter) trigram(t uint32) {
856+
if t == 0 {
857+
panic("invalid trigram")
858+
}
859+
w.offset = w.out.Offset()
860+
w.count = 0
861+
w.t = t
862+
w.lastID = -1
863+
w.numTrigram++
864+
w.out.WriteTrigram(w.t)
865+
}
866+
867+
func (w *postDataWriter) fileid(id int) {
868+
w.delta.Write(id - w.lastID)
869+
w.lastID = id
870+
w.count++
871+
}
872+
873+
func (w *postDataWriter) endTrigram() {
874+
w.delta.Write(0)
875+
w.delta.Flush()
876+
if w.postIndexFile == nil {
877+
return
878+
}
879+
if writeVersion == 1 {
880+
w.postIndexFile.WriteTrigram(w.t)
881+
w.postIndexFile.WriteUint(w.count)
882+
w.postIndexFile.WriteUint(w.offset - w.base)
883+
return
884+
}
885+
886+
buf := w.tmp[:]
887+
buf[0] = byte(w.t >> 16)
888+
buf[1] = byte(w.t >> 8)
889+
buf[2] = byte(w.t)
890+
891+
n := 3
892+
n += binary.PutUvarint(buf[n:], uint64(w.count))
893+
n1 := binary.PutUvarint(buf[n:], uint64(w.offset-w.lastOffset))
894+
if len(w.block)+n+n1 > cap(w.block) {
895+
w.postIndexFile.Write(w.block[:cap(w.block)])
896+
clear(w.block)
897+
w.block = w.block[:0]
898+
n1 = binary.PutUvarint(buf[n:], uint64(w.offset-w.base))
899+
}
900+
w.block = append(w.block, buf[:n+n1]...)
901+
w.lastOffset = w.offset
902+
}

0 commit comments

Comments
 (0)