$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Christopher Kohlhoff (chris_at_[hidden])
Date: 2006-02-26 07:50:32
Hi,
--- stas garifulin <s.garifulin_at_[hidden]> wrote:
<snip>
> In other words i'm talking about some infrastructure like
> boost::iostreams but built on top of asio dispatcher. Async
> analogue of boost::iostreams which allows me to create async
> chains of filters in run-time. For example, it can be done
> with non-templated versions of functions async_read,
> async_write, handler parameter of this functions will have
> type like boost::function<void (asio::error, size_T)>. SSL
> class could be implemented as such async filter and would
> allow attaching at run-time.
Dynamic chaining of filters is something I consider beyond the
scope of asio. Of course, it could be implemented as a library
on top of asio.
However, I am planning to add virtual wrapper stream templates
that could be used to allow runtime polymorphism with streams.
It might look something like:
template <
typename Const_Buffers,
typename Mutable_Buffers,
typename Handler>
class polymorphic_stream_base
{
public:
virtual size_t read_some(const Mutable_Buffers& bufs) = 0;
virtual void async_read_some(const Mutable_Buffers& bufs,
Handler handler) = 0;
virtual size_t write_some(const Const_Buffers& bufs) = 0;
virtual void async_write_some(const Const_Buffers& bufs,
Handler handler) = 0;
};
template <
typename Stream,
typename Const_Buffers,
typename Mutable_Buffers,
typename Handler>
class polymorphic_stream
: public polymorphic_stream_base<...>
{
...
};
This might be used to accomplish the same sort of thing as you
describe.
Cheers,
Chris