photosgallery/slideshow/utils/shwcleanupwrapper.h
changeset 0 4e91876724a2
child 16 0bc0ea26031e
child 25 191387a8b767
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/slideshow/utils/shwcleanupwrapper.h	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2007-2008 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:    Thin cleanup wrapper
+ *
+*/
+
+
+
+
+// include guard for the whole file content
+#ifndef __TSHWCLEANUPWRAPPER_H__
+#define __TSHWCLEANUPWRAPPER_H__
+
+/**
+ * Helper class to construct a TCleanupItem from any 
+ * public non static void (*method)() of a class
+ * Usage:
+ *      TShwCleanupWrapper< %ClassName%, %MethodName% >( 
+ *          %ClassPointer% )
+ * Example:
+ *      RPointerArray< MInterface > array;
+ *      CleanupStack::PushL( 
+ *          TShwCleanupWrapper< 
+ *              RPointerArray<MInterface>,
+ *              RPointerArray<MInterface>::ResetAndDestroy >( array ) );
+ */
+template< class Object, void (Object::*Method)()>
+NONSHARABLE_CLASS( TShwCleanupWrapper ) : public TCleanupItem
+	{
+	public:
+        /**
+		 * Constructor.
+		 * @param aInstance the object instance of the class 
+		 */
+		inline TShwCleanupWrapper( Object& aInstance )
+			: TCleanupItem( &Cleanup, &aInstance )
+			{}
+
+    private:
+        /**
+		 * The cleanup callback delegator. Inlined as we dont want
+		 * extra method to be created, static so that base
+		 * class can call it without pointer to this.
+		 * @param aInstance the instance of TShwCallBack
+		 * @return the return value for the TCallBack
+		 */
+		inline static void Cleanup( TAny* aInstance )
+			{
+			( static_cast< Object* >( aInstance )->*Method )();
+			}
+	};
+
+/**
+ * Helper function to create cleanup item without ugly template notations
+ * @param aObject the object to call ResetAndDestroy in case of leave
+ * 
+ * Usage:
+ *      ShwCleanupResetAndDestroyPushL( array );
+ * Example:
+ *   RPointerArray< MShwEffect > effects;
+ *   // put the array in cleanupstack in case CreateEffectsL leaves
+ *    ShwCleanupResetAndDestroyPushL( effects );
+ */
+template< class T >
+void ShwCleanupResetAndDestroyPushL( T& aObject )
+	{
+	CleanupStack::PushL( 
+		TShwCleanupWrapper< T, T::ResetAndDestroy >( aObject ) );
+	}
+
+#endif // __TSHWCLEANUPWRAPPER_H__