00001
00009 #ifndef ATOMS_STREAM_H
00010 #define ATOMS_STREAM_H
00011
00012 #include <atoms/gen.hh>
00013
00014 namespace atoms {
00015
00022 class Stream : public virtual IOHandle {
00023 public:
00024 virtual ~Stream() {}
00025
00029 virtual void close() = 0;
00030
00037 virtual bool isOpen() const = 0;
00038
00045 virtual bool isClosed() const = 0;
00046
00051 virtual bool isReadable() const = 0;
00052
00057 virtual bool isWritable() const = 0;
00058
00063 virtual bool isSeekable() const = 0;
00064
00082 virtual size_t read(void *buf, size_t count) = 0;
00083
00098 virtual size_t write(const void *buf, size_t size) = 0;
00099 };
00100
00105 class Seekable : public virtual IOHandle {
00106 public:
00108 enum Origin {
00109 oSet,
00110 oCur,
00111 oEnd
00112 };
00113
00124 virtual off_t seek(off_t offset, Origin origin = oSet) = 0;
00125
00132 virtual bool isAppending() const = 0;
00133
00135 off_t tell() { return seek(0, oCur); }
00136 };
00137
00138 }
00139 #endif