modified: nfig1.py
[GalaxyCodeBases.git] / BGI / SOAPdenovo2 / standardPregraph / inc / kstring.h
blob22dbd69383bab625d8ebf1d1d9c7175af0295420
1 #ifndef KSTRING_H
2 #define KSTRING_H
4 #include <stdlib.h>
5 #include <string.h>
6 #include <stdint.h>
8 #ifndef kroundup32
9 #define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
10 #endif
12 #ifndef KSTRING_T
13 #define KSTRING_T kstring_t
14 typedef struct __kstring_t
16 size_t l, m;
17 char * s;
18 } kstring_t;
19 #endif
21 int ksprintf ( kstring_t * s, const char * fmt, ... );
22 int ksplit_core ( char * s, int delimiter, int * _max, int ** _offsets );
24 // calculate the auxiliary array, allocated by calloc()
25 int * ksBM_prep ( const uint8_t * pat, int m );
27 /* Search pat in str and returned the list of matches. The size of the
28 * list is returned as n_matches. _prep is the array returned by
29 * ksBM_prep(). If it is a NULL pointer, ksBM_prep() will be called. */
30 int * ksBM_search ( const uint8_t * str, int n, const uint8_t * pat, int m, int * _prep, int * n_matches );
32 static inline int kputsn ( const char * p, int l, kstring_t * s )
34 if ( s->l + l + 1 >= s->m )
36 s->m = s->l + l + 2;
37 kroundup32 ( s->m );
38 s->s = ( char * ) realloc ( s->s, s->m );
41 strncpy ( s->s + s->l, p, l );
42 s->l += l;
43 s->s[s->l] = 0;
44 return l;
47 static inline int kputs ( const char * p, kstring_t * s )
49 return kputsn ( p, strlen ( p ), s );
52 static inline int kputc ( int c, kstring_t * s )
54 if ( s->l + 1 >= s->m )
56 s->m = s->l + 2;
57 kroundup32 ( s->m );
58 s->s = ( char * ) realloc ( s->s, s->m );
61 s->s[s->l++] = c;
62 s->s[s->l] = 0;
63 return c;
66 static inline int * ksplit ( kstring_t * s, int delimiter, int * n )
68 int max = 0, *offsets = 0;
69 *n = ksplit_core ( s->s, delimiter, &max, &offsets );
70 return offsets;
73 #endif