--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/inc/CVPbkEComImplementationsList.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2007-2007 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: Virtual Phonebook utility for listing ECOM implementations
+*
+*/
+
+
+#ifndef CVPBKECOMIMPLEMENTATIONSLIST_H
+#define CVPBKECOMIMPLEMENTATIONSLIST_H
+
+// INCLUDES
+#include <e32base.h>
+#include <ecom/ecom.h>
+
+// FORWARD DECLARATIONS
+
+/**
+ * Virtual Phonebook utility for listing ECOM implementations
+ *
+ * Lists all ecom implementations according to interface UID.
+ */
+class CVPbkEComImplementationsListBase : public CBase
+ {
+ public: // Construction and destruction
+ IMPORT_C ~CVPbkEComImplementationsListBase();
+
+ public: // Interface
+
+ /**
+ * Create ECOM implementations for aInterfaceUid and give aParam
+ * for them.
+ *
+ * @param aInterfaceUid An ECOM interface UID
+ * @param aParam The parameter for the implementations.
+ */
+ IMPORT_C void LoadImplementationsL( TUid aInterfaceUid, TAny* aParam );
+
+ /**
+ * Create ECOM implementations for aInterfaceUid and give aParam
+ * for them.
+ *
+ * @param aInterfaceUid An ECOM interface UID
+ * @param aResolverParams parameters for ECOM resolver
+ * @param aParam The parameter for the implementations.
+ */
+ IMPORT_C void LoadImplementationsL( TUid aInterfaceUid,
+ const TEComResolverParams& aResolverParams, TAny* aParam );
+
+ /**
+ * Returns the number of implementations in this list.
+ *
+ * @return the number of implementations in this list.
+ */
+ IMPORT_C TInt Count() const;
+
+ /**
+ * Returns the implementation at position aIndex
+ *
+ * @param aIndex the position of the implemetation.
+ * @return The implementation at position aIndex
+ */
+ IMPORT_C CBase& At( TInt aIndex ) const;
+
+ /**
+ * Returns the ECOM implementation information for implementation
+ * aImpl or NULL.
+ *
+ * @param aImpl The implementation retrieved using At() in this
+ * list.
+ * @return The ECOM implementation information for implementation
+ * aImpl or NULL.
+ */
+ IMPORT_C const CImplementationInformation* FindInfo(
+ CBase& aImpl ) const;
+
+ protected: // Interface
+ IMPORT_C CVPbkEComImplementationsListBase();
+
+ private: // Implementation
+ virtual CBase* CreateImplementationL( TUid aImplementationUid,
+ TAny* aParam ) = 0;
+ void DoLoadImplementationsL( RImplInfoPtrArray& aImplInfoPtrArray,
+ TAny* aParam );
+
+ private: // Data
+ class CEComImpl : public CBase
+ {
+ public:
+ CEComImpl( CImplementationInformation* aInfo,
+ CBase* aImpl );
+ ~CEComImpl();
+ CImplementationInformation* iInfo;
+ CBase* iImpl;
+ };
+ RPointerArray<CEComImpl> iImplementations;
+ };
+
+/**
+ * A template for a list of type T ECOM implementations.
+ *
+ * An implementation class must be CBase derived class that has a
+ * NewL( TUid aImplementationUid, <ParamT>& aParam )
+ */
+template<typename T, typename ParamT>
+NONSHARABLE_CLASS( CVPbkEComImplementationsList )
+ : public CVPbkEComImplementationsListBase
+ {
+ public: // See documentation from CVPbkEComImplementationsListBase
+ inline void LoadImplementationsL( TUid aInterfaceUid,
+ ParamT& aParam );
+ inline void LoadImplementationsL( TUid aInterfaceUid,
+ const TEComResolverParams& aResolverParams, ParamT& aParam );
+ inline TInt Count() const;
+ inline T& At( TInt aIndex ) const;
+ inline const CImplementationInformation* FindInfo( T& aImpl ) const;
+
+ // From CVPbkEComImplementationsListBase
+ inline CBase* CreateImplementationL( TUid aImplementationUid,
+ TAny* aParam );
+ };
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline void CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL(
+ TUid aInterfaceUid, ParamT& aParam )
+ {
+ CVPbkEComImplementationsListBase::LoadImplementationsL( aInterfaceUid,
+ &aParam );
+ }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline void CVPbkEComImplementationsList<T,ParamT>::LoadImplementationsL(
+ TUid aInterfaceUid, const TEComResolverParams& aResolverParams,
+ ParamT& aParam )
+ {
+ CVPbkEComImplementationsListBase::LoadImplementationsL( aInterfaceUid,
+ aResolverParams, &aParam );
+ }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::Count
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline TInt CVPbkEComImplementationsList<T,ParamT>::Count() const
+ {
+ return CVPbkEComImplementationsListBase::Count();
+ }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::At
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline T& CVPbkEComImplementationsList<T,ParamT>::At( TInt aIndex ) const
+ {
+ return static_cast<T&>( CVPbkEComImplementationsListBase::At( aIndex ));
+ }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::FindInfo
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+const CImplementationInformation*
+ CVPbkEComImplementationsList<T,ParamT>::FindInfo(
+ T& aImpl ) const
+ {
+ return CVPbkEComImplementationsListBase::FindInfo( aImpl );
+ }
+
+// --------------------------------------------------------------------------
+// CVPbkEComImplementationsList<T,ParamT>::CreateImplementationL
+// --------------------------------------------------------------------------
+//
+template<typename T, typename ParamT>
+inline CBase* CVPbkEComImplementationsList<T,ParamT>::CreateImplementationL(
+ TUid aImplementationUid, TAny* aParam )
+ {
+ return T::NewL( aImplementationUid,
+ *reinterpret_cast<ParamT*>( aParam ) );
+ }
+
+#endif // CVPBKECOMIMPLEMENTATIONSLIST_H
+//End of file
+