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/>).
18 struct kmer_t2
//use union later
26 struct kmer_t2
//use union later
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
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
50 //uint32_t edge_id;//added for soapdenovo
52 struct edge_node
* left
;
53 struct edge_node
* right
;
63 struct bucket2
//sparse-kmer
65 struct kmer_t2 kmer_t2
;
66 struct kmer_info kmer_info
;
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
;
79 struct bucket2
** store_pos
;
83 struct read_t
//reads bits struct ...
85 uint64_t read_bits
[100];
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
)
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 )
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 )
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
;
147 edge
= edge
->nxt_edge
;
151 edge
= tmp
->kmer_info
.right
;
156 edge
= edge
->nxt_edge
;
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
];
173 tmp
= tmp
->nxt_bucket
;
178 free ( ht
->store_pos
);