www.pudn.com > potemkin_sourceforPSP.rar > FileSystem.h


#pragma once 
 
 
#include "../../Globals.h" 
 
 
 
enum FileAccess 
{ 
	FILEACCESS_NONE=0, 
	FILEACCESS_READ=1, 
	FILEACCESS_WRITE=2, 
	FILEACCESS_APPEND=4, 
	FILEACCESS_CREATE=8 
}; 
 
enum FileMove 
{ 
	FILEMOVE_BEGIN=0, 
	FILEMOVE_CURRENT=1, 
	FILEMOVE_END=2 
}; 
 
enum FileType 
{ 
	FILETYPE_NORMAL=1, 
	FILETYPE_DIRECTORY=2 
}; 
 
 
class IHandleAllocator  
{ 
public: 
	virtual u32 GetNewHandle() = 0; 
	virtual void FreeHandle(u32 handle) = 0; 
}; 
 
struct FileInfo 
{ 
	FileInfo() {size=0;access=0;type=FILETYPE_NORMAL;isOnSectorSystem=false;} 
	std::string name; 
	s64 size; 
	u32 access; //unix 777 
	FileType type; 
 
	bool isOnSectorSystem; 
	u32 startSector; 
	u32 numSectors; 
}; 
 
 
 
class IFileSystem 
{ 
public: 
	//utilities 
	void RecurseAndLog(); 
 
	//Obligatory 
	virtual std::vector GetDirListing(std::string path) = 0; 
	virtual u32      OpenFile(std::string filename, FileAccess access) = 0; 
	virtual void     CloseFile(u32 handle) = 0; 
	virtual size_t   ReadFile(u32 handle, u8 *pointer, s64 size) = 0; 
	virtual size_t   WriteFile(u32 handle, const u8 *pointer, s64 size) = 0; 
	virtual size_t   SeekFile(u32 handle, s32 position, FileMove type) = 0; 
	virtual FileInfo GetFileInfo(std::string filename) = 0; 
	virtual bool     OwnsHandle(u32 handle) = 0; 
 
	//Optional 
}; 
 
 
class EmptyFileSystem : public IFileSystem 
{ 
public: 
	std::vector GetDirListing(std::string path) {std::vector vec; return vec;} 
	u32      OpenFile(std::string filename, FileAccess access) {return 0;} 
	void     CloseFile(u32 handle) {} 
	size_t   ReadFile(u32 handle, u8 *pointer, s64 size) {return 0;} 
	size_t   WriteFile(u32 handle, const u8 *pointer, s64 size) {return 0;} 
	size_t   SeekFile(u32 handle, s32 position, FileMove type) {return 0;} 
	FileInfo GetFileInfo(std::string filename) {FileInfo f; return f;} 
	bool     OwnsHandle(u32 handle) {return false;} 
};