1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#ifndef MINIBATCH_INFO
#define MINIBATCH_INFO
#include <vector>
#include "LibraryFormat.hpp"
#include "ReadPair.hpp"
#include "UnpairedRead.hpp"
#include "AlignmentGroup.hpp"
#include "concurrentqueue.h"
template <typename AlnGroupT>
class MiniBatchInfo {
public:
MiniBatchInfo(size_t _batchNum, std::vector<AlnGroupT*>* _alignments, double _logForgettingMass) :
batchNum(_batchNum), alignments(_alignments), logForgettingMass(_logForgettingMass) {}
size_t batchNum;
//AlignmentBatch* alignments;
//std::vector<size_t>* readGroupBoundaries;
std::vector<AlnGroupT*>* alignments;
double logForgettingMass;
template <typename FragT>
void release(tbb::concurrent_queue<FragT*>& fragmentQueue,
moodycamel::ConcurrentQueue<AlnGroupT*>& alignmentGroupQueue){
// tbb::concurrent_bounded_queue<AlnGroupT*>& alignmentGroupQueue){
size_t ng{0};
for (auto& alnGroup : *alignments) {
//fragmentQueue.enqueue_bulk(alnGroup->alignments().begin(), alnGroup->alignments().size());
for (auto aln : alnGroup->alignments()) {
fragmentQueue.push(aln);
aln = nullptr;
}
alnGroup->alignments().clear();
//alignmentGroupQueue.push(alnGroup);
//alnGroup = nullptr;
++ng;
}
alignmentGroupQueue.enqueue_bulk(std::make_move_iterator(alignments->begin()), alignments->size());
delete alignments;
alignments = nullptr;
}
};
/*
template <>
void MiniBatchInfo<AlignmentGroup<ReadPair>>::release(
tbb::concurrent_bounded_queue<ReadPair*>& alignmentStructureQueue,
tbb::concurrent_bounded_queue<AlignmentGroup<ReadPair>*>& alignmentGroupQueue) {
size_t ng{0};
for (auto& alnGroup : *alignments) {
for (auto& aln : alnGroup->alignments()) {
alignmentStructureQueue.push(aln.read1);
alignmentStructureQueue.push(aln.read2);
aln.read1 = nullptr;
aln.read2 = nullptr;
}
alnGroup->alignments().clear();
alignmentGroupQueue.push(alnGroup);
//delete alnGroup;
alnGroup = nullptr;
++ng;
}
delete alignments;
alignments = nullptr;
}
*/
#endif // MINIBATCH_INFO
|