135 lines
4.2 KiB
C
135 lines
4.2 KiB
C
/* The MIT License
|
|
|
|
Copyright (c) 2018- Dana-Farber Cancer Institute
|
|
2009-2018 Broad Institute, Inc.
|
|
2008-2009 Genome Research Ltd. (GRL)
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
a copy of this software and associated documentation files (the
|
|
"Software"), to deal in the Software without restriction, including
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
*/
|
|
#ifndef LH3_UTILS_H
|
|
#define LH3_UTILS_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <zlib.h>
|
|
|
|
#ifdef SHOW_PERF
|
|
|
|
extern int64_t time_ksw_extend2,
|
|
time_ksw_global2,
|
|
time_ksw_align2,
|
|
time_bwt_smem1a,
|
|
time_seed_1,
|
|
time_seed_2,
|
|
time_seed_3,
|
|
time_fmt_smem_0,
|
|
time_bwt_extend,
|
|
time_bwt_occ4,
|
|
time_bwt_sa,
|
|
time_bwt_sa_read,
|
|
time_bns;
|
|
|
|
extern int64_t dn, n16, n17, n18, n19, nall, num_sa;
|
|
|
|
extern FILE *fp1;
|
|
|
|
#endif
|
|
|
|
#ifdef __GNUC__
|
|
// Tell GCC to validate printf format string and args
|
|
#define ATTRIBUTE(list) __attribute__ (list)
|
|
#else
|
|
#define ATTRIBUTE(list)
|
|
#endif
|
|
|
|
#define err_fatal_simple(msg) _err_fatal_simple(__func__, msg)
|
|
#define err_fatal_simple_core(msg) _err_fatal_simple_core(__func__, msg)
|
|
|
|
#define xopen(fn, mode) err_xopen_core(__func__, fn, mode)
|
|
#define xreopen(fn, mode, fp) err_xreopen_core(__func__, fn, mode, fp)
|
|
#define xzopen(fn, mode) err_xzopen_core(__func__, fn, mode)
|
|
|
|
#define xassert(cond, msg) if ((cond) == 0) _err_fatal_simple_core(__func__, msg)
|
|
|
|
typedef struct {
|
|
uint64_t x, y;
|
|
} pair64_t;
|
|
|
|
typedef struct { size_t n, m; uint64_t *a; } uint64_v;
|
|
typedef struct { size_t n, m; pair64_t *a; } pair64_v;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void err_fatal(const char *header, const char *fmt, ...) ATTRIBUTE((noreturn));
|
|
void err_fatal_core(const char *header, const char *fmt, ...) ATTRIBUTE((noreturn));
|
|
void _err_fatal_simple(const char *func, const char *msg) ATTRIBUTE((noreturn));
|
|
void _err_fatal_simple_core(const char *func, const char *msg) ATTRIBUTE((noreturn));
|
|
FILE *err_xopen_core(const char *func, const char *fn, const char *mode);
|
|
FILE *err_xreopen_core(const char *func, const char *fn, const char *mode, FILE *fp);
|
|
gzFile err_xzopen_core(const char *func, const char *fn, const char *mode);
|
|
size_t err_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
|
|
size_t err_fread_noeof(void *ptr, size_t size, size_t nmemb, FILE *stream);
|
|
|
|
int err_gzread(gzFile file, void *ptr, unsigned int len);
|
|
int err_fseek(FILE *stream, long offset, int whence);
|
|
#define err_rewind(FP) err_fseek((FP), 0, SEEK_SET)
|
|
long err_ftell(FILE *stream);
|
|
int err_fprintf(FILE *stream, const char *format, ...)
|
|
ATTRIBUTE((format(printf, 2, 3)));
|
|
int err_printf(const char *format, ...)
|
|
ATTRIBUTE((format(printf, 1, 2)));
|
|
int err_fputc(int c, FILE *stream);
|
|
#define err_putchar(C) err_fputc((C), stdout)
|
|
int err_fputs(const char *s, FILE *stream);
|
|
int err_puts(const char *s);
|
|
int err_fflush(FILE *stream);
|
|
int err_fclose(FILE *stream);
|
|
int err_gzclose(gzFile file);
|
|
|
|
double cputime(void);
|
|
double realtime(void);
|
|
int64_t realtime_msec(void);
|
|
long peakrss(void);
|
|
|
|
void ks_introsort_64 (size_t n, uint64_t *a);
|
|
void ks_introsort_128(size_t n, pair64_t *a);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
static inline uint64_t hash_64(uint64_t key)
|
|
{
|
|
key += ~(key << 32);
|
|
key ^= (key >> 22);
|
|
key += ~(key << 13);
|
|
key ^= (key >> 8);
|
|
key += (key << 3);
|
|
key ^= (key >> 15);
|
|
key += ~(key << 27);
|
|
key ^= (key >> 31);
|
|
return key;
|
|
}
|
|
|
|
#endif
|