December 07, 2010
Okay. I'm trying to get some C code to be properly callable from some D code, which naturally involves some extern(C) blocks. One of the types that I have to deal with looks something like this:

    typedef struct
    {
        unsigned i:1;
    } my_struct;

I have no idea how to do such a bitfield in D. Does a std.bitmanip.bitfield work? I wouldn't have thought so, but I don't know. What would be the proper way to create a properly compatible struct in D?

- Jonathan M Davis
December 08, 2010
Jonathan M Davis Wrote:

> Okay. I'm trying to get some C code to be properly callable from some D code, which naturally involves some extern(C) blocks. One of the types that I have to deal with looks something like this:
> 
>     typedef struct
>     {
>         unsigned i:1;
>     } my_struct;
> 
> I have no idea how to do such a bitfield in D. Does a std.bitmanip.bitfield work? I wouldn't have thought so, but I don't know. What would be the proper way to create a properly compatible struct in D?
> 
> - Jonathan M Davis

I had some help from htod translating Fuse headers: https://github.com/he-the-great/Fused/blob/master/src/fuse_common.d#L47

     struct my_struct
     {
         uint __bitfield1;
         @property uint i() { return (__bitfield1 >> 0) & 0x1; }
         @property uint i(uint value) { __bitfield1 = (__bitfield1 & 0xfffffffffffffffe) | (value << 0); return value;  }

     }

I think I got the copy/past/modify right.