modified: nfig1.py
[GalaxyCodeBases.git] / BGI / SOAPdenovo2 / sparsePregraph / inc / core.h
blob46c330fa8449acf3b02c4a6621c5c1fcd3a04c4f
1 /*
2 * inc/core.h
4 * This file is part of SOAPdenovo.
6 * Part of this file is refered and modified from SparseAssembler
7 * (See <http://sourceforge.net/projects/sparseassembler/>).
9 */
11 #ifndef _CORE_H
12 #define _CORE_H
14 #include "stdinc.h"
17 #ifdef _63MER_
18 struct kmer_t2 //use union later
20 uint64_t kmer[2];
22 #endif
25 #ifdef _127MER_
26 struct kmer_t2 //use union later
28 uint64_t kmer[4];
30 #endif
34 struct edge_node // kmer-edge the connection between sparse-kmer
36 uint64_t edge: 50, edge_cov: 7, len: 6, used: 1;
37 struct edge_node * nxt_edge;
41 //#pragma pack(4) // do pack(4) later
42 struct kmer_info
44 //uint8_t used:1,split_left:1,split_right:1,removed:1,flip:1,marked:1,repeat:1;
46 uint64_t used: 1, linear: 1, deleted: 1, single: 1, inEdge: 2, twin: 2, cov1: 16; //added for soapdenovo
48 //uint16_t cov1:16;
50 //uint32_t edge_id;//added for soapdenovo
52 struct edge_node * left;
53 struct edge_node * right;
58 struct kmer_info_r1
60 uint16_t cov1: 16;
63 struct bucket2 //sparse-kmer
65 struct kmer_t2 kmer_t2;
66 struct kmer_info kmer_info;
67 bucket2 * nxt_bucket;
70 struct bucket2_r1 //sparse-kmer struct for round1 ,
72 struct kmer_t2 kmer_t2;
73 struct kmer_info_r1 kmer_info;
74 bucket2_r1 * nxt_bucket;
77 struct hashtable2
79 struct bucket2 ** store_pos;
80 size_t ht_sz;
83 struct read_t //reads bits struct ...
85 uint64_t read_bits[100];
86 int readLen;
91 //function for hashtable
92 //void Init_HT2(struct hashtable2* ht,size_t ht_sz);
93 //bool look_up_in_a_list2_r1(struct kmer_t2 *seq,struct bucket2_r1 *** ptr);
94 //bool look_up_in_a_list2(struct kmer_t2 *seq,struct bucket2 *** ptr);
95 //void free_hashtable(hashtable2 *ht);
97 inline void Init_HT2 ( struct hashtable2 * ht, size_t ht_sz )
99 ht->ht_sz = ht_sz;
100 ht->store_pos = ( struct bucket2 ** ) calloc ( ht_sz, sizeof ( struct bucket2 * ) );
102 for ( size_t i = 0; i < ht_sz; ++i )
104 ht->store_pos[i] = NULL;
109 inline bool look_up_in_a_list2_r1 ( struct kmer_t2 * seq, struct bucket2_r1 ** * ptr )
111 while ( ( **ptr ) != NULL )
113 if ( memcmp ( & ( ( **ptr )->kmer_t2.kmer ), & ( seq->kmer ), sizeof ( kmer_t2 ) ) == 0 )
115 break;
118 ( *ptr ) = & ( ( **ptr )->nxt_bucket );
121 return ( ( **ptr ) != NULL );
124 inline bool look_up_in_a_list2 ( struct kmer_t2 * seq, struct bucket2 ** * ptr )
126 while ( ( **ptr ) != NULL )
128 if ( memcmp ( & ( ( **ptr )->kmer_t2.kmer ), & ( seq->kmer ), sizeof ( kmer_t2 ) ) == 0 )
130 break;
133 ( *ptr ) = & ( ( **ptr )->nxt_bucket );
136 return ( ( **ptr ) != NULL );
139 inline void free_bucket ( bucket2 * tmp )
141 edge_node * edge, *edge2;
142 edge = tmp->kmer_info.left;
144 while ( edge )
146 edge2 = edge;
147 edge = edge->nxt_edge;
148 free ( edge );
151 edge = tmp->kmer_info.right;
153 while ( edge )
155 edge2 = edge;
156 edge = edge->nxt_edge;
157 free ( edge );
160 free ( tmp );
162 inline void free_hashtable ( hashtable2 * ht )
164 bucket2 * tmp, *tmp2;
166 for ( size_t i = 0; i < ht->ht_sz; ++i )
168 tmp = ( ht->store_pos ) [i];
170 while ( tmp )
172 tmp2 = tmp;
173 tmp = tmp->nxt_bucket;
174 free ( tmp2 );
178 free ( ht->store_pos );
184 #endif