[iochain] mutable_buffer issues

Assume the following code, which I wrote in an attempt to test very basic functionality of Boost.Iostream: namespace io = boost::io; void foo() { std::vector<boost::uint8_t> data; io::source<io::iobyte> src( io::chain( io::read_mem( data ) ) ); io::iobyte rcvbuffer; const io::mutable_buffer<io::iobyte> mutbuffer( &rcvbuffer, sizeof( rcvbuffer ) ); src.read( mutbuffer ); } The first issue I have is with mutable_buffer. Notice how it requires a template argument that *must* be the exact type passed into the io::source template parameter, in this case io::iobyte. Passing any other type in here results in lots of compiler errors on MSVC 9. Basically my biggest issue with this is that I can't pass an "int" into the mutable_buffer here if I want to read 4 bytes, because the type passed in must match io::iobyte. In my opinion, mutable_buffer should accept *any* type and just read in the number of bytes requested. Without this I fail to see the usefulness of mutable_buffer. The second issue has to do with the type of the first parameter in io::source::read(). Notice it takes a "const mutable_buffer&". Why is it taking a const mutable_buffer if the buffer is mutable? This seems conceptually wrong. I would expect it to take a "mutable_buffer&".

On Thu, Jul 17, 2008 at 1:20 PM, Robert Dailey <rcdailey@gmail.com> wrote:
Assume the following code, which I wrote in an attempt to test very basic functionality of Boost.Iostream:
namespace io = boost::io;
void foo() { std::vector<boost::uint8_t> data; io::source<io::iobyte> src( io::chain( io::read_mem( data ) ) );
io::iobyte rcvbuffer; const io::mutable_buffer<io::iobyte> mutbuffer( &rcvbuffer, sizeof( rcvbuffer ) ); src.read( mutbuffer ); }
The first issue I have is with mutable_buffer. Notice how it requires a template argument that *must* be the exact type passed into the io::source template parameter, in this case io::iobyte. Passing any other type in here results in lots of compiler errors on MSVC 9. Basically my biggest issue with this is that I can't pass an "int" into the mutable_buffer here if I want to read 4 bytes, because the type passed in must match io::iobyte. In my opinion, mutable_buffer should accept *any* type and just read in the number of bytes requested. Without this I fail to see the usefulness of mutable_buffer.
The second issue has to do with the type of the first parameter in io::source::read(). Notice it takes a "const mutable_buffer&". Why is it taking a const mutable_buffer if the buffer is mutable? This seems conceptually wrong. I would expect it to take a "mutable_buffer&".
Correction: Above I said Boost.Iostream, I meant to say Boost.Iochain. Apologies for the confusion.
participants (1)
-
Robert Dailey