#include #include #include #include "util.h" // base转成2bit值 int bval(char b) { if (b == 'A') return 0; if (b == 'C') return 1; if (b == 'G') return 2; if (b == 'T') return 3; return 4; } // 互补碱基值 int cbval(char b) { return 3 - bval(b); } double realtime(void) { struct timeval tp; struct timezone tzp; gettimeofday(&tp, &tzp); return tp.tv_sec + tp.tv_usec * 1e-6; } // 打印故障信息,并终止程序 void _err_fatal_simple_core(const char *func, const char *msg) { fprintf(stderr, "[%s] %s Abort!\n", func, msg); abort(); } // 读取数据 bwtint_t fread_fix(FILE *fp, bwtint_t size, void *a) { /* Mac/Darwin has a bug when reading data longer than 2GB. This function fixes this issue by reading data in small chunks */ const int bufsize = 0x1000000; // 16M block bwtint_t offset = 0; while (size) { int x = bufsize < size ? bufsize : size; if ((x = fread((uint8_t *)a + offset, 1, x, fp)) == 0) break; size -= x; offset += x; } return offset; }