in cmd/pinpi/main.go [55:100]
func process(ctx context.Context, task *task, logger *zap.SugaredLogger, client obj.Client) error {
logger.Infof("processing task, start = %d, n = %v", task.start, task.n)
rrd := index.Decimal.NewReader(ctx, client.Bucket(index.BucketName))
defer rrd.Close()
urd := unpack.NewReader(ctx, rrd)
if _, err := urd.Seek(task.start, io.SeekStart); err != nil {
return err
}
buf := make([]byte, task.n)
n, err := io.ReadFull(urd, buf)
if n < MIN_MATCH {
return err
}
buf = buf[:n]
off := 0
for len(buf) >= MIN_MATCH {
i := bytes.Index(buf, []byte(SEQUENCE[:MIN_MATCH]))
if i < 0 {
break
}
match := buf[i:]
if len(match) < len(SEQUENCE) {
p := make([]byte, len(SEQUENCE)-len(match))
if n, err := io.ReadFull(urd, p); n == 0 {
return err
}
match = append(match, p...)
}
l := 0
for ; l < len(SEQUENCE)-MIN_MATCH; l++ {
if match[MIN_MATCH+l] != SEQUENCE[MIN_MATCH+l] {
break
}
}
matchLen := MIN_MATCH + l
fmt.Printf("%v, %v, %s\n",
task.start+int64(off+i+1), matchLen, string(match[:matchLen]))
buf = buf[i+matchLen:]
off += i + matchLen
}
logger.Infof("digits processed: %d + %d digits",
task.start, task.n)
return nil
}