]> git.kaiwu.me - klib.git/commitdiff
improve parsing performance
authorFabian Klötzl <fabian@kloetzl.info>
Wed, 21 Nov 2018 11:20:12 +0000 (12:20 +0100)
committerJohn Marshall <jmarshall@hey.com>
Wed, 20 Sep 2023 19:58:52 +0000 (07:58 +1200)
Doubles throughput; can now parse FASTA at 2GB/s.

kseq.h

diff --git a/kseq.h b/kseq.h
index 2f94a64f398c219ed156a03ff01bdd0f964cc1af..99c9ea216dbc49e326dc35272a71a90d6aebfca8 100644 (file)
--- a/kseq.h
+++ b/kseq.h
@@ -108,8 +108,8 @@ typedef struct __kstring_t {
                                } else break;                                                                                   \
                        }                                                                                                                       \
                        if (delimiter == KS_SEP_LINE) { \
-                               for (i = ks->begin; i < ks->end; ++i) \
-                                       if (ks->buf[i] == '\n') break; \
+                               unsigned char *sep = memchr(ks->buf + ks->begin, '\n', ks->end - ks->begin); \
+                               i = sep != NULL ? sep - ks->buf : ks->end;                              \
                        } else if (delimiter > KS_SEP_MAX) {                                            \
                                for (i = ks->begin; i < ks->end; ++i)                                   \
                                        if (ks->buf[i] == delimiter) break;                                     \