5 // Definition of non-inline template functions
7 //#include "WriteHelper.ih"
11 #include "Utils/Exception.hh"
12 #include "Scheduler.hh"
15 ///////////////////////////////ct.p////////////////////////////////////////
17 template <class Handle>
18 prefix_ senf::WriteHelper<Handle>::WriteHelper(Handle handle, std::string data,
20 : handle_(handle), data_(data), callback_(callback),
23 senf::Scheduler::instance()
24 .add(handle_, boost::bind(&WriteHelper::dispatchProcess, ptr(this), _1, _2),
25 senf::Scheduler::EV_WRITE);
28 template <class Handle>
29 prefix_ std::string const & senf::WriteHelper<Handle>::data()
33 data_.erase(0,offset_);
39 template <class Handle>
40 prefix_ void senf::WriteHelper<Handle>::revoke()
42 ptr guard (this); // To ensure, 'this' is deleted only after this method terminates ...
43 senf::Scheduler::instance()
44 .remove(handle_, senf::Scheduler::EV_WRITE);
47 template <class Handle>
49 senf::WriteHelper<Handle>::dispatchProcess(ptr helper, Handle handle,
50 senf::Scheduler::EventId event)
52 // since we have a 'ptr' argument, the instance cannot be deleted
53 // before this method returns
54 return helper->process(handle,event);
57 template <class Handle>
58 prefix_ void senf::WriteHelper<Handle>::process(Handle handle,
59 senf::Scheduler::EventId event)
62 if (event != senf::Scheduler::EV_WRITE)
63 throw senf::SystemException(EPIPE);
64 offset_ += handle.write(data_.data()+offset_,data_.size()-offset_);
65 if (offset_ >= data_.size()) {
70 catch (senf::SystemException const & ex) {
76 template <class Handle>
77 prefix_ void senf::WriteHelper<Handle>::done()
83 ///////////////////////////////ct.e////////////////////////////////////////