From 29bf4c3b760e12be80e1606283dfb872bb6859b4 Mon Sep 17 00:00:00 2001 From: q66 Date: Fri, 26 Jun 2015 20:41:11 +0100 Subject: [PATCH] streams always read/write by bytes --- octa/stream.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/octa/stream.h b/octa/stream.h index 43daa08..af7b8b2 100644 --- a/octa/stream.h +++ b/octa/stream.h @@ -25,8 +25,8 @@ enum class StreamSeek { set = SEEK_SET }; -template struct Stream: InputRange< - Stream, octa::InputRangeTag, T, T, octa::Size, StreamOffset +struct Stream: InputRange< + Stream, octa::InputRangeTag, char, char, octa::Size, StreamOffset > { using Offset = StreamOffset; @@ -51,8 +51,8 @@ template struct Stream: InputRange< virtual bool flush() { return true; } - virtual octa::Size read(T *, octa::Size) { return 0; } - virtual octa::Size write(const T *, octa::Size) { return 0; } + virtual octa::Size read(char *, octa::Size) { return 0; } + virtual octa::Size write(const char *, octa::Size) { return 0; } /* range interface */ @@ -60,13 +60,13 @@ template struct Stream: InputRange< bool pop_front() { if (empty()) return false; - T val; - return read(&val, 1) == sizeof(T); + char val; + return !!read(&val, 1); } - T front() const { + char front() const { Stream *f = (Stream *)this; - T val; + char val; f->seek(-f->read(&val, 1), StreamSeek::cur); return val; } @@ -75,7 +75,7 @@ template struct Stream: InputRange< return s.tell() == tell(); } - void put(const T &val) { + void put(const char &val) { write(&val, 1); } }; @@ -91,7 +91,7 @@ namespace detail { }; } -template struct FileStream: Stream { +struct FileStream: Stream { FileStream(): p_f(), p_owned(false) {} FileStream(const FileStream &s): p_f(s.p_f), p_owned(false) {} @@ -127,12 +127,12 @@ template struct FileStream: Stream { bool flush() { return !fflush(p_f); } - octa::Size read(T *buf, octa::Size count) { - return fread((void *)buf, 1, count * sizeof(T), p_f); + octa::Size read(char *buf, octa::Size count) { + return fread(buf, 1, count, p_f); } - octa::Size write(const T *buf, octa::Size count) { - return fwrite((const void *)buf, 1, count * sizeof(T), p_f); + octa::Size write(const char *buf, octa::Size count) { + return fwrite(buf, 1, count, p_f); } private: