Lines Matching refs:ks

60 #define ks_eof(ks) ((ks)->is_eof && (ks)->begin >= (ks)->end)  argument
61 #define ks_rewind(ks) ((ks)->is_eof = (ks)->begin = (ks)->end = 0) argument
66 kstream_t *ks = (kstream_t*)calloc(1, sizeof(kstream_t)); \
67 ks->f = f; ks->bufsize = __bufsize; \
68 ks->buf = (unsigned char*)malloc(__bufsize); \
69 return ks; \
71 SCOPE void ks_destroy(kstream_t *ks) \
73 if (!ks) return; \
74 free(ks->buf); \
75 free(ks); \
79 static inline klib_unused int ks_getc(kstream_t *ks) \
81 if (ks->is_eof && ks->begin >= ks->end) return -1; \
82 if (ks->begin >= ks->end) { \
83 ks->begin = 0; \
84 ks->end = __read(ks->f, ks->buf, ks->bufsize); \
85 if (ks->end == 0) { ks->is_eof = 1; return -1; } \
87 ks->seek_pos++; \
88 return (int)ks->buf[ks->begin++]; \
90 …static inline klib_unused int ks_getuntil(kstream_t *ks, int delimiter, kstring_t *str, int *dret)…
91 { return ks_getuntil2(ks, delimiter, str, dret, 0); }
94 SCOPE int ks_getuntil2(kstream_t *ks, int delimiter, kstring_t *str, int *dret, int append) \
102 if (ks->begin >= ks->end) { \
103 if (!ks->is_eof) { \
104 ks->begin = 0; \
105 ks->end = __read(ks->f, ks->buf, ks->bufsize); \
106 if (ks->end == 0) { ks->is_eof = 1; break; } \
110 for (i = ks->begin; i < ks->end; ++i) \
111 if (ks->buf[i] == '\n') break; \
113 for (i = ks->begin; i < ks->end; ++i) \
114 if (ks->buf[i] == delimiter) break; \
116 for (i = ks->begin; i < ks->end; ++i) \
117 if (isspace(ks->buf[i])) break; \
119 for (i = ks->begin; i < ks->end; ++i) \
120 if (isspace(ks->buf[i]) && ks->buf[i] != ' ') break; \
122 (void) ks_expand(str, i - ks->begin + 1); \
123 seek_pos += i - ks->begin; if ( i < ks->end ) seek_pos++; \
125 memcpy(str->s + str->l, ks->buf + ks->begin, i - ks->begin); \
126 str->l = str->l + (i - ks->begin); \
127 ks->begin = i + 1; \
128 if (i < ks->end) { \
129 if (dret) *dret = ks->buf[i]; \
133 if (!gotany && ks_eof(ks)) return -1; \
134 ks->seek_pos += seek_pos; \
153 extern int ks_getuntil2(kstream_t *ks, int delimiter, kstring_t *str, int *dret, int append); \
155 extern void ks_destroy(kstream_t *ks); \
162 #define kseq_rewind(ks) ((ks)->last_char = (ks)->f->is_eof = (ks)->f->begin = (ks)->f->end = 0) argument
171 SCOPE void kseq_destroy(kseq_t *ks) \
173 if (!ks) return; \
174 free(ks->name.s); free(ks->comment.s); free(ks->seq.s); free(ks->qual.s); \
175 ks_destroy(ks->f); \
176 free(ks); \
188 kstream_t *ks = seq->f; \
190 while ((c = ks_getc(ks)) != -1 && c != '>' && c != '@'); \
195 if (ks_getuntil(ks, 0, &seq->name, &c) < 0) return -1; /* normal exit: EOF */ \
196 if (c != '\n') ks_getuntil(ks, KS_SEP_LINE, &seq->comment, 0); /* read FASTA/Q comment */ \
201 while ((c = ks_getc(ks)) != -1 && c != '>' && c != '+' && c != '@') { \
204 ks_getuntil2(ks, KS_SEP_LINE, &seq->seq, 0, 1); /* read the rest of the line */ \
218 while ((c = ks_getc(ks)) != -1 && c != '\n'); /* skip the rest of '+' line */ \
220 while (ks_getuntil2(ks, KS_SEP_LINE, &seq->qual, 0, 1) >= 0 && seq->qual.l < seq->seq.l); \
245 void kseq_destroy(kseq_t *ks); \