21#ifndef Glucose2_ParseUtils_h
22#define Glucose2_ParseUtils_h
37static const int buffer_size = 1048576;
42 unsigned char buf[buffer_size];
46 void assureLookahead() {
49 size =
gzread(in, buf,
sizeof(buf)); } }
54 int operator * ()
const {
return (pos >= size) ? EOF : buf[pos]; }
64static inline bool isEof(StreamBuffer& in) {
return *in == EOF; }
65static inline bool isEof(
const char* in) {
return *in ==
'\0'; }
72static void skipWhitespace(B& in) {
73 while ((*in >= 9 && *in <= 13) || *in == 32)
78static void skipLine(B& in) {
80 if (isEof(in))
return;
81 if (*in ==
'\n') { ++in;
return; }
85static double parseDouble(B& in) {
88 double currentExponent = 1;
92 if(*in == EOF)
return 0;
93 if (*in ==
'-') neg =
true, ++in;
94 else if (*in ==
'+') ++in;
95 if (*in <
'1' || *in >
'9') printf(
"PARSE ERROR! Unexpected char: %c\n", *in),
exit(3);
96 accu = (double)(*in -
'0');
98 if (*in !=
'.') printf(
"PARSE ERROR! Unexpected char: %c\n", *in),
exit(3);
100 currentExponent = 0.1;
101 while (*in >=
'0' && *in <=
'9')
102 accu = accu + currentExponent * ((double)(*in -
'0')),
103 currentExponent /= 10,
105 if (*in !=
'e') printf(
"PARSE ERROR! Unexpected char: %c\n", *in),
exit(3);
107 exponent = parseInt(in);
108 accu *= pow(10,exponent);
109 return neg ? -accu:accu;
114static int parseInt(B& in) {
118 if (*in ==
'-') neg =
true, ++in;
119 else if (*in ==
'+') ++in;
120 if (*in <
'0' || *in >
'9') fprintf(stderr,
"PARSE ERROR! Unexpected char: %c\n", *in),
exit(3);
121 while (*in >=
'0' && *in <=
'9')
122 val = val*10 + (*in -
'0'),
124 return neg ? -val : val; }
130static bool match(B& in,
const char* str) {
132 for (i = 0; str[i] !=
'\0'; i++)
143static bool eagerMatch(B& in,
const char* str) {
144 for (; *str !=
'\0'; ++str, ++in)
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
int ZEXPORT gzread(gzFile file, voidp buf, unsigned len)