#define MSP_IO_BASE_H_
#include <sigc++/sigc++.h>
+#include "handle.h"
#include "mode.h"
#include "poll.h"
seeked) and any data buffered by upper layers needs to be flushed. */
sigc::signal<void> signal_flush_required;
- /** Emitted when the I/O object has closed. */
- sigc::signal<void> signal_closed;
-
/** Emitted when the object is deleted. Mainly for use by
EventDispatcher. */
sigc::signal<void> signal_deleted;
Mode get_mode() const { return mode; }
protected:
+ void check_access(Mode) const;
+
virtual unsigned do_write(const char *, unsigned) = 0;
virtual unsigned do_read(char *, unsigned) = 0;
to end-of-file or non-blocking operation. */
virtual int get();
- /** Returns the end-of-file flag. */
+protected:
+ void set_eof();
+
+public:
+ /** Returns the end-of-file flag. Note that some types of objects won't
+ indicate end-of-file until you try to read at least one byte past the actual
+ end, while others indicate it when you've read the last byte. */
bool eof() const { return eof_flag; }
+
+ /** Returns the system-level handle for the object. Used by Console to
+ perform redirections. */
+ virtual const Handle &get_handle(Mode);
};
} // namespace IO