string.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // std::string reader
  2. //
  3. // Platform: ISO C++ 98/11
  4. // $Id$
  5. //
  6. // (c) __vic 2011
  7. #ifndef __VIC_READERS_STRING_H
  8. #define __VIC_READERS_STRING_H
  9. #include<__vic/readers/container.h>
  10. #include<string>
  11. namespace __vic {
  12. //////////////////////////////////////////////////////////////////////////////
  13. template<
  14. class charT,
  15. class Tr = std::char_traits<charT>,
  16. class Al = std::allocator<charT>
  17. >
  18. class basic_string_reader
  19. {
  20. container_reader<std::basic_string<charT,Tr,Al> > r;
  21. public:
  22. explicit basic_string_reader(const std::basic_string<charT,Tr,Al> &s)
  23. : r(s) {}
  24. bool read(charT &ch) { return r.read(ch); }
  25. };
  26. //////////////////////////////////////////////////////////////////////////////
  27. // Reader<char> + Reader<unsigned char>
  28. template<class Tr, class Al>
  29. class basic_string_reader<char,Tr,Al>
  30. {
  31. container_reader<std::basic_string<char,Tr,Al> > r;
  32. public:
  33. explicit basic_string_reader(const std::basic_string<char,Tr,Al> &s)
  34. : r(s) {}
  35. bool read(char &ch) { return r.read(ch); }
  36. bool read(unsigned char &ch) { return read(reinterpret_cast<char&>(ch)); }
  37. };
  38. //////////////////////////////////////////////////////////////////////////////
  39. typedef basic_string_reader<char> string_reader;
  40. } // namespace
  41. #endif // header guard