userlibandfileserver/fileserver/sfat32/sl_cache.h
branchRCL_3
changeset 62 4a8fed1c0ef6
parent 33 0173bcd7697c
--- a/userlibandfileserver/fileserver/sfat32/sl_cache.h	Tue Feb 02 01:24:03 2010 +0200
+++ b/userlibandfileserver/fileserver/sfat32/sl_cache.h	Sat Feb 20 00:10:51 2010 +0200
@@ -27,8 +27,6 @@
 //---------------------------------------------------------------------------------------------------------------------------------
 //-- dedicated FAT directory cache related stuff
 
-//-- if defined, a dedicated cache will be used for FAT directories
-#define ENABLE_DEDICATED_DIR_CACHE
 
 //---------------------------------------------------------------------------------------------------------------------------------
 
@@ -64,13 +62,10 @@
         
         /**
         Finds out if the media position "aPosToSearch" is in the cache and returns cache page information in this case.
-        
         @param  aPosToSearch    linear media position to lookup in the cache
-        @param  aCachedPosStart if "aPosToSearch" is cached, here will be media position of this page start
-          
         @return 0 if aPosToSearch isn't cached, otherwise  cache page size in bytes (see also aCachedPosStart).
         */
-        virtual TUint32  PosCached(const TInt64& aPosToSearch, TInt64& aCachedPosStart) = 0;
+        virtual TUint32  PosCached(TInt64 aPosToSearch) = 0;
         
         /**
         @return size of the cache in bytes. Can be 0.
@@ -116,7 +111,6 @@
 public:   
         
         static CWTCachePage* NewL(TUint32 aPageSizeLog2);
-        void ConstructL(TUint32 aPageSizeLog2);
         
         ~CWTCachePage();
         
@@ -148,9 +142,7 @@
 public:
         ~CMediaWTCache();
         
-        static CMediaWTCache* NewL(TDriveInterface& aDrive, TUint32 aNumPages, TUint32 aPageSizeLog2);
-
-        void ConstructL(TUint32 aNumPages, TUint32 aPageSizeLog2);
+        static CMediaWTCache* NewL(TDriveInterface& aDrive, TUint32 aNumPages, TUint32 aPageSizeLog2, TUint32 aWrGranularityLog2);
         
         //-- overloads from the base class
         void    ReadL (TInt64 aPos,TInt aLength,TDes8& aDes);
@@ -159,7 +151,7 @@
         void    InvalidateCachePage(TUint64 aPos);
 
 
-        TUint32 PosCached(const TInt64& aPosToSearch, TInt64& aCachedPosStart);
+        TUint32 PosCached(TInt64 aPosToSearch);
         TUint32 CacheSizeInBytes()  const;
         void 	MakePageMRU(TInt64 aPos);
         TUint32 PageSizeInBytesLog2()	const;
@@ -171,6 +163,8 @@
         CMediaWTCache();
         CMediaWTCache(TDriveInterface& aDrive);
         
+        void InitialiseL(TUint32 aNumPages, TUint32 aPageSizeLog2, TUint32 aWrGranularityLog2);
+
         inline TInt64  CalcPageStartPos(TInt64 aPos) const;
         inline TUint32 PageSize() const;
         
@@ -183,10 +177,14 @@
         
 protected:
         TDriveInterface& iDrive;        ///< reference to the driver for media access
-        TUint32             iPageSizeLog2; ///< Log2 (cache page size)
+        
+        TUint32             iPageSizeLog2;      ///< Log2(cache page size or read granularity unit) 
+        TUint32             iWrGranularityLog2; ///< Log2(cache write granularity unit). Can't be > iPageSizeLog2. '0' has a special meaning - "don't use write granularity"
+
         mutable TBool       iAllPagesValid;///< ETrue if all cache pages have valid data
         TInt64              iCacheBasePos; ///< Cache pages base position, used to align them at cluster size
         RPointerArray<CWTCachePage> iPages; ///< array of pointers to the cache pages. Used for organising LRU list
+        
         TUint32             iCacheDisabled :1; ///< if not 0 the cache is disabled totally and all reads and writes go via TDriveInterface directly
     };