diff options
Diffstat (limited to 'Src/WAT/wa_strings.cpp')
-rw-r--r-- | Src/WAT/wa_strings.cpp | 709 |
1 files changed, 709 insertions, 0 deletions
diff --git a/Src/WAT/wa_strings.cpp b/Src/WAT/wa_strings.cpp new file mode 100644 index 00000000..dedc6316 --- /dev/null +++ b/Src/WAT/wa_strings.cpp @@ -0,0 +1,709 @@ +#include "WAT.h" + +// +// to const char* +// +const char *wa::strings::convert::to_char( const wchar_t *p_message ) +{ + std::wstring l_message_w( p_message ); + std::string l_message( l_message_w.begin(), l_message_w.end() ); + + return _strdup( l_message.c_str() ); +} + +const char *wa::strings::convert::to_char( const std::wstring p_message ) +{ + std::string l_message = wa::strings::convert::to_string( p_message ); + + return _strdup( l_message.c_str() ); +} + + +// +// to const wchar_t* +// +const wchar_t *wa::strings::convert::to_wchar( const char *p_message ) +{ + std::string l_message( p_message ); + std::wstring l_message_w( l_message.begin(), l_message.end() ); + + return _wcsdup( l_message_w.c_str() ); +} + + +// +// to std::string +// +std::string wa::strings::convert::to_string( const char *p_message ) +{ + std::string l_message( p_message ); + + return l_message; +} + +std::string wa::strings::convert::to_string( const wchar_t *p_message ) +{ + std::wstring l_message_w( p_message ); + std::string l_message( l_message_w.begin(), l_message_w.end() ); + + return l_message; +} + +std::string wa::strings::convert::to_string( const std::wstring p_message ) +{ + std::string l_message( p_message.begin(), p_message.end() ); + + return l_message; +} + + +// +// to std::wstring +// +std::wstring wa::strings::convert::to_wstring( const char *p_message ) +{ + std::string l_message_w( p_message ); + std::wstring l_message( l_message_w.begin(), l_message_w.end() ); + + return l_message; +} + +std::wstring wa::strings::convert::to_wstring( const wchar_t *p_message ) +{ + std::wstring l_message( p_message ); + + return l_message; +} + +std::wstring wa::strings::convert::to_wstring( const std::string p_message ) +{ + std::wstring l_message( p_message.begin(), p_message.end() ); + + return l_message; +} + + +// +// replace +// +void wa::strings::replace( std::string &p_string, const std::string &p_from, const std::string &p_to ) +{ + if ( p_from.empty() ) + return; + + size_t start_pos = p_string.find( p_from ); + + if ( start_pos == std::string::npos ) + return; + + p_string.replace( start_pos, p_from.length(), p_to ); + + return; +} + +void wa::strings::replace( char *p_string, const char *p_from, const char *p_to ) +{ + std::string l_string( p_string ); + + wa::strings::replace( l_string, std::string( p_from ), std::string( p_to ) ); + + p_string = (char *)l_string.c_str(); +} + +void wa::strings::replace( wchar_t *p_string, const wchar_t *p_from, const wchar_t *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( p_string ); + + wa::strings::replace( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) ); + + std::wstring l_wstring = wa::strings::convert::to_wstring( l_string ); + + p_string = (wchar_t *)( l_wstring.c_str() ); +} + + +// +// replaceAll +// +void wa::strings::replaceAll( std::string &p_string, const std::string &p_from, const std::string &p_to ) +{ + if ( p_from.empty() ) + return; + + size_t start_pos = 0; + while ( ( start_pos = p_string.find( p_from, start_pos ) ) != std::string::npos ) + { + p_string.replace( start_pos, p_from.length(), p_to ); + start_pos += p_to.length(); // In case 'p_to' contains 'p_from', like replacing 'x' with 'yx' + } +} + +void wa::strings::replaceAll( char *p_string, const char *p_from, const char *p_to ) +{ + std::string l_string( p_string ); + + wa::strings::replaceAll( l_string, std::string( p_from ), std::string( p_to ) ); + + p_string = (char *)l_string.c_str(); +} + +void wa::strings::replaceAll( wchar_t *p_string, const wchar_t *p_from, const wchar_t *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( p_string ); + + wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) ); + + std::wstring l_wstring = wa::strings::convert::to_wstring( l_string ); + + p_string = (wchar_t *)( l_wstring.c_str() ); +} + + +// +// create_string +// + +std::string wa::strings::create_string( const char *Format, ... ) +{ + char _log_message_a[ DEFAULT_STR_BUFFER_SIZE ]; + va_list args; + va_start( args, Format ); + snprintf( _log_message_a, DEFAULT_STR_BUFFER_SIZE, Format, args ); + + return std::string( _log_message_a ); +} + +std::string wa::strings::create_string( const wchar_t *Format, ... ) +{ + wchar_t _log_message_w[ DEFAULT_STR_BUFFER_SIZE ]; + va_list args; + va_start( args, Format ); + _vsnwprintf( _log_message_w, DEFAULT_STR_BUFFER_SIZE, Format, args ); + + return wa::strings::convert::to_string( _log_message_w ); +} + +std::string wa::strings::create_string( const std::string Format, ... ) +{ + va_list args; + va_start( args, Format ); + + return create_string( Format.c_str(), args ); +} + + + + + + +//===================================================================================================================== +// +// wa_string::wa_string (constructor) +// +wa::strings::wa_string::wa_string( const char *p_initial ) +{ + if ( p_initial == NULL ) + _wa_string.clear(); + else + _wa_string = wa::strings::convert::to_wstring( p_initial ); +} + +wa::strings::wa_string::wa_string( const wchar_t *p_initial ) +{ + if ( p_initial == NULL ) + _wa_string.clear(); + else + _wa_string = std::wstring( p_initial ); +} + +wa::strings::wa_string::wa_string( const std::string &p_initial ) +{ + _wa_string = wa::strings::convert::to_wstring( p_initial ); +} + +wa::strings::wa_string::wa_string( const std::wstring &p_initial ) +{ + _wa_string = p_initial; +} + + +// +// wa_string::operator= +// +void wa::strings::wa_string::operator=( const char *p_value ) +{ + _wa_string = wa::strings::convert::to_wstring( p_value ); +} + +void wa::strings::wa_string::operator=( const wchar_t *p_value ) +{ + _wa_string = std::wstring( p_value ); +} + +void wa::strings::wa_string::operator=( const std::string &p_value ) +{ + _wa_string = wa::strings::convert::to_wstring( p_value ); +} + +void wa::strings::wa_string::operator=( const std::wstring &p_value ) +{ + _wa_string = p_value; +} + + +// +// wa_string::operator== +// +bool wa::strings::wa_string::operator==( const char *p_value ) const +{ + std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) ); + + return l_wa_string.compare( p_value ) == 0; +} + +bool wa::strings::wa_string::operator==( const wchar_t *p_value ) const +{ + return _wa_string.compare( p_value ) == 0; +} + +bool wa::strings::wa_string::operator==( const std::string &p_value ) const +{ + std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) ); + + return l_wa_string.compare( p_value ) == 0; +} + +bool wa::strings::wa_string::operator==( const std::wstring &p_value ) const +{ + return _wa_string.compare( p_value ) == 0; +} + + +// +// wa_string::operator!= +// +bool wa::strings::wa_string::operator!=( const char *p_value ) const +{ + std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) ); + + return l_wa_string.compare( p_value ) != 0; +} + +bool wa::strings::wa_string::operator!=( const wchar_t *p_value ) const +{ + return _wa_string.compare( p_value ) != 0; +} + +bool wa::strings::wa_string::operator!=( const std::string &p_value ) const +{ + std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) ); + + return l_wa_string.compare( p_value ) != 0; +} + +bool wa::strings::wa_string::operator!=( const int p_value ) const +{ + return std::to_wstring( p_value ).compare( _wa_string ) != 0; +} + + +// +// wa_string::operator+ +// +wa::strings::wa_string wa::strings::wa_string::operator+( const char *p_value ) +{ + _wa_string.append( wa::strings::convert::to_wstring( p_value ) ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::operator+( const wchar_t *p_value ) +{ + _wa_string.append( p_value ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::operator+( const std::string &p_value ) +{ + _wa_string.append( wa::strings::convert::to_wstring( p_value ) ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::operator+( const std::wstring &p_value ) +{ + _wa_string.append( p_value ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::operator+( const int p_value ) +{ + append( p_value ); + + return *this; +} + + +// +// wa_string::append +// +wa::strings::wa_string wa::strings::wa_string::append( const char *p_value ) +{ + _wa_string.append( wa::strings::convert::to_wstring( p_value ) ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::append( const wchar_t *p_value ) +{ + _wa_string.append( p_value ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::append( const std::string &p_value ) +{ + _wa_string.append( wa::strings::convert::to_wstring( p_value ) ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::append( const std::wstring &p_value ) +{ + _wa_string.append( p_value ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::append( const wa_string p_value ) +{ + _wa_string.append(p_value.GetW().c_str()); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::append( const int p_value ) +{ +#ifdef WIN32 + // max size is 4294967295 is 10 character + wchar_t temp[ 11 ] = { 0 }; +#elif WIN64 + // maxsize 9223372036854775807 is 19 + wchar_t temp[ 20 ] = { 0 }; +#endif + + _itow( p_value, temp, 10 ); + _wa_string.append( temp ); + + return *this; +} + + +// wa_string::GetA +const std::string wa::strings::wa_string::GetA() const +{ + return wa::strings::convert::to_string( _wa_string ); +} + +// wa_string::GetW +const std::wstring wa::strings::wa_string::GetW() const +{ + return _wa_string; +} + + +// +// wa_string::lengthA +// +unsigned int wa::strings::wa_string::lengthA() const +{ + return strlen( wa::strings::convert::to_char( _wa_string ) ); +} + +unsigned int wa::strings::wa_string::lengthW() const +{ + return wcslen( _wa_string.c_str() ); +} + +unsigned int wa::strings::wa_string::lengthS() const +{ + std::string l_wa_string = wa::strings::convert::to_string( _wa_string ); + + return l_wa_string.length(); +} + +unsigned int wa::strings::wa_string::lengthWS() const +{ + return _wa_string.length(); +} + + +// +// wa_string::replace +// +bool wa::strings::wa_string::contains( const char *p_value ) +{ + std::string l_value( p_value ); + + return this->contains( l_value ); +} + +bool wa::strings::wa_string::contains( const wchar_t *p_value ) +{ + std::string l_value = wa::strings::convert::to_string( p_value ); + + return this->contains( l_value ); +} + +bool wa::strings::wa_string::contains( const std::string &p_value ) +{ + std::string l_wa_string = wa::strings::convert::to_string( _wa_string ); + + return ( l_wa_string.find( p_value ) != std::string::npos ); +} + +bool wa::strings::wa_string::contains( const std::wstring &p_value ) +{ + std::string l_value = wa::strings::convert::to_string( p_value ); + + return this->contains( l_value ); +} + + +// +// wa_string::replace +// +wa::strings::wa_string wa::strings::wa_string::replace( const char *p_from, const char *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replace( l_string, std::string( p_from ), std::string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replace( const wchar_t *p_from, const wchar_t *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replace( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replace( const std::string &p_from, const std::string &p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replace( l_string, p_from, p_to ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replace( const std::wstring &p_from, const std::wstring &p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replace( l_string, wa::strings::convert::to_string( p_from), wa::strings::convert::to_string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + + +// +// wa_string::replaceAll +// +wa::strings::wa_string wa::strings::wa_string::replaceAll( const char *p_from, const char *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replaceAll( l_string, std::string( p_from ), std::string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replaceAll( const wchar_t *p_from, const wchar_t *p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replaceAll( const std::string &p_from, const std::string &p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replaceAll( l_string, p_from, p_to ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + +wa::strings::wa_string wa::strings::wa_string::replaceAll( const std::wstring &p_from, const std::wstring &p_to ) +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) ); + + _wa_string = wa::strings::convert::to_wstring( l_string ); + + return *this; +} + + +// +// wa_string::startsWith +// +bool wa::strings::wa_string::startsWith( const char *l_head ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return ( l_string.substr( 0, std::strlen( l_head ) ).compare( l_head ) == 0 ); +} + +bool wa::strings::wa_string::startsWith( const wchar_t *l_head ) const +{ + return ( _wa_string.substr( 0, wcslen( l_head ) ).compare( l_head ) == 0 ); +} + +bool wa::strings::wa_string::startsWith( const std::string &l_head ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return ( l_string.substr( 0, l_head.size() ).compare( l_head ) == 0 ); +} + +bool wa::strings::wa_string::startsWith( const std::wstring &l_head ) const +{ + return ( _wa_string.substr( 0, l_head.size() ).compare( l_head ) == 0 ); +} + + +// +// wa_string::endsWith +// +bool wa::strings::wa_string::endsWith( const char *l_tail ) const +{ + // TODO + + return false; +} + +bool wa::strings::wa_string::endsWith( const wchar_t *l_tail ) const +{ + // TODO + + return false; +} + +bool wa::strings::wa_string::endsWith( const std::string &l_tail ) const +{ + // TODO + + return false; +} + +bool wa::strings::wa_string::endsWith( const std::wstring &l_tail ) const +{ + // TODO + + return false; +} + + +// +// wa_string::findFirst +// +int wa::strings::wa_string::findFirst( const char *l_text ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return l_string.find_first_of( l_text ); +} + +int wa::strings::wa_string::findFirst( const wchar_t *l_text ) const +{ + return _wa_string.find_first_of( l_text ); +} + +int wa::strings::wa_string::findFirst( const std::string &l_text ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return l_string.find_first_of( l_text ); +} + +int wa::strings::wa_string::findFirst( const std::wstring &l_text ) const +{ + return _wa_string.find_first_of( l_text ); +} + + +// +// wa_string::findLast +// +int wa::strings::wa_string::findLast( const char *l_text ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return l_string.find_last_of( l_text ); +} + +int wa::strings::wa_string::findLast( const wchar_t *l_text ) const +{ + return _wa_string.find_last_of( l_text ); +} + +int wa::strings::wa_string::findLast( const std::string &l_text ) const +{ + std::string l_string = wa::strings::convert::to_string( _wa_string ); + + return l_string.find_last_of( l_text ); +} + +int wa::strings::wa_string::findLast( const std::wstring &l_text ) const +{ + return _wa_string.find_last_of( l_text ); +} + + +// +// wa_string::find +// +int wa::strings::wa_string::find( const std::wstring &l_text ) const +{ + return _wa_string.find( l_text ); +} + + +// wa_string::mid +std::wstring wa::strings::wa_string::mid( const int p_start, const int p_length ) const +{ + return _wa_string.substr( p_start, p_length ); +} + + +// wa_string::toUpper +wa::strings::wa_string wa::strings::wa_string::toUpper() +{ + std::transform( _wa_string.begin(), _wa_string.end(), _wa_string.begin(), ::toupper ); + + return *this; +} |