/[projects]/smsdaemon/string_nocase.h
ViewVC logotype

Annotation of /smsdaemon/string_nocase.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (hide annotations) (download)
Tue Jun 10 20:25:15 2008 UTC (15 years, 11 months ago) by torben
File MIME type: text/plain
File size: 1806 byte(s)
Added some extra string functions to Util::

Made Util::str_clean into Util::str_replace

1 torben 38 #ifndef __STRING_NOCASE_H__
2     #define __STRING_NOCASE_H__
3    
4     #include <string>
5     #include <iostream>
6     #include <cctype>
7    
8     // case insensitive character traits
9     // inherited copy (preserves case),
10     // case insensitive comparison, search
11     struct traits_nocase : std::char_traits<char>
12     {
13     static bool eq( const char& c1, const char& c2 )
14     { return toupper(c1) == toupper(c2) ; }
15     static bool lt( const char& c1, const char& c2 )
16     { return toupper(c1) < toupper(c2) ; }
17     static int compare( const char* s1, const char* s2, size_t N )
18     {
19     return strncasecmp( s1, s2, N ) ; // posix
20     // mirosoft C++ - use _strnicmp instead
21     }
22     static const char* find( const char* s, size_t N, const char& a )
23     {
24     for( size_t i=0 ; i<N ; ++i )
25     if( toupper(s[i]) == toupper(a) ) return s+i ;
26     return 0 ;
27     }
28     static bool eq_int_type ( const int_type& c1, const int_type& c2 )
29     { return toupper(c1) == toupper(c2) ; }
30     };
31    
32     // string preserves case; comparisons are case insensitive
33     typedef std::basic_string< char, traits_nocase > string_nocase ;
34    
35     // make string_nocase work like a std::string
36     // with streams using std::char_traits
37     // std::basic_istream< char, std::char_traits<char> > (std::istream) and
38     // std::basic_ostream< char, std::char_traits<char> > (std::ostream)
39     inline std::ostream& operator<< ( std::ostream& stm, const string_nocase& str )
40     { return stm << reinterpret_cast<const std::string&>(str) ; }
41    
42     inline std::istream& operator>> ( std::istream& stm, string_nocase& str )
43     {
44     std::string s ; stm >> s ;
45     if(stm) str.assign(s.begin(),s.end()) ;
46     return stm ;
47     }
48    
49     inline std::istream& getline( std::istream& stm, string_nocase& str )
50     {
51     std::string s ; std::getline(stm,s) ;
52     if(stm) str.assign(s.begin(),s.end()) ;
53     return stm ;
54     }
55    
56     #endif // __STRING_NOCASE_H__

  ViewVC Help
Powered by ViewVC 1.1.20