Move alphabet type into SeqString
[mussa.git] / alg / alphabet.hpp
index e7d35c944fe5e5847f05676beebb5a1cdf3ec4d2..513ea767b11081a9ea30c27d877f2c7d44f92306 100644 (file)
@@ -8,30 +8,46 @@
 #include <boost/serialization/version.hpp>
 
 #include <set>
+#include <ostream>
 
 //! this is a helper class for sequence
+enum AlphabetRef { reduced_dna_alphabet, reduced_rna_alphabet, reduced_nucleic_alphabet, 
+                   nucleic_alphabet, protein_alphabet, empty_alphabet=255 };
+                   
 class Alphabet {
 friend class Sequence;
 public:
   typedef std::string::const_iterator const_iterator;
-
-  //! return reference to the characters in our alphabet  
-  const char *c_str() const;
+  //! define the various alphabet types (as python corebio)
+  
+  friend bool operator==(const Alphabet&, const Alphabet&);
+  friend std::ostream& operator<<(std::ostream&, const Alphabet&);
+     
   //! case-insensitive test to check a character for existence in our alphabet
   bool exists(const char) const;
   
+  //! return an alphabet given an AlphabetRef enumeration
+  static const Alphabet &get_alphabet(AlphabetRef);
   // note, if you want to define an alphabet for a sequence, you probably want 
   // to update the enumeration in Sequence, and Sequence::get_sequence
   //! The standard DNA alphabet, with unique, and unknown characters
-  static const Alphabet reduced_dna_alphabet;
+  static const char *reduced_dna_cstr;
+  static const Alphabet &reduced_dna_alphabet();
   //! The standard RNA alphabet, with unique, and unknown characters
-  static const Alphabet reduced_rna_alphabet;
+  static const char *reduced_rna_cstr;
+  static const Alphabet &reduced_rna_alphabet();
   //! The standard DNA/RNA alphabet, with unique, and unknown characters
-  static const Alphabet reduced_nucleic_alphabet;
+  static const char *reduced_nucleic_cstr;
+  static const Alphabet &reduced_nucleic_alphabet();
   //! this is the general IUPAC alphabet for nucleotides
-  static const Alphabet nucleic_alphabet;
+  static const char *nucleic_cstr;
+  static const Alphabet &nucleic_alphabet();
   //! the protein alphabet
-  static const Alphabet protein_alphabet;
+  static const char *protein_cstr;  
+  static const Alphabet &protein_alphabet(); 
+  
+  static const char *empty_cstr;
+  static const Alphabet &empty_alphabet();
     
 private:
   //! what are allowable symbols in our alphabet