diff -r 000000000000 -r e4d67989cc36 lowlevellibsandfws/pluginfw/Framework/Example/ExampleTwo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lowlevellibsandfws/pluginfw/Framework/Example/ExampleTwo.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,238 @@ +// 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: +// The implementation of a some classes +// to be provided by ECom. +// 1. Using the CExampleInterface class as a base. +// +// + +#include "Interface.h" +#include "ImplementationProxy.h" +#include "TestUtilities.h" // For __FILE__LINE__ + +// ____________________________________________________________________________ +// +/** + Intended usage: This class implements the functionality promised by + the CExampleInterface defintion class. It does little apart from provides a test instance + which may be retrieved and run for testing purposes. + Its resolution is based upon its registered default data string that + advertises this class as being able to handle 'text\wml' data. + @since 7.0 + */ +class CImplementationClassFour : public CExampleInterface +{ +// Methods +public: +/** + @fn NewL(TAny* aInitParams) + Intended Usage : Standardised safe construction which leaves nothing the cleanup stack. + Error Condition : Leaves with error code. + @leave KErrNoMemory. + @since 7.0 + @param aInitParams The parameter struct used for initialising this object + @return CImplementationClassFour* The class instance. + @pre None + @post CImplementationClassFour has been constructed, + and initialised. + */ + static CImplementationClassFour* NewL(TAny* aInitParams); + +/** + @fn ~CImplementationClassFour() + Intended Usage : Default Destructor + Error Condition : None + @since 7.0 + @pre CImplementationClassFour has been constructed + @post CImplementationClassFour has been completely destroyed. + */ + virtual ~CImplementationClassFour(); + +/** + @fn DoMethodL() + Intended Usage : Overload of the pure interface method + Representative of a method provided on + the interface by the interface definer. + Error Condition : Leaves with an error code. + @leave KErrNoMemory, KErrNotSupported. + @since 7.0 + @return None + @pre CImplementationClassFour has been constructed + @post Unspecified + */ + void DoMethodL(); + +/** + @fn FireAndForget() + Intended Usage : Overload of the pure interface method + asynchronous function which + an interface definer could specify. + It allows the client to call the function in the knowledge + that the object will commit suicide when the + function completes. + Error Condition : None. + @since 7.0 + @return TInt KErrNone for success. + @pre CImplementationClassFour has been constructed + @post Unspecified + */ + TInt FireAndForget(); + + /** + @fn ImplId() + Intended Usage : To verify the object returned by ECOM. + Error Condition : None. + @since 7.0 + @return TUid (ECOM's Implementation Uid for this class.) + @pre CImplementationClassThree has been constructed + @post Unspecified + */ + TUid ImplId(); + +private: +/** + @fn CImplementationClassFour() + Intended Usage : Default Constructor : usable only by derived classes + Error Condition : None + @since 7.0 + @pre None + @post CImplementationClassFour has been constructed + */ + CImplementationClassFour(); + +/** + @fn ConstructL(TAny* aInitParams) + Intended Usage : Completes the safe construction of the CImplementationClassFour object + Error Condition : Leaves with the error code. + @leave KErrNoMemory. + @since 7.0 + @param aInitParams The parameter struct used for initialising this object + @pre CImplementationClassFour has been constructed + @post CImplementationClassFour has been fully initialised. + */ + void ConstructL(TAny* aInitParams); + +// Provide the CActive overloads + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + +private: +/** A place for allocating some memory in the ConstructL */ + HBufC* iInternalDescriptor; +/** An int to be stored in TLS to test its useage */ + TInt iTLSInt; + +}; // End of CImplementationClassFour definition + +// __________________________________________________________________________ +// Implementation + +CImplementationClassFour* CImplementationClassFour::NewL(TAny* aInitParams) +// Intended Usage : Safe construction which leaves nothing upon the cleanup stack +// Error Condition : Will leave with an appropriate error code +// Dependencies : CBase +// @param " " +// @return CImplementationClassFour* a pointer to the fully instantiated CImplementationClassFour object +// @pre None +// @post The object has been fully instantiated +// Static member + { + CImplementationClassFour* self=new(ELeave) CImplementationClassFour(); // calls c'tor + CleanupStack::PushL(self); // Make the construction safe by using the cleanup stack + self->ConstructL(aInitParams); // Complete the 'construction'. + CleanupStack::Pop(self); + return self; + } + +CImplementationClassFour::~CImplementationClassFour() +// Default virtual d'tor + { + delete iInternalDescriptor; + } + +CImplementationClassFour::CImplementationClassFour() +// Default c'tor for use by derived and +// static construction methods only +: CExampleInterface() + { + // Deliberately do nothing here : See ConstructL() for initialisation completion. + } + +void CImplementationClassFour::ConstructL(TAny* aInitParams) +// Intended Usage : Safely complete the initialization of the constructed object +// Error Condition : Will leave with an appropriate error code +// Dependencies : CBase +// @return void +// @pre CImplementationClassFour has been constructed +// @post The CImplementationClassFour object has been fully instantiated +// + { + TExampleInterfaceInitParams* params = REINTERPRET_CAST(TExampleInterfaceInitParams*, + aInitParams); + if(params->descriptor) + iInternalDescriptor = params->descriptor->AllocL(); + + Dll::SetTls(&iTLSInt); + } + +void CImplementationClassFour::DoMethodL() + { + // Access TLS to ensure it has been set properly + REINTERPRET_CAST(TInt*, Dll::Tls()); + } + +TInt CImplementationClassFour::FireAndForget() + { + TRAPD(error,DoMethodL()); + return error; // Always KErrNotSupported + } + +// Provide the CActive overloads +void CImplementationClassFour::RunL() + { + // Do nothing : should never be called + __ASSERT_DEBUG(EFalse,User::Invariant()); + } + +void CImplementationClassFour::DoCancel() + { + // Do nothing + } + +TInt CImplementationClassFour::RunError(TInt /*aError*/) + { + return KErrNone; + } + +TUid CImplementationClassFour::ImplId() + { + TUid idVal = {0x101F847A}; + return (idVal); + } + +// __________________________________________________________________________ +// Exported proxy for instantiation method resolution +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0x101F847A, CImplementationClassFour::NewL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } +