uifw/AvKon/tsrc/bc/bctestlauncher/inc/StreamLogger.h
changeset 0 2f259fa3e83a
--- /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 <f32file.h>  // link against efsrv.lib
+#include <eikenv.h>
+
+#define CERR    StreamLogger::begin()
+
+/**
+ * usage: StreamLogger::begin()<<"your string"<<yourNumber<<...<<end;
+ */
+class StreamLogger
+    {
+
+    //
+    // internel class
+    // use RAII instead of symbian 2 phases contruction.
+    //
+    class LogFile{
+    public:
+        LogFile()
+            {
+            _LIT( KLogFile, "c:\\debug.log" );
+            RFs& fs = CEikonEnv::Static()->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