Re: HDF5 bitfields...

Hi Ed,

> >     Bitfields are a black sheep in the datatype family and aren't terribly
> > well documented (which we're trying to work on).  Say something if you think
> > we've got a terrible gap about them somewhere.
> 
> Well I know terrible gap about them in my brain...
    :-)

> > > Is there an example somewhere about using bitfields in HDF5?
> >     Hmm, you can look in the test/dtypes.c for some examples of using them.
> > Search for "H5T_STD_B"...
> > 
> 
> OK, here's what I'm seeing about creating a bitfield...
> 
>     hid_t             st=-1, dt=-1;
>     st = H5Tcopy(H5T_STD_B16LE);
>     H5Tset_precision(st, 12);
>     H5Tset_offset(st, 2);
> 
> Does this pretty much sum it up? I H5TCopy an integer type big enough
> to hold it, and then set precision and offset?
    Yes, that's pretty much all.

> > > Or can you just tell me what functions would be used to create a
> > > bitfield?
> >     The H5Tset_precision() routine determines the number of bits in a 
> > datatype
> > that are significant within it.
> > 
> > > Limits on number of bits?
> >     Up to the size of the datatype that contains it (which is defined for up
> > to 64-bit datatypes currently).
> > 
> > > How are these stored then? Any sort of padding or what?
> >     We currently don't pack them, so a 13-bit field in a 32-bit datatype 
> > still
> > takes up 4 bytes of space.  Frankly, I think this is a bit of a bug, but
> > it's a fairly complicated problem to pack the bits on disk (in light of 
> > using
> > bitfields in compound, array and variable-length datatypes mostly) and noone
> > has whined strongly about it, so its been the status quo for a while now. 
> > :-/
> 
> Ah ha! That sounds important.
> 
> I think storage (and transmission) efficiency is what this whole
> feature is about for Russ...
> 
> Russ, is that correct? The goal here is to store and move large
> amounts of bitfield data efficiently?
> 
> Otherwise, what is the point of a bitfield in C/C++ or fortran 77? I
> don't know about F90 - does it have a good way to deal with bitfields?
> 
> Perhaps we should ask whether compression is a better thing to use
> to achieve storage efficiency?
    It would be fairly straightforward to implement a pipeline filter that
"compressed" data by packing out the unused bits for bitfield datatypes.  (At
least for non-compound/array/variable-length combinations :-).

    Quincey