bitfield - 4935/4937 Allow repeated (identical) bitfield declarations

Era Scarecrow rtcvb32 at yahoo.com
Thu Aug 2 06:32:55 PDT 2012


repost from issue list:

Austin Hastings 2010-09-24 18:06:53 PDT
> Also, I think I'm going to request that repeated bitfield 
> definitions be allowed if they are identical - I'd like to 
> redeclare "opcode" rather than "".

How would you tell them apart? If I know how you may want to call 
them, I may
be able to make something. I can understand with registers, but 
still need some
way to work with them. Perhaps as a set then?

> So I would like the bitmanip code to permit redeclaration of 
> bitfields that are identical in all respects.

> That is, obviously the names are the same, but the field width, 
> offset, and type representation has to be the same as well.

Maybe....?

struct S {
     mixin(bitfields!(
         uint, "opcode", 4,
         uint, "register", 4,
         uint, "register", 4,
         uint, "register", 4
     ));
}

and using the registers would have function signature like...

struct Register {
   uint register_1;
   uint register_2;
   uint register_3;

}

//setters, likely can't be @propery
void register(uint reg1, uint reg2, uint reg3);
void register(uint[] register ...); //maybe?
void register(Register register);

//getter ??
Register register() const;

Or perhaps...

struct S {
     mixin(bitfields!(
         uint, "opcode", 4,
         uint, "reg1", 4,
         uint, "reg2", 4,
         uint, "reg3", 4
     ));
     mixin(sharedNameSet(
         "nameForGetterAndSetter",
         "struct name for returning/passing",
         "reg1", "reg2", "reg3" //named variables as a set
     ));

     //nameForGetterAndSetter's would be added here, perhaps as 
above.
}


More information about the Digitalmars-d-learn mailing list