1 #ifndef _CEGOFILEHANDLER_H_INCLUDED_ 2 #define _CEGOFILEHANDLER_H_INCLUDED_ 3 /////////////////////////////////////////////////////////////////////////////// 4 // 5 // CegoFileHandler.h 6 // ----------------- 7 // Cego file handler class definition 8 // 9 // Design and Implementation by Bjoern Lemke 10 // 11 // (C)opyright 2000-2019 Bjoern Lemke 12 // 13 // INTERFACE MODULE 14 // 15 // Class: CegoFileHandler 16 // 17 // Description: The filehandler class provides access to all datafiles. Datafiles consists 18 // of a defined number of pages managed by the this class. 19 // At the header of a datafile, a bitmap is stored for used page information 20 // 21 // Status: CLEAN 22 // 23 /////////////////////////////////////////////////////////////////////////////// 24 25 #ifndef _REENTRANT 26 #define _REENTRANT /* basic 3-lines for threads */ 27 #endif 28 29 // LFC INCLUDES 30 #include <lfcbase/Chain.h> 31 #include <lfcbase/File.h> 32 #include <lfcbase/Logger.h> 33 34 // CEGO INCLUDES 35 #include "CegoLockHandler.h" 36 #include "CegoDefs.h" 37 #include "CegoModule.h" 38 39 class CegoFileHandler : public CegoModule { 40 41 public: 42 43 enum FileType { DATAFILE, SYSTEMFILE, TEMP }; 44 45 CegoFileHandler(const Chain& logFile, const Chain& progName); 46 ~CegoFileHandler(); 47 48 void setReadOnly(bool isReadOnly); 49 50 void setBackup(int fileId, bool m); 51 52 bool needPageBackup(PageIdType pageId); 53 bool isPageMarked(PageIdType pageId, int fileId); 54 55 // obsolete 56 // void cleanDataFile(int fileId, CegoLockHandler* pLockHandle); 57 58 void initDataFile(int tabSetId, const Chain& path, int fileId, int numPages, PageIdType pageOffset, FileType ft); 59 void regDataFile(int tabSetId, const Chain& path, int fileId, CegoLockHandler* pLockHandle); 60 61 void resetDataFile(int fileId); 62 63 void writePage(PageIdType pageId, unsigned fixStat, char* pageData, CegoLockHandler* pLockHandle); 64 void readPage(PageIdType pageId, int& tabSetId, unsigned& fixStat, char* pageData, CegoLockHandler* pLockHandle); 65 66 void claimPage(PageIdType pageId, CegoLockHandler* pLockHandle); 67 void allocatePage(int tabSetId, FileType ft, PageIdType& pageId, CegoLockHandler* pLockHandle, unsigned* &fbm, int& fbmSize, bool doAppend = false); 68 void releasePage(PageIdType pageId, CegoLockHandler* pLockHandle, unsigned* &fbm, int& fbmSize); 69 70 void releaseFiles(int tabSetId); 71 72 int getNumPages(int fileId); 73 int getNumUsedPages(int fileId, CegoLockHandler* pLockHandle); 74 75 PageIdType getPageOffset(int fileId); 76 77 bool isClaimed(PageIdType pageId, CegoLockHandler *pLockHandle); 78 79 void writeFBM(int fileId, unsigned *fbm, CegoLockHandler *pLockHandle); 80 81 int getFileIdForPageId(PageIdType pageId); 82 83 void commitPageEntry(PageIdType pageId); 84 int cleanPages(CegoLockHandler *pLockHandle); 85 86 protected: 87 88 int _pageSize; 89 90 private: 91 92 int getFBMSize(int fileId); 93 void readFBM(int fileId, unsigned *fbm, CegoLockHandler *pLockHandle); 94 95 void markPage(PageIdType pageId); 96 97 File* getHandle(int fileId); 98 99 void printBitMap(unsigned bm); 100 int mapDiff(unsigned bm1, unsigned bm2); 101 102 bool _isReg[FILMNG_MAXDATAFILE]; 103 int _tabSetId[FILMNG_MAXDATAFILE]; 104 int _fileType[FILMNG_MAXDATAFILE]; 105 int _numPages[FILMNG_MAXDATAFILE]; 106 PageIdType _pageOffset[FILMNG_MAXDATAFILE]; 107 108 File* _fhList[FILMNG_MAXDATAFILE]; 109 110 Chain _path[FILMNG_MAXDATAFILE]; 111 112 unsigned* _buMask[FILMNG_MAXDATAFILE]; 113 114 unsigned* _commitMask[FILMNG_MAXDATAFILE]; 115 116 bool _fbmMask[FILMNG_MAXDATAFILE]; 117 118 PageIdType _appendPos[FILMNG_MAXDATAFILE]; 119 int _appendFid; 120 121 bool _isReadOnly; 122 123 unsigned long _modId; 124 }; 125 126 #endif 127