Vaucanson 1.4
|
00001 // char_traits.hh: this file is part of the Vaucanson project. 00002 // 00003 // Vaucanson, a generic library for finite state machines. 00004 // 00005 // Copyright (C) 2004, 2005, 2006 The Vaucanson Group. 00006 // 00007 // This program is free software; you can redistribute it and/or 00008 // modify it under the terms of the GNU General Public License 00009 // as published by the Free Software Foundation; either version 2 00010 // of the License, or (at your option) any later version. 00011 // 00012 // The complete GNU General Public Licence Notice can be found as the 00013 // `COPYING' file in the root directory. 00014 // 00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file. 00016 // 00017 #ifndef VCSN_MISC_CHAR_TRAITS_HH 00018 # define VCSN_MISC_CHAR_TRAITS_HH 00019 00048 # include <string> 00049 00050 namespace vcsn 00051 { 00052 namespace misc 00053 { 00054 00064 template <class CharT> 00065 struct generic_int_type 00066 { 00067 typedef CharT char_type; 00068 00069 generic_int_type (); 00070 generic_int_type (const char_type&); 00071 00072 operator CharT () const; 00073 00074 bool operator== (const generic_int_type<CharT>&) const; 00075 bool eof () const; 00076 protected: 00077 char_type val_; 00078 bool eof_; 00079 }; 00080 00088 template <typename CharT> 00089 struct char_traits 00090 { 00091 typedef CharT char_type; 00092 typedef generic_int_type<char_type> int_type; 00093 typedef std::streamoff off_type; 00094 typedef std::streampos pos_type; 00095 typedef mbstate_t state_type; 00096 00097 static void assign (char_type&, const char_type&); 00098 static bool eq (const char_type&, const char_type&); 00099 static bool lt (const char_type&, const char_type&); 00100 static int compare (const char_type*, 00101 const char_type*, 00102 size_t); 00103 static size_t length (const char_type*); 00104 static const char_type* find (const char_type*, 00105 size_t, 00106 const char_type&); 00107 static char_type* move (char_type*, const char_type*, size_t); 00108 static char_type* copy (char_type*, const char_type*, size_t); 00109 static char_type* assign (char_type*, size_t, char_type); 00110 static int_type not_eof (const int_type&); 00111 static char_type to_char_type (const int_type&); 00112 static int_type to_int_type (const char_type&); 00113 static bool eq_int_type (const int_type&, const int_type&); 00114 static int_type eof (); 00115 }; 00116 00118 } // end of namespace misc 00119 } // end of namespace vcsn 00120 00121 00122 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB 00123 # include <vaucanson/misc/char_traits.hxx> 00124 # endif // VCSN_USE_INTERFACE_ONLY 00125 00126 #endif // ! VCSN_MISC_CHAR_TRAITS_HH