Sequence::rev_comp works on subsequences
[mussa.git] / alg / sequence.cpp
index 3ac4dd0da70ebc84e5e5931e287195a74db3c294..9abbbcde8b6285e7c6f01d6d3746023b833a7a74 100644 (file)
@@ -197,14 +197,14 @@ void Sequence::load_fasta(fs::path file_path, alphabet_ref a,
   }
 }
 
-void Sequence::load_fasta(std::iostream& file, 
+void Sequence::load_fasta(std::istream& file, 
                           int seq_num, int start_index, int end_index)
 {
   load_fasta(file, alphabet, seq_num, start_index, end_index);
 }
 
 void
-Sequence::load_fasta(std::iostream& data_file, alphabet_ref a, 
+Sequence::load_fasta(std::istream& data_file, alphabet_ref a, 
                      int seq_num, 
                      int start_index, int end_index)
 {
@@ -580,9 +580,9 @@ Sequence Sequence::rev_comp() const
   std::string rc_map = create_reverse_map();
 
   // reverse and convert
-  seq_string::const_reverse_iterator seq_i;
-  seq_string::const_reverse_iterator seq_end = seq->rend();  
-  for(seq_i = seq->rbegin(); 
+  Sequence::const_reverse_iterator seq_i;
+  Sequence::const_reverse_iterator seq_end = rend();  
+  for(seq_i = rbegin(); 
       seq_i != seq_end;
       ++seq_i)
   {
@@ -711,6 +711,23 @@ Sequence::const_iterator Sequence::end() const
   }
 }
 
+Sequence::const_reverse_iterator Sequence::rbegin() const
+{
+  if (seq and seq_count != 0)
+    return seq->rbegin()+(seq->size()-(seq_start+seq_count));
+  else 
+    return Sequence::const_reverse_iterator();
+}
+
+Sequence::const_reverse_iterator Sequence::rend() const
+{
+  if (seq and seq_count != 0) {
+    return rbegin() + seq_count;
+  } else {
+    return Sequence::const_reverse_iterator();
+  }
+}
+
 bool Sequence::empty() const
 {
   return (seq_count == 0) ? true : false;