ncdengine/inc/catalogsutils.inl
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/inc/catalogsutils.inl	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2006-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:   Contains definition of catalogsutils functions 
+*
+*/
+
+
+#include "catalogsdebug.h"
+
+// ---------------------------------------------------------------------------
+// IntToDes16
+// 64-bit specialization is in catalogsutils.cpp
+// ---------------------------------------------------------------------------
+//   
+template<typename T>
+void IntToDes16( const T& aInt, TDes& aDes )
+    {
+    DLTRACEIN(("aDes.MaxLength() = %d", aDes.MaxLength() ));
+    DASSERT( aDes.MaxLength() >= sizeof(T)/2 );    
+    *(( T* )aDes.Ptr()) = aInt;        
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Des16ToInt
+// 64-bit specialization is in catalogsutils.cpp
+// ---------------------------------------------------------------------------
+//   
+template<typename T>    
+void Des16ToInt( const TDesC& aDes, T& aInt )
+    {
+    DLTRACEIN(( _L("Des: %S"), &aDes ));
+    aInt = *(( T* )aDes.Ptr());
+    DLTRACEOUT(( "Result: %d", aInt ));
+    }
+    
+
+
+
+// Template class CleanupResetAndDestroy
+template <typename T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+/**
+Creates a TCleanupItem for the specified object.
+
+The cleanup operation is the private static function Close() of this class.
+
+@param aRef The object for which a TCleanupItem is to be constructed.
+*/
+	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
+
+
+
+
+template <typename T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+/**
+The cleanup operation to be performed.
+
+@param aPtr A pointer to the object for which clean up is to be performed. 
+            The implementation calls Close() on this object.
+*/
+	{(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
+
+
+
+
+// See header file e32base.h for in-source comment.
+template <typename T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+	{CleanupResetAndDestroy<T>::PushL(aRef);}
+	
+
+// Template class CleanupInternalRelease
+template <typename T>
+inline void CleanupInternalRelease<T>::PushL(T& aRef)
+/**
+Creates a TCleanupItem for the specified object.
+
+The cleanup operation is the private static function Close() of this class.
+
+@param aRef The object for which a TCleanupItem is to be constructed.
+*/
+	{CleanupStack::PushL(TCleanupItem(&InternalRelease,&aRef));}
+
+
+template <typename T>
+void CleanupInternalRelease<T>::InternalRelease(TAny *aPtr)
+/**
+The cleanup operation to be performed.
+
+@param aPtr A pointer to the object for which clean up is to be performed. 
+            The implementation calls Close() on this object.
+*/
+	{(STATIC_CAST(T*,aPtr))->InternalRelease();}
+	
+
+template <typename T>
+inline void CleanupInternalReleasePushL(T& aRef)
+	{CleanupInternalRelease<T>::PushL(aRef);}
+
+template <typename T>
+void ResetAndCloseArray( RPointerArray<T>& aArray )
+    {
+    TInt count( aArray.Count() );    
+    while ( count-- )
+        {
+        aArray[count]->Close();                    
+        }
+    aArray.Reset();
+    }
+
+
+template <typename T>
+void ResetAndCloseArray( RArray<T>& aArray )
+    {
+    TInt count( aArray.Count() );    
+    while ( count-- )
+        {
+        aArray[count].Close();                    
+        }
+    aArray.Reset();
+    }
+    
+    
+template <typename Casted, typename T>
+void ResetAndDestroyWithCast( RPointerArray<T>& aArray )
+    {
+    TInt count = aArray.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        Casted* info =
+            static_cast<Casted*>( aArray[i] );
+        delete info;
+        info = NULL;
+        }
+    aArray.Reset();        
+    }
+    
+
+template <typename T>
+void DeleteFromArray( RPointerArray<T>& aArray, TInt aIndex )
+    {
+    delete aArray[ aIndex ];
+    aArray.Remove( aIndex );
+    }
+
+template <typename Casted, typename T>
+void DeleteFromArray( RPointerArray<T>& aArray, TInt aIndex )
+    {
+    delete static_cast<Casted*>( aArray[ aIndex ] );
+    aArray.Remove( aIndex );    
+    }
+
+    
+template <typename EnumType>
+void InternalizeEnumL( EnumType& aTarget, RReadStream& aReadStream )
+    {
+    aTarget = static_cast<EnumType>( aReadStream.ReadInt32L() );
+    }
+
+
+template <typename EnumType>
+void ExternalizeEnumL( const EnumType& aSource, RWriteStream& aWriteStream )
+    {
+    aWriteStream.WriteInt32L( aSource );
+    }
+    
+
+template <typename T>
+TBool IsOneOf( 
+    const T& aData, 
+    const T& aComp1, 
+    const T& aComp2 )
+    {
+    return aData == aComp1 || 
+           aData == aComp2;
+    }
+
+
+template <typename T>
+TBool IsOneOf( 
+    const T& aData, 
+    const T& aComp1, 
+    const T& aComp2, 
+    const T& aComp3 )
+    {
+    return IsOneOf( aData, aComp1, aComp2 ) || 
+           aData == aComp3;
+    }
+
+
+template <typename T>
+TBool IsOneOf( 
+    const T& aData, 
+    const T& aComp1, 
+    const T& aComp2, 
+    const T& aComp3, 
+    const T& aComp4 )
+    {
+    return aData == aComp1 || 
+           aData == aComp2 ||
+           aData == aComp3 ||
+           aData == aComp4;
+    }
+
+
+template <typename T>
+void ReleasePtr( T*& aObject )
+    {
+    if ( aObject ) 
+        {
+        aObject->Release();
+        aObject = NULL;
+        }
+    }
+
+
+template <typename T>
+void ClosePtr( T*& aObject )
+    {
+    if ( aObject ) 
+        {
+        aObject->Close();
+        aObject = NULL;
+        }
+    }
+
+
+template <typename T>
+void DeletePtr( T*& aObject )
+    {
+    delete aObject;
+    aObject = NULL;
+    }
+