diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_m_classes2_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_m_classes2_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,244 +0,0 @@ - - -TB10.1 Example Applications: examples/Basics/MClasses2/MClasses2.cpp Source File - - - - -

examples/Basics/MClasses2/MClasses2.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
-00002 // All rights reserved.
-00003 // This component and the accompanying materials are made available
-00004 // under the terms of "Eclipse Public License v1.0"
-00005 // which accompanies this distribution, and is available
-00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
-00007 //
-00008 // Initial Contributors:
-00009 // Nokia Corporation - initial contribution.
-00010 //
-00011 // Contributors:
-00012 //
-00013 // Description:
-00014 // Demonstrate use of M classes, or mixins - the
-00015 // only use of multiple inheritance that has been
-00016 // sanctioned by the E32 architecture team
-00017 // This example shows how mixins can be used to
-00018 // pass some protocol, and an associated object, from
-00019 // a protocol provider to an protocol user.  The user
-00020 // is not supposed to know everything about the provider,
-00021 // only about the protocol it's interested in.
-00022 // In this specific example, the provider contains a pointer 
-00023 // to the _real provider_: the provider is derived
-00024 // from the protocol base class, but the real provider is not.
-00025 // The real provider may thus honour many protocols.
-00026 //
-00027 
-00028 
-00029 
-00030 #include "CommonFramework.h"
-00031 
-00033 //
-00034 // -----> CProtocol (definition)
-00035 //
-00036 // A protocol class for mixing in
-00037 //
-00039 class TProtocol
-00040         {
-00041 public:
-00042         virtual void HandleEvent(TInt aEventCode)=0;
-00043         };
-00044 
-00045 
-00047 //
-00048 // -----> CProtocolUser (definition)
-00049 //
-00050 // Define a protocol user which uses this protocol
-00051 //
-00053 class CProtocolUser : public CBase
-00054         {
-00055 public:
-00056           // Construction
-00057         static CProtocolUser* NewLC();
-00058         static CProtocolUser* NewL();
-00059 
-00060           // Destruction
-00061         ~CProtocolUser();
-00062 
-00063           // Some function which uses a protocol
-00064         void DoSomething(TProtocol* aProtocol);
-00065 
-00066 protected:
-00067           // Construction assistance
-00068         void ConstructL();
-00069         };
-00070 
-00071 
-00073 //
-00074 // -----> CProtocolProvider (definition)
-00075 //
-00076 // A simple class which uses the mixin
-00077 //
-00079 class TProtocolProvider;
-00080 class CProtocolProvider : public CBase
-00081         {
-00082 public:
-00083           // Construction
-00084         static CProtocolProvider* NewLC();
-00085 
-00086           // Destruction
-00087         ~CProtocolProvider();
-00088 
-00089           // Calls the protocol user
-00090         void CallProtocolUser();
-00091 
-00092           // Implement the protocol (handles the protocol)
-00093         void HandleEvent(TInt aEventCode);
-00094 
-00095 protected:
-00096           // Construction assistance
-00097         void ConstructL();
-00098 
-00099 private:
-00100           // data members defined by this class
-00101         CProtocolUser*     iProtocolUser;
-00102         TProtocolProvider* iProviderProtocol;
-00103         };
-00104 
-00105 
-00107 //
-00108 // -----> TProtocolProvider (definition)
-00109 //
-00110 // Define protocol implementation which passes on the implementation
-00111 // to a real protocol provider
-00112 //
-00114 class TProtocolProvider : public TProtocol
-00115         {
-00116 public:
-00117           // Construction
-00118         TProtocolProvider(CProtocolProvider* aProvider);
-00119 
-00120           // The protocol itself
-00121         void HandleEvent(TInt aEventCode);
-00122 
-00123 private:
-00124           // The real provider
-00125         CProtocolProvider* iProvider;
-00126         };
-00127 
-00128 
-00130 //
-00131 // -----> CProtocolUser (implementation)
-00132 //
-00134 CProtocolUser* CProtocolUser::NewLC()
-00135         {
-00136         CProtocolUser* self=new(ELeave) CProtocolUser;
-00137         CleanupStack::PushL(self);
-00138         self->ConstructL();
-00139         return self;
-00140         }
-00141 
-00142 CProtocolUser* CProtocolUser::NewL()
-00143         {
-00144         CProtocolUser* self=NewLC();
-00145         CleanupStack::Pop();
-00146         return self;
-00147         }
-00148 
-00149 CProtocolUser::~CProtocolUser()
-00150         {
-00151         }
-00152 
-00153 void CProtocolUser::ConstructL()
-00154         {
-00155         }
-00156 
-00157 void CProtocolUser::DoSomething(TProtocol* aProtocol)
-00158         {
-00159           // Do something that requires a protocol
-00160         _LIT(KTxtExtSystemDoing,"External system doing something\n");
-00161         console->Printf(KTxtExtSystemDoing);
-00162         _LIT(KTxtInvokingProtocol,"invoking protocol - event 3\n");
-00163         console->Printf(KTxtInvokingProtocol);
-00164           // Handle an event
-00165         aProtocol->HandleEvent(3);
-00166         }
-00167 
-00168 
-00170 //
-00171 // -----> TProtocolProvider (implementation)
-00172 //
-00174 TProtocolProvider::TProtocolProvider(CProtocolProvider* aProvider)
-00175                 : iProvider(aProvider)
-00176         {
-00177         }
-00178 
-00179 // see later for definition of HandleEvent()
-00180 
-00181 
-00183 //
-00184 // -----> CProtocolProvider (implementation)
-00185 //
-00187 CProtocolProvider* CProtocolProvider::NewLC()
-00188         {
-00189         CProtocolProvider* self=new(ELeave) CProtocolProvider;
-00190         CleanupStack::PushL(self);
-00191         self->ConstructL();
-00192         return self;
-00193         };
-00194 
-00195 CProtocolProvider::~CProtocolProvider()
-00196         {
-00197         delete iProtocolUser;
-00198         delete iProviderProtocol;
-00199         }
-00200 
-00201 void CProtocolProvider::ConstructL()
-00202         {
-00203         iProtocolUser=CProtocolUser::NewL();
-00204         iProviderProtocol=new(ELeave) TProtocolProvider(this);
-00205         }
-00206 
-00207 void CProtocolProvider::CallProtocolUser()
-00208         { 
-00209           // Call the protocol user to do some work
-00210         _LIT(KTxtCallProtUser,"CProtocolProvider calling protocol user\n");
-00211         console->Printf(KTxtCallProtUser);
-00212         iProtocolUser->DoSomething(iProviderProtocol);
-00213                         // pass the intermediary, which implements the
-00214                         // protocol by passing it on to us,
-00215                         // to the protocol user
-00216         }
-00217 
-00218 void CProtocolProvider::HandleEvent(TInt aEventCode)
-00219         { 
-00220           // A concrete implementation of the abstract protocol.
-00221           // Handle an event in the protocol user
-00222         _LIT(KFormat1,"CProtocolProvider handling event %d\n");
-00223         console->Printf(KFormat1,aEventCode);
-00224         }
-00225 
-00226 void TProtocolProvider::HandleEvent(TInt aEventCode)
-00227         {
-00228           // A concrete definition of TProtocol::HandleEvent()
-00229         _LIT(KTxtHandling,"Handling through intermediary\n");
-00230         console->Printf(KTxtHandling);
-00231         iProvider->HandleEvent(aEventCode);
-00232         }
-00233 
-00234 
-00236 //
-00237 // Do the example
-00238 //
-00240 LOCAL_C void doExampleL()
-00241     {
-00242           // show use of mixin with simple class
-00243         CProtocolProvider* simpleProvider=CProtocolProvider::NewLC();
-00244           // call protocol user
-00245         simpleProvider->CallProtocolUser();
-00246           // Remove simpleProvider from cleanup stack and destroy
-00247         CleanupStack::PopAndDestroy();
-00248         }
-

Generated on Thu Jan 21 10:32:57 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -