]> git.donarmstrong.com Git - samtools.git/blob - sam_header.h
Now possible to merge multiple HeaderDict dictionaries
[samtools.git] / sam_header.h
1 #ifndef __SAM_HEADER_H__
2 #define __SAM_HEADER_H__
3
4 #include "khash.h"
5 KHASH_MAP_INIT_STR(str,const char *)
6
7 // HeaderDict is a list_t of header lines. Each HeaderLine holds a list of tags.
8 struct _list_t
9 {
10     struct _list_t *next;
11     void *data;
12 };
13 typedef struct _list_t list_t;
14 typedef list_t HeaderDict;
15
16 typedef struct
17 {
18     char key[2];
19     char *value;
20 }
21 HeaderTag;
22
23 typedef struct
24 {
25     char type[2];
26     list_t *tags;
27 }
28 HeaderLine;
29
30
31 void debug(const char *format, ...);
32 void error(const char *format, ...);
33
34 HeaderDict *sam_header_parse(const char *headerText);
35 HeaderDict *sam_header_merge(int n, const HeaderDict **dicts);
36 void sam_header_free(HeaderDict *header);
37 char *sam_header_write(const HeaderDict *headerDict);   // returns a newly allocated string
38
39 khash_t(str) *sam_header_lookup_table(const HeaderDict *dict, char type[2], char key_tag[2], char value_tag[2]);
40
41 list_t *list_append(list_t *root, void *data);
42 void list_free(list_t *root);
43
44 //char *sam_header_get(const HeaderDict *d, char type[2], int i, char tag[2]);  
45 //int sam_header_ins(HeaderDict *d, char tp[2], int i, char tg[2], const char *s);  
46 //int sam_header_del(HeaderDict *d, char type[2], int i, char tag[2]);  
47
48 #endif