idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp
branchRCL_3
changeset 64 b276298d5729
parent 51 15e4dd19031c
child 74 edd621764147
--- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp	Wed Apr 14 16:16:44 2010 +0300
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp	Tue Apr 27 16:57:49 2010 +0300
@@ -45,11 +45,27 @@
 
 // ======== LOCAL FUNCTIONS ========
 
-static void ItemMapArrayCleanupFunc( TAny* aPointerArray )
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroy()
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroy( TAny* aObj )
     {
-    RPointerArray<CItemMap>* p = static_cast<RPointerArray<CItemMap>*>( aPointerArray ); 
-    p->ResetAndDestroy();
-    p->Close();
+    if( aObj )
+        {
+        static_cast<T*>( aObj )->ResetAndDestroy();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CleanupResetAndDestroyPushL
+// ----------------------------------------------------------------------------
+//
+template<class T>
+static void CleanupResetAndDestroyPushL(T& aArray)
+    {
+    CleanupStack::PushL( TCleanupItem( &CleanupResetAndDestroy<T>, &aArray ) );
     }
 
 // ======== MEMBER FUNCTIONS ========
@@ -211,8 +227,8 @@
 void CMCSPluginData::UpdateDataL()
     {
     RPointerArray<CItemMap> settings;
-    TCleanupItem settingsCleanupItem( ItemMapArrayCleanupFunc, &settings );
-    CleanupStack::PushL( settingsCleanupItem );
+    CleanupResetAndDestroyPushL( settings );
+
     iPluginSettings->GetSettingsL( iInstanceUid, settings );
     TInt count = settings.Count();
     TBool wasEmpty = !iData.Count();
@@ -249,7 +265,9 @@
                 }
             }
         }
-    CleanupStack::PopAndDestroy(); // settingsCleanupItem 
+
+    // Cleanup.
+    CleanupStack::PopAndDestroy(); // settings
     }
 
 // ---------------------------------------------------------------------------
@@ -471,7 +489,8 @@
 void CMCSPluginData::SaveUndefinedItemL( const TInt& aIndex )
     {
     RPointerArray<CItemMap> settingItems;
-    CleanupClosePushL( settingItems );
+    CleanupResetAndDestroyPushL( settingItems );
+    
     iPluginSettings->GetSettingsL( iInstanceUid, settingItems );
     if ( aIndex >= 0 && aIndex < settingItems.Count() )
         {
@@ -504,9 +523,7 @@
         }
     // ETrue tells that modified settings are stored also to plugin reference
     iPluginSettings->SetSettingsL( iInstanceUid, settingItems, ETrue );
-    CleanupStack::Pop( &settingItems );
-    settingItems.ResetAndDestroy();
-
+    CleanupStack::PopAndDestroy(); // settingItems
     }
 
 // End of file