Changeset 3336


Ignore:
Timestamp:
Oct 25, 2014, 1:27:45 AM (7 years ago)
Author:
Peter
Message:

closes #816

Location:
trunk
Files:
1 deleted
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/test/cigar_iterator.cc

    r3329 r3336  
    2424#include "Suite.h"
    2525
    26 #include "yat/omic/CigarIterator.h"
    2726#include "yat/utility/Cigar.h"
     27#include "yat/utility/CigarIterator.h"
    2828
    2929#include <boost/cstdint.hpp>
     
    7272  }
    7373
    74   omic::CigarIterator iter(&*cigar.begin());
    75   omic::CigarIterator end(&*cigar.end());
     74  typedef std::vector<uint32_t>::const_iterator Base;
     75  utility::CigarIterator<Base> iter(cigar.begin());
     76  utility::CigarIterator<Base> end(cigar.end());
    7677  std::vector<uint32_t>::const_iterator iter2 = long_cigar.begin();
    7778  while (iter!=end) {
     
    8687  }
    8788
    88   omic::CigarIterator iter3(&*cigar.begin());
    89   omic::CigarIterator iter4(&*cigar.begin()+3, 1);
     89  utility::CigarIterator<Base> iter3(cigar.begin());
     90  utility::CigarIterator<Base> iter4(cigar.begin()+3, 1);
    9091  std::advance(iter3, oplen[0]+oplen[1]+oplen[2]+1);
    9192  if (iter3 != iter4) {
  • trunk/yat/omic/Makefile.am

    r3329 r3336  
    2727yat_libyat_la_SOURCES += yat/omic/BamWriteIterator.cc
    2828endif
    29 yat_libyat_la_SOURCES += yat/omic/CigarIterator.cc
    3029yat_libyat_la_SOURCES += yat/omic/Codon.cc
    3130yat_libyat_la_SOURCES += yat/omic/DNA.cc
     
    4544nobase_include_HEADERS += $(srcdir)/yat/omic/BamReadIterator.h
    4645nobase_include_HEADERS += $(srcdir)/yat/omic/BamWriteIterator.h
    47 nobase_include_HEADERS += $(srcdir)/yat/omic/CigarIterator.h
    4846nobase_include_HEADERS += $(srcdir)/yat/omic/config_bam.h
    4947nobase_include_HEADERS += $(srcdir)/yat/omic/Codon.h
  • trunk/yat/omic/Pileup.h

    r3335 r3336  
    2424
    2525#include "BamRead.h"
    26 #include "CigarIterator.h"
    27 
     26
     27#include "yat/utility/CigarIterator.h"
    2828#include "yat/utility/yat_assert.h"
    2929
     
    137137      // index of base pointed to
    138138      size_t qpos_;
    139       CigarIterator cigar_;
     139      yat::utility::CigarIterator<const uint32_t*> cigar_;
    140140      size_t skip_;
    141141      // return 0, 1, 2, or 3 see bam_cigar_type in yat/utility/Cigar.h
  • trunk/yat/utility/Aligner.h

    r3213 r3336  
    2424  along with yat. If not, see <http://www.gnu.org/licenses/>.
    2525*/
     26
     27#include "CigarIterator.h"
    2628
    2729#include <boost/cstdint.hpp>
     
    179181    public:
    180182      /**
     183         \since New in yat 0.13
     184       */
     185      typedef
     186      CigarIterator<std::deque<uint32_t>::const_iterator > const_iterator;
     187
     188      /**
     189         \return iterator pointing to first element
     190
     191         \since New in yat 0.13
     192       */
     193      const_iterator begin(void) const;
     194
     195      /**
    181196         Erases all elements.
    182197       */
    183198      void clear(void);
     199
     200      /**
     201         \return iterator pointing to one passed last element
     202
     203         \since New in yat 0.13
     204       */
     205      const_iterator end(void) const;
    184206
    185207      /**
  • trunk/yat/utility/CigarIterator.h

    r3335 r3336  
    1 #ifndef theplu_yat_omic_cigar_iterator
    2 #define theplu_yat_omic_cigar_iterator
     1#ifndef theplu_yat_utility_cigar_iterator
     2#define theplu_yat_utility_cigar_iterator
    33
    44// $Id$
     
    2929namespace theplu {
    3030namespace yat {
    31 namespace omic {
     31namespace utility {
    3232
    3333  /**
     
    4747     \since New in yat 0.13
    4848   */
     49  template<typename BASE>
    4950  class CigarIterator
    5051    : public boost::iterator_facade<
    51     CigarIterator, uint8_t, boost::bidirectional_traversal_tag, const uint8_t>
     52    CigarIterator<BASE>, uint8_t
     53    , boost::bidirectional_traversal_tag, const uint8_t>
    5254  {
    5355  public:
     
    6264       the third \c M.
    6365     */
    64     explicit CigarIterator(const uint32_t* p, size_t offset=0);
     66    explicit CigarIterator(BASE p, size_t offset=0);
    6567
    6668    /**
    6769       \return underlying iterator
    6870     */
    69     const uint32_t* base(void) const;
     71    BASE base(void) const;
    7072  private:
    7173    friend class boost::iterator_core_access;
    7274
    73     const uint32_t* base_;
     75    BASE base_;
    7476    size_t index_;
    7577
    7678    void decrement(void);
    77     reference dereference(void) const;
     79    uint8_t dereference(void) const;
    7880    bool equal(const CigarIterator& other) const;
    7981    void increment(void);
     
    8486  };
    8587
     88
     89  //// implementation  /////////////
     90
     91  template<typename BASE>
     92  CigarIterator<BASE>::CigarIterator(void)
     93    : base_(NULL) {}
     94
     95
     96  template<typename BASE>
     97  CigarIterator<BASE>::CigarIterator(BASE b, size_t x)
     98    : base_(b), index_(x) {}
     99
     100
     101  template<typename BASE>
     102  BASE CigarIterator<BASE>::base(void) const
     103  {
     104    return base_;
     105  }
     106
     107
     108  template<typename BASE>
     109  void CigarIterator<BASE>::decrement(void)
     110  {
     111    if (index_)
     112      --index_;
     113    else {
     114      --base_;
     115      index_ = bam_cigar_oplen(*base_)-1;
     116    }
     117  }
     118
     119
     120  template<typename BASE>
     121  uint8_t CigarIterator<BASE>::dereference(void) const
     122  {
     123    return bam_cigar_op(*base_);
     124  }
     125
     126
     127  template<typename BASE>
     128  bool CigarIterator<BASE>::equal(const CigarIterator& other) const
     129  {
     130    return base_==other.base_ && index_==other.index_;
     131  }
     132
     133
     134  template<typename BASE>
     135  void CigarIterator<BASE>::increment(void)
     136  {
     137    if (++index_ == bam_cigar_oplen(*base_)) {
     138      index_=0;
     139      ++base_;
     140    }
     141  }
     142
    86143}}}
    87144#endif
Note: See TracChangeset for help on using the changeset viewer.