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

closes #816

File:
1 moved

Legend:

Unmodified
Added
Removed
  • 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.