os/kernelhwsrv/userlibandfileserver/fileserver/sfile/sf_cache.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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