JD2022-TU1/main/extern/Raki/Source/RakiTests/_Win32/KeyValueContainer.cpp

108 lines
2.8 KiB
C++

#include "Precompiled.h"
#include "RakiTests/_Win32/KeyValueContainer.h"
namespace raki
{
KeyValueContainer::KeyValueContainer( int _argc, _TCHAR* _argv[] )
{
// start from 1 since first param is
for ( int i = 1 ; i < _argc ; ++i )
{
wchar_t * res = wcsstr( _argv[i], _T( "=" ) );
if ( res )
{
size_t pairSize = wcslen( _argv[i] );
size_t keySize = (int)( res - _argv[i] );
if ( pairSize < ( keySize + 1 ) )
continue;
TCHAR key[256];
memcpy( key, _argv[ i ], keySize * sizeof( TCHAR ) );
key[ keySize ] = 0;
TCHAR * pairValue = &_argv[ i ][ keySize + 1];
KeyValuePair pair;
pair.m_key = key;
pair.m_value = pairValue;
// check that pair is not already added
bool keyIsAlreadyUsed = false;
for ( std::list<KeyValuePair>::iterator it = m_keyValueArray.begin() ; it != m_keyValueArray.end() ; ++it )
{
if ( !_wcsicmp( it->m_key.c_str(), key ) )
keyIsAlreadyUsed = true;
}
if ( !keyIsAlreadyUsed )
m_keyValueArray.push_back( pair );
}
}
}
const std::wstring & KeyValueContainer::getStringValue( const _TCHAR * _key )
{
for ( std::list<KeyValuePair>::const_iterator it = m_keyValueArray.begin() ; it != m_keyValueArray.end() ; ++it )
{
if ( !_wcsicmp( it->m_key.c_str(), _key ) )
return it->m_value;
}
return m_emptyWString;
}
const int KeyValueContainer::getIntValue( const _TCHAR * _key )
{
for ( std::list<KeyValuePair>::const_iterator it = m_keyValueArray.begin() ; it != m_keyValueArray.end() ; ++it )
{
if ( !_wcsicmp( it->m_key.c_str(), _key ) )
return _wtoi( it->m_value.c_str() );
}
return -1;
}
const bool KeyValueContainer::getBoolValue( const _TCHAR * _key )
{
for ( std::list<KeyValuePair>::const_iterator it = m_keyValueArray.begin() ; it != m_keyValueArray.end() ; ++it )
{
if ( !_wcsicmp( it->m_key.c_str(), _key ) )
{
if ( !_wcsicmp( it->m_value.c_str(), _T( "t" ) ) )
return true;
if ( !_wcsicmp( it->m_value.c_str(), _T( "true" ) ) )
return true;
if ( !_wcsicmp( it->m_value.c_str(), _T( "1" ) ) )
return true;
}
}
return false;
}
const size_t KeyValueContainer::getNbKeyValuePairs()
{
return m_keyValueArray.size();
}
} // namespace raki