分享
 
 
 

C++ young 程序库——y_char_function.hpp 和 y_char_traits.hpp

王朝c/c++·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

文件位置:young/string/y_char_function.hpp

/*

The young Library

Copyright (c) 2005 by 杨桓

Permission to use, copy, modify, distribute and sell this software for any

purpose is hereby granted without fee, provided that the above copyright

notice appear in all copies and that both that copyright notice and this

permission notice appear in supporting documentation.

The author make no representations about the suitability of this software

for any purpose. It is provided "as is" without express or implied warranty.

*/

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

#ifndef __MACRO_CPLUSPLUS_YOUNG_LIBRARY_CHAR_FUNCTION_HEADER_FILE__

#define __MACRO_CPLUSPLUS_YOUNG_LIBRARY_CHAR_FUNCTION_HEADER_FILE__

//-----------------------------------------------------------------------------

#include <cctype>

#include <cstring>

//#include <wctype.h>

//#include <wchar.h>

#include "../y_define.hpp"

//-----------------------------------------------------------------------------

__MACRO_CPLUSPLUS_YOUNG_LIBRARY_BEGIN_NAMESPACE__

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

inline int isspace( int c )

{

return std::isspace(c);

}

inline size_t strlen( const char* string )

{

return std::strlen(string);

}

inline int tolower( int c )

{

return std::tolower(c);

}

inline int toupper( int c )

{

return std::toupper(c);

}

inline int memcmp( const void* buf1, const void* buf2, size_t count_bytes )

{

return std::memcmp( buf1, buf2, count_bytes );

}

inline void* memcpy( void* dest, const void* src, size_t count_bytes )

{

return std::memcpy( dest, src, count_bytes );

}

inline void* memmove( void* dest, const void* src, size_t count_bytes )

{

return std::memmove( dest, src, count_bytes );

}

inline void* memset( void* dest, int c, size_t count )

{

return std::memset( dest, c, count );

}

inline void* memchr( const void* buf, int c, size_t count )

{

return std::memchr( buf, c, count );

}

//-----------------------------------------------------------------------------

inline int iswspace( wint_t c )

{

// return std::iswspace(c);

return iswspace(c);

}

inline size_t wcslen( const wchar_t* string )

{

// return std::wcslen(string);

return wcslen(string);

}

inline int towlower( wint_t c )

{

// return std::towlower(c);

return towlower(c);

}

inline int towupper( wint_t c )

{

// return std::towupper(c);

return towupper(c);

}

inline int wmemcmp( const wchar_t* buf1, const wchar_t* buf2, size_t count )

{

// return std::wmemcmp( buf1, buf2, count );

return wmemcmp( buf1, buf2, count );

}

inline wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count )

{

// return std::wmemcpy( dest, src, count );

return wmemcpy( dest, src, count );

}

inline wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, size_t count )

{

// return std::wmemmove( dest, src, count );

return wmemmove( dest, src, count );

}

inline wchar_t* wmemset( wchar_t* dest, wchar_t c, size_t count )

{

// return std::wmemset( dest, c, count );

return wmemset( dest, c, count );

}

inline wchar_t* wmemchr( const wchar_t* buf, wchar_t c, size_t count )

{

// return std::wmemchr( buf, c, count );

return wmemchr( buf, c, count );

}

//-----------------------------------------------------------------------------

int charcmp_lower( const char* s1, const char* s2, size_t count )

{

for( size_t i = 0; i < count; ++i,++s1,++s2 )

{

int value1 = tolower( *s1 );

int value2 = tolower( *s2 );

if( value1 != value2 )

return ( value1 < value2 ? -1 : 1 );

}

return 0;

}

int charcmp_upper( const char* s1, const char* s2, size_t count )

{

for( size_t i = 0; i < count; ++i,++s1,++s2 )

{

int value1 = toupper( *s1 );

int value2 = toupper( *s2 );

if( value1 != value2 )

return ( value1 < value2 ? -1 : 1 );

}

return 0;

}

char* charcopy_lower( char* dest, const char* src, size_t count )

{

for( size_t i = 0; i < count ; ++i,++dest,++src )

*dest = tolower( *src );

return dest;

}

char* charcopy_upper( char* dest, const char* src, size_t count )

{

for( size_t i = 0; i < count ; ++i,++dest,++src )

*dest = toupper( *src );

return dest;

}

char* charmove_lower( char* dest, const char* src, size_t count )

{

char* temp = new char[count];

charcopy_lower( temp, src, count );

memcpy( dest, temp, count );

delete[] temp;

return ( dest + count );

}

char* charmove_upper( char* dest, const char* src, size_t count )

{

char* temp = new char[count];

charcopy_upper( temp, src, count );

memcpy( dest, temp, count );

delete[] temp;

return ( dest + count );

}

char* charset_lower( char* dest, char c, size_t count )

{

char value = tolower(c);

for( size_t i = 0; i < count; ++i,++dest )

*dest = value;

return dest;

}

char* charset_upper( char* dest, char c, size_t count )

{

char value = toupper(c);

for( size_t i = 0; i < count; ++i,++dest )

*dest = value;

return dest;

}

