--- /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 <stdio.h>
+#include <assert.h>
+
+/****************************************************************************************
+ *
+ * Local Includes
+ *
+ ***************************************************************************************/
+
+/****************************************************************************************
+ *
+ * Class CComponentManager
+ *
+ ***************************************************************************************/
+template <class T>
+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__