00001 00004 #ifndef _BIO_BIT_TRAITS_H 00005 #define _BIO_BIT_TRAITS_H 00006 00007 #include "bit_char_traits.h" 00008 00009 00010 namespace bioinfo 00011 { 00012 00025 template<size_t NB> 00026 class bio_bit_traits : public std::char_traits<std::bitset<NB> > { 00027 public: 00028 typedef typename std::char_traits<std::bitset<NB> >::char_type char_type; 00029 typedef typename std::char_traits<char>::char_type basic_char_type; 00034 static std::size_t 00035 bit_size() { 00036 return 2; 00037 } 00038 00044 inline static basic_char_type char_code(char_type); 00045 00050 inline static std::size_t bit_code(basic_char_type); 00051 00056 inline static bool valid_code(basic_char_type); 00057 }; 00058 00059 00075 template<size_t NB> 00076 class na_nmer_overlap : public bio_bit_traits<NB> { 00077 }; 00078 } 00079 00080 00084 namespace std 00085 { 00088 template <class _CharT, class _Traits, typename _NaTraits, size_t _Nb> 00089 basic_ostream<_CharT, _Traits>& 00090 operator<<(basic_ostream<_CharT, _Traits>&, const basic_string<bitset<_Nb>, _NaTraits>&); 00091 00092 template<class _CharT, class _Traits, class _NaTraits, size_t _Nb> 00093 basic_istream<_CharT, _Traits>& 00094 operator>>(basic_istream<_CharT, _Traits>&, basic_string<bitset<_Nb>, _NaTraits>&); 00095 00097 template<class _CharT, class _Traits, size_t __Nb> 00098 basic_istream<_CharT, _Traits>& 00099 operator>>(basic_istream<_CharT, _Traits>&, basic_string<bitset<__Nb>, bioinfo::na_nmer_overlap<__Nb> >&); 00100 00101 template <class _CharT, class _Traits, size_t _Nb> 00102 basic_ostream<_CharT, _Traits>& 00103 operator<<(basic_ostream<_CharT, _Traits>&, const basic_string<bitset<_Nb>, bioinfo::na_nmer_overlap<_Nb> >&); 00104 00105 template<size_t __Nb> 00106 bool 00107 operator==(const basic_string<bitset<__Nb>, bioinfo::na_nmer_overlap<__Nb> >&, const string&); 00109 } 00110 00111 00112 #include "impl/bio_bit_traits.hpp" 00113 #include "impl/na_nmer_overlap_stream.hpp" 00114 00115 #endif // _BIO_BIT_TRAITS_H