//-----------------------------------------------------------------------------

int wcharcmp_lower( const wchar_t* s1, const wchar_t* s2, size_t count )

{

for( size_t i = 0; i < count; ++i,++s1,++s2 )

{

int value1 = towlower( *s1 );

int value2 = towlower( *s2 );

if( value1 != value2 )

return ( value1 < value2 ? -1 : 1 );

}

return 0;

}

int wcharcmp_upper( const wchar_t* s1, const wchar_t* s2, size_t count )

{

for( size_t i = 0; i < count; ++i,++s1,++s2 )

{

int value1 = towupper( *s1 );

int value2 = towupper( *s2 );

if( value1 != value2 )

return ( value1 < value2 ? -1 : 1 );

}

return 0;

}

wchar_t* wcharcopy_lower( wchar_t* dest, const wchar_t* src, size_t count )

{

for( size_t i = 0; i < count ; ++i,++dest,++src )

*dest = towlower( *src );

return dest;

}

wchar_t* wcharcopy_upper( wchar_t* dest, const wchar_t* src, size_t count )

{

for( size_t i = 0; i < count ; ++i,++dest,++src )

*dest = towupper( *src );

return dest;

}

wchar_t* wcharmove_lower( wchar_t* dest, const wchar_t* src, size_t count )

{

wchar_t* temp = new wchar_t[count];

wcharcopy_lower( temp, src, count );

memcpy( dest, temp, sizeof(wchar_t) * count );

delete[] temp;

return ( dest + count );

}

wchar_t* wcharmove_upper( wchar_t* dest, const wchar_t* src, size_t count )

{

wchar_t* temp = new wchar_t[count];

wcharcopy_upper( temp, src, count );

memcpy( dest, temp, sizeof(wchar_t) * count );

delete[] temp;

return ( dest + count );

}

wchar_t* wcharset_lower( wchar_t* dest, wchar_t c, size_t count )

{

int value = towlower(c);

for( size_t i = 0; i < count; ++i,++dest )

*dest = value;

return dest;

}

wchar_t* wcharset_upper( wchar_t* dest, wchar_t c, size_t count )

{

int value = towupper(c);

for( size_t i = 0; i < count; ++i,++dest )

*dest = value;

return dest;

}

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

__MACRO_CPLUSPLUS_YOUNG_LIBRARY_END_NAMESPACE__

#endif

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

文件位置:young/y_char_traits.hpp

/*

The young Library

Copyright (c) 2005 by 杨桓

Permission to use, copy, modify, distribute and sell this software for any

purpose is hereby granted without fee, provided that the above copyright

notice appear in all copies and that both that copyright notice and this

permission notice appear in supporting documentation.

The author make no representations about the suitability of this software

for any purpose. It is provided "as is" without express or implied warranty.

*/

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

#ifndef __MACRO_CPLUSPLUS_YOUNG_LIBRARY_CHAR_TRAITS_HEADER_FILE__

#define __MACRO_CPLUSPLUS_YOUNG_LIBRARY_CHAR_TRAITS_HEADER_FILE__

//-----------------------------------------------------------------------------

#include "string/y_char_function.hpp"

//-----------------------------------------------------------------------------

__MACRO_CPLUSPLUS_YOUNG_LIBRARY_BEGIN_NAMESPACE__

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

typedef std::streampos streampos;

typedef std::streamoff streamoff;

typedef std::streampos wstreampos;

typedef std::streamoff wstreamoff;

//typedef std::wstreampos wstreampos;

//typedef std::wstreamoff wstreamoff;

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

template< typename CharType >

class char_traits

{

public:

typedef CharType char_type;

typedef long int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return char_type(); }

static bool is_del( char_type c ) { return false; }

static void assign( char_type& d, const char_type& s )

{ d = s; }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{

size_type i = 0;

while( !eq( *s++, eos() ) )

++i;

return i;

}

// (1) < 0 : s1 < s2; (2) = 0 : s1 = s2; (3) > 0 : s1 > s2

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

for( size_type i = 0; i < count; ++i )

{

if( !eq( s1[i], s2[i] ) )

return ( lt(s1[i], s2[i]) ? -1 : 1 );

}

return 0;

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{

for( size_type i = 0; i < count ; ++i )

assign( d[i], s[i] );

return ( d + count );

}

static char_type* move( char_type* d, const char_type* s, size_type count )

{

char_type* temp = new char_type[count];

copy( temp, s, count );

copy( d, temp, count );

delete[] temp;

return ( d + count );

}

static char_type* assign( char_type* d, size_type count, const char_type& c )

{

for( size_type i = 0; i < count ; ++i )

assign( d[i], c );

return ( d + count );

}

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{

for( size_type i = 0; i < count; ++i,++buf )

{

if( eq( *buf, c ) )

return buf;

}

return NULL_POINTER;

}

}; //end char_traits

//-----------------------------------------------------------------------------

template<>

