Boost logo

Boost :

Subject: Re: [boost] Any interest in bitstream class?
From: Paul Long (plong_at_[hidden])
Date: 2013-06-29 23:09:03


On 6/29/2013 12:40 PM, Mathias Gaunard wrote:
> What should I do if I want to define the operators on my own
> user-defined type?

Write them. It should be easy. For example, this is all it takes for
ibitstream to support std::bitset:

template <size_t N>
ibitstream &operator>>(ibitstream &ibs, std::bitset<N> &bs)
{
     decltype(bs.to_ulong()) value;
     ibs.read(value, N);
     bs = static_cast<long>(value);
     return ibs;
}

> See Rob's response. I assumed ibitstream derived from istream. Is that
> not the case?

That is not the case. See my reply to Mathias' similar query at
http://article.gmane.org/gmane.comp.lib.boost.devel/242607

> Does the ibitstream even use similar virtual functions and buffering
> mechanisms as istream?

Well, it follows std::istringstream and therefore std::istream. As far
as possible, ibitstream and bitbuf have the same member functions and
semantics as std::istringstream and std::stringbuf.

> I suspect writing the value directly to the stream (possibly after
> byte swapping) would be faster than shifts and bitwise ands and
> writing it byte per byte.

I agree. However, my main concern was stability through simplicity.
There is plenty of room for optimization, which I plan to do.

Paul


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk