diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/include/CComponentManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/include/CComponentManager.h Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + + + +#ifndef __CCOMPONENTMANAGER_H__ +#define __CCOMPONENTMANAGER_H__ + +/**************************************************************************************** + * + * System Includes + * + ***************************************************************************************/ +#include +#include + +/**************************************************************************************** + * + * Local Includes + * + ***************************************************************************************/ + +/**************************************************************************************** + * + * Class CComponentManager + * + ***************************************************************************************/ +template +class CComponentManager +{ +public: + CComponentManager( int aMaxComponents ) + { + // check params + assert( aMaxComponents > 0 ); + + // set the state + iComponentCount = 0; + iMaxComponents = aMaxComponents; + iComponentList = (T**)calloc( iMaxComponents, sizeof(T*) ); + assert( iComponentList != NULL ); + } + + ~CComponentManager() + { + assert( iComponentCount == 0 ); + free( iComponentList ); + } + + int CreateInstance() + { + int i; + + // make sure there is room + if( iComponentCount == iMaxComponents ) { + return ERR_CANNOT_CREATE_NEW_INSTANCE; + } + + // find a free index + for( i = 0; i < iMaxComponents; i++ ) { + if( iComponentList[i] == NULL ) + break; + } + assert( i < iMaxComponents ); + + // create the new instance + iComponentList[i] = new T(); + assert( iComponentList[i] != NULL ); + + // set the key + (iComponentList[i])->SetKey( i ); + + // update the count + iComponentCount++; + + // done - return the key + return i; + } + + int DeleteInstance( int aInstanceKey ) + { + int is_key_valid; + + // check that the key is valid + is_key_valid = IsValidKey( aInstanceKey ); + assert( is_key_valid != 0 ); + + // verify the key + assert( (iComponentList[aInstanceKey])->GetKey() == aInstanceKey ); + + // delete the instace + delete (iComponentList[aInstanceKey]); + iComponentList[aInstanceKey] = NULL; + iComponentCount--; + + // done + return ERR_NONE; + } + + int IsValidKey( int aInstanceKey ) + { + return ((aInstanceKey >= 0) && (aInstanceKey < iMaxComponents) && (iComponentList[aInstanceKey] != NULL) ); + } + + T *GetInstance( int aInstanceKey ) + { + // validate the param + if( (aInstanceKey < 0) || (aInstanceKey >= iMaxComponents) ) { + return NULL; + } + return iComponentList[aInstanceKey]; + } + + int GetInstanceCount() + { + return iComponentCount; + } + + int DeleteAllInstances() + { + int i, err; + for( i = 0; i < iMaxComponents; i++ ) { + if( iComponentList[i] != NULL ) { + err = DeleteInstance( i ); + assert( err == ERR_NONE ); + } + } + assert( iComponentCount == 0 ); + return ERR_NONE; + } + + +private: + int iComponentCount; + int iMaxComponents; + T **iComponentList; +}; + +#endif //__CCOMPONENTMANAGER_H__