diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/tsrc/bc/bctestlauncher/inc/StreamLogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/tsrc/bc/bctestlauncher/inc/StreamLogger.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2006 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: Handles log writing. +* +*/ + + +#ifndef C_STREAMLOGGER_H +#define C_STREAMLOGGER_H + +#include // link against efsrv.lib +#include + +#define CERR StreamLogger::begin() + +/** + * usage: StreamLogger::begin()<<"your string"<FsSession(); + if ( file.Open( fs, KLogFile, EFileWrite | EFileShareAny ) + != KErrNone ) + file.Create( fs, KLogFile, EFileWrite | EFileShareAny ); + + TInt pos=0; // this must be 0 + file.Seek( ESeekEnd, pos ); + } + + ~LogFile() + { + file.Close(); + } + + RFile& operator()(){ return file; } + private: + RFile file; + }; + +public: + ~StreamLogger(){} + + static StreamLogger& begin(){ + StreamLogger* self = new (ELeave) StreamLogger; + return *self; + } + + void suicide(){ delete this; } + + StreamLogger& operator<<(const TDesC& aText) + { + LogFile file; + + HBufC8* text = HBufC8::NewL( aText.Length() ); + TPtr8 textPtr = text->Des(); + textPtr.Copy( aText ); + file().Write( *text ); + delete text; + + return *this; + } + + StreamLogger& operator<<(TInt n) + { + LogFile file; + + TInt i=1; + for(TInt v=n; v!=0; ++i, v/=10){} + HBufC* text = HBufC::NewL( i ); + TPtr textPtr = text->Des(); + + _LIT(KFmt, "%d"); + textPtr.Format( KFmt, n ); + HBufC8* text8 = HBufC8::NewL( textPtr.Length() ); + TPtr8 textPtr8 = text8->Des(); + textPtr8.Copy(*text); + + file().Write( *text8 ); + delete text; + delete text8; + + return *this; + } + + StreamLogger& cr() + { + LogFile file; + TBuf8<2> enter; + enter.Append( 13 ); + enter.Append( 10 ); + file().Write( enter ); + return *this; + } + + typedef StreamLogger& (*_Manipulator)(StreamLogger&); + StreamLogger& operator<<(_Manipulator op){ return op(*this); } + +private: + StreamLogger(){} //disable ctor +}; + +inline StreamLogger& end(StreamLogger& self){ self.suicide(); return self; } + +inline StreamLogger& endl(StreamLogger& self){ self.cr(); return self; } + +#endif //C_STREAMLOGGER_H