web_plat/feeds_engine_api/inc/LeakTracker.h
changeset 0 dd21522fd290
child 48 79859ed3eea9
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  A class to help track memory leaks.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifndef LEAK_TRACKER_H
       
    20 #define LEAK_TRACKER_H
       
    21 
       
    22 
       
    23 // Helper macros
       
    24 #if defined(__WINSCW__)
       
    25 //#define TRACK_LEAKS
       
    26 #endif
       
    27 
       
    28 // INCLUDES
       
    29 #include <e32base.h>
       
    30 
       
    31 // CONSTANTS
       
    32 
       
    33 // MACROS
       
    34 
       
    35 // DATA TYPES
       
    36 struct LeakTracker_Value
       
    37     {
       
    38     TInt    valueId;
       
    39     TInt32  value;
       
    40     };
       
    41 
       
    42 // FUNCTION PROTOTYPES
       
    43 
       
    44 // FORWARD DECLARATIONS
       
    45 
       
    46 // CLASS DECLARATION
       
    47 
       
    48 
       
    49 /**
       
    50 *  A class to help track memory leaks.
       
    51 *
       
    52 *  \b Library: FeedsEngine.lib
       
    53 *
       
    54 *  @since 3.0
       
    55 */
       
    56 class CLeakTracker: public CBase
       
    57     {
       
    58     public:  // Types
       
    59         enum TInstType
       
    60             {
       
    61             ENone                       = 0,
       
    62             EAbstractValueHolder        = 1,
       
    63             EEditFeedDialog             = 2,
       
    64             EEditFolderDialog           = 3,
       
    65             EFeed                       = 4,
       
    66             EFeedContainer              = 5,
       
    67             EFeedHandler                = 6,
       
    68             EFeedParser                 = 7,
       
    69             EFeedsApplication           = 8,
       
    70             EFeedsAppUi                 = 9,
       
    71             EFeedsDocument              = 10,
       
    72             EFeedView                   = 11,
       
    73             EFileHandler                = 12,
       
    74             EFolderContainer            = 13,
       
    75             EFolderItem                 = 14,
       
    76             EFolderView                 = 15,
       
    77             EUpdateFeedTask             = 16,
       
    78             EImportFolderTask           = 17,
       
    79             EHttpConnection             = 18,
       
    80             EHttpHandler                = 19,
       
    81             EItem                       = 20,
       
    82             EItemIter                   = 21,
       
    83             ELibXml2                    = 22,
       
    84             ERichTextEditor             = 23,
       
    85             EOpmlParser                 = 24,
       
    86             EUpdateFolderViewTask       = 25,
       
    87             ERssFeedParser              = 26,
       
    88             ESettingsContainer          = 27,
       
    89             ESettingsView               = 28,
       
    90             ESingletons                 = 29,
       
    91             ETestHarness                = 30,
       
    92             ETopicContainer             = 31,
       
    93             ETopicView                  = 32,
       
    94             EUpdateTopicViewTask        = 33,
       
    95             EWaitDialog                 = 34,
       
    96             EXmlEncoding                = 35,
       
    97             EXmlEntity                  = 36,
       
    98             ETestHarnessContainer       = 37,
       
    99             ETestHarnessView            = 38,
       
   100             EFeedsServer                = 39,
       
   101             EFeedsDatabase              = 40,
       
   102             EAtomFeedParser             = 41,
       
   103             EUpdateAllFeedsTask         = 42,
       
   104             EFeedsServerSession         = 43,
       
   105             EBackgroundUpdater          = 44,
       
   106             EPackedFeed                 = 45,
       
   107             EPackedFolder               = 46,
       
   108             EFeedsViewMgr               = 47,
       
   109             EFeedsServerClient          = 48,
       
   110             EClientRequestHandler       = 49,
       
   111             EFeedsServerFeed            = 50,
       
   112             EFeedRequestHandler         = 51,
       
   113             EFeedsSeverFolderItem       = 52,
       
   114             EFolderItemRequestHandler   = 53,
       
   115             EEnclosure                  = 54,
       
   116             EMiniItem                   = 55
       
   117             };
       
   118 
       
   119     public:  // Constructors and destructor
       
   120         /**
       
   121         * Two-phased constructor.
       
   122         */
       
   123         static CLeakTracker* NewL(const TDesC& aSource);
       
   124         
       
   125         /**
       
   126         * Destructor.
       
   127         */        
       
   128         virtual ~CLeakTracker();
       
   129 
       
   130         
       
   131     public: // New methods
       
   132         /**
       
   133         * Increments the ref-count on the given class type
       
   134         *
       
   135         * @since 3.0
       
   136         * @param aType The class type to be incremented.
       
   137         * @return Void
       
   138         */
       
   139         void Increment(TInstType aType);
       
   140 
       
   141         /**
       
   142         * Decrements the ref-count on the given class type
       
   143         *
       
   144         * @since 3.0
       
   145         * @param aType The class type to be decremented.
       
   146         * @return Void
       
   147         */
       
   148         void Decrement(TInstType aType);
       
   149 
       
   150 
       
   151     private:
       
   152         /**
       
   153         * C++ default constructor.
       
   154         */
       
   155         CLeakTracker();
       
   156         
       
   157         /**
       
   158         * By default Symbian 2nd phase constructor is private.
       
   159         */
       
   160         void ConstructL(const TDesC& aSource);
       
   161 
       
   162 
       
   163     private:  // Data
       
   164         RArray<LeakTracker_Value> iValues;
       
   165         HBufC*                    iSource;
       
   166     };
       
   167 
       
   168 
       
   169 #ifdef TRACK_LEAKS
       
   170 
       
   171 extern CLeakTracker*  gLeakTracker;
       
   172 
       
   173 #define LEAK_TRACKER_INCREMENT(aType) gLeakTracker->Increment(aType)
       
   174 #define LEAK_TRACKER_DECREMENT(aType) gLeakTracker->Decrement(aType)
       
   175 
       
   176 #else // !TRACK_LEAKS
       
   177 #define LEAK_TRACKER_INCREMENT(aType)
       
   178 #define LEAK_TRACKER_DECREMENT(aType)
       
   179 #endif
       
   180 
       
   181 /**
       
   182 *  A class to help track memory leaks.
       
   183 *
       
   184 *  \b Library: FeedsEngine.lib
       
   185 *
       
   186 *  @since 3.0
       
   187 */
       
   188 class TLeakTracker
       
   189     {
       
   190     public:
       
   191         /**
       
   192         * C++ default constructor.
       
   193         */
       
   194         inline TLeakTracker(CLeakTracker::TInstType aClassId):
       
   195                 iClassId(aClassId)
       
   196             {
       
   197             LEAK_TRACKER_INCREMENT(iClassId);
       
   198             }
       
   199         
       
   200         /**
       
   201         * Destructor.
       
   202         */        
       
   203         inline ~TLeakTracker()
       
   204             {
       
   205             LEAK_TRACKER_DECREMENT(iClassId);
       
   206             }
       
   207             
       
   208     private:
       
   209         CLeakTracker::TInstType  iClassId;
       
   210     };
       
   211     
       
   212     
       
   213 #endif      // LEAK_TRACKER_H
       
   214             
       
   215 // End of File