userlibandfileserver/fileserver/sfat32/inc/sl_fatcache32.inl
changeset 9 96e5fb8b040d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/sfat32/inc/sl_fatcache32.inl	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,122 @@
+// 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\sfat32\inc\sl_facache32.h
+// FAT32 various cache classes definition
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef SL_FAT_CACHE_32_INL
+#define SL_FAT_CACHE_32_INL
+
+
+//-----------------------------------------------------------------------------
+
+
+void CFatBitCache::SetState(CFatBitCache::TState aState) 
+    {
+    iState = aState;
+    }
+
+/**
+    Converts FAT index to the corresponding bit array bit number (or FAT cache sector number).
+    @param  aFatIndex index in the FAT 
+    @return corresponding index in the FAT bit array
+*/
+TUint32 CFatBitCache::FatIndexToCacheSectorNumber(TUint32 aFatIndex) const
+    {
+    ASSERT(aFatIndex >= KFatFirstSearchCluster);
+    return (aFatIndex >> iFatIdxToSecCoeff);
+    }
+
+/**
+    Converts FAT32 cache sector number to the FAT32 entry index (in the beginning of this cache sector)
+    @param  aCacheSecNum index in the FAT bit array (or FAT cache sector number)
+    @return corresponding index in the FAT 
+
+*/
+TUint32 CFatBitCache::CacheSectorNumberToFatIndex(TUint32 aCacheSecNum) const
+    {
+    ASSERT(aCacheSecNum < iBitCache.Size());
+    return (aCacheSecNum << iFatIdxToSecCoeff);
+    }
+
+/** @return state of the cache*/
+CFatBitCache::TState CFatBitCache::State() const 
+    {
+    return iState;
+    }
+
+/** 
+    @return ETrue if the cache can be used, i.e. is fully populated
+*/
+TBool CFatBitCache::UsableState() const
+    {
+    return State() == EPopulated;
+    }
+
+
+/**
+    @return ETrue if the FAT cache sector number "aFatSectorNum" is marked as having at least one free FAT entry.
+    N.B. The cache must be in consistent state, i.e. fully populated.
+*/
+TBool CFatBitCache::FatSectorHasFreeEntry(TUint32 aFatSectorNum) const
+    {
+    ASSERT(UsableState());
+    return iBitCache[aFatSectorNum];
+    }
+
+/**
+    Mark FAT cache sector number "aFatSectorNum" is as having/not having free FAT entry.
+    N.B. The cache must be in consistent state, i.e. fully populated.
+
+    @param  aFatSectorNum FAT32 cache sector number [index in a bit vector] 
+    @param  aHasFreeEntry ETrue  if we want to mark this sector as having free FAT entries; 
+                          EFalse if we want to mark this sector as NOT having free FAT entries; 
+*/
+void CFatBitCache::SetFreeEntryInFatSector(TUint32 aFatSectorNum, TBool aHasFreeEntry)
+    {
+    ASSERT(UsableState());
+    iBitCache.SetBitVal(aFatSectorNum, aHasFreeEntry);
+    }
+
+
+#endif //SL_FAT_CACHE_32_INL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+