LocARNA-1.9.2
src/LocARNA/alphabet.hh
00001 #ifndef LOCARNA_ALPHABET_HH
00002 #define LOCARNA_ALPHABET_HH
00003 
00004 #ifdef HAVE_CONFIG_H
00005 #include <config.h>
00006 #endif
00007 
00008 #include <vector>
00009 #include <map>
00010 #include <iosfwd>
00011 #include <assert.h>
00012 
00013 namespace LocARNA {
00014 
00022     template <class T>
00023     class Alphabet {
00024         typedef std::vector<T> vec_t;
00025 
00026     public:
00027         typedef typename vec_t::size_type size_type; 
00028     private:
00029         typedef std::map<T, size_type> hash_t;
00030 
00031         vec_t alph_vec;
00032         hash_t alph_hash;
00033 
00034     public:
00035         typedef size_type index_type; 
00036         typedef T elem_type;          
00037         typedef std::vector<T> elem_vector_type; 
00038 
00040         typedef typename elem_vector_type::iterator iterator;
00041 
00043         typedef typename elem_vector_type::const_iterator const_iterator;
00044 
00046         Alphabet();
00047 
00049         explicit Alphabet(const elem_vector_type &a);
00050 
00052         Alphabet(const elem_type *s, int len);
00053 
00055         size_type
00056         size() const;
00057 
00059         size_type
00060         idx(const elem_type &elem) const;
00061 
00067         const elem_type &
00068         elem(size_type idx) const;
00069 
00071         bool
00072         in(const elem_type &elem) const;
00073 
00075         const_iterator
00076         begin() const {
00077             return alph_vec.begin();
00078         }
00079 
00081         const_iterator
00082         end() const {
00083             return alph_vec.end();
00084         }
00085 
00087         iterator
00088         begin() {
00089             return alph_vec.begin();
00090         }
00091 
00093         iterator
00094         end() {
00095             return alph_vec.end();
00096         }
00097 
00098     private:
00100         void
00101         init(const vec_t &a);
00102     };
00103 
00112     template <class T>
00113     std::ostream &
00114     operator<<(std::ostream &out, const Alphabet<T> &a);
00115 }
00116 
00117 #include "alphabet.icc"
00118 
00119 #endif // LOCARNA_ALPHABET_HH
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends