+ else f->linestart = true;
+
+ switch (state) {
+ case FASTQ_STATE_ID1:
+ str_append(&seq->id1, f->next, u - f->next);
+ if (f->linestart) state = FASTQ_STATE_SEQ;
+ break;
+
+ case FASTQ_STATE_SEQ:
+ str_append(&seq->seq, f->next, u - f->next);
+ if (f->linestart) state = FASTQ_STATE_ID2;
+ break;
+
+ case FASTQ_STATE_ID2:
+ str_append(&seq->id2, f->next, u - f->next);
+ if (f->linestart) state = FASTQ_STATE_QUAL;
+ break;
+
+ case FASTQ_STATE_QUAL:
+ str_append(&seq->qual, f->next, u - f->next);
+ if (f->linestart) {
+ f->next = u + 1;
+ return true;
+ }
+ break;