On 01/17/2017 04:37 PM, Nestor wrote:
Hi,
I was just looking at an interesting function from
http://codepad.org/lSDTFd7E :
void printFields(T)(T args) {
auto values = args.tupleof;
size_t max;
size_t temp;
foreach (index, value; values) {
temp = T.tupleof[index].stringof.length;
if (max < temp) max = temp;
}
max += 1;
foreach (index, value; values) {
writefln("%-" ~ to!string(max) ~ "s %s", T.tupleof[index].stringof,
value);
}
}
Can something similar be done for bitfields? I tried running this and I
only get something like this:
_f01_f02_f03 25312
_f04_f05_f06_f07 21129
_f08_f09_f10 53575
_f11_f12_f13_f14 9264
Not available but it should be possible to parse the produced code:
import std.bitmanip;
string makeBitFieldPrinter(string fieldImpl) {
return q{
void printBitFields() const {
import std.stdio: writeln;
writeln("Please improve this function by parsing fieldImpl.
:)");
}
};
}
struct S {
enum myFields = bitfields!(int, "a", 24,
byte, "b", 8);
pragma(msg, "This is the mixed-in bit field code\n---------\n",
myFields, "\n----------");
mixin (myFields);
mixin (makeBitFieldPrinter(myFields));
}
void main() {
const s = S();
s.printBitFields();
}
Of course that would depend on the implementation of bitfields(), which
can change without notice.
Ali