bitfields - Default values?

Era Scarecrow rtcvb32 at yahoo.com
Tue Jun 12 08:51:30 PDT 2012


On Tuesday, 12 June 2012 at 13:05:26 UTC, bearophile wrote:
> Era Scarecrow:
>
>> struct defs {
>>  mixin(bitfields_D!(
>>    bitfields!( //borrowed from std.bitmanip
>>      bool, "b", 1,
>>      uint, "i", 3,
>>      short, "s", 4),
>>    "i=2",
>>    "s=5"));
>> }
>
> Are you able to support a syntax like:
>
>> struct defs {
>>  mixin(bitfields!(
>>      bool, "b", 1,
>>      uint, "i=2", 3,
>>      short, "s=5", 4));
>> }

  That does look cleaner and better IMO. At this second I'm not 
sure. I was trying not to interfere with the original bitfield 
generator. I'm not as competent with templates as I'd like to be 
so having it go through and separate the data out seems a lot 
more difficult than simply replacing the end of the string as I 
currently have it.

  The bitfields as it is creates enums (min/max values), the get, 
the set, and then at the end has a 'private xxx valname;'. My 
little function is just a wrapper that builds on it by making the 
calculations as specified and then modifying the very end of the 
bitfields string with the answer, in my example that was '84'.

  I can try and make it as you have it, but I'm not sure how much 
harder that will be compared to what it is now; would probably 
end up as 'private xxx valname = (2<<1) | (5<<4);, which makes 
sense without adding too much complexity.. unless you go negative 
numbers, then you have to add a mask... Hmmm.... 'private xxx 
valname = ((2 & 7) << 1) | ((5 & 15) << 4);'


More information about the Digitalmars-d-learn mailing list