December 07, 2010 C Bitfields in D | ||||
---|---|---|---|---|
| ||||
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 Re: C Bitfields in D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | 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. |
Copyright © 1999-2021 by the D Language Foundation