email/imum/logging/ImumLogContext.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/logging/ImumLogContext.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,130 @@
+/*
+* 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:  ImumLogContext.h
+*
+*/
+
+
+#ifndef IMUMLOGCONTEXT_H
+#define IMUMLOGCONTEXT_H
+
+#include <e32base.h>
+#include "ImumLogConfig.h"
+
+#ifdef _DEBUG
+
+// These macros are real macros, that should be used. For temporary purposes, these
+// are left out and the logging is done by simple entry logging
+    #define _IMUM_UNCONTROLLED_INPUT_MSG  L"%s%d[%x:%x:%x]>%s UNCONTROLLED ENTRY!"
+    #define _IMUM_MULTIPLE_ENTRY_MSG      L"%s%d[%x:%x:%x]%s  ADDITIONAL ENTRY!"
+    #define _IMUM_UNCONTROLLER_EXIT_MSG   L"%s%d[%x:%x:%x]<%s UNCONTROLLED EXIT!"
+    #define _IMUM_MULTIPLE_EXIT_MSG       L"%s%d[%x:%x:%x]%s  ADDITIONAL EXIT!"
+
+    #define _IMUM_API_PREFIX              L"_A"
+    #define _IMUM_LOCAL_PREFIX            L"_L"
+
+    class _TImumContext
+        {
+        public:
+            _TImumContext(
+                const TText* _fn,
+                const TUint _id,
+                const TUint _vis,
+                const TUint _addr,
+                const TUint _thdId,
+                const TText* _file,
+                const TUint _category=0 )
+                :
+                iFn(_fn),
+                iId(_id),
+                iApi((TBool)_vis),
+                iAddr(_addr),
+                iThdId(_thdId),
+                iVis((_vis == 0 ? (TText*)_IMUM_API_PREFIX : (TText*)_IMUM_LOCAL_PREFIX)),
+                iFile(_file),
+                iCategory(_category),
+                _dc( *this )
+
+            #ifndef DISABLE_SYNTAX_CHECK
+                ,outOk(EFalse), inOk(EFalse)
+            #endif
+                {
+                }
+            ~_TImumContext()
+                {
+                #ifndef DISABLE_SYNTAX_CHECK
+                    do
+                        {
+//                        #ifndef DISABLE_GROUP_CHECKS
+//                                if ( (!TraceHeap::IsMaskOn(TRACENFO[iId].iGrpId)) || ((!iApi) && TraceHeap::IsApiOnly()) )
+//                                    {
+//                                    break;
+//                                    }
+//                        #endif
+
+                        DoInChk();
+                        if (!outOk)
+                            {
+                            _IMUMPRINTER(_IT(_IMUM_UNCONTROLLER_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                            }
+                        } while (0);
+                #endif // DISABLE_SYNTAX_CHECK
+                }
+
+            const TText* iFn;
+            const TUint iId;
+            const TText* iVis;
+            const TUint iAddr;
+            const TInt iThdId;
+            const TBool iApi;
+            const TText* iFile;
+            const TUint iCategory;
+            _TImumContext& _dc;
+
+            #ifndef DISABLE_SYNTAX_CHECK
+                inline void DoInChk()
+                    {
+                    if (!inOk)
+                        {
+                        _IMUMPRINTER(_IT(_IMUM_UNCONTROLLED_INPUT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                        inOk = ETrue;
+                        }
+                    }
+
+                inline void ChkMultiIn()
+                    {
+                    if (inOk)
+                        {
+                        _IMUMPRINTER(_IT(_IMUM_MULTIPLE_ENTRY_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                        }
+                    }
+
+                inline void ChkMultiOut()
+                    {
+                    if (outOk)
+                        {
+                        _IMUMPRINTER(_IT(_IMUM_MULTIPLE_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                        }
+                    }
+
+                TBool inOk;
+                TBool outOk;
+            #endif // DISABLE_SYNTAX_CHECK
+        };
+
+#endif // _DEBUG
+
+#endif      // IMUMLOGCONTEXT_H
+
+// End of File