Files
bluflame/evoke-64k/trunk/ev10/StringHelper.cpp
2026-04-18 22:31:51 +02:00

214 lines
5.1 KiB
C++

/***********************************************************************************/
/** \file StringHelper.cpp
** \brief Implementation zur Klasse StringHelper
*************************************************************************************
** Autor: Christian Roesch
*************************************************************************************
** -tut nichts-
**
*//*********************************************************************************/
// includes
#include "StringHelper.h"
#include <cstdio>
std::vector< char > FrameWork::StringHelper::m_SpaceTab;
FrameWork::StringHelper::StringHelperPreparer FrameWork::StringHelper::m_shpDummy;
// Methoden-Definitionen
namespace FrameWork
{
/***********************************************************************************/
/** Schneidet einen String an den Separatoren auseinander. Der vorderste Teil wird
*** abgeschnitten, falls der Separator gefunden wird. Der Eingabestring wird auf den
*** Teil hinter dem Seperator gestutzt
***
*** \param strInput [in\out] Ursprungsstring
*** \param strSeperator Seperator
*** \param strOutput der vorne abgeschnittene Teil
***
*** \return true, wenn Seperator gefunden
*//*********************************************************************************/
bool StringHelper::splitAt(
std::string& strInput,
const std::string& strSeperator,
std::string& strOutput )
{
size_t tStart= strInput.find( strSeperator );
if( tStart == std::string::npos )
{
strOutput= strInput;
return false;
}
strOutput= strInput.substr( 0, tStart );
strInput= strInput.substr( tStart + strSeperator.size() );
return true;
}
/***********************************************************************************/
/** Schneidet einen String an den Separatoren auseinander. Der vorderste Teil wird
*** abgeschnitten, falls der Separator gefunden wird. Der Eingabestring wird auf den
*** Teil hinter dem Seperator gestutzt
***
*** \param strInput [in\out] Ursprungsstring
*** \param strSeperator Seperator
*** \param strOutput der vorne abgeschnittene Teil
***
*** \return true, strInput nicht leer und strOutput enthaelt Daten
*** false, strInput leer und strOutput keine enthaelt Daten
*//*********************************************************************************/
bool StringHelper::splitLoop(
std::string& strInput,
const std::string& strSeperator,
std::string& strOutput )
{
if( strInput.empty() )
{
return false;
}
size_t tStart= strInput.find( strSeperator );
if( tStart == std::string::npos )
{
strOutput= strInput;
strInput= "";
}
else
{
strOutput= strInput.substr( 0, tStart );
strInput= strInput.substr( tStart + strSeperator.size() );
}
return true;
}
bool StringHelper::tokenize( std::string& strInput,
const std::string& strSeperator,
std::vector< std::string >& vecOutput )
{
std::string strCommand;
while( FrameWork::StringHelper::splitAt( strInput, strSeperator, strCommand ) )
{
vecOutput.push_back( strCommand );
}
vecOutput.push_back( strInput );
return true;
}
bool StringHelper::trimFront( std::string& strData, char cWhiteSpace )
{
int i= 0;
if( (int)strData.size() == 0 )
{
return false;
}
while( strData[ i ] == cWhiteSpace )
{
i++;
}
if( i > 0 )
{
strData= strData.substr( i );
return true;
}
return false;
}
bool StringHelper::trimBack( std::string& strData, char cWhiteSpace )
{
int i= (int)strData.size() - 1;
if( i == -1 )
{
return false;
}
while( strData[ i ] == cWhiteSpace )
{
i--;
}
if( i < (int)strData.size() - 1 )
{
strData= strData.substr( 0, i + 1 );
return true;
}
return false;
}
bool StringHelper::trim( std::string& strData, char cWhiteSpace )
{
bool bTrimmed= trimFront( strData, cWhiteSpace );
bTrimmed|= trimBack( strData, cWhiteSpace );
return bTrimmed;
}
bool StringHelper::trimFront( std::string& strData, std::vector< char >& WhiteSpaces )
{
bool bTrimmed;
do
{
bTrimmed= false;
for( int i= 0; i < (int)WhiteSpaces.size(); ++i )
{
bTrimmed|= trimFront( strData, WhiteSpaces[ i ] );
}
} while( bTrimmed );
return bTrimmed;
}
bool StringHelper::trimBack( std::string& strData, std::vector< char >& WhiteSpaces )
{
bool bTrimmed;
do
{
bTrimmed= false;
for( int i= 0; i < (int)WhiteSpaces.size(); ++i )
{
bTrimmed|= trimBack( strData, WhiteSpaces[ i ] );
}
} while( bTrimmed );
return bTrimmed;
}
bool StringHelper::trim( std::string& strData, std::vector< char >& WhiteSpaces )
{
bool bTrimmed= trimFront( strData, WhiteSpaces );
bTrimmed|= trimBack( strData, WhiteSpaces );
return bTrimmed;
}
std::vector< char >& StringHelper::getSpaceTab()
{
return m_SpaceTab;
}
void StringHelper::toUpper( std::string& strData )
{
for( int i= 0; i < (int)strData.size(); ++i )
{
strData[ i ]= toupper( strData[ i ] );
}
}
void StringHelper::toLower( std::string& strData )
{
for( int i= 0; i < (int)strData.size(); ++i )
{
strData[ i ]= tolower( strData[ i ] );
}
}
}
/************************************************************************************
** Ende der Datei: StringHelper.cpp
************************************************************************************/