Code:
#ifndef LIBPANZI_STRING_H___
#define LIBPANZI_STRING_H___
#include <list>
#include <string>
#include <iostream>
namespace libpanzi {
template< typename _CharT, typename _Traits, typename _Alloc >
class basic_string : public std::basic_string< _CharT, _Traits, _Alloc > {
private:
inline string &_M_ltrim( size_type __n, _CharT *__data, size_type __size );
public:
string(const _Alloc &__a)
: std::basic_string( __a ) {}
string(const basic_string< _CharT, _Traits, _Alloc > &__str)
: std::basic_string( __str ) {}
string(const basic_string< _CharT, _Traits, _Alloc > &__str, size_type __pos, size_type __n=npos)
: std::basic_string( __str, __pos, __n ) {}
string(const string< _CharT, _Traits, _Alloc > &__str, size_type __pos, size_type __n, const _Alloc &__a)
: std::basic_string( __str, __pos, __n, __a) {}
string(const _CharT *__s, size_type __n, const _Alloc &__a=_Alloc())
: std::basic_string( __s, __n, __a ) {}
string(const _CharT *__s, const _Alloc &__a=_Alloc())
: std::basic_string( __s, __a ) {}
string(size_type __n, _CharT __c, const _Alloc &__a=_Alloc())
: std::basic_string( __n, __c, __a ) {}
virtual ~basic_string(void) {}
inline basic_string< _CharT, _Traits, _Alloc > &trimnl (void);
inline basic_string< _CharT, _Traits, _Alloc > &rtrimnl(void);
inline basic_string< _CharT, _Traits, _Alloc > <rimnl(void);
inline basic_string< _CharT, _Traits, _Alloc > &trim (const _CharT *__chars = " \t\r\n\v");
inline basic_string< _CharT, _Traits, _Alloc > <rim (const _CharT *__chars = " \t\r\n\v");
inline basic_string< _CharT, _Traits, _Alloc > &rtrim (const _CharT *__chars = " \t\r\n\v");
inline basic_string< _CharT, _Traits, _Alloc > &trim (size_type __n);
inline basic_string< _CharT, _Traits, _Alloc > <rim (size_type __n);
inline basic_string< _CharT, _Traits, _Alloc > &rtrim (size_type __n);
int compare_ignore_case(const basic_string< _CharT, _Traits, _Alloc > &__str) const;
int compare_ignore_case(size_type __pos, size_type __n, const basic_string< _CharT, _Traits, _Alloc > &__str) const;
int compare_ignore_case(size_type __pos1, size_type __n1, const basic_string< _CharT, _Traits, _Alloc > &__str, size_type __pos2, size_type __n2) const;
int compare_ignore_case(const _CharT *__s) const;
int compare_ignore_case(size_type __pos, size_type __n1, const _CharT *__s) const;
int compare_ignore_case(size_type __pos, size_type __n1, const _CharT *__s, size_type __n2) const;
std::list< basic_string< _CharT, _Traits, _Alloc > > split( _CharT token = ' ' ) const;
};
string &string::_M_ltrim( size_type __n, _CharT *__data, size_type __size ) {
size_type __pos_to = 0, __pos_from = __n;
while( __pos_from < __size ) {
__data[ __pos_to ] = __data[ __pos_from ];
++ __pos_to;
++ __pos_from;
}
return erase( __size - __n );
}
string &string::trimnl(void) {
return ltrim().rtrim();
}
string &string::rtrimnl(void) {
return rtrim( " \t\r\n" );
}
string &string::ltrimnl(void) {
return ltrim( " \t\r\n" );
}
string &string::trim(const _CharT *__chars = " \t\r\n\v") {
return lterim( __chars ).rtrim( __chars );
}
string &string::ltrim(const _CharT *__chars = " \t\r\n\v") {
_CharT *__data = data();
size_type __size = size();
size_type __n = 0;
while( __n < __size && std::strchr( __char, __data[ __n ] ) != NULL )
++ __n;
return _M_ltrim( __n, __data, __size );
}
string &string::rtrim(const _CharT *__chars = " \t\r\n\v") {
_CharT *__data = data();
size_type __n = size() - 1;
while( __n > 0 && strchr( __chars, __data[ __n ] ) != NULL )
-- __n;
return erase( ++ __n );;
}
string &string::trim(size_type __n) {
return ltrim( __n ).rtrim( __n );
}
string &string::ltrim(size_type __n) {
return _M_ltrim( __n, data(), size() );
}
string &string::rtrim(size_type __n) {
return erase( size() - __n );
}
typedef basic_string< char > string;
} // namespace libpanzi
#endif // LIBPANZI_STRING_H___
Lesezeichen