Re: Need help with movement from C to D

2014-05-08 Thread Mengu via Digitalmars-d-learn
On Tuesday, 6 May 2014 at 15:13:41 UTC, Artur Skawina via Digitalmars-d-learn wrote: On 05/06/14 16:45, via Digitalmars-d-learn wrote: On Tuesday, 6 May 2014 at 14:25:01 UTC, Artur Skawina via Digitalmars-d-learn wrote: I'm not sure why you'd want to wrap the .offsetof expression in a template

Re: Need help with movement from C to D

2014-05-08 Thread bearophile via Digitalmars-d-learn
Artur Skawina: But I have no idea why anybody would want to wrap this trivial expression like that. And, I have no idea if the, hmm, /unconventional/ D offsetof semantics are in the bugzilla. It's not really a "bug", but a design mistake... https://issues.dlang.org/show_bug.cgi?id=12714 By

Re: Need help with movement from C to D

2014-05-06 Thread bearophile via Digitalmars-d-learn
Artur Skawina: And, I have no idea if the, hmm, /unconventional/ D offsetof semantics are in the bugzilla. It's not really a "bug", but a design mistake... Design mistakes are valid bugzilla entries. At worst the bad behavior could be documented. But often it's possible to fix the design to

Re: Need help with movement from C to D

2014-05-06 Thread Artur Skawina via Digitalmars-d-learn
On 05/06/14 16:45, via Digitalmars-d-learn wrote: > On Tuesday, 6 May 2014 at 14:25:01 UTC, Artur Skawina via Digitalmars-d-learn > wrote: >> I'm not sure why you'd want to wrap the .offsetof expression in >> a template, but it can easily be done like this: >> >>enum offsetOf(alias A, string S

Re: Need help with movement from C to D

2014-05-06 Thread via Digitalmars-d-learn
On Tuesday, 6 May 2014 at 14:25:01 UTC, Artur Skawina via Digitalmars-d-learn wrote: I'm not sure why you'd want to wrap the .offsetof expression in a template, but it can easily be done like this: enum offsetOf(alias A, string S) = mixin("A."~S~".offsetof"); Great, that's even shorter. So

Re: Need help with movement from C to D

2014-05-06 Thread bearophile via Digitalmars-d-learn
Artur Skawina: Keep in mind that D's offsetof is flawed - if the object does not contain the requested member, but implicitly converts to another one that does have such field then the expression compiles, but yields a bogus value. Eg struct S { int a, b, c; S2 s2; alias s2 this; } stru

Re: Need help with movement from C to D

2014-05-06 Thread Artur Skawina via Digitalmars-d-learn
I'm not sure why you'd want to wrap the .offsetof expression in a template, but it can easily be done like this: enum offsetOf(alias A, string S) = mixin("A."~S~".offsetof"); Keep in mind that D's offsetof is flawed - if the object does not contain the requested member, but implicitly convert

Re: Need help with movement from C to D

2014-05-06 Thread via Digitalmars-d-learn
On Tuesday, 6 May 2014 at 11:09:37 UTC, Andrey wrote: On Monday, 5 May 2014 at 17:55:37 UTC, Meta wrote: enum offsetof(T, string field) = mixin(type.stringof ~ "." ~ field ~ ".offsetof"); To ensure that a syntactically valid symbol is passed as the type. Interestingly, but this code does

Re: Need help with movement from C to D

2014-05-06 Thread Andrey via Digitalmars-d-learn
On Monday, 5 May 2014 at 17:55:37 UTC, Meta wrote: enum offsetof(T, string field) = mixin(type.stringof ~ "." ~ field ~ ".offsetof"); To ensure that a syntactically valid symbol is passed as the type. Interestingly, but this code doesn't compile: enum offsetof(typenfield) = mixin(type.st

Re: Need help with movement from C to D

2014-05-05 Thread Meta via Digitalmars-d-learn
On Monday, 5 May 2014 at 04:05:35 UTC, Mark Isaacson wrote: Something like: unittest { enum offsetof(string type, string field) = mixin(type ~ "." ~ field ~ ".offsetof"); struct StrToBob { string str; int bob; } writeln(offsetof!("StrToBob", "bob")); } ? If not that then I'

Re: Need help with movement from C to D

2014-05-05 Thread Andrey via Digitalmars-d-learn
On Monday, 5 May 2014 at 04:05:35 UTC, Mark Isaacson wrote: enum offsetof(string type, string field) = mixin(type ~ "." ~ field ~ ".offsetof"); That's exactly what I'm looking for!!

Re: Need help with movement from C to D

2014-05-05 Thread Andrey via Digitalmars-d-learn
On Monday, 5 May 2014 at 09:04:29 UTC, safety0ff wrote: auto regex = ctRegex!(`offsetof\(([^,]+),([^)]+)\)`); auto sink = appender!(char[])(); foreach (filename; args[1..$]) { auto text = readText(filename); sink.reserve(text.length)

Re: Need help with movement from C to D

2014-05-05 Thread safety0ff via Digitalmars-d-learn
On Monday, 5 May 2014 at 03:57:54 UTC, Andrey wrote: A similar D code is, as far as I know, type.field.offsetof Is there an any way to make a corresponding D template? What you've written is the specific syntax for offsetof in D. If the intent is to create a template so that you can simply

Re: Need help with movement from C to D

2014-05-05 Thread bearophile via Digitalmars-d-learn
Andrey: A similar D code is, as far as I know, type.field.offsetof Yes, it's a built-in feature of D. Is there an any way to make a corresponding D template? I don't understand. Please explain better. Bye, bearophile

Re: Need help with movement from C to D

2014-05-04 Thread Mark Isaacson via Digitalmars-d-learn
On Monday, 5 May 2014 at 03:57:54 UTC, Andrey wrote: Guys, could someone help me with suitable template? I have C macro, which calculates the offset of the field in a struct: #define offsetof(type, field) ((long) &((type *)0)->field) A similar D code is, as far as I know, type.field.offse

Need help with movement from C to D

2014-05-04 Thread Andrey via Digitalmars-d-learn
Guys, could someone help me with suitable template? I have C macro, which calculates the offset of the field in a struct: #define offsetof(type, field) ((long) &((type *)0)->field) A similar D code is, as far as I know, type.field.offsetof Is there an any way to make a corresponding D tem