Boost logo

Boost :

Subject: [boost] Interest in a simple buffer abstraction?
From: Boris Kolpackov (boris_at_[hidden])
Date: 2011-01-27 05:53:01


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

class packet
  address to_;
  boost::buffer payload_;

  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
  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

 - 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.



Boost list run by bdawes at, gregod at, cpdaniel at, john at