/* -*- Mode: C++; tab-width: 8; c-basic-offset: 8 -*-
 *
 */

#ifndef __LFSFileSystem_h__
#define __LFSFileSystem_h__

#include "LFSBlock.h"
#include "LFSInode.h"

class CLFSSuperBlock;
class CLFSInodeBlock;
class CLFSInode;
class CLFSIMap;
class CLFSSMap;

class CLFSFileSystem {
public:
        CLFSFileSystem(int fd);
        ~CLFSFileSystem();

        void Mount();
        void VerifySegmentBlockCounts();
        int GetFD();
	CLFSIMap* GetIMap();
	CLFSSMap* GetSMap();
	unsigned short AddrToSegment(unsigned long addr);
	unsigned long SegmentToAddr(unsigned short segnr);
	unsigned short NumberOfSegments();

protected:
	void CheckMounted();
	void AssignBlocks(CLFSInode& inode, unsigned short *usedBlocks);

private:
        int m_fd;
	CLFSSuperBlock* m_super;
	CLFSInodeBlock* m_imap;
	CLFSInodeBlock* m_smap;
};

#endif __LFSFileSystem_h__

