Skip to content

Commit c588728

Browse files
Merge pull request attractivechaos#173 from jmarshall/memchr
Apply seqtk PR to improve kseq.h parsing performance
2 parents 9a063b3 + 63c95f8 commit c588728

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

kseq.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ typedef struct __kstring_t {
107107
if (ks->end == -1) { ks->is_eof = 1; return -3; } \
108108
} else break; \
109109
} \
110-
if (delimiter == KS_SEP_LINE) { \
111-
for (i = ks->begin; i < ks->end; ++i) \
112-
if (ks->buf[i] == '\n') break; \
110+
if (delimiter == KS_SEP_LINE) { \
111+
unsigned char *sep = memchr(ks->buf + ks->begin, '\n', ks->end - ks->begin); \
112+
i = sep != NULL ? sep - ks->buf : ks->end; \
113113
} else if (delimiter > KS_SEP_MAX) { \
114-
for (i = ks->begin; i < ks->end; ++i) \
115-
if (ks->buf[i] == delimiter) break; \
114+
unsigned char *sep = memchr(ks->buf + ks->begin, delimiter, ks->end - ks->begin); \
115+
i = sep != NULL ? sep - ks->buf : ks->end; \
116116
} else if (delimiter == KS_SEP_SPACE) { \
117117
for (i = ks->begin; i < ks->end; ++i) \
118118
if (isspace(ks->buf[i])) break; \

test/kseq_bench2.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <stdint.h>
44
#include <stdlib.h>
55
#include <fcntl.h>
6+
#include <unistd.h>
67
#include "kseq.h"
78
KSTREAM_INIT(int, read, 4096)
89

0 commit comments

Comments
 (0)