fix problems with motif changes not showing up in sequencebrowser
[mussa.git] / alg / sequence.hpp
index 80aa49f75e17bcf9ca572de2d9b8c53658ea31af..9c7ddd4a1e9fb8a397e1332f95dd346ac19ca462 100644 (file)
@@ -72,7 +72,7 @@ struct motif : public annot
 {
   std::string sequence;
 
-  motif() :  annot(), sequence("") {};
+  motif() : annot(), sequence("") {};
   //! this constructor is for when we're adding motifs to our annotations
   motif(int begin, std::string motif);
   ~motif();
@@ -88,6 +88,8 @@ private:
 };
 BOOST_CLASS_EXPORT(motif);
 
+class Sequence;
+typedef boost::shared_ptr<Sequence> SequenceRef;
 
 //! sequence track for mussa.
 class Sequence 
@@ -103,6 +105,9 @@ public:
   typedef SeqString::const_reference const_reference;
   typedef SeqString::size_type size_type;
   static const size_type npos = SeqString::npos;
+  
+  typedef std::list<motif> MotifList;
+  typedef boost::shared_ptr<MotifList> MotifListRef;
                       
   Sequence(AlphabetRef a = reduced_dna_alphabet);
   Sequence(const char* seq, 
@@ -111,9 +116,13 @@ public:
   Sequence(const std::string& seq,
            AlphabetRef a = reduced_dna_alphabet,
            SeqSpan::strand_type strand = SeqSpan::PlusStrand);
+  //! make a new sequence, with the same SeqSpan
   Sequence(const Sequence& seq);
+  //! make a new sequence, with the same SeqSpan
   Sequence(const Sequence *);
-  Sequence(const SeqSpanRef&); 
+  //! Make a new sequence using a copy of SeqSpan
+  Sequence(const SequenceRef); 
+  Sequence(const SeqSpanRef&);
   ~Sequence();
   //! assignment to constant sequences
   Sequence &operator=(const Sequence&);
@@ -219,7 +228,7 @@ public:
   //! add an annotation to our list of annotations
   void add_annotation(const annot& a);
   const std::list<annot>& annotations() const;
-  const std::list<motif>& motifs() const;
+  const MotifList& motifs() const;
 
   //! add a motif to our list of motifs
   void add_motif(const Sequence& a_motif);
@@ -245,7 +254,7 @@ protected:
   //! store our oldstyle annotations
   std::list<annot> annots;
   //! a seperate list for motifs since we're currently not saving them
-  std::list<motif> motif_list;
+  MotifListRef motif_list;
 
   //! copy over all our annotation children
   void copy_children(Sequence &, size_type start, size_type count) const;