-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathseqio.h
128 lines (111 loc) · 2.97 KB
/
seqio.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#ifndef __seqio_h__
#define __seqio_h__
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define enable_gzip
#ifdef enable_gzip
#include <zlib.h>
#include <zconf.h>
#endif
#define seqioDefaultLineWidth 0
#define seqioDefaultincludeComment true
#define seqioDefaultBufferSize 1024l * 16l
#define seqioDefaultWriteBufferSize 1024l * 128l
#define seqioMalloc(size) malloc(size)
#define seqioRealloc(ptr, size) realloc(ptr, size)
#define seqioFree(ptr) free(ptr)
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
seqioRecordTypeFasta,
seqioRecordTypeFastq,
seqioRecordTypeUnknown
} seqioRecordType;
typedef struct {
char* data;
size_t length;
size_t capacity;
} seqioString;
typedef struct {
seqioRecordType type;
seqioString* name;
seqioString* comment;
seqioString* sequence;
seqioString* quality;
} seqioRecord;
typedef enum {
seqOpenModeRead,
seqOpenModeWrite,
} seqOpenMode;
typedef struct {
const char* filename;
bool isGzipped;
seqOpenMode mode;
bool freeRecordOnEOF;
char* validChars;
} seqioOpenOptions;
typedef enum {
seqioBaseCaseLower,
seqioBaseCaseUpper,
seqioBaseCaseOriginal
} baseCase;
typedef struct {
size_t lineWidth;
bool includeComment;
baseCase baseCase;
} seqioWriteOptions;
typedef struct {
seqioRecord* record;
struct {
size_t offset;
size_t left;
size_t capacity;
size_t buffSize;
char* data;
} buffer;
struct {
seqioRecordType type;
bool isEOF;
int state;
bool fromStdin;
bool toStdout;
seqioOpenOptions* options;
void* file;
seqOpenMode mode;
} pravite;
char* validChars;
} seqioFile;
#define defaultSeqioWriteOptions \
{ \
.lineWidth = seqioDefaultLineWidth, \
.includeComment = seqioDefaultincludeComment, \
.baseCase = seqioBaseCaseOriginal, \
}
seqioFile* seqioOpen(seqioOpenOptions* options);
extern seqioOpenOptions __defaultStdinOptions;
extern seqioOpenOptions __defaultStdoutOptions;
#define seqioStdinOpen() seqioOpen(&__defaultStdinOptions)
#define seqioStdoutOpen() seqioOpen(&__defaultStdoutOptions)
void seqioClose(seqioFile* sf);
void seqioFlush(seqioFile* sf);
void seqioReset(seqioFile* sf);
seqioRecordType seqioGuessType(seqioFile* sf);
seqioRecord* seqioReadFasta(seqioFile* sf, seqioRecord* record);
seqioRecord* seqioReadFastq(seqioFile* sf, seqioRecord* record);
seqioRecord* seqioRead(seqioFile* sf, seqioRecord* record);
void seqioWriteFasta(seqioFile* sf,
seqioRecord* record,
seqioWriteOptions* options);
void seqioWriteFastq(seqioFile* sf,
seqioRecord* record,
seqioWriteOptions* options);
#ifdef __cplusplus
}
#endif
#endif // __seqio_h__