#if !defined(FILESTRM_HPP) # define FILESTRM_HPP # if !defined(MEMSTRM_HPP) # include # endif class FileStream : public MemoryStream { public: FileStream(const char* file_name = NULL, Logical writable = False); ~FileStream() { Close(); } public: void* GetPointer() const { Fail("No implementation possible for FileStream::GetPointer()"); return NULL; } void SetPointer(void *new_pointer) { Fail("No implementation possible for FileStream::SetPointer(void*)"); } void SetPointer(size_t index); MemoryStream& AdvancePointer(size_t count); MemoryStream& RewindPointer(size_t count); MemoryStream& ReadBytes(void *ptr, size_t number_of_bytes); MemoryStream& WriteBytes(const void *ptr, size_t number_of_bytes); void Open(const char* file_name = NULL, Logical writable = False); void Close(); Logical IsFileOpened() { return fileHandle != -1; } Logical TestInstance() const; public: int fileHandle; Logical readOnly; static int OpenImplementation(const char* file_name, Logical read_only); static void FlushImplementation(int file_handle); static void CloseImplementation(int file_handle); static size_t SeekImplementation(int file_handle, size_t where, Logical from_end = False); static size_t ReadImplementation(int file_handle, void *buffer, size_t length); static size_t WriteImplementation(int file_handle, const void* buffer, size_t length); }; #endif