class char_traits<char>

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = s; }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = memcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return (char_type*)memcpy( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return (char_type*)memmove( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return (char_type*)memset( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end char_traits<char>

//-----------------------------------------------------------------------------

template<>

class char_traits<wchar_t>

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = s; }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = wmemcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wmemcpy( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wmemmove( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wmemset( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end char_traits<wchar_t>

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class cmp_no_case_char_traits //比较时不区分大小写char的traits

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = s; }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( tolower(c1) == tolower(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( tolower(c1) < tolower(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return charcmp_lower( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return (char_type*)memcpy( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return (char_type*)memmove( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return (char_type*)memset( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end cmp_no_case_char_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class lower_char_traits //全部是小写char的traits

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = tolower(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = memcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return charcopy_lower( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return charmove_lower( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return charset_lower( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end lower_char_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class upper_char_traits //全部是大写char的traits

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = toupper(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = memcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return charcopy_upper( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return charmove_upper( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return charset_upper( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end upper_char_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

//字符串内全部是小写char并且和其他字符串进行比较时不区分大小写的traits

class cmp_no_case_lower_char_traits

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = tolower(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( tolower(c1) == tolower(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( tolower(c1) < tolower(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return charcmp_lower( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return charcopy_lower( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return charmove_lower( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return charset_lower( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end cmp_no_case_lower_char_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

//字符串内全部是大写char并且和其他字符串进行比较时不区分大小写的traits

class cmp_no_case_upper_char_traits

{

public:

typedef char char_type;

typedef int int_type;

typedef streampos pos_type;

typedef streamoff off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return isspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = toupper(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( toupper(c1) == toupper(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( toupper(c1) < toupper(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( static_cast<unsigned char>(c) ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( EOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return strlen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return charcmp_upper( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return charcopy_upper( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return charmove_upper( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return charset_upper( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return (char_type*)memchr( buf, c, count ); }

}; //end cmp_no_case_upper_char_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class cmp_no_case_wchar_traits //比较时不区分大小写wchar_t的traits

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = s; }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( towlower(c1) == towlower(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( towlower(c1) < towlower(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return wcharcmp_lower( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wmemcpy( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wmemmove( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wmemset( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end cmp_no_case_wchar_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class lower_wchar_traits //全部是小写wchar_t的traits

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = towlower(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = wmemcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wcharcopy_lower( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wcharmove_lower( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wcharset_lower( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end lower_wchar_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

class upper_wchar_traits //全部是大写wchar_t的traits

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = towupper(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( c1 == c2 ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( c1 < c2 ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{

int result = wmemcmp( s1, s2, count );

if( result == 0 )

return 0;

else

return ( result < 0 ? -1 : 1 );

}

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wcharcopy_upper( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wcharmove_upper( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wcharset_upper( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end upper_wchar_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

//字符串内全部是小写wchar_t并且和其他字符串进行比较时不区分大小写的traits

class cmp_no_case_lower_wchar_traits

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = towlower(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( towlower(c1) == towlower(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( towlower(c1) < towlower(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return wcharcmp_lower( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wcharcopy_lower( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wcharmove_lower( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wcharset_lower( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end cmp_no_case_lower_wchar_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

//字符串内全部是大写wchar_t并且和其他字符串进行比较时不区分大小写的traits

class cmp_no_case_upper_wchar_traits

{

public:

typedef wchar_t char_type;

typedef wint_t int_type;

typedef wstreamoff pos_type;

typedef wstreampos off_type;

typedef mbstate_t state_type;

typedef def_size_t size_type;

static char_type eos() { return 0; }

static bool is_del( char_type c ) { return iswspace(c); }

static void assign( char_type& d, const char_type& s )

{ d = towupper(s); }

static bool eq( const char_type& c1, const char_type& c2 )

{ return ( towupper(c1) == towupper(c2) ); }

static bool lt( const char_type& c1, const char_type& c2 )

{ return ( towupper(c1) < towupper(c2) ); }

static char_type to_char_type( const int_type& i )

{ return static_cast<char_type>( i ); }

static int_type to_int_type( const char_type& c )

{ return static_cast<int_type>( c ); }

static bool eq_int_type( const int_type& i1, const int_type& i2 )

{ return ( i1 == i2 ); }

static int_type eof()

{ return static_cast<int_type>( WEOF ); }

static int_type not_eof( const int_type& i )

{ return ( i == eof() ? 0 : i ); }

static size_type length( const char_type* s )

{ return wcslen(s); }

static int compare( const char_type* s1, const char_type* s2, size_type count )

{ return wcharcmp_upper( s1, s2, count ); }

static char_type* copy( char_type* d, const char_type* s, size_type count )

{ return wcharcopy_upper( d, s, count ); }

static char_type* move( char_type* d, const char_type* s, size_type count )

{ return wcharmove_upper( d, s, count ); }

static char_type* assign( char_type* d, size_type count, const char_type& c )

{ return wcharset_upper( d, c, count ); }

static const char_type*

find( const char_type* buf, size_type count, const char_type& c )

{ return wmemchr( buf, c, count ); }

}; //end cmp_no_case_upper_wchar_traits

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

__MACRO_CPLUSPLUS_YOUNG_LIBRARY_END_NAMESPACE__

#endif

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有