
Hi Mathias, Mathias Gaunard <mathias.gaunard@ens-lyon.org> writes:
How is that any different from std::vector<char>?
Ah, that's right, I forgot to cover this case. The main problem with using vector<char> as a binary buffer is the unnatural interface. Provided: typedef std::vector<char> vbuffer; Compare: buffer vbuffer -------------------------------------------------------------------- | buffer b (data, size); | vbuffer b (data, data + size); | const char* p = b.data (); | const char* p = &b[0]; | b.copy (data, size); | b.assign (data, data + size); | b.append (data, size); | b.insert (b.end (), data, data + size); Also, you cannot pass the data to vector as void* which will be possible with the buffer class, for example: void* data; ... buffer b (data, size); // Ok. vbuffer vb (data, data + size); // Error. Plus, some natural to have functions are not available in vector, for example: buffer b (size, capacity); buffer b (data, size, capacity); Also, for a binary buffer it is nice to be able to assume ownership of an existing raw buffer and to detach the underlying raw buffer. Finally, the implementation of std::vector<char> may not be as efficient (e.g., using loops to copy elements instead of memcpy, etc). So, to summarize, yes, it is possible to use vector as a binary buffer (and a lot of people do so), but a separate buffer class will be able to provide a more natural interface and also some additional functionality. Boris -- Boris Kolpackov, Code Synthesis http://codesynthesis.com/~boris/blog Compiler-based ORM system for C++ http://codesynthesis.com/products/odb Open-source XML data binding for C++ http://codesynthesis.com/products/xsd XML data binding for embedded systems http://codesynthesis.com/products/xsde