Store Sequence sequence location in a shared_ptr class
[mussa.git] / alg / alphabet.cpp
index bd29dd2480f47ace4caa84e24decba9549e936cd..3e4e5c83ca1455f5bc2e66bef6fc11b1c1712f41 100644 (file)
@@ -3,17 +3,36 @@
 // some standard dna alphabets 
 // Include nl (\012), and cr (\015) to make sequence parsing eol 
 // convention independent.
-const Alphabet Alphabet::reduced_dna_alphabet("AaCcGgTtNn\012\015");
-const Alphabet Alphabet::reduced_rna_alphabet("AaCcGgUuNn\012\015");
-const Alphabet Alphabet::reduced_nucleic_alphabet("AaCcGgTtUuNn\012\015");
+const char *Alphabet::reduced_dna_cstr = "AaCcGgTtNn\012\015";
+const char *Alphabet::reduced_rna_cstr = "AaCcGgUuNn\012\015";
+const char *Alphabet::reduced_nucleic_cstr = "AaCcGgTtUuNn\012\015";
 //! this is the general iupac alphabet for nucleotides
-const Alphabet Alphabet::nucleic_alphabet(
-  "AaCcGgTtUuRrYyMmKkSsWwBbDdHhVvNn-~.?\012\015"
-);
+const char *Alphabet::nucleic_cstr =
+  "AaCcGgTtUuRrYyMmKkSsWwBbDdHhVvNn-~.?\012\015";
 //! the protein alphabet
-const Alphabet Alphabet::protein_alphabet(
-  "AaCcDdEeFfGgHhIiKkLlMmNnPpQqRrSsTtVvWwYy\012\015"
-);
+const char *Alphabet::protein_cstr = 
+  "AaCcDdEeFfGgHhIiKkLlMmNnPpQqRrSsTtVvWwYy\012\015";
+
+const Alphabet& Alphabet::reduced_dna_alphabet() {
+  static Alphabet *a = new Alphabet(reduced_dna_cstr);
+  return *a;
+}
+const Alphabet& Alphabet::reduced_rna_alphabet() {
+  static Alphabet *a = new Alphabet(reduced_rna_cstr);
+  return *a;
+}
+const Alphabet& Alphabet::reduced_nucleic_alphabet() {
+  static Alphabet *a = new Alphabet(reduced_nucleic_cstr);
+  return *a;
+}
+const Alphabet& Alphabet::nucleic_alphabet() {
+  static Alphabet *a = new Alphabet(nucleic_cstr);
+  return *a;
+}
+const Alphabet& Alphabet::protein_alphabet() {
+  static Alphabet *a = new Alphabet(protein_cstr);
+  return *a;
+}
 
 Alphabet::Alphabet(const char *a) :
   alphabet(a)
@@ -28,12 +47,7 @@ void Alphabet::assign(const Alphabet& a)
   alphabet_set.insert(alphabet.begin(), alphabet.end());
 }
 
-const char *Alphabet::c_str() const
-{
-  alphabet.c_str();
-}
-
 bool Alphabet::exists(const char c) const
 {
   return (alphabet_set.find(c) != alphabet_set.end());
-}
\ No newline at end of file
+}