www.pudn.com > symbianex.rar > TwoPhase.cpp
// TwoPhase.cpp // // Copyright (c) 2005 NIIT ChengDu. All rights reserved. // Example shows two phase construction. // version 1.0 // written by hewei // date: 10-10-2005 // NOTE: the structure of this example is different to standard E32 examples #include// All messages written to this LOCAL_D CConsoleBase* console; // Function prototypes void callExampleL(); void doExampleL(); ////////////////////////////////////////////////////////////////////////////// // // -----> CDate (definition) // // The class is used by the example code // ////////////////////////////////////////////////////////////////////////////// class CDate : public CBase { public: static CDate* NewLC(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); static CDate* NewL(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); public : TInt IsLeapYear(); void Print(); private: CDate(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); public : TInt iYear; TInt iMonth; TInt iDate; CConsoleBase* iConsole; }; ////////////////////////////////////////////////////////////////////////////// // // -----> CDate (implementation) // ////////////////////////////////////////////////////////////////////////////// CDate* CDate::NewLC(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { CDate* date=NewL(aYear,aMonth,aDate, aConsole); CleanupStack::PushL(date); return date; } CDate* CDate::NewL(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { CDate* self=new (ELeave)CDate(aYear,aMonth,aDate, aConsole); return self; } CDate::CDate(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { iYear=aYear; iMonth=aMonth; iDate=aDate; iConsole=aConsole; } void CDate::Print() { _LIT(KDateFormat,"%d/%d/%d\n"); iConsole->Printf(KDateFormat,iMonth,iDate,iYear); } TInt CDate::IsLeapYear() { _LIT(KISLEAPYEAR,"%d is a leap year\n"); _LIT(KISNOTLEAPYEAR,"%d is not a leap year\n"); if(iYear%4==0&&iYear%100!=0||iYear%400==0) { iConsole->Printf(KISLEAPYEAR,iYear); return 1; } else { iConsole->Printf(KISNOTLEAPYEAR,iYear); return 0; } } ////////////////////////////////////////////////////////////////////////////// // // -----> CFullTime (definition) // // The class is used by the example code // ////////////////////////////////////////////////////////////////////////////// class CFullTime :CBase { public: static CFullTime* NewL(TInt aHour,TInt aMinute,TInt aSecond,TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); static CFullTime* NewLC(TInt aHour,TInt aMinute,TInt aSecond,TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); private: CFullTime(TInt aHour,TInt aMinute,TInt aSecond); void ConstructL(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole); public: void Print(); ~CFullTime(); private: TInt iHour; TInt iSecond; TInt iMinute; CDate* iDate; CConsoleBase* iConsole; }; ////////////////////////////////////////////////////////////////////////////// // // -----> CFullTime (implement) // // The class is used by the example code // ////////////////////////////////////////////////////////////////////////////// CFullTime* CFullTime::NewL(TInt aHour,TInt aMinute,TInt aSecond,TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { CFullTime* self=new (ELeave)CFullTime(aHour,aMinute,aSecond); self->ConstructL(aYear,aMonth,aDate,aConsole); return self; } CFullTime* CFullTime::NewLC(TInt aHour,TInt aMinute,TInt aSecond,TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { CFullTime* self=CFullTime::NewL(aHour,aMinute,aSecond,aYear,aMonth,aDate,aConsole); CleanupStack::PushL(self); return self; } CFullTime::CFullTime(TInt aHour,TInt aMinute,TInt aSecond) { iHour=aHour; iMinute=aMinute; iSecond=aSecond; } void CFullTime::ConstructL(TInt aYear,TInt aMonth,TInt aDate,CConsoleBase* aConsole) { iDate=CDate::NewLC(aYear,aMonth,aDate,aConsole); iConsole=aConsole; CleanupStack::Pop(iDate); } void CFullTime::Print() { _LIT(KTimeFormat,"%d:%d:%d\n"); iDate->Print(); iConsole->Printf(KTimeFormat,iHour,iMinute,iSecond); iDate->IsLeapYear(); } CFullTime::~CFullTime() { delete iDate; } ////////////////////////////////////////////////////////////////////////////// // // Main function called by E32 // ////////////////////////////////////////////////////////////////////////////// GLDEF_C TInt E32Main() { // Get cleanup stack CTrapCleanup* cleanup=CTrapCleanup::New(); // Some more initialization, then do the example TRAPD(error,doExampleL()); // callExampleL() should never leave. _LIT(KMsgPanicEpoc32ex,"EPOC32EX"); __ASSERT_ALWAYS(!error,User::Panic(KMsgPanicEpoc32ex,error)); // destroy the cleanup stack delete cleanup; // return return 0; } ////////////////////////////////////////////////////////////////////////////// // //doExampleL() and CallExampleL(); // ////////////////////////////////////////////////////////////////////////////// void doExampleL() { //Get Console; _LIT(KMsgExampleCode,"Symbian OS Example Code"); console = Console::NewL(KMsgExampleCode,TSize(KConsFullScreen,KConsFullScreen)); // Put console onto the cleanup stack. CleanupStack::PushL(console); int error; TRAP(error,callExampleL()); //TRAPD(error,callExampleL()); if(error) { _LIT(KERROR,"error occured!\n"); console->Printf(KERROR); } else{ _LIT(KNOLEAVE,"No Leave!\n"); console->Printf(KNOLEAVE); } console->Getch(); // Remove the console object from the cleanupstack // and destroy it. CleanupStack::PopAndDestroy(); } void callExampleL() { //pointer to CFullTime object. CFullTime* fulltime=CFullTime::NewLC(14,10,22,2005,10,10,console) ; //print message of CFullTime. fulltime->Print(); CleanupStack::PopAndDestroy(); }