Store Sequence sequence location in a shared_ptr class
[mussa.git] / alg / glseqbrowser.cpp
index 5d93c6ce6087b4f9ef2b3d54d2365da20b77b149..e9d55b985571fa2785fca31c10ee480bc8cefbd6 100644 (file)
@@ -336,15 +336,13 @@ void GlSeqBrowser::clear_selection()
 
 void GlSeqBrowser::push_sequence(const Sequence& s)
 {
-  boost::shared_ptr<Sequence> seq_copy(new Sequence(s));
-  GlSequence gs(seq_copy, color_mapper);
+  GlSequence gs(s, color_mapper);
   push_sequence(gs);
 }
 
-
 void GlSeqBrowser::push_sequence(boost::shared_ptr<Sequence> s)
 {
-  boost::shared_ptr<GlSequence> gs(new GlSequence(s, color_mapper));
+  boost::shared_ptr<GlSequence> gs(new GlSequence(*s, color_mapper));
   push_sequence(gs);
 }
 
@@ -462,9 +460,7 @@ list<TrackRegion> GlSeqBrowser::selectedTracks() const
 //! copy sequence from selected track using formating function
 template<class Item>
 size_t GlSeqBrowser::copySelectedTracks(std::list<Item>& result, 
-             Item (*formatter)(boost::shared_ptr<Sequence> s, 
-                               int left, 
-                               int right))
+             Item (*formatter)(const Sequence& s, int left, int right))
 {
   size_t base_pairs_copied = 0;
   result.clear();
@@ -480,7 +476,7 @@ size_t GlSeqBrowser::copySelectedTracks(std::list<Item>& result,
            << endl;
     } else {
       // we should be safe
-      boost::shared_ptr<Sequence> seq = track_container[track_index]->sequence();
+      Sequence seq(*track_container[track_index]);
       result.push_back(formatter(seq, track_i->left, track_i->right));
       base_pairs_copied += max(track_i->right-track_i->left, 0);
     }
@@ -493,15 +489,13 @@ size_t GlSeqBrowser::copySelectedTracksAsFasta(std::string& copy_buffer)
 {
   std::list<std::string> result;
   struct AsFasta {
-    static string formatter(boost::shared_ptr<Sequence> seq, 
-                            int left, 
-                            int right)
+    static string formatter(const Sequence& seq, int left, int right)
     {
       stringstream s;
-      s << ">" << seq->get_fasta_header() 
+      s << ">" << seq.get_fasta_header() 
         << "|" << "subregion=" << left << "-" << right+1
         << std::endl
-        << seq->subseq(left, right-left+1) << std::endl;
+        << seq.subseq(left, right-left+1) << std::endl;
       return s.str();
     }
   };
@@ -520,11 +514,11 @@ size_t GlSeqBrowser::copySelectedTracksAsFasta(std::string& copy_buffer)
 size_t GlSeqBrowser::copySelectedTracksAsSequences(std::list<Sequence>& result)
 {
   struct AsSequence {
-    static Sequence formatter(boost::shared_ptr<Sequence> seq, 
+    static Sequence formatter(const Sequence& seq, 
                               int left, 
                               int right)
     {
-      return seq->subseq(left, right-left+1);
+      return seq.subseq(left, right-left+1);
     }
   };
   return copySelectedTracks(result, AsSequence::formatter);
@@ -534,7 +528,7 @@ size_t GlSeqBrowser::copySelectedTracksAsSeqLocation(
     std::list<SequenceLocation>& result)
 {
   struct AsSeqLocation {
-    static SequenceLocation formatter(boost::shared_ptr<Sequence> seq, 
+    static SequenceLocation formatter(const Sequence& seq, 
                                       int left, 
                                       int right)
     {
@@ -549,12 +543,12 @@ size_t GlSeqBrowser::copySelectedTracksAsString(std::string& copy_buffer)
 {
   std::list<string> result;
   struct AsString {
-    static string formatter(boost::shared_ptr<Sequence> seq, 
+    static string formatter(const Sequence& seq, 
                             int left, 
                             int right)
     {
       stringstream s;
-      s << seq->subseq(left, right-left+1);
+      s << seq.subseq(left, right-left+1);
       return s.str();
     }
   };
@@ -704,12 +698,14 @@ void GlSeqBrowser::draw_segments() const
                        back_inserter(selected));
 
       if (not s.reversed) {
+        // forward
         if (selected_paths.size() == 0 or selected.size() > 0) {
           glColor4f(1.0, 0.0, 0.0, 1.0);
         } else {
           glColor4f(1.0, 0.7, 0.7, 0.4);
         }
       } else { 
+        // reverse
         if (selected_paths.size() == 0 or selected.size() > 0) {
           glColor4f(0.0, 0.0, 1.0, 1.0);
         } else {