X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fapi%2FSamReadGroupDictionary.cpp;h=c501773e58baa69455b59d8e06496c7d7d70a7ab;hb=9f1ce8c47aeadb6dc1320b52ee671c3341b97935;hp=e6f8a056bec3e4ea72c6c26465c318aeb6f99108;hpb=8c80d760637f8df39262683cd2570f0589423d36;p=bamtools.git diff --git a/src/api/SamReadGroupDictionary.cpp b/src/api/SamReadGroupDictionary.cpp index e6f8a05..c501773 100644 --- a/src/api/SamReadGroupDictionary.cpp +++ b/src/api/SamReadGroupDictionary.cpp @@ -1,14 +1,13 @@ // *************************************************************************** // SamReadGroupDictionary.cpp (c) 2010 Derek Barnett // Marth Lab, Department of Biology, Boston College -// All rights reserved. // --------------------------------------------------------------------------- -// Last modified: 4 March 2011 (DB) +// Last modified: 10 October 2011 (DB) // --------------------------------------------------------------------------- // Provides methods for operating on a collection of SamReadGroup entries. // *************************************************************************** -#include +#include "api/SamReadGroupDictionary.h" using namespace BamTools; #include @@ -39,11 +38,11 @@ SamReadGroupDictionary::SamReadGroupDictionary(const SamReadGroupDictionary& oth SamReadGroupDictionary::~SamReadGroupDictionary(void) { } /*! \fn void SamReadGroupDictionary::Add(const SamReadGroup& readGroup) - \brief Adds a read group to the dictionary. + \brief Appends a read group to the dictionary. - Duplicate entries are discarded. + Duplicate entries are silently discarded. - \param readGroup entry to be added + \param[in] readGroup entry to be added */ void SamReadGroupDictionary::Add(const SamReadGroup& readGroup) { if ( IsEmpty() || !Contains(readGroup) ) @@ -51,23 +50,38 @@ void SamReadGroupDictionary::Add(const SamReadGroup& readGroup) { } /*! \fn void SamReadGroupDictionary::Add(const std::string& readGroupId) - \brief Adds a read group to the dictionary. + \brief Appends a read group to the dictionary. This is an overloaded function. - \param readGroupId ID of read group to be added + \param[in] readGroupId ID of read group to be added \sa Add() */ void SamReadGroupDictionary::Add(const std::string& readGroupId) { Add( SamReadGroup(readGroupId) ); } +/*! \fn void SamReadGroupDictionary::Add(const SamReadGroupDictionary& readGroups) + \brief Appends another read group dictionary to this one. + + This is an overloaded function. + + \param[in] readGroups entries to be added + \sa Add() +*/ +void SamReadGroupDictionary::Add(const SamReadGroupDictionary& readGroups) { + SamReadGroupConstIterator rgIter = readGroups.ConstBegin(); + SamReadGroupConstIterator rgEnd = readGroups.ConstEnd(); + for ( ; rgIter != rgEnd; ++rgIter ) + Add(*rgIter); +} + /*! \fn void SamReadGroupDictionary::Add(const std::vector& readGroups) - \brief Adds multiple read groups to the dictionary. + \brief Appends multiple read groups to the dictionary. This is an overloaded function. - \param readGroups entries to be added + \param[in] readGroups entries to be added \sa Add() */ void SamReadGroupDictionary::Add(const std::vector& readGroups) { @@ -78,11 +92,11 @@ void SamReadGroupDictionary::Add(const std::vector& readGroups) { } /*! \fn void SamReadGroupDictionary::Add(const std::vector& readGroupIds) - \brief Adds multiple read groups to the dictionary. + \brief Appends multiple read groups to the dictionary. This is an overloaded function. - \param readGroupIds IDs of read groups to be added + \param[in] readGroupIds IDs of read groups to be added \sa Add() */ void SamReadGroupDictionary::Add(const std::vector& readGroupIds) { @@ -101,10 +115,10 @@ SamReadGroupIterator SamReadGroupDictionary::Begin(void) { } /*! \fn SamReadGroupConstIterator SamReadGroupDictionary::Begin(void) const + \return an STL const_iterator pointing to the first read group This is an overloaded function. - \return a const STL iterator pointing to the first read group \sa ConstBegin(), End() */ SamReadGroupConstIterator SamReadGroupDictionary::Begin(void) const { @@ -119,7 +133,7 @@ void SamReadGroupDictionary::Clear(void) { } /*! \fn SamReadGroupConstIterator SamReadGroupDictionary::ConstBegin(void) const - \return a const STL iterator pointing to the first read group + \return an STL const_iterator pointing to the first read group \sa Begin(), ConstEnd() */ SamReadGroupConstIterator SamReadGroupDictionary::ConstBegin(void) const { @@ -127,7 +141,7 @@ SamReadGroupConstIterator SamReadGroupDictionary::ConstBegin(void) const { } /*! \fn SamReadGroupConstIterator SamReadGroupDictionary::ConstEnd(void) const - \return a const STL iterator pointing to the imaginary entry after the last read group + \return an STL const_iterator pointing to the imaginary entry after the last read group \sa ConstBegin(), End() */ SamReadGroupConstIterator SamReadGroupDictionary::ConstEnd(void) const { @@ -137,22 +151,23 @@ SamReadGroupConstIterator SamReadGroupDictionary::ConstEnd(void) const { /*! \fn bool SamReadGroupDictionary::Contains(const std::string& readGroupId) const \brief Returns true if dictionary contains read group. - This is an overloaded function. - - \param readGroupId search for read group matching this ID + \param[in] readGroupId search for read group matching this ID \return \c true if dictionary contains a read group with this ID */ bool SamReadGroupDictionary::Contains(const std::string& readGroupId) const { - return Contains( SamReadGroup(readGroupId) ); + return ( IndexOf(readGroupId) != (int)m_data.size() ); } /*! \fn bool SamReadGroupDictionary::Contains(const SamReadGroup& readGroup) const - \brief Returns true if dictionary contains read group. - \param readGroup search for this read group - \return \c true if dictionary contains read group + \brief Returns true if dictionary contains read group (matching on ID). + + This is an overloaded function. + + \param[in] readGroup search for this read group + \return \c true if dictionary contains read group (matching on ID). */ bool SamReadGroupDictionary::Contains(const SamReadGroup& readGroup) const { - return ( IndexOf(readGroup) != (int)m_data.size() ); + return Contains( readGroup.ID ); } /*! \fn SamReadGroupIterator SamReadGroupDictionary::End(void) @@ -164,26 +179,27 @@ SamReadGroupIterator SamReadGroupDictionary::End(void) { } /*! \fn SamReadGroupConstIterator SamReadGroupDictionary::End(void) const + \return an STL const_iterator pointing to the imaginary entry after the last read group This is an overloaded function. - \return a const STL iterator pointing to the imaginary entry after the last read group \sa Begin(), ConstEnd() */ SamReadGroupConstIterator SamReadGroupDictionary::End(void) const { return m_data.end(); } -/*! \fn int SamReadGroupDictionary::IndexOf(const SamReadGroup& readGroup) const +/*! \fn int SamReadGroupDictionary::IndexOf(const std::string& readGroupId) const \internal \return index of read group if found. Otherwise, returns vector::size() (invalid index). */ -int SamReadGroupDictionary::IndexOf(const SamReadGroup& readGroup) const { +int SamReadGroupDictionary::IndexOf(const std::string& readGroupId) const { SamReadGroupConstIterator begin = ConstBegin(); SamReadGroupConstIterator iter = begin; SamReadGroupConstIterator end = ConstEnd(); for ( ; iter != end; ++iter ) { - if ( *iter == readGroup ) + const SamReadGroup& current = (*iter); + if ( current.ID == readGroupId ) break; } return distance( begin, iter ); @@ -198,32 +214,33 @@ bool SamReadGroupDictionary::IsEmpty(void) const { } /*! \fn void SamReadGroupDictionary::Remove(const SamReadGroup& readGroup) - \brief Removes read group from dictionary, if found. - \param readGroup read group to remove + \brief Removes read group from dictionary, if found (matching on ID). + + This is an overloaded function. + + \param[in] readGroup read group to remove (matches on ID) */ void SamReadGroupDictionary::Remove(const SamReadGroup& readGroup) { - if ( Contains(readGroup) ) - m_data.erase( m_data.begin() + IndexOf(readGroup) ); + Remove( readGroup.ID ); } /*! \fn void SamReadGroupDictionary::Remove(const std::string& readGroupId) \brief Removes read group from dictionary, if found. - This is an overloaded function. - - \param readGroupId ID of read group to remove + \param[in] readGroupId ID of read group to remove \sa Remove() */ void SamReadGroupDictionary::Remove(const std::string& readGroupId) { - Remove( SamReadGroup(readGroupId) ); + if ( Contains(readGroupId) ) + m_data.erase( m_data.begin() + IndexOf(readGroupId) ); } /*! \fn void SamReadGroupDictionary::Remove(const std::vector& readGroups) - \brief Removes multiple read groups from dictionary. + \brief Removes multiple read groups from dictionary (matching on ID). This is an overloaded function. - \param readGroups read groups to remove + \param[in] readGroups read groups to remove \sa Remove() */ void SamReadGroupDictionary::Remove(const std::vector& readGroups) { @@ -238,7 +255,7 @@ void SamReadGroupDictionary::Remove(const std::vector& readGroups) This is an overloaded function. - \param readGroupIds IDs of the read groups to remove + \param[in] readGroupIds IDs of the read groups to remove \sa Remove() */ void SamReadGroupDictionary::Remove(const std::vector& readGroupIds) { @@ -259,19 +276,17 @@ int SamReadGroupDictionary::Size(void) const { /*! \fn SamReadGroup& SamReadGroupDictionary::operator[](const std::string& readGroupId) \brief Retrieves the modifiable SamReadGroup that matches \a readGroupId. - NOTE - If the dictionary contains no read group matching this ID, this function inserts - a new one with this ID, and returns a reference to it. - - If you want to avoid this insertion behavior, check the result of Contains() before - using this operator. + \note If the dictionary contains no read group matching this ID, this function inserts + a new one with this ID, and returns a reference to it. If you want to avoid this insertion + behavior, check the result of Contains() before using this operator. - \param readGroupId ID of read group to retrieve + \param[in] readGroupId ID of read group to retrieve \return a modifiable reference to the SamReadGroup associated with the ID */ SamReadGroup& SamReadGroupDictionary::operator[](const std::string& readGroupId) { // look up read group ID - int index = IndexOf( SamReadGroup(readGroupId) ); + int index = IndexOf(readGroupId); // if found, return read group at index if ( index != (int)m_data.size() )