/*TITLE declarations for block classes*/ /****keyword-flag*** "%v %f %n" */ /* "16 14-Apr-98,22:48:30 BLOCK.H" */ class QuantumFile { public: QuantumFile(); void Open(String p_FileName="", ArrayIndex p_BufferCount=DefaultBufferCount); void Flush(); void Close(); long GetReadCount() {return m_ReadCount;} long GetWriteCount() { return m_WriteCount;} ~QuantumFile(); public: //used by implementation classes only ObjectNumber GetMainObjectCount() {return m_MainObjectCount;} ArrayIndex GetMainObjectBlockCount(); ArrayIndex QGetFreeSpaceListCount() {return m_FreeSpaceListCount;} ArrayIndex QGetFreeSpaceListBlockCount(); void SetFreeSpace(ArrayIndex p_QuantumNumber, QFreeSpaceEntry p_FreeSpaceEntry); QFreeSpaceEntry QGetFreeSpace(ArrayIndex p_QuantumNumber); QuantumNumber FindEmptyBlock(); QuantumNumber FindSpaceForItem(ObjectNumber p_ObjectNumber, ArrayIndex p_ItemSize); ArrayIndex GetQuantumNumberAdjustment() {return m_QuantumStartingBlock-1;} FreeSpaceBlockPtr MakeFreeSpaceBlockPtr(ArrayIndex p_Index); MainObjectBlockPtr MakeMainObjectBlockPtr(ArrayIndex p_Index); BigPointerBlockPtr MakeBigPointerBlockPtr(ArrayIndex p_Index); LittlePointerBlockPtr MakeLittlePointerBlockPtr(ArrayIndex p_Index); LeafBlockPtr MakeLeafBlockPtr(ArrayIndex p_Index); Block *MakeBlockResident(ArrayIndex p_BlockNumber); void SetModified(ArrayIndex p_BlockNumber); private: SVector m_Block; SVector m_BlockNumber; SVector m_BufferModified; SVector m_TimeStamp; String m_FileName; FILE * m_DosFilePtr; BlockNumber m_CurrentLowestFreeBlock; BlockNumber m_MainObjectStartingBlock; BlockNumber m_FreeSpaceListStartingBlock; BlockNumber m_QuantumStartingBlock; ObjectNumber m_MainObjectCount; ArrayIndex m_FreeSpaceListCount; ArrayIndex m_Counter; FreeSpaceArrayPtr *m_FreeSpaceArray; MainObjectArrayPtr *m_MainObjectArray; long m_ReadCount; long m_WriteCount; void Position(ArrayIndex p_BlockNumber); void Write(ArrayIndex p_BlockNumber); void Read(ArrayIndex p_BlockNumber); QuantumFile(const QuantumFile&); QuantumFile& operator=(const QuantumFile&); };