7 #define HH_ReadHelper_ 1
11 #include <boost/function.hpp>
12 #include <boost/intrusive_ptr.hpp>
13 #include <boost/scoped_ptr.hpp>
15 #include "Utils/intrusive_refcount.hh"
16 #include "Scheduler.hh"
18 //#include "ReadHelper.mpp"
19 ///////////////////////////////hh.p////////////////////////////////////////
26 \todo Move all not Handle dependent members to a ReadHandleBase class
28 template <class Handle>
30 : public senf::intrusive_refcount
33 ///////////////////////////////////////////////////////////////////////////
36 typedef boost::intrusive_ptr<ReadHelper> ptr;
37 typedef boost::function<void (ptr)> Callback;
39 ///////////////////////////////////////////////////////////////////////////
40 ///\name Structors and default members
43 static ptr dispatch(Handle handle, std::string::size_type maxSize,
46 template <class Predicate>
47 static ptr dispatch(Handle handle, std::string::size_type maxSize, Predicate predicate,
51 ///////////////////////////////////////////////////////////////////////////
53 Handle handle() const;
54 unsigned maxSize() const;
56 std::string const & data() const;
57 std::string const & tail() const;
59 bool complete() const;
61 void throw_error() const;
68 struct InternalPredicate;
70 ReadHelper(Handle handle, unsigned maxSize, InternalPredicate * predicate, Callback cb);
72 static void dispatchProcess(ptr helper, Handle handle, senf::Scheduler::EventId event);
73 void process(Handle handle, senf::Scheduler::EventId event);
77 std::string::size_type maxSize_;
78 boost::scoped_ptr<InternalPredicate> predicate_;
89 ReadUntil(std::string target);
90 std::string::size_type operator()(std::string data);
96 ///////////////////////////////hh.e////////////////////////////////////////
97 #include "ReadHelper.cci"
98 #include "ReadHelper.ct"
99 #include "ReadHelper.cti"
100 //#include "ReadHelper.mpp"