@@ -222,27 +222,29 @@ std::pair<size_t, size_t> fillKmerPositionArray(KmerPosition<T> * kmerArray, siz
222
222
223
223
// add k-mer to represent the identity
224
224
if (static_cast <unsigned short >(seqHash) >= hashStartRange && static_cast <unsigned short >(seqHash) <= hashEndRange) {
225
- threadKmerBuffer[bufferPos].kmer = seqHash;
226
- threadKmerBuffer[bufferPos].id = seqId;
227
- threadKmerBuffer[bufferPos].pos = 0 ;
228
- threadKmerBuffer[bufferPos].seqLen = seq.L ;
229
225
if (hashDistribution != NULL ){
230
226
__sync_fetch_and_add (&hashDistribution[static_cast <unsigned short >(seqHash)], 1 );
231
227
}
232
- bufferPos++;
233
- if (bufferPos >= BUFFER_SIZE) {
234
- size_t writeOffset = __sync_fetch_and_add (&offset, bufferPos);
235
- if (writeOffset + bufferPos < kmerArraySize){
236
- if (kmerArray!=NULL ){
237
- memcpy (kmerArray + writeOffset, threadKmerBuffer, sizeof (KmerPosition<T>) * bufferPos);
228
+ else {
229
+ threadKmerBuffer[bufferPos].kmer = seqHash;
230
+ threadKmerBuffer[bufferPos].id = seqId;
231
+ threadKmerBuffer[bufferPos].pos = 0 ;
232
+ threadKmerBuffer[bufferPos].seqLen = seq.L ;
233
+ bufferPos++;
234
+ if (bufferPos >= BUFFER_SIZE) {
235
+ size_t writeOffset = __sync_fetch_and_add (&offset, bufferPos);
236
+ if (writeOffset + bufferPos < kmerArraySize){
237
+ if (kmerArray!=NULL ){
238
+ memcpy (kmerArray + writeOffset, threadKmerBuffer, sizeof (KmerPosition<T>) * bufferPos);
239
+ }
240
+ } else {
241
+ Debug (Debug::ERROR) << " Kmer array overflow. currKmerArrayOffset=" << writeOffset
242
+ << " , kmerBufferPos=" << bufferPos
243
+ << " , kmerArraySize=" << kmerArraySize <<" .\n " ;
244
+ EXIT (EXIT_FAILURE);
238
245
}
239
- } else {
240
- Debug (Debug::ERROR) << " Kmer array overflow. currKmerArrayOffset=" << writeOffset
241
- << " , kmerBufferPos=" << bufferPos
242
- << " , kmerArraySize=" << kmerArraySize <<" .\n " ;
243
- EXIT (EXIT_FAILURE);
246
+ bufferPos = 0 ;
244
247
}
245
- bufferPos = 0 ;
246
248
}
247
249
}
248
250
@@ -299,14 +301,15 @@ std::pair<size_t, size_t> fillKmerPositionArray(KmerPosition<T> * kmerArray, siz
299
301
// tmpKmerIdx=BIT_CLEAR(tmpKmerIdx, 63);
300
302
// std::cout << seqId << "\t" << (kmers + kmerIdx)->score << "\t" << tmpKmerIdx << std::endl;
301
303
// }
304
+ if (hashDistribution != NULL ){
305
+ __sync_fetch_and_add (&hashDistribution[(kmers + kmerIdx)->score ], 1 );
306
+ continue ;
307
+ }
302
308
threadKmerBuffer[bufferPos].kmer = (kmers + kmerIdx)->kmer ;
303
309
threadKmerBuffer[bufferPos].id = seqId;
304
310
threadKmerBuffer[bufferPos].pos = (kmers + kmerIdx)->pos ;
305
311
threadKmerBuffer[bufferPos].seqLen = seq.L ;
306
312
bufferPos++;
307
- if (hashDistribution != NULL ){
308
- __sync_fetch_and_add (&hashDistribution[(kmers + kmerIdx)->score ], 1 );
309
- }
310
313
311
314
if (bufferPos >= BUFFER_SIZE) {
312
315
size_t writeOffset = __sync_fetch_and_add (&offset, bufferPos);
0 commit comments