diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2009-10-29 12:14:31 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2009-10-29 12:14:31 +0000 |
| commit | e56feb597bc743677633432f77513b02907fd169 (patch) | |
| tree | 5b6bbb983fcf33cfe5eef8aec1298608257036b5 /src/base/tl/stream.hpp | |
| parent | 878ede3080ab2cfb627aca505c397d9765052996 (diff) | |
| download | zcatch-e56feb597bc743677633432f77513b02907fd169.tar.gz zcatch-e56feb597bc743677633432f77513b02907fd169.zip | |
added missing headers
Diffstat (limited to 'src/base/tl/stream.hpp')
| -rw-r--r-- | src/base/tl/stream.hpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/base/tl/stream.hpp b/src/base/tl/stream.hpp new file mode 100644 index 00000000..c307b968 --- /dev/null +++ b/src/base/tl/stream.hpp @@ -0,0 +1,65 @@ +#ifndef TL_FILE_STREAM_HPP +#define TL_FILE_STREAM_HPP + +class input_stream +{ +public: + virtual ~input_stream() {} + virtual size_t read(void *data, size_t size) = 0; + virtual size_t size() = 0; +}; + +class output_stream +{ +public: + virtual ~output_stream() {} + virtual size_t write(const void *data, size_t size) = 0; +}; + + +// input wrapping +// RAII style +class file_backend +{ +private: + file_backend(const file_backend &other) { /* no copy allowed */ } +protected: + IOHANDLE file_handle; + + explicit file_backend(const char *filename, int flags) + { + file_handle = io_open(filename, flags); + } + + ~file_backend() + { + if(file_handle) + io_close(file_handle); + } +public: + bool is_open() const { return file_handle != 0; } +}; + +class file_reader : public input_stream, public file_backend +{ +public: + explicit file_reader(const char *filename) + : file_backend(filename, IOFLAG_READ) + {} + + virtual size_t read(void *data, size_t size) { return io_read(file_handle, data, size); } + virtual size_t size() { return io_length(file_handle); } +}; + + +class file_writer : public output_stream, public file_backend +{ +public: + explicit file_writer(const char *filename) + : file_backend(filename, IOFLAG_WRITE) + {} + + virtual size_t write(const void *data, size_t size) { return io_write(file_handle, data, size); } +}; + +#endif |