#ifndef MSP_IO_SEEKABLE_H_
#define MSP_IO_SEEKABLE_H_
+#include <stdexcept>
+#include <msp/core/inttypes.h>
#include "base.h"
namespace Msp {
namespace IO {
+class Handle;
+
+typedef Int64 SeekOffset;
+
enum SeekType
{
S_BEG,
S_END
};
-int sys_seek_type(SeekType);
+
+class bad_seek: public std::runtime_error
+{
+public:
+ bad_seek(SeekOffset, SeekType);
+ virtual ~bad_seek() throw() { }
+};
class Seekable: public Base
public:
/** Changes the read/write offset. Returns the new offset. */
- virtual unsigned seek(int, SeekType) = 0;
+ virtual SeekOffset seek(SeekOffset, SeekType) = 0;
/** Returns the current read/write offset. */
- virtual unsigned tell() const = 0;
+ virtual SeekOffset tell() const = 0;
};
+
+SeekOffset sys_seek(Handle &, SeekOffset, SeekType);
+
} // namespace IO
} // namespace Msp