userlibandfileserver/fileserver/inc/filesystem_utils.inl
changeset 33 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/inc/filesystem_utils.inl	Thu Jan 07 13:38:45 2010 +0200
@@ -0,0 +1,201 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// 
+
+/**
+    @file
+    @internalTechnology
+*/
+
+#if !defined(__FILESYSTEM_UTILS_INL__)
+#define __FILESYSTEM_UTILS_INL__
+
+
+//-----------------------------------------------------------------------------
+/** @return 2^aVal */
+inline TUint32 Pow2(TUint32 aVal)
+    {
+    ASSERT(aVal<32);
+    return 1 << aVal;
+    }
+
+//-----------------------------------------------------------------------------
+/** @return TUint32 value equals 2^aVal */
+inline TUint32 Pow2_32(TUint32 aVal)
+    {
+    ASSERT(aVal < 32);
+    return 1 << aVal;
+    }
+
+//-----------------------------------------------------------------------------
+/** @return TUint64 value equals 2^aVal */
+inline TUint64 Pow2_64(TUint32 aVal)
+    {
+    ASSERT(aVal < 64);
+    return ((TUint64)1) << aVal;
+    }
+
+//-----------------------------------------------------------------------------
+/**
+    Indicates if a number passed in is a power of two
+    @return ETrue if aVal is a power of 2 
+*/
+inline TBool IsPowerOf2(TUint32 aVal)
+    {
+    if (aVal==0)
+        return EFalse;
+
+    return !(aVal & (aVal-1));
+    }
+
+//-----------------------------------------------------------------------------
+/**
+    Indicates if a number passed in is a power of two
+    @return ETrue if aVal is a power of 2 
+*/
+inline TBool IsPowerOf2_64(TUint64 aVal)
+    {
+    if (aVal==0)
+        return EFalse;
+
+    return !(aVal & (aVal-1));
+
+    }
+
+//-----------------------------------------------------------------------------
+
+/**
+    rounds down the given value to 2^aGranularityLog2
+    @param  aVal                input value to round down
+    @param  aGranularityLog2    Log2(granularity)
+    @return rounded - down value
+*/
+inline TUint32 RoundDown(TUint32 aVal, TUint32 aGranularityLog2)
+{
+    ASSERT(aGranularityLog2 < 32);
+    return (aVal >> aGranularityLog2) << aGranularityLog2;
+}
+
+//-----------------------------------------------------------------------------
+/**  
+    Rounds up aVal to the 2^aGranularityLog2 
+    For example: RoundUp(0x08, 2) == 0x08; RoundUp(0x08, 3) == 0x08; RoundUp(0x08, 4) == 0x10; RoundUp(0x19, 4) == 0x20
+    
+    @return rounded-up value
+*/
+inline TUint32 RoundUp(TUint32 aVal, TUint32 aGranularityLog2)
+    {
+    ASSERT(aGranularityLog2 < 32);
+                                         
+    if( (aVal & ((1<<aGranularityLog2)-1)) == 0)
+        return aVal;    
+
+    aVal >>= aGranularityLog2;
+    aVal++;
+    aVal <<= aGranularityLog2;
+
+    return aVal;
+    }
+
+//-----------------------------------------------------------------------------
+
+/**
+    @return Boolean exclusive OR between a1 and a2
+    This function should be used on C-style TBool, which is, actually TInt type; Its '0' value means "False" and _any_ non-zero means "True"
+    E.g: BoolXor(0x17, 0x4a) == EFalse;
+*/
+TBool BoolXOR(TBool a1, TBool a2)
+    {
+    if(!a1 && !a2)        
+        return EFalse;
+    else if(a1 && a2)
+        return EFalse;
+    else
+        return ETrue;
+    }
+
+//-----------------------------------------------------------------------------
+
+/**
+    Calculates the log2 of a number
+    This is the explicitly inlined version. Extensive using it may result in a code bloat.
+
+    @param aNum Number to calulate the log two of
+    @return The log two of the number passed in
+*/
+inline TUint32 Log2_inline(TUint32 aVal)
+    {
+    __ASSERT_COMPILE(sizeof(TUint32) == 4);
+    ASSERT(aVal);
+
+    TUint32 bitPos=31;
+
+    if(!(aVal >> 16)) {bitPos-=16; aVal<<=16;}
+    if(!(aVal >> 24)) {bitPos-=8;  aVal<<=8 ;}
+    if(!(aVal >> 28)) {bitPos-=4;  aVal<<=4 ;}
+    if(!(aVal >> 30)) {bitPos-=2;  aVal<<=2 ;}
+    if(!(aVal >> 31)) {bitPos-=1;}
+    
+    return bitPos;
+    }
+
+
+//-----------------------------------------------------------------------------
+/**
+    Calculates number of '1' bits in the aVal
+    This is the explicitly inlined version. Extensive using it may result in a code bloat.
+
+    @param aVal some value
+    @return number of '1' bits in the aVal
+*/
+inline TUint32 Count1Bits_inline(TUint32 aVal)
+    {
+    if(!aVal)
+        return 0;
+
+    if(aVal == 0xFFFFFFFF)
+        return 32;
+
+    aVal = aVal - ((aVal >> 1) & 0x55555555);
+    aVal = (aVal & 0x33333333) + ((aVal >> 2) & 0x33333333);
+    aVal = (aVal + (aVal >> 4)) & 0x0f0f0f0f;
+    aVal = aVal + (aVal >> 8);
+    aVal = aVal + (aVal >> 16);
+
+    return aVal & 0x3f;
+    }
+
+
+
+
+
+
+#endif //__FILESYSTEM_UTILS_INL__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+