X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fbuffered.cpp;h=638e4ec3696a77a71e7f516ccdd0ccf6033abdc3;hb=122846f0881673770d88eff7d925ecf25c01b62e;hp=6567fff9b3739e4fabf8abb1f2a706a98e0d5d85;hpb=481b844ed7d180ffbf70223075f2fc1ffdb5b444;p=libs%2Fcore.git diff --git a/source/io/buffered.cpp b/source/io/buffered.cpp index 6567fff..638e4ec 100644 --- a/source/io/buffered.cpp +++ b/source/io/buffered.cpp @@ -13,8 +13,7 @@ Buffered::Buffered(Base &b, unsigned s): buf_size(s), buf(new char[buf_size]), begin(buf), - end(buf), - cur_op(M_NONE) + end(buf) { mode = below.get_mode(); below.signal_flush_required.connect(sigc::mem_fun(this, &Buffered::flush)); @@ -37,6 +36,11 @@ void Buffered::set_block(bool) throw logic_error("Buffered::set_block"); } +void Buffered::set_inherit(bool) +{ + throw logic_error("Buffered::set_block"); +} + void Buffered::flush() { if(cur_op==M_WRITE) @@ -56,7 +60,7 @@ void Buffered::flush() begin = end = buf; } -unsigned Buffered::do_write(const char *data, unsigned size) +size_t Buffered::do_write(const char *data, size_t size) { set_op(M_WRITE); @@ -87,7 +91,7 @@ unsigned Buffered::do_write(const char *data, unsigned size) } } -unsigned Buffered::do_read(char *data, unsigned size) +size_t Buffered::do_read(char *data, size_t size) { set_op(M_READ); @@ -105,7 +109,7 @@ unsigned Buffered::do_read(char *data, unsigned size) { // Give out whatever is in the buffer already memcpy(data, begin, end-begin); - unsigned ret = end-begin; + size_t ret = end-begin; begin = end = buf; data += ret; @@ -114,10 +118,10 @@ unsigned Buffered::do_read(char *data, unsigned size) if(size(end-begin), size); + len = min(end-begin, size); memcpy(data, begin, len); begin += len; ret += len; @@ -132,7 +136,7 @@ unsigned Buffered::do_read(char *data, unsigned size) } } -unsigned Buffered::put(char c) +size_t Buffered::put(char c) { set_op(M_WRITE); @@ -145,7 +149,7 @@ unsigned Buffered::put(char c) return do_write(&c, 1); } -bool Buffered::getline(std::string &line) +bool Buffered::getline(string &line) { set_op(M_READ); @@ -185,7 +189,7 @@ void Buffered::set_op(Mode op) cur_op = op; } -unsigned Buffered::get_current_size() const +size_t Buffered::get_current_size() const { return end-begin; }