X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FWriteHelper.ct;h=758d8b55a64c6a028ceb9ba102480ee987add6ff;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=9dfa7479367a818fafb89ffb6454b1de154b0b4c;hpb=8421c3a8da7485cb8781045494ecaab3ed84f403;p=senf.git diff --git a/Scheduler/WriteHelper.ct b/Scheduler/WriteHelper.ct index 9dfa747..758d8b5 100644 --- a/Scheduler/WriteHelper.ct +++ b/Scheduler/WriteHelper.ct @@ -32,10 +32,10 @@ ///////////////////////////////ct.p//////////////////////////////////////// template -prefix_ senf::WriteHelper::WriteHelper(Handle handle, std::string data, +prefix_ senf::WriteHelper::WriteHelper(Handle handle, std::string const & data, Callback callback) : handle_(handle), data_(data), callback_(callback), - offset_(0), errno_(0) + offset_(data_.begin()), errno_(0) { senf::Scheduler::instance() .add(handle_, boost::bind(&WriteHelper::dispatchProcess, ptr(this), _1, _2), @@ -46,9 +46,9 @@ template prefix_ std::string const & senf::WriteHelper::data() const { - if (offset_ > 0) { - data_.erase(0,offset_); - offset_ = 0; + if (offset_ > data_.begin()) { + data_.erase(data_.begin(),offset_); + offset_ = data_.begin(); } return data_; } @@ -79,9 +79,10 @@ prefix_ void senf::WriteHelper::process(Handle handle, try { if (event != senf::Scheduler::EV_WRITE) throw senf::SystemException(EPIPE); - offset_ += handle.write(data_.data()+offset_,data_.size()-offset_); - if (offset_ >= data_.size()) { + offset_ = handle.write(std::make_pair(offset_,data_.end())); + if (offset_ == data_.end()) { data_.erase(); + offset_ = data_.begin(); complete_ = true; } } @@ -111,4 +112,6 @@ prefix_ void senf::WriteHelper::done() // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: