fix streamoffset empty checking

This commit is contained in:
q66 2015-06-27 03:19:00 +01:00
parent 3e2b21ae4c
commit ab72b4a602

View file

@ -41,7 +41,7 @@ struct Stream {
Offset p = tell(); Offset p = tell();
if ((p < 0) || !seek(0, StreamSeek::end)) return -1; if ((p < 0) || !seek(0, StreamSeek::end)) return -1;
Offset e = tell(); Offset e = tell();
return (p == e) || (seek(p, StreamSeek::set) ? e : -1); return ((p == e) || seek(p, StreamSeek::set)) ? e : -1;
} }
virtual bool seek(Offset, StreamSeek = StreamSeek::set) { virtual bool seek(Offset, StreamSeek = StreamSeek::set) {
@ -63,11 +63,13 @@ template<typename T>
struct StreamRange<T, true>: InputRange< struct StreamRange<T, true>: InputRange<
StreamRange<T>, octa::InputRangeTag, T, T, octa::Size, StreamOffset StreamRange<T>, octa::InputRangeTag, T, T, octa::Size, StreamOffset
> { > {
StreamRange(): p_stream() {} StreamRange(): p_stream(), p_size(0) {}
StreamRange(Stream &s): p_stream(&s) {} StreamRange(Stream &s): p_stream(&s), p_size(s.size()) {}
StreamRange(const StreamRange &r): p_stream(r.p_stream) {} StreamRange(const StreamRange &r): p_stream(r.p_stream), p_size(r.p_size) {}
bool empty() const { return p_stream->end(); } bool empty() const {
return p_stream->tell() == p_size;
}
bool pop_front() { bool pop_front() {
if (empty()) return false; if (empty()) return false;
@ -86,11 +88,12 @@ struct StreamRange<T, true>: InputRange<
} }
void put(T val) { void put(T val) {
p_stream->write(&val, sizeof(T)); p_size += p_stream->write(&val, sizeof(T));
} }
private: private:
Stream *p_stream; Stream *p_stream;
StreamOffset p_size;
}; };
template<typename T> template<typename T>