yat/omic/BamReadSequenceIterator.cc

Code
Comments
Other
Rev Date Author Line
4345 19 Apr 23 peter 1 // $Id$
4345 19 Apr 23 peter 2
4345 19 Apr 23 peter 3 /*
4345 19 Apr 23 peter 4   Copyright (C) 2023 Peter Johansson
4345 19 Apr 23 peter 5
4345 19 Apr 23 peter 6   This file is part of the yat library, https://dev.thep.lu.se/yat
4345 19 Apr 23 peter 7
4345 19 Apr 23 peter 8   The yat library is free software; you can redistribute it and/or
4345 19 Apr 23 peter 9   modify it under the terms of the GNU General Public License as
4345 19 Apr 23 peter 10   published by the Free Software Foundation; either version 3 of the
4345 19 Apr 23 peter 11   License, or (at your option) any later version.
4345 19 Apr 23 peter 12
4345 19 Apr 23 peter 13   The yat library is distributed in the hope that it will be useful,
4345 19 Apr 23 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4345 19 Apr 23 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4345 19 Apr 23 peter 16   General Public License for more details.
4345 19 Apr 23 peter 17
4345 19 Apr 23 peter 18   You should have received a copy of the GNU General Public License
4345 19 Apr 23 peter 19   along with yat. If not, see <https://www.gnu.org/licenses/>.
4345 19 Apr 23 peter 20 */
4345 19 Apr 23 peter 21
4345 19 Apr 23 peter 22 #include <config.h>
4345 19 Apr 23 peter 23
4345 19 Apr 23 peter 24 #include "BamReadSequenceIterator.h"
4345 19 Apr 23 peter 25
4345 19 Apr 23 peter 26 #include "BamRead.h"
4345 19 Apr 23 peter 27
4345 19 Apr 23 peter 28 #include <cassert>
4345 19 Apr 23 peter 29
4345 19 Apr 23 peter 30 namespace theplu {
4345 19 Apr 23 peter 31 namespace yat {
4345 19 Apr 23 peter 32 namespace omic {
4345 19 Apr 23 peter 33
4345 19 Apr 23 peter 34   BamReadSequenceIterator::BamReadSequenceIterator(void)
4345 19 Apr 23 peter 35     : bam_(nullptr)
4345 19 Apr 23 peter 36   {}
4345 19 Apr 23 peter 37
4345 19 Apr 23 peter 38
4345 19 Apr 23 peter 39   BamReadSequenceIterator::BamReadSequenceIterator(const BamRead& bam,
4345 19 Apr 23 peter 40                                                    size_t index)
4345 19 Apr 23 peter 41     : bam_(&bam), index_(index)
4345 19 Apr 23 peter 42   {
4345 19 Apr 23 peter 43     update();
4345 19 Apr 23 peter 44   }
4345 19 Apr 23 peter 45
4345 19 Apr 23 peter 46
4345 19 Apr 23 peter 47   void
4345 19 Apr 23 peter 48   BamReadSequenceIterator::advance(BamReadSequenceIterator::difference_type n)
4345 19 Apr 23 peter 49   {
4345 19 Apr 23 peter 50     index_ += n;
4345 19 Apr 23 peter 51     update();
4345 19 Apr 23 peter 52   }
4345 19 Apr 23 peter 53
4345 19 Apr 23 peter 54
4345 19 Apr 23 peter 55   void BamReadSequenceIterator::decrement(void)
4345 19 Apr 23 peter 56   {
4345 19 Apr 23 peter 57     assert(index_);
4345 19 Apr 23 peter 58     --index_;
4345 19 Apr 23 peter 59     update();
4345 19 Apr 23 peter 60   }
4345 19 Apr 23 peter 61
4345 19 Apr 23 peter 62
4345 19 Apr 23 peter 63   BamReadSequenceIterator::reference
4345 19 Apr 23 peter 64   BamReadSequenceIterator::dereference(void) const
4345 19 Apr 23 peter 65   {
4345 19 Apr 23 peter 66     assert(bam_);
4345 19 Apr 23 peter 67     assert(index_ < bam_->sequence_length());
4345 19 Apr 23 peter 68     return value_;
4345 19 Apr 23 peter 69   }
4345 19 Apr 23 peter 70
4345 19 Apr 23 peter 71
4345 19 Apr 23 peter 72   typename BamReadSequenceIterator::difference_type
4345 19 Apr 23 peter 73   BamReadSequenceIterator::distance_to(const BamReadSequenceIterator& other) const
4345 19 Apr 23 peter 74   {
4345 19 Apr 23 peter 75     return other.index_ - index_;
4345 19 Apr 23 peter 76   }
4345 19 Apr 23 peter 77
4345 19 Apr 23 peter 78
4345 19 Apr 23 peter 79
4345 19 Apr 23 peter 80   bool
4345 19 Apr 23 peter 81   BamReadSequenceIterator::equal(const BamReadSequenceIterator& other) const
4345 19 Apr 23 peter 82   {
4345 19 Apr 23 peter 83     return index_ == other.index_ && bam_ == other.bam_;
4345 19 Apr 23 peter 84   }
4345 19 Apr 23 peter 85
4345 19 Apr 23 peter 86
4345 19 Apr 23 peter 87   void BamReadSequenceIterator::increment(void)
4345 19 Apr 23 peter 88   {
4345 19 Apr 23 peter 89     ++index_;
4345 19 Apr 23 peter 90     update();
4345 19 Apr 23 peter 91   }
4345 19 Apr 23 peter 92
4345 19 Apr 23 peter 93
4345 19 Apr 23 peter 94   void BamReadSequenceIterator::update(void)
4345 19 Apr 23 peter 95   {
4345 19 Apr 23 peter 96     assert(bam_);
4345 19 Apr 23 peter 97     if (index_ < bam_->sequence_length()) {
4345 19 Apr 23 peter 98       value_.base() = bam_->sequence_str(index_);
4345 19 Apr 23 peter 99       value_.qual() = bam_->qual(index_);
4345 19 Apr 23 peter 100     }
4345 19 Apr 23 peter 101   }
4345 19 Apr 23 peter 102
4345 19 Apr 23 peter 103
4345 19 Apr 23 peter 104   // BamReadSequenceQuality
4345 19 Apr 23 peter 105
4345 19 Apr 23 peter 106   const char& BamReadSequenceQuality::base(void) const
4345 19 Apr 23 peter 107   {
4345 19 Apr 23 peter 108     return base_;
4345 19 Apr 23 peter 109   }
4345 19 Apr 23 peter 110
4345 19 Apr 23 peter 111
4345 19 Apr 23 peter 112   const uint8_t& BamReadSequenceQuality::qual(void) const
4345 19 Apr 23 peter 113   {
4345 19 Apr 23 peter 114     return qual_;
4345 19 Apr 23 peter 115   }
4345 19 Apr 23 peter 116
4345 19 Apr 23 peter 117
4345 19 Apr 23 peter 118   char& BamReadSequenceQuality::base(void)
4345 19 Apr 23 peter 119   {
4345 19 Apr 23 peter 120     return base_;
4345 19 Apr 23 peter 121   }
4345 19 Apr 23 peter 122
4345 19 Apr 23 peter 123
4345 19 Apr 23 peter 124   uint8_t& BamReadSequenceQuality::qual(void)
4345 19 Apr 23 peter 125   {
4345 19 Apr 23 peter 126     return qual_;
4345 19 Apr 23 peter 127   }
4345 19 Apr 23 peter 128
4345 19 Apr 23 peter 129
4345 19 Apr 23 peter 130   bool operator==(const BamReadSequenceQuality& lhs,
4345 19 Apr 23 peter 131                   const BamReadSequenceQuality& rhs)
4345 19 Apr 23 peter 132   {
4345 19 Apr 23 peter 133     return lhs.base() == rhs.base() && lhs.qual() == rhs.qual();
4345 19 Apr 23 peter 134   }
4345 19 Apr 23 peter 135
4345 19 Apr 23 peter 136 }}}