epoc32/include/ecom/implementationinformation.h
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
--- a/epoc32/include/ecom/implementationinformation.h	Wed Mar 31 12:27:01 2010 +0100
+++ b/epoc32/include/ecom/implementationinformation.h	Wed Mar 31 12:33:34 2010 +0100
@@ -1,9 +1,9 @@
 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
-// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// under the terms of "Eclipse Public License v1.0"
 // which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
 //
 // Initial Contributors:
 // Nokia Corporation - initial contribution.
@@ -11,175 +11,204 @@
 // Contributors:
 //
 // Description:
-// This file contains the definition of
-// the CImplementationInformation class.
+// This file contains the definition of the CImplementationInformation API class.
 // 
 //
 
-
+/**
+ @file
+ @publishedAll
+ @released
+*/
 
 #ifndef __IMPLEMENTATIONINFORMATION_H__
 #define __IMPLEMENTATIONINFORMATION_H__
 
+// ____________________________________________________________________________
+// INCLUDES
+
 #include <s32std.h>
 #include <f32file.h>
 
-// ____________________________________________________________________________________
-// 
-/**
-CImplementationInformation
 
-This class acts as the container for the registration data 
-relating to a particular Interface Implementation.
-Note that this class is used in both the ECOM client and server side,
-For the client side only the API used to extract the registration data
-should be used.
-	
-It is available to the client to allow access to the
-registered characteristics of the implementation.
-These characteristics are:
-
-ImplementationUid() The Uid of this implementation.
-
-Version()			The version number of this implementation.
+// ____________________________________________________________________________
+// TYPES
 
-DisplayName()		The human readable name for this implementation returned 
-					as a 16 bit descriptor.
-
-DataType()			The data type which this implementation supports, returned
-					as an 8 bit descriptor.
-
-OpaqueData()		The opaque data which is registered for this implementation,
-					returned as an 8 bit descriptor.
-
-RomOnly()			The flag indicating whether this implementation is to be loaded
-					from ROM only.
-
-RomBased()			The flag recording whether this implementation is on ROM or is
-					a later version of one on ROM.
-					
-VendorId()  		The Vendor ID of the plug-in which this implementation belongs to
-
-@publishedAll
+/**
+Simplifies the definition of extended interfaces array
+@publishedPartner
 @released
 */
+// To be used internally by ECOM and by Phone Manufacturers
+typedef RArray<TUid> RExtendedInterfacesArray;
 
+
+
+// ____________________________________________________________________________
+// CLASSES
+
+/**
+The CimplementationInformation class acts as the container for the registration 
+data relating to a particular interface implementation.
+Note that this class is used in both the ECOM client and server side hence the 
+mixed API classification seen below. For the client side only the API used to 
+extract the registration data should be used.
+*/
 NONSHARABLE_CLASS(CImplementationInformation) : public CBase
 	{
-public:
-	
-	static CImplementationInformation* NewLC(TBool aClientSide,RReadStream& aStream);
-	
-	static CImplementationInformation* NewL(TUid	aUid, 
-											TInt	aVersion, 
+public: // internalComponent APIs
+    	// Internal methods used only inside ECOM , not for client use.
+
+	static CImplementationInformation* NewLC(TBool aClientSide,
+                                             RReadStream& aStream);
+
+	static CImplementationInformation* NewL(TUid	aUid,
+											TInt	aVersion,
 											HBufC*  aName,
 											HBufC8* aDataType,
 											HBufC8* aOpaqueData,
 											TDriveUnit aDrive,
 											TBool aRomOnly,
 											TBool aRomBased);
+	static CImplementationInformation* NewL(TUid	aUid,
+											TInt	aVersion,
+											HBufC*  aName,
+											HBufC8* aDataType,
+											HBufC8* aOpaqueData,
+											TDriveUnit aDrive,
+											TBool aRomOnly,
+											TBool aRomBased,
+											RExtendedInterfacesArray* aExtendedInterfaces);
 	
 	~CImplementationInformation();
-	
+
+public: // publishedAll APIs
+        // Available for use by all clients
+
 	inline const TDesC& DisplayName() const;
-	
+
 	inline const TDesC8& DataType() const;
+	inline const TDesC8& OpaqueData() const;
+
+	inline TUid ImplementationUid() const;
+	inline TInt Version() const;
+
+	inline TDriveUnit Drive() const;
 	
-	inline const TDesC8& OpaqueData() const;
+	inline TBool RomOnly() const;
+	inline TBool RomBased() const;
 	
-	inline TUid ImplementationUid() const;
-	
-	inline TInt Version() const;
+	inline TVendorId VendorId() const;
 	
 	inline TBool Disabled() const;
 	
-	//This function should not be used by any ECOM client as it will have no effect 
-	//at all on the implementation information stored in the server side.
+	// This function should not be used by any ECOM client as it will have no 
+    // effect at all on the implementation information stored in the server side
 	inline void SetDisabled(TBool aDisabled);
-	
+
+	IMPORT_C void GetExtendedInterfaceListL(RExtendedInterfacesArray& aList);
+
+public: // internalComponent APIs
+    	// Internal methods used inside ECOM, not for client use.
+
 	void ExternalizeL(TBool aClientSide,RWriteStream& aStream) const;
+	void InternalizeL(TBool aClientSide,RReadStream& aStream);
 	
-	void InternalizeL(TBool aClientSide,RReadStream& aStream);
-	inline TDriveUnit Drive() const;
-	inline TBool RomOnly() const;
-	inline TBool RomBased() const;
 	void SetRomBased(TBool aRomBased);
-	inline TVendorId VendorId() const;
 	void SetDrive(TDriveUnit aDrive);
 	
-public:
-	// The following function is categorised as @internalComponent 
-	//and should not be used by ECOM clients.
  	inline void SetVendorId(const TVendorId aVid);
- 	
-private:
+
+	void AddExtendedInterfaceL(const TUid& aExtendedInterface); 	
+	RExtendedInterfacesArray* GetExtendedInterfaceList();
 	
+private: // internalComponent APIs
+         // Internal methods used inside ECOM, not for client use.
+
 	CImplementationInformation();
-	
-	CImplementationInformation(TUid aUid, 
-							   TInt aVersion, 
-							   HBufC*  aName, 
+
+	CImplementationInformation(TUid aUid,
+							   TInt aVersion,
+							   HBufC*  aName,
 							   HBufC8* aDataType,
 							   HBufC8* aOpaqueData,
 							   TDriveUnit aDrive,
 							   TBool aRomOnly,
 							   TBool aRomBased);
-
+    
+    CImplementationInformation(TUid aUid,
+							   TInt aVersion,
+							   HBufC*  aName,
+							   HBufC8* aDataType,
+							   HBufC8* aOpaqueData,
+							   TDriveUnit aDrive,
+							   TBool aRomOnly,
+							   TBool aRomBased,
+							   RExtendedInterfacesArray* aExtendedInterfaces);
+							   	
 private:
 	/** The implementation UID */
-	
 	TUid		iImplementationUid;
-	/** The implementation version */
-	
-	TInt		iVersion;
-	/** This implementations human readable name intended for display in UI implementations */
 	
+	/** The implementation version */
+	TInt		iVersion;
+	
+	/** This implementations human readable name intended for display in 
+	    UI implementations */
 	HBufC*		iDisplayName;
-	/** 
-		The type of data this implementation is registered to handle : 
-		Used for matching against the run-time cue provided by the client
-		during default interface implementation resolution.
-	*/
 	
+	/** The type of data this implementation is registered to handle :
+	Used for matching against the run-time cue provided by the client
+	during default interface implementation resolution.
+	*/
 	HBufC8*		iData;
-	/** 
-		Data registered for this implementation which can be used by the client
-		during non-default resolution operations but is ignored by the framework. 
+	
+	/** Data registered for this implementation which can be used by the client
+	during non-default resolution operations but is ignored by the framework.
 	*/
-	
 	HBufC8*		iOpaqueData;
-	/** The flag recording if this implementation is disabled or enabled */ 
 	
+	/** The flag recording if this implementation is disabled or enabled */
 	TBool		iDisabled;
-	/** The drive that this plug-in resides on */ 
+	
+	/** The drive that this plug-in resides on */
 	TDriveUnit		iDrive;
-	/** The flag recording whether this implementation may only be loaded 
+	
+	/** The flag recording whether this implementation may only be loaded
 	from read-only internal media */
 	TBool iRomOnly;
-	/** This flag records whether this implementation was discovered on 
+	
+	/** This flag records whether this implementation was discovered on
 	read-only internal media or that it is a later version of one that was */
 	TBool iRomBased;
+	
 	/** The Vendor ID of the plug-in which this implementation belongs to*/
 	TVendorId iVid;
+	
+	/** Array of extended interfaces.*/
+	RExtendedInterfacesArray* iExtendedInterfaceList;
+	
 	};	// End CImplementationInformation
 
-/** 
-Simplifies the definition of functions which return registry information 
 
-@publishedAll
-@released
+// ____________________________________________________________________________
+// TYPES
+
+/**
+Simplifies the definition of functions which return registry information
 */
 typedef RArray<CImplementationInformation*> RImplInfoArray;
 
-/** 
-Simplifies the definition of functions which return registry information 
-
-@publishedAll
-@released
+/**
+Simplifies the definition of functions which return registry information
 */
 typedef RPointerArray<CImplementationInformation> RImplInfoPtrArray;
 
 
+// ____________________________________________________________________________
+// INLINES
+
 #include <ecom/implementationinformation.inl>
 
+
 #endif		// __IMPLEMENTATIONINFORMATION_H__