C Bitfields in D

Jesse Phillips jessekphillips+D at gmail.com
Tue Dec 7 16:20:08 PST 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.


More information about the Digitalmars-d-learn mailing list