-#ifndef MSP_IO_FILE_H_
-#define MSP_IO_FILE_H_
-
-#include <string>
-#include "base.h"
-#include "buffered.h"
-#include "filtered.h"
-#include "seek.h"
-
-namespace Msp {
-namespace IO {
-
-/**
-A class for reading and writing files.
-
-Non-blocking mode is not supported on Win32.
-*/
-class File: public Base
-{
-public:
- enum CreateMode
- {
- C_NONE = 0,
- C_CREATE = 1,
- C_TRUNCATE = 2
- };
-
-private:
- Handle handle;
-
-public:
- /** Creates a new file object and opens it. If the create flag is set and
- write access is requested and the file does exist, it is created. Otherwise
- a missing file is an error. */
- File(const std::string &, Mode = M_READ, CreateMode = CreateMode(C_CREATE+C_TRUNCATE));
- virtual ~File();
-
- /** Closes the file. Any attempt to access the file after this will cause
- an exception to be thrown. */
- void close();
-
- void set_block(bool);
-
-protected:
- virtual unsigned do_write(const char *, unsigned);
- virtual unsigned do_read(char *, unsigned);
-
-public:
- virtual void sync();
-
- /** Changes the read/write offset of the file. Returns the new offset. */
- virtual int seek(int, SeekType);
-
- /** Returns the current read/write offset of the file. */
- virtual int tell() const;
-
- virtual Handle get_event_handle() { return handle; }
-
-private:
- void check_access(Mode) const;
-};
-
-inline File::CreateMode operator|(File::CreateMode m, File::CreateMode n)
-{ return File::CreateMode(static_cast<int>(m)|static_cast<int>(n)); }
-
-inline File::CreateMode operator&(File::CreateMode m, File::CreateMode n)
-{ return File::CreateMode(static_cast<int>(m)&static_cast<int>(n)); }
-
-inline File::CreateMode operator~(File::CreateMode m)
-{ return File::CreateMode(~static_cast<int>(m)); }
-
-typedef Filtered<File, Buffered> BufferedFile;
-
-} // namespace IO
-} // namespace Msp
-
-#endif