mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-11-28 09:20:55 +01:00
710 lines
16 KiB
C++
710 lines
16 KiB
C++
#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;
|
|
}
|