Boost logo

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