|
Boost : |
Subject: [boost] Interest in a simple buffer abstraction?
From: Boris Kolpackov (boris_at_[hidden])
Date: 2011-01-27 05:53:01
Hi,
While working on the Boost profile for ODB C++ ORM[1], I was looking
for a Boost type to map the database BLOB type to. I hoped to find
something that would encapsulate the memory management and provide
basic operations like copy (memcpy), append, set all bytes in a buffer
to a specific value (memset), etc. Something that I could use like
this:
class packet
{
address to_;
boost::buffer payload_;
public:
packet (const address& to, const void* data, std::size_t size)
to_ (to), data_ (data, size)
{
}
const boost::buffer& payload () const
{
return payload_;
}
};
class socket
{
public:
void send (const packet& p)
{
...
s_.send (p.payload ().data (), p.payload ().size ())
}
};
I found a number of buffer types in asio (asio/buffer.hpp) but they
don't do memory management. I also found auto_buffer in implementation
details of signal2 (signal2/detail/auto_buffer.hxx) and buffer in
implementation details of iostream (iostream/detail/buffer.hxx). But
they appear to be purpose-built for the libraries in question.
So, unless I missed something obvious, I would like to propose a simple
buffer abstraction for inclusion into Boost. Here are some additional
motivations:
- Seeing that there is a number of library-specific implementations,
it is quite clear that such a class is often needed.
- If we have a "top-level" buffer class, various i/o libraries could
use it in their interfaces which would lead to better library
interoperability (i.e., one could receive data from a socket into
a buffer using asio and then pass that buffer to iostream or
interprocess without any conversions).
- A top-level buffer class will be fairly light-weight (perhaps even
header-only). Right now, if I am to use a buffer implementation from
say, asio, I need to install and potentially link to that library.
If the community believes this is a good idea, I will next send the
buffer interface for review/discussion.
Let me know what you think.
[1] http://www.codesynthesis.com/products/odb/
Boris
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk