diff options
-rw-r--r-- | AudioManagerDaemon/include/CAmDatabaseHandlerMap.h | 11 | ||||
-rw-r--r-- | AudioManagerDaemon/src/CAmDatabaseHandlerMap.cpp | 50 |
2 files changed, 45 insertions, 16 deletions
diff --git a/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h b/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h index a928b93..28ec7e6 100644 --- a/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h +++ b/AudioManagerDaemon/include/CAmDatabaseHandlerMap.h @@ -269,7 +269,7 @@ public: * The following structure groups the map objects needed for the implementation. * Every map object is coupled with an identifier, which hold the current value. * DYNAMIC_ID_BOUNDARY is used as initial value everywhere a dynamic id is considered . - * The ID's can be increased through the method increaseID(...), which follows the AudioManager logic. + * The IDs can be increased through the method increaseID(...), which follows the AudioManager logic. * For more information about the static and dynamic IDs, please see the documentation. */ typedef struct CAmMappedData @@ -310,7 +310,7 @@ public: /** * \brief Increases a given map ID. * - * A common method implementing the logic for static and dynamic IDs. + * A common method implementing the logic for static and dynamic IDs except main connection ID. * * @param resultID Pointer to an output variable. * @param sourceID Pointer to ID, which will be manipulated. @@ -321,6 +321,13 @@ public: */ bool increaseID(int16_t * resultID, int16_t * sourceID, int16_t const desiredStaticID, int16_t const preferedStaticIDBoundary ); + /** + * \brief Increases the main connection ID. + * + * @param resultID Pointer to an output variable. + * @return TRUE on successfully changed ID. + */ + bool increaseMainConnectionID(int16_t * resultID); template <class TPrintObject> static void print (const TPrintObject & t, std::ostream & output) { 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; |