lowlevellibsandfws/pluginfw/Framework/inc/ImplementationInformation.inl
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/pluginfw/Framework/inc/ImplementationInformation.inl	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,202 @@
+// 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 "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:
+// This file contains the implementation of
+// the CImplementationInformation class.
+// Provide the inline implementation of CImplementationInformation
+// CImplementationInformation provides access to information on a particular implementation
+// 
+//
+
+/**
+ 
+ Intended Usage	:	Accessor for this implementation's human readable name
+ @since			7.0
+ @return			The human readable name for this implementation
+ @pre 			CImplementationInformation is fully constructed and initialized
+*/
+const TDesC& CImplementationInformation::DisplayName() const
+	{
+	if(iDisplayName == NULL)
+		return KNullDesC();
+	else
+		return *iDisplayName;
+	}
+
+
+/**
+Intended Usage	:	Accessor for this implementation's default binary data
+@since			7.0
+@return			The data type which this implementation supports
+@pre 			CImplementationInformation is fully constructed and initialized
+*/
+const TDesC8& CImplementationInformation::DataType() const
+	{
+	if(iData == NULL)
+		return KNullDesC8();
+	else
+		return *iData;
+	}
+
+
+/**
+Intended Usage	:	Accessor for this implementation's opaque binary data
+@since			7.0
+@return			The opaque data which is available for this implementation
+@pre 			CImplementationInformation is fully constructed and initialized
+*/
+const TDesC8& CImplementationInformation::OpaqueData() const
+	{
+	if(iOpaqueData == NULL)
+		return KNullDesC8();
+	else
+		return *iOpaqueData;
+	}
+
+
+/**
+Intended Usage	:	Accessor for this implementation's Uid
+@since			7.0
+@return			The Uid of this implementation
+@pre 			CImplementationInformation is fully constructed and initialized
+*/
+TUid CImplementationInformation::ImplementationUid() const
+	{
+	return iImplementationUid;
+	}
+
+
+/**
+Intended Usage	:	Accessor for the version number of this implementation
+@since			7.0
+@return			The version number of this implementation
+@pre 			CImplementationInformation is fully constructed and initialized
+*/
+TInt CImplementationInformation::Version() const
+	{
+	return iVersion;
+	}
+
+
+/**
+Intended Usage	:	Accessor for whether this implementation is currently 
+					disabled
+@since			7.0
+@return			Flag indicating whether this implementation is disabled
+@pre 			CImplementationInformation is fully constructed and initialized
+*/
+TBool CImplementationInformation::Disabled() const
+	{
+	return iDisabled;
+	}
+
+
+/**
+Intended Usage	:	Marks this implementation as disabled, or enabled.
+Note that this function should not be used by any ECOM client side as it will have no effect at all
+on the implementation information stored in the server side.
+@since			7.0
+@param			aDisabled ETrue to indicate this implementation should be disabled, EFalse for enabled.
+@pre 			CImplementationInformation is fully constructed and initialized
+@post			Implementation is marked as.
+*/
+void CImplementationInformation::SetDisabled(TBool aDisabled)
+	{
+	iDisabled = aDisabled;
+	}
+
+/**
+Intended Usage	: Returns the drive that this implementation is installed on
+Error Condition	: None
+@since			7.0
+@return			The drive that this implementation is on
+@pre 			CImplementationInformation is fully constructed.
+*/
+TDriveUnit CImplementationInformation::Drive() const
+	{
+	return iDrive;
+	}
+
+
+/**
+Intended Usage	: Accessor for whether this implementation is to be loaded 
+				  from ROM only
+@return			Flag indicating whether this implementation is to be loaded from ROM only
+@pre 			CImplementationInformation is fully constructed
+*/
+TBool CImplementationInformation::RomOnly() const
+	{
+	return iRomOnly;
+	}
+
+/**
+Intended Usage	: Accessor for whether this implementation is on ROM or is
+				  a later version of one on ROM
+@return			Flag indicating whether this implementation is on ROM or is a later version of one on ROM
+@pre 			CImplementationInformation is fully constructed
+*/
+TBool CImplementationInformation::RomBased() const
+	{
+	return iRomBased;
+	}
+/**
+Intended Usage:	Returns the VID of the plug-in that this implementation belongs to. 
+				The VID is the VendorId for the plug-in's DLL
+@pre			CImplementationInformation is fully constructed
+@return			VendorId of the plug-in that this implementation belongs to.
+*/
+TVendorId CImplementationInformation::VendorId() const
+	{
+	return iVid;
+	}
+	
+/**
+Intended Usage:	Sets the VID of the plug-in that this implementation belongs to. 
+				The VID is the VendorId for the plug-in's DLL.
+@internalComponent
+@pre			CImplementationInformation is fully constructed
+@param 			aVid VendorId of the plug-in that this implementation belongs to.
+*/
+void CImplementationInformation::SetVendorId(const TVendorId aVid)
+	{
+	iVid = aVid;
+	}
+
+// ____________________________________________________________________________
+// Provide the inline implementations of useful utilitiy functions related to
+// CImplementationInformation for use in client and server sides.
+//
+
+/**
+Comparison function used in ordering functions (e.g. as used with TLinearOrder) 
+where ECOM UID identified structures are held in ordered RArray/RPointerArray 
+objects.
+
+@internalComponent
+@param aUid1 First UID value of comparison
+@param aUid2 Second UID Value of comparison
+@return Returns 1 when aUid1 > aUid2; -1 when aUid1 < aUid2; 0 when they equal
+*/
+inline TInt CompareTUidValues(TInt aUid1, TInt aUid2)
+	{
+	// This has been implemented as 'return aUid1-aUid2' previously.
+	// This can lead to overflow problems when comparing 2 signed integers
+	// if the operands are large enough: large aUid minus large negative aUid2
+	// returns a negative value due to arithmetic overflow of the result when 
+	// you'd want a positive value. Hence the longer hand implementation below.
+	if (aUid1 > aUid2)
+		return 1;
+	if (aUid1 < aUid2)
+		return -1;
+	return 0;
+	}