summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerDaemon/src')
-rw-r--r--AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp50
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;