void TinyConfig::AddEntry(const std::string & key, int val, bool uniq) { iterator it = end(); if(uniq && (end() != (it = find(ModifyKey(key))))) it->second = GetString(val); else insert(std::pair<std::string, std::string>(ModifyKey(key), GetString(val))); }
bool ConfigurableImpl::RemoveParameter( const uint64 & actualKey ) { uint64 key = ModifyKey( actualKey ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); AutoSharedLock lock( GetMutex(), true ); bool returnValue = mMap.erase( key ) >= 1 ? true : false; return returnValue; }
IConfigurable::eDataType ConfigurableImpl::GetDataType( const uint64 & actualKey ) const { uint64 key = ModifyKey( actualKey ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); AutoSharedLock lock( GetMutex() ); auto it = mMap.find( key ); if ( it == mMap.end() ) return kDTNone; else return it->second.first; }
std::list<int> TinyConfig::ListInt(const std::string & key) const { std::pair<const_iterator, const_iterator> ret = equal_range(ModifyKey(key)); std::list<int> res; for(const_iterator it = ret.first; it != ret.second; ++it) res.push_back(GetInt(it->second)); return res; }
//definition of class methods void ConfigurableImpl::SetParameter( const uint64 & actualKey, eDataType type, const CombinedDataValue & value ) { uint64 key = ModifyKey( actualKey ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); eConfigurableErrorCode validKey = ValidateKey( key ); eDataType oldType = kDTNone; CombinedDataValue oldValue; if ( validKey == kCECNone ) { AutoSharedLock lock( GetMutex(), true ); if ( mKeysSet ) { auto it = mKeysSet->find( key ); if ( it == mKeysSet->end() ) NotifyError( "Key is not supported", key, kCECKeyNotSupported, type, value, oldType, oldValue ); } eConfigurableErrorCode validValue = ValidateValue( key, type, value ); if ( validValue == kCECNone && mKeyValueTypeMap ) { auto it = mKeyValueTypeMap->find( key ); if ( it != mKeyValueTypeMap->end() ) { if ( type != it->second ) { validValue = kCECValueTypeNotSupported; } } } if ( validValue == kCECNone && !mAllowDifferentValueTypesForExistingEntries ) { auto it = mMap.find( key ); if ( it != mMap.end() && it->second.first != type ) validValue = kCECPreviousTypeDifferent; } if ( validValue == kCECNone ) { TypeValuePair pair; pair.first = type; pair.second = value; mMap[ key ] = pair; } else { auto it = mMap.find( key ); if ( it != mMap.end() ) { oldType = it->second.first; oldValue = it->second.second; } NotifyError( "Validation failed for the parameter, type and value combination", key, validValue, type, value, oldType, oldValue ); } } else { NotifyError( "Key is not valid", key, validKey, type, value, oldType, oldValue ); } }
void APICALL ConfigurableImpl::SetAllowedValueTypesForKeys( KeyValueTypePair * keyValueTypePairTable, sizet sizeOfTable ) { AutoSharedLock lock( GetMutex(), true ); if ( mKeyValueTypeMap ) { delete mKeyValueTypeMap; mKeyValueTypeMap = NULL; } if ( sizeOfTable > 0 && keyValueTypePairTable != NULL ) { mKeyValueTypeMap = new keyValueTypeMap(); for ( sizet i = 0; i < sizeOfTable; i++ ) { uint64 key = keyValueTypePairTable[i].first; key = ModifyKey( key ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); ( *mKeyValueTypeMap )[ key ] = keyValueTypePairTable[i].second; } } }
void APICALL ConfigurableImpl::SetAllowedKeys( uint64 * keysTable, sizet sizeOfTable ) { AutoSharedLock lock ( GetMutex(), true ); if ( mKeysSet ) { delete mKeysSet; mKeysSet = NULL; } if ( sizeOfTable > 0 && keysTable != NULL ) { mKeysSet = new KeysSet(); for ( sizet i = 0; i < sizeOfTable; i++ ) { uint64 key = keysTable[ i ]; key = ModifyKey( key ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); mKeysSet->insert( key ); } } }
bool ConfigurableImpl::GetParameter( const uint64 & actualKey, eDataType type, CombinedDataValue & value ) const { uint64 key = ModifyKey( actualKey ); if ( mTreatKeyAsCaseInsensitiveCharBuffer ) key = ConvertToLowerCase( key ); AutoSharedLock lock( GetMutex() ); auto it = mMap.find( key ); if ( it == mMap.end() ) return false; if ( it->second.first != type ) { NOTIFY_ERROR( IError_v1::kEDConfigurable, kCECValueTypeMismatch, "Type mismatch for a parameter", IError_v1::kESOperationFatal, true, key, true, static_cast< uint64 >( it->second.first ), true, static_cast< uint64 >( type ) ); return false; } value = it->second.second; return true; }
bool TinyConfig::Exists(const std::string & key) const { return end() != find(ModifyKey(key)); }
std::string TinyConfig::StrParams(const std::string & key) const { const_iterator it = find(ModifyKey(key)); return it != end() ? it->second : ""; }
int TinyConfig::IntParams(const std::string & key) const { const_iterator it = find(ModifyKey(key)); return it != end() ? GetInt(it->second) : 0; }