diff options
author | Aleksander Donchev <aleksander.donchev@partner.bmw.de> | 2013-08-13 16:52:21 +0200 |
---|---|---|
committer | Aleksander Donchev <aleksander.donchev@partner.bmw.de> | 2013-08-14 15:30:45 +0200 |
commit | 548dbdf6ee608869f017fb665fdf94ec88d0067b (patch) | |
tree | 5c8d7b1be006ae6a568c22018f8ce4f0fd772e59 /AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp | |
parent | f819d7b58660be225f127d30db4e330c89e58aed (diff) | |
download | audiomanager-548dbdf6ee608869f017fb665fdf94ec88d0067b.tar.gz |
* CAmDatabaseHandlerMap - the main connection now have separate method for id generation.
Signed-off-by: Christian Linke <christian.linke@bmw.de>
Diffstat (limited to 'AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp')
-rw-r--r-- | AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp b/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp index d659ae6..c7a888d 100644 --- a/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp +++ b/AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp @@ -345,15 +345,17 @@ void CAmDatabaseHandlerMap::CAmCrossfader::getDescription (std::string & outStri outString = fmt.str(); } -bool CAmDatabaseHandlerMap::CAmMappedData::increaseID(int16_t * resultID, int16_t * sourceID, - int16_t const desiredStaticID = 0, int16_t const preferedStaticIDBoundary = DYNAMIC_ID_BOUNDARY) +bool CAmDatabaseHandlerMap::CAmMappedData::increaseID(int16_t * resultID, + int16_t * sourceID, + int16_t const desiredStaticID = 0, + int16_t const preferedStaticIDBoundary = DYNAMIC_ID_BOUNDARY) { if( desiredStaticID > 0 && desiredStaticID < preferedStaticIDBoundary ) { *resultID = desiredStaticID; return true; } - else if( *sourceID < mDefaultIDLimit-1 ) //The last used value is 'limit' - 1. e.g. SHRT_MAX - 1, SHRT_MAX is reserved. + else if( *sourceID < mDefaultIDLimit ) //The last used value is 'limit' - 1. e.g. SHRT_MAX - 1, SHRT_MAX is reserved. { *resultID = (*sourceID)++; return true; @@ -365,19 +367,39 @@ bool CAmDatabaseHandlerMap::CAmMappedData::increaseID(int16_t * resultID, int16_ } } -/** - * template to converts T to std::string - * @param x T - * @return string - */ -template<typename T> -inline std::string i2s(T const& x) +bool CAmDatabaseHandlerMap::CAmMappedData::increaseMainConnectionID(int16_t * resultID) { - std::ostringstream o; - o << x; - return (o.str()); + am_mainConnectionID_t nextID; + am_mainConnectionID_t const lastID = mCurrentMainConnectionID; + if( mCurrentMainConnectionID < mDefaultIDLimit ) + nextID = mCurrentMainConnectionID++; + else + nextID = mCurrentMainConnectionID = 1; + + bool notFreeIDs = false; + while( existsObjectWithKeyInMap(nextID, mMainConnectionMap) ) + { + if( mCurrentMainConnectionID < mDefaultIDLimit ) + nextID = mCurrentMainConnectionID++; + else + nextID = mCurrentMainConnectionID = 1; + + if( mCurrentMainConnectionID == lastID ) + { + notFreeIDs = true; + break; + } + } + if(notFreeIDs) + { + *resultID = -1; + return false; + } + *resultID = nextID; + return true; } + CAmDatabaseHandlerMap::CAmDatabaseHandlerMap(): mFirstStaticSink(true), // mFirstStaticSource(true), // mFirstStaticGateway(true), // @@ -470,7 +492,7 @@ am_Error_e CAmDatabaseHandlerMap::enterMainConnectionDB(const am_MainConnection_ int16_t delay = 0; int16_t nextID = 0; - if(mMappedData.increaseID(&nextID, &mMappedData.mCurrentMainConnectionID)) + if(mMappedData.increaseMainConnectionID(&nextID)) { connectionID = nextID; mMappedData.mMainConnectionMap[nextID] = mainConnectionData; |