github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/operator/builtin/input/file/positional_scanner.go (about) 1 package file 2 3 import ( 4 "bufio" 5 "io" 6 ) 7 8 type PositionalScanner struct { 9 pos int64 10 *bufio.Scanner 11 } 12 13 func NewPositionalScanner(r io.Reader, maxLogSize int, startOffset int64, splitFunc bufio.SplitFunc) *PositionalScanner { 14 ps := &PositionalScanner{ 15 pos: startOffset, 16 Scanner: bufio.NewScanner(r), 17 } 18 19 buf := make([]byte, 0, 16384) 20 ps.Scanner.Buffer(buf, maxLogSize) 21 22 scanFunc := func(data []byte, atEOF bool) (advance int, token []byte, err error) { 23 advance, token, err = splitFunc(data, atEOF) 24 ps.pos += int64(advance) 25 return 26 } 27 ps.Scanner.Split(scanFunc) 28 return ps 29 } 30 31 func (ps *PositionalScanner) Pos() int64 { 32 return ps.pos 33 }