// ***************************************************************************
// BamMultiMerger_p.h (c) 2010 Derek Barnett
// Marth Lab, Department of Biology, Boston College
-// All rights reserved.
// ---------------------------------------------------------------------------
-// Last modified: 18 March 2011 (DB)
+// Last modified: 9 September 2011 (DB)
// ---------------------------------------------------------------------------
// Provides merging functionality for BamMultiReader. At this point, supports
// sorting results by (refId, position) or by read name.
virtual ~IBamMultiMerger(void) { }
public:
- virtual void Add(const ReaderAlignment& value) =0;
+ virtual void Add(ReaderAlignment value) =0;
virtual void Clear(void) =0;
virtual const ReaderAlignment& First(void) const =0;
virtual bool IsEmpty(void) const =0;
~PositionMultiMerger(void) { }
public:
- void Add(const ReaderAlignment& value);
+ void Add(ReaderAlignment value);
void Clear(void);
const ReaderAlignment& First(void) const;
bool IsEmpty(void) const;
~ReadNameMultiMerger(void) { }
public:
- void Add(const ReaderAlignment& value);
+ void Add(ReaderAlignment value);
void Clear(void);
const ReaderAlignment& First(void) const;
bool IsEmpty(void) const;
~UnsortedMultiMerger(void) { }
public:
- void Add(const ReaderAlignment& value);
+ void Add(ReaderAlignment value);
void Clear(void);
const ReaderAlignment& First(void) const;
bool IsEmpty(void) const;
// ------------------------------------------
// PositionMultiMerger implementation
-inline void PositionMultiMerger::Add(const ReaderAlignment& value) {
+inline void PositionMultiMerger::Add(ReaderAlignment value) {
const KeyType key( value.second->RefID, value.second->Position );
m_data.insert( ElementType(key, value) );
}
// ------------------------------------------
// ReadNameMultiMerger implementation
-inline void ReadNameMultiMerger::Add(const ReaderAlignment& value) {
- const KeyType key(value.second->Name);
- m_data.insert( ElementType(key, value) );
+inline void ReadNameMultiMerger::Add(ReaderAlignment value) {
+ BamAlignment* al = value.second;
+ if ( al->BuildCharData() ) {
+ const KeyType key(al->Name);
+ m_data.insert( ElementType(key, value) );
+ }
}
inline void ReadNameMultiMerger::Clear(void) {
// ------------------------------------------
// UnsortedMultiMerger implementation
-inline void UnsortedMultiMerger::Add(const ReaderAlignment& value) {
+inline void UnsortedMultiMerger::Add(ReaderAlignment value) {
m_data.push_back(value);
}