00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "CommonFramework.h"
00018
00019 _LIT(KTxtTIntHolderDestructor,"TIntHolder destructor\n");
00020 _LIT(KCommonFormat1,"Int()=%d\n");
00021
00022
00023
00024 class TIntHolder
00025 {
00026 public:
00027 TInt iInt;
00028 public:
00029 TInt Int() { return iInt; };
00030 void SetInt(TInt aInt) { iInt=aInt; };
00031 void Double() { iInt *= 2; };
00032 TBool IsNonZero() { return iInt!=0; };
00033
00034 ~TIntHolder() { console->Printf(KTxtTIntHolderDestructor); };
00035 };
00036
00037 void demonstrateTTypeL();
00038
00039
00040
00041
00042
00043 class RTimerWithCleanup : public RTimer
00044 {
00045 public:
00046 public:
00047
00048 operator TCleanupItem()
00049 {
00050 return TCleanupItem(Cleanup,this);
00051
00052 }
00053 static void Cleanup(TAny *aPtr)
00054 {
00055 ((RTimerWithCleanup*)aPtr) -> DoCleanup();
00056
00057 }
00058 void DoCleanup()
00059 {
00060 Close();
00061 }
00062
00063 void CreateLocalLC()
00064 {
00065 User::LeaveIfError(CreateLocal());
00066 CleanupStack::PushL(*this);
00067 }
00068
00069 void Close()
00070 {
00071 _LIT(KTxtClosingRTimer,"Closing RTimerWithCleanup\n");
00072 console->Printf(KTxtClosingRTimer);
00073 RTimer::Close();
00074 }
00075 };
00076
00077 void demonstrateRTypeL();
00078
00079
00080 LOCAL_C void doExampleL()
00081 {
00082 demonstrateTTypeL();
00083 demonstrateRTypeL();
00084 }
00085
00086
00087
00088 void useTTypeL(TIntHolder aIntHolder);
00089
00090 void demonstrateTTypeL()
00091 {
00092 _LIT(KTxtStartingDemoTTypeL,"Starting demonstrateTTypeL()\n");
00093 console->Printf(KTxtStartingDemoTTypeL);
00094 TIntHolder t;
00095
00096 t.SetInt(3);
00097 t.Double();
00098 TInt i=t.Int();
00099 console->Printf(KCommonFormat1, i);
00100
00101
00102
00103
00104
00105
00106 useTTypeL(t);
00107
00108 _LIT(KTxtFinishingDemoTTypeL,"Finishing demonstrateTTypeL()\n");
00109 console->Printf(KTxtFinishingDemoTTypeL);
00110 }
00111
00112 void useTTypeL(TIntHolder aIntHolder)
00113 {
00114 _LIT(KTxtStartinguseTTypeL,"Starting useTTypeL()\n");
00115 console->Printf(KTxtStartinguseTTypeL);
00116 aIntHolder.Double();
00117 TInt i=aIntHolder.Int();
00118 console->Printf(KCommonFormat1, i);
00119
00120
00121
00122
00123
00124
00125 _LIT(KTxtFinishinguseTTypeL,"Finishing useTTypeL()\n");
00126 console->Printf(KTxtFinishinguseTTypeL);
00127 }
00128
00129
00130
00131 void useRTypeL(RTimerWithCleanup aTimer);
00132
00133 void demonstrateRTypeL()
00134 {
00135 _LIT(KTxtStartDemoRTypeL,"Starting demonstrateRTypeL()\n");
00136 console->Printf(KTxtStartDemoRTypeL);
00137
00138 RTimerWithCleanup timer;
00139 timer.CreateLocalLC();
00140
00141 TRequestStatus status;
00142 timer.After(status,1000000);
00143 User::WaitForRequest(status);
00144
00145
00146
00147
00148
00149
00150 useRTypeL(timer);
00151
00152 CleanupStack::PopAndDestroy();
00153 _LIT(KTxtFinishDemoRTypeL,"Finishing demonstrateRTypeL()\n");
00154 console->Printf(KTxtFinishDemoRTypeL);
00155 }
00156
00157 void useRTypeL(RTimerWithCleanup aTimer)
00158 {
00159 _LIT(KTxtStartuseRTypeL,"Starting useRTypeL()\n");
00160 console->Printf(KTxtStartuseRTypeL);
00161
00162 TRequestStatus status;
00163 aTimer.After(status,1000000);
00164 User::WaitForRequest(status);
00165
00166
00167
00168
00169
00170
00171 _LIT(KTxtFinishuseRTypeL,"Finishing useRTypeL()\n");
00172 console->Printf(KTxtFinishuseRTypeL);
00173 }