Beispiel #1
0
func (r *Reader) Read(p []byte) (n int, err error) {
	n = 0
	buf := bytes.NewBuffer(nil)
	if r.overflow != nil {
		ln, _ := buf.Write(r.overflow)
		n += ln
	}
	for {
		seq, er := r.r.Read()
		if er != nil {
			if er == io.EOF {
				copy(p[0:n], buf.Bytes()[0:n])
			}
			err = er
			break
		}
		ln, _ := fasta.Format(seq, buf)
		if n+ln > cap(p) {
			copy(p[0:n], buf.Bytes()[0:n])
			r.overflow = buf.Bytes()[n:]
			break
		} else {
			n += ln
		}
	}
	return
}
Beispiel #2
0
func (r *Reader) Format(s *seq.Seq, w io.Writer) (n int, err error) {
	switch {
	case r.format == "fasta":
		return fasta.Format(s, w)
	case r.format == "fastq":
		return fastq.Format(s, w)
	case r.format == "sam":
		return sam.Format(s, w)
	}
	return 0, errors.New("unknown sequence format")
}