Subject: Re: [boost] Interest in simple unformatted binary stream I/O?
From: Jamie Allsop (ja11sop_at_[hidden])
Date: 2011-04-25 08:40:49


On 24/04/11 13:12, Beman Dawes wrote:

> This proposal provides a very simple solution that works with standard
> library input and output streams. The one caveat is that the stream
> must be opened with filemode std::ios_base::binary to avoid certain
> data values being treated as line endings.
>
> int main()
> {
> fstream f("binary_stream_example.dat",
> std::ios_base::trunc | std::ios_base::in | std::ios_base::out |
> std::ios_base::binary);
>
> int32_t x = 0x01020304;
> int32_t y = 0;
>
> f<< bin(x); // write 4 bytes
> f.seekg(0);
> f>> bin(y); // read 4 bytes
>
> BOOST_ASSERT(x == y);
>
> return 0;
> }

I don't like bin() as others note. I think you have a couple of options.

  - use binary() - to match use of std::ios_base::binary
  - use raw() - which seems to imply exactly what you want
  - use bytes() - just like your comments
  - use as_binary() or as_raw() or as_bytes()

> For docs, header, and example code, see
> http://mysite.verizon.net/beman/binary_stream/binary_stream.html
> http://mysite.verizon.net/beman/binary_stream/binary_stream.hpp
> http://mysite.verizon.net/beman/binary_stream/binary_stream_example.cpp
>
> Is there interest in this for Boost?

Yes

> It seems way too small and simple to be a whole library itself. Are
> there any ideas where it should live and what namespace it should be
> in?

iostreams, utility, binary_stream? I'm thinking that some of what this
offers is complimentary to the endian library in that endian allows
streaming of raw values while preserving endianness.

Jamie