3e4e5c83ca1455f5bc2e66bef6fc11b1c1712f41
[mussa.git] / alg / alphabet.cpp
1 #include "alg/alphabet.hpp"
2
3 // some standard dna alphabets 
4 // Include nl (\012), and cr (\015) to make sequence parsing eol 
5 // convention independent.
6 const char *Alphabet::reduced_dna_cstr = "AaCcGgTtNn\012\015";
7 const char *Alphabet::reduced_rna_cstr = "AaCcGgUuNn\012\015";
8 const char *Alphabet::reduced_nucleic_cstr = "AaCcGgTtUuNn\012\015";
9 //! this is the general iupac alphabet for nucleotides
10 const char *Alphabet::nucleic_cstr =
11   "AaCcGgTtUuRrYyMmKkSsWwBbDdHhVvNn-~.?\012\015";
12 //! the protein alphabet
13 const char *Alphabet::protein_cstr = 
14   "AaCcDdEeFfGgHhIiKkLlMmNnPpQqRrSsTtVvWwYy\012\015";
15
16 const Alphabet& Alphabet::reduced_dna_alphabet() {
17   static Alphabet *a = new Alphabet(reduced_dna_cstr);
18   return *a;
19 }
20 const Alphabet& Alphabet::reduced_rna_alphabet() {
21   static Alphabet *a = new Alphabet(reduced_rna_cstr);
22   return *a;
23 }
24 const Alphabet& Alphabet::reduced_nucleic_alphabet() {
25   static Alphabet *a = new Alphabet(reduced_nucleic_cstr);
26   return *a;
27 }
28 const Alphabet& Alphabet::nucleic_alphabet() {
29   static Alphabet *a = new Alphabet(nucleic_cstr);
30   return *a;
31 }
32 const Alphabet& Alphabet::protein_alphabet() {
33   static Alphabet *a = new Alphabet(protein_cstr);
34   return *a;
35 }
36
37 Alphabet::Alphabet(const char *a) :
38   alphabet(a)
39 {
40   alphabet_set.insert(alphabet.begin(), alphabet.end());  
41
42
43 void Alphabet::assign(const Alphabet& a)
44 {
45   alphabet = a.alphabet;
46   alphabet_set.clear();
47   alphabet_set.insert(alphabet.begin(), alphabet.end());
48 }
49
50 bool Alphabet::exists(const char c) const
51 {
52   return (alphabet_set.find(c) != alphabet_set.end());
53 }