testexecmgmt/ucc/GenericService/inc/CComponentManager.h
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/GenericService/inc/CComponentManager.h	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,153 @@
+/*
+* 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__