userlibandfileserver/fileserver/sfile/sf_cache.h
changeset 0 a41df078684a
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // f32\sfile\sf_cache.h
       
    15 // 
       
    16 //
       
    17 
       
    18 #if !defined(__SF_CACHE_H__)
       
    19 #define __SF_CACHE_H__
       
    20 #include "sf_image.h"
       
    21 
       
    22 // Cached information for each file
       
    23 class TRomImageHeader;
       
    24 class TDirectoryCacheHeader;
       
    25 class TFileCacheRecord : public TImageInfo
       
    26 	{
       
    27 public:
       
    28 	inline const TText8* NameText() const
       
    29 		{ return (const TText8*)(this + 1); }
       
    30 	inline TPtrC8 Name() const
       
    31 		{ return TPtrC8(NameText(), iNameLength); }
       
    32 	inline const TUint8* ExportDescription() const
       
    33 		{ return NameText() + iNameLength; }
       
    34 	inline TBool ExtrasValid() const
       
    35 		{ return iUid[0]; }
       
    36 	inline const TRomImageHeader* RomImageHeader() const
       
    37 		{ return (const TRomImageHeader*)iUid[0]; }
       
    38 	inline void SetXIP(const TRomImageHeader* aR)
       
    39 		{ iUid[0] = (TUint32)aR; }
       
    40 	inline TBool IsXIP() const
       
    41 		{ return !(iUid[0]&3); }
       
    42 	static TInt Order(const TFileCacheRecord& aL, const TFileCacheRecord& aR);
       
    43 	void Dump(const char* aTitle);
       
    44 public:
       
    45 	TInt GetImageInfo(RImageInfo& aInfo, const TDesC8& aPathName, TDirectoryCacheHeader* aDirHead, TInt aIndex);
       
    46 public:
       
    47 	// UID1 must be EXE or DLL, 0 means extra information not valid
       
    48 	// UID1 nonzero and multiple of 4 means XIP in which case it points to the ROM image header
       
    49 	// iExportDirCount = number of bytes available for export description if iUid[0]=0
       
    50 	// 8-bit name follows (store base+ext only, not version)
       
    51 	// export description follows name
       
    52 	};
       
    53 
       
    54 class TFileCacheRecordSearch : public TFileCacheRecord
       
    55 	{
       
    56 public:
       
    57 	TFileCacheRecordSearch(const TDesC8& aSearchName);
       
    58 public:
       
    59 	TUint8 iSearchName[KMaxKernelName];
       
    60 	};
       
    61 
       
    62 // Record of a cached path.
       
    63 class TPathListRecord
       
    64 	{
       
    65 public:
       
    66 	static TPathListRecord* FindPathNameInList(const TDesC8& aPath);
       
    67 	inline const TDesC8* PathName() const
       
    68 		{ return (const TDesC8*)(this + 1); }
       
    69 	static TInt Init();
       
    70 private:
       
    71 	void MoveToHead();
       
    72 	static TPathListRecord* New(const TDesC8& aPath, TBool aKeep);
       
    73 	static TPathListRecord* DoFindPathNameInList(const TDesC8& aPath);
       
    74 	static TPathListRecord* AddToPathList(const TDesC8& aPath, TBool aKeep);
       
    75 public:
       
    76 	TPathListRecord* iNext;
       
    77 	TBool iKeep;
       
    78 	// place a TBufC8 immediately after
       
    79 public:
       
    80 	static TPathListRecord* First;
       
    81 	static TPathListRecord* LastStatic;
       
    82 	};
       
    83 
       
    84 class TCacheHeapList
       
    85 	{
       
    86 public:
       
    87 	TCacheHeapList(TInt aSize);
       
    88 	TAny* Allocate(TInt aBytes);
       
    89 public:
       
    90 	TCacheHeapList* iNext;
       
    91 private:
       
    92 	TInt iAllocated;
       
    93 	TInt iSize;
       
    94 	};
       
    95 
       
    96 class TDirectoryCacheHeader;
       
    97 NONSHARABLE_CLASS(CCacheNotifyDirChange) : public CActive
       
    98 	{
       
    99 public:
       
   100 	CCacheNotifyDirChange(TDriveNumber aDrive, TDirectoryCacheHeader& aDirHead);
       
   101 	~CCacheNotifyDirChange();
       
   102 	TInt RegisterNotification(TPathListRecord* aPathRec, TNotifyType aType);
       
   103 	void DoCancel();
       
   104 	void RunL();
       
   105 private:
       
   106     TDriveNumber iDrive;
       
   107 	TDirectoryCacheHeader* iDirHead;
       
   108 	};
       
   109 
       
   110 class TEntry;
       
   111 class TDirectoryCacheHeader
       
   112 	{
       
   113 public:
       
   114 	TDirectoryCacheHeader(TPathListRecord* aPath);
       
   115 	~TDirectoryCacheHeader();
       
   116 	TAny* Allocate(const TInt aBytes);
       
   117 	TFileCacheRecord* NewRecord(const TDesC8& aName, TUint32 aAttr, TUint32 aVer, const TEntry& aEntry);
       
   118 	TFileCacheRecord* NewRecord(const TFileCacheRecord& aRecord, TInt aEDS);
       
   119 	TInt PopulateFromDrive(const TDesC8& aPathName);
       
   120 public:
       
   121 	TDirectoryCacheHeader* iNext;		// list of directories per drive
       
   122 	TCacheHeapList* iFirstHeapBlock;	// heap blocks to hold TFileCacheRecord entries
       
   123 	TPathListRecord* iPath;
       
   124 	TInt iRecordCount;					// number of TFileCacheRecord entries
       
   125 	TFileCacheRecord** iCache;			// array of pointers to TFileCacheRecord entries
       
   126 	TBool iNotPresent;
       
   127 	CCacheNotifyDirChange* iNotify;
       
   128 private:
       
   129 	TInt GetMoreHeap();
       
   130 	};
       
   131 
       
   132 class TDriveCacheHeader
       
   133 	{
       
   134 public:
       
   135 	TDriveCacheHeader();
       
   136 	~TDriveCacheHeader();
       
   137 	TDirectoryCacheHeader* FindDirCache(TPathListRecord* aPath);
       
   138 	TInt GetDirCache(TDirectoryCacheHeader*& aCache, TPathListRecord* aPath, const TDesC8& aDriveAndPath);
       
   139 public:
       
   140 	TDirectoryCacheHeader* iDirectoryList; // List of Directories
       
   141 	TUint iDriveAtt;
       
   142 	TInt iDriveNumber;
       
   143 	};
       
   144 
       
   145 
       
   146 void InitializeFileNameCache();
       
   147 TInt CheckLoaderCacheInit();
       
   148 
       
   149 #endif