userlibandfileserver/fileserver/sfat32/sl_fatcache.inl
changeset 15 4122176ea935
child 36 538db54a451d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/sfat32/sl_fatcache.inl	Mon Dec 21 16:14:42 2009 +0000
@@ -0,0 +1,254 @@
+// Copyright (c) 1998-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:
+// f32\sfat\sl_fatcache.inl
+// 
+//
+
+/**
+ @file
+*/
+
+#ifndef SL_FAT_CACHE_INL
+#define SL_FAT_CACHE_INL
+
+
+//-----------------------------------------------------------------------------
+
+/** clear all bits */
+void T32Bits::Clear()
+    {
+    iData = 0;
+    }
+
+/** @return non-0 if at least one of 32 bits is set to '1' */
+TBool T32Bits::HasBitsSet() const 
+    {
+    return iData;
+    } 
+
+/** sets bit number "aIndex" to '1' */
+void T32Bits::SetBit(TUint32 aIndex)
+    {
+    ASSERT(aIndex < 32);
+    iData |= (1<<aIndex);
+    }
+
+/** 
+    Get value of the bit number "aIndex". 
+    @return 0 if the bit aIndex is '0' non-zero otherwise
+*/
+TBool T32Bits::operator[](TUint32 aIndex) const
+    {
+    ASSERT(aIndex < 32);
+    return (iData & (1<<aIndex));
+    }
+
+
+//-----------------------------------------------------------------------------
+
+TUint32 CFatCacheBase::FatStartPos() const 
+    {
+    return iFatStartPos;
+    }
+
+TUint32 CFatCacheBase::FatSize() const 
+    {
+    return iFatSize;
+    }
+
+TFatType CFatCacheBase::FatType() const 
+    {
+    return iFatType;
+    }
+
+TBool CFatCacheBase::IsDirty() const 
+    {
+    return iDirty;
+    }
+
+void CFatCacheBase::SetDirty(TBool aDirty) 
+    {
+    iDirty = aDirty;
+    }
+
+TUint CFatCacheBase::NumFATs() const 
+    {
+    return iNumFATs;
+    }
+
+TUint CFatCacheBase::FAT_SectorSzLog2() const 
+    {
+    return iFatSecSzLog2;
+    }
+
+TUint CFatCacheBase::FAT_SectorSz() const 
+    {
+    return 1 << iFatSecSzLog2;
+    }
+
+TUint CFatCacheBase::FAT_ClusterSzLog2() const 
+    {
+    return iFatClustSzLog2;
+    }
+    
+
+//-----------------------------------------------------------------------------
+
+/** @return number of FAT cache sectors in this fixed cache */
+TUint32 CFat12Cache::NumSectors() const   
+    {
+    return iSectorsInCache;
+    }
+
+
+//-----------------------------------------------------------------------------
+
+
+/** @return Log2(page size in bytes) */
+TUint CFatPagedCacheBase::PageSizeLog2() const 
+    {
+    return iPageSizeLog2;
+    }
+
+/** @return page size in bytes */
+TUint CFatPagedCacheBase::PageSize() const 
+    {
+    return Pow2(iPageSizeLog2);
+    }
+
+/** @return Log2(size of the logical sector of the page in bytes) */    
+TUint CFatPagedCacheBase::SectorSizeLog2() const 
+    {
+    return iSectorSizeLog2;
+    }
+
+/** @return number of the logical sector in the page */
+TUint CFatPagedCacheBase::SectorsInPage() const 
+    {
+    return Pow2(iPageSizeLog2 - iSectorSizeLog2);
+    }
+
+
+//-----------------------------------------------------------------------------
+
+TUint CFat16FixedCache::NumPages() const 
+    {
+    return (TUint)iPages.Count();
+    } 
+
+//-----------------------------------------------------------------------------
+
+
+/** @return  the index in the FAT table this page starts from */
+TUint32 CFatCachePageBase::StartFatIndex() const 
+    {
+    return iStartIndexInFAT;
+    }
+
+/** @return number of FAT entries in the page */
+TUint32 CFatCachePageBase::EntriesInPage() const 
+    {
+    return iFatEntriesInPage;
+    }
+
+/** @return page state */
+CFatCachePageBase::TState CFatCachePageBase::State() const
+    {
+    return iState;
+    }
+
+/** sets the state of the page */
+void CFatCachePageBase::SetState(TState aState)
+    {
+    iState = aState;
+    }
+
+/** @return ETrue if the page is dirty, i.e. contains non-flushed dirty sectors */
+TBool CFatCachePageBase::IsDirty() const
+    {
+    if(State() == EDirty)
+        {
+        ASSERT(iDirtySectors.HasBitsSet());
+        return ETrue;
+        }
+    else
+        {
+        ASSERT(!iDirtySectors.HasBitsSet());
+        return EFalse;
+        }
+    }
+
+/** @return  ETrue if the page data are valid */
+TBool CFatCachePageBase::IsValid() const
+    {
+    return (State() == EClean || State() == EDirty);
+    }
+
+/** force the page to the clean state */
+void CFatCachePageBase::SetClean()
+    {
+    iDirtySectors.Clear(); //-- clear dirty sectors bitmap
+    SetState(EClean);
+    }
+
+/** @return page size in bytes */
+TUint32 CFatCachePageBase::PageSize() const 
+    {
+    return iCache.PageSize();
+    }
+
+/** @return number of logical sectors in the page */
+TUint32 CFatCachePageBase::NumSectors() const 
+    {
+    return iCache.SectorsInPage();
+    }
+
+/** @return ETrue if the entry at aFatIndex belongs to this page */
+TBool CFatCachePageBase::IsEntryCached(TUint32 aFatIndex) const
+    {
+    return (aFatIndex >= iStartIndexInFAT && aFatIndex < iStartIndexInFAT+EntriesInPage());
+    } 
+
+
+//---------------------------------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+#endif //SL_FAT_CACHE_INL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+