X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fbuffered.cpp;h=77a5f45cef353e2771842f0b197f7cc48d443f35;hp=b2d48e660a56f337334db1f2f2decc8dbee96a86;hb=20c897ece781e18ba54c41fd68e232ce566a938d;hpb=31e72f50fbb34d86877e5110401c49ce3fefd4bb diff --git a/source/io/buffered.cpp b/source/io/buffered.cpp index b2d48e6..77a5f45 100644 --- a/source/io/buffered.cpp +++ b/source/io/buffered.cpp @@ -32,6 +32,16 @@ Buffered::~Buffered() delete[] buf; } +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) @@ -48,10 +58,10 @@ void Buffered::flush() } } else if(cur_op==M_READ) - begin=end = buf; + 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); @@ -82,7 +92,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); @@ -100,8 +110,8 @@ 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; - begin=end = buf; + size_t ret = end-begin; + begin = end = buf; data += ret; size -= ret; @@ -109,10 +119,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; @@ -127,7 +137,7 @@ unsigned Buffered::do_read(char *data, unsigned size) } } -unsigned Buffered::put(char c) +size_t Buffered::put(char c) { set_op(M_WRITE); @@ -140,7 +150,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); @@ -168,6 +178,11 @@ int Buffered::get() return static_cast(c); } +const Handle &Buffered::get_handle(Mode) +{ + throw logic_error("Buffered::get_handle"); +} + void Buffered::set_op(Mode op) { if(op!=cur_op) @@ -175,15 +190,10 @@ 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; } -const Handle &Buffered::get_event_handle() -{ - throw logic_error("Buffered doesn't support events"); -} - } // namespace IO } // namespace Msp