4 #include <boost/serialization/export.hpp>
5 #include <boost/serialization/nvp.hpp>
6 #include <boost/serialization/string.hpp>
7 #include <boost/serialization/utility.hpp>
8 #include <boost/serialization/version.hpp>
12 //! this is a helper class for sequence
14 friend class Sequence;
16 typedef std::string::const_iterator const_iterator;
18 //! case-insensitive test to check a character for existence in our alphabet
19 bool exists(const char) const;
21 // note, if you want to define an alphabet for a sequence, you probably want
22 // to update the enumeration in Sequence, and Sequence::get_sequence
23 //! The standard DNA alphabet, with unique, and unknown characters
24 static const char *reduced_dna_cstr;
25 static const Alphabet &reduced_dna_alphabet();
26 //! The standard RNA alphabet, with unique, and unknown characters
27 static const char *reduced_rna_cstr;
28 static const Alphabet &reduced_rna_alphabet();
29 //! The standard DNA/RNA alphabet, with unique, and unknown characters
30 static const char *reduced_nucleic_cstr;
31 static const Alphabet &reduced_nucleic_alphabet();
32 //! this is the general IUPAC alphabet for nucleotides
33 static const char *nucleic_cstr;
34 static const Alphabet &nucleic_alphabet();
35 //! the protein alphabet
36 static const char *protein_cstr;
37 static const Alphabet &protein_alphabet();
40 //! what are allowable symbols in our alphabet
42 //! internal variable to make exists() faster
43 std::set<std::string::value_type> alphabet_set;
45 //! some necessary string api access
46 Alphabet(const char *a);
47 //! allow sequence to copy one alphabet to another (needed when unserializing)
48 void assign(const Alphabet& a);
49 const_iterator begin() const { return alphabet.begin(); }
50 const_iterator end() const { return alphabet.end(); }
53 friend class boost::serialization::access;
54 template<class Archive>
55 void serialize(Archive& ar, const unsigned int /*version*/) {
56 ar & BOOST_SERIALIZATION_NVP(alphabet);
58 alphabet_set.insert(alphabet.begin(), alphabet.end());