3 #include "alg/alphabet.hpp"
5 // some standard dna alphabets
6 // Include nl (\012), and cr (\015) to make sequence parsing eol
7 // convention independent.
8 const char *Alphabet::reduced_dna_cstr = "AaCcGgTtNn\012\015";
9 const char *Alphabet::reduced_rna_cstr = "AaCcGgUuNn\012\015";
10 const char *Alphabet::reduced_nucleic_cstr = "AaCcGgTtUuNn\012\015";
11 //! this is the general iupac alphabet for nucleotides
12 const char *Alphabet::nucleic_cstr =
13 "AaCcGgTtUuRrYyMmKkSsWwBbDdHhVvNn-~.?\012\015";
14 //! the protein alphabet
15 const char *Alphabet::protein_cstr =
16 "AaCcDdEeFfGgHhIiKkLlMmNnPpQqRrSsTtVvWwYy\012\015";
17 const char *Alphabet::empty_cstr = "";
19 const Alphabet& Alphabet::reduced_dna_alphabet() {
20 static Alphabet *a = new Alphabet(reduced_dna_cstr);
23 const Alphabet& Alphabet::reduced_rna_alphabet() {
24 static Alphabet *a = new Alphabet(reduced_rna_cstr);
27 const Alphabet& Alphabet::reduced_nucleic_alphabet() {
28 static Alphabet *a = new Alphabet(reduced_nucleic_cstr);
31 const Alphabet& Alphabet::nucleic_alphabet() {
32 static Alphabet *a = new Alphabet(nucleic_cstr);
35 const Alphabet& Alphabet::protein_alphabet() {
36 static Alphabet *a = new Alphabet(protein_cstr);
39 const Alphabet& Alphabet::empty_alphabet() {
40 static Alphabet *a = new Alphabet(empty_cstr);
44 Alphabet::Alphabet(const char *a) :
47 alphabet_set.insert(alphabet.begin(), alphabet.end());
50 void Alphabet::assign(const Alphabet& a)
52 alphabet = a.alphabet;
54 alphabet_set.insert(alphabet.begin(), alphabet.end());
57 bool operator==(const Alphabet& x, const Alphabet& y)
59 return x.alphabet == y.alphabet;
62 std::ostream& operator<<(std::ostream& out, const Alphabet& a)
67 bool Alphabet::exists(const char c) const
69 return (alphabet_set.find(c) != alphabet_set.end());
72 const Alphabet& Alphabet::get_alphabet(AlphabetRef alpha)
75 case ::reduced_dna_alphabet:
76 return Alphabet::reduced_dna_alphabet();
77 case ::reduced_rna_alphabet:
78 return Alphabet::reduced_rna_alphabet();
79 case ::reduced_nucleic_alphabet:
80 return Alphabet::reduced_nucleic_alphabet();
81 case ::nucleic_alphabet:
82 return Alphabet::nucleic_alphabet();
83 case ::protein_alphabet:
84 return Alphabet::protein_alphabet();
86 throw std::runtime_error("unrecognized alphabet